Example #1
0
class ZRavenApplicationStatusBar(ZStatusBar, IZBackgroundTaskServiceListener, IZBackgroundTaskListener):

    def __init__(self, parent):
        applicationModel = getApplicationModel()
        userProfile = applicationModel.getUserProfile()
        debugFilePath = os.path.join(userProfile.getLogDirectory(), u"ZRavenApplicationStatusBar.log") #$NON-NLS-1$
        self.debugFile = open(debugFilePath, u"wa") #$NON-NLS-1$
        self._debugMsg(u"== New Debug Session ==") #$NON-NLS-1$

        self.progressCtrl = None
        self.model = ZRavenApplicationStatusBarModel()
        self.mutex = ZMutex(u"ZAppStatusBarMTX") #$NON-NLS-1$
        self._debugMsg(u"Begin Call Super ZStatusBar.__init__") #$NON-NLS-1$
        ZStatusBar.__init__(self, parent, self.model.createStatusBarProvider())
        self._debugMsg(u"Done Call Super ZStatusBar.__init__") #$NON-NLS-1$
        # Attach to any already-running tasks.
        for task in self.model.getTaskService().getTasks():
            if task.isRunning():
                self._debugMsg(u"Attaching self as listner to task %s - %s" % (task.getId(), task.getName()) ) #$NON-NLS-1$
                task.attachListener(self)
        # Listen for new tasks that may show up.
        self._debugMsg(u"Attaching self as listner to task service") #$NON-NLS-1$
        self.model.getTaskService().addListener(self)
        self._debugMsg(u"End  ZRavenApplicationStatusBar.__init__") #$NON-NLS-1$
    # end __init__()

    def _debugMsg(self, msg):
        try:
            self.debugFile.write(u"*****>>>>> %s\n" % msg) #$NON-NLS-1$
            self.debugFile.flush()
        except:
            pass
    # end _debugMsg()

    def _debugProgressCtrl(self):
        if not self.progressCtrl:
            stack = traceback.extract_stack()
            self._debugMsg( unicode(stack) )
        return self.progressCtrl is not None
    # end _debugProgressCtrl()

    def _createCustomWidgets(self):
        self.progressCtrl = ZProgressLabelCtrl(self, u"", True) #$NON-NLS-1$
        self._debugMsg(u"Done _createCustomWidgets") #$NON-NLS-1$
    # end _createCustomWidgets()

    def _bindCustomWidgets(self):
        self.Bind(ZEVT_REFRESH, self.onRefresh, self)
        self._debugMsg(u"Done _bindCustomWidgets") #$NON-NLS-1$
    # end _bindCustomWidgets()

    def _refreshPane(self, paneIdx):
        if not self._debugProgressCtrl():
            return
        if paneIdx == 0:
            numTasks = self.model.getNumRunningTasks()
            progressText = u"%d %s" % (numTasks, _extstr(u"appstatusbar.RunningTasks")) #$NON-NLS-1$ #$NON-NLS-2$
            if numTasks == 0:
                progressText = _extstr(u"appstatusbar.NoRunningTasks") #$NON-NLS-1$
            self.progressCtrl.setLabel(progressText)
    # end _refreshPane()

    def _repositionPane(self, paneIdx, rect):
        if not self._debugProgressCtrl():
            return
        if paneIdx == 0:
            self.progressCtrl.SetPosition( (rect.x + 4, rect.y + 1) )
            self.progressCtrl.SetSize( (rect.width - 5, rect.height - 2) )
    # end _repositionPane()

    def onRefresh(self, event):
        self.mutex.acquire()
        try:
            if self._debugProgressCtrl() and self.model.isDirty():
                if self.model.isRunning():
                    self.progressCtrl.start()
                else:
                    self.progressCtrl.stop()
                self.refresh()
                self.model.setDirty(False)
        finally:
            self.mutex.release()
        event.Skip()
    # end onRefresh()

    def onTaskAdded(self, task):
        self.mutex.acquire()
        try:
            task.attachListener(self)
        finally:
            self.mutex.release()
        fireRefreshEvent(self)
    # end onTaskAdded()

    def onTaskRemoved(self, task):
        self.mutex.acquire()
        try:
            self.model.removeTask(task)
            task.detachListener(self)
        finally:
            self.mutex.release()
        fireRefreshEvent(self)
    # end onTaskRemoved()

    def onAttached(self, task, numCompletedWorkUnits): #@UnusedVariable
        self.mutex.acquire()
        try:
            if task.isRunning():
                self.model.addTask(task)
        finally:
            self.mutex.release()
        fireRefreshEvent(self)
    # end onAttached()

    def onStarted(self, task, workAmount): #@UnusedVariable
        self.mutex.acquire()
        try:
            self.model.addTask(task)
        finally:
            self.mutex.release()
        fireRefreshEvent(self)
    # end onStarted()

    def onComplete(self, task):
        self.mutex.acquire()
        try:
            self.model.removeTask(task)
        finally:
            self.mutex.release()
        fireRefreshEvent(self)
    # end onComplete()

    def onStop(self, task):
        self.mutex.acquire()
        try:
            self.model.removeTask(task)
        finally:
            self.mutex.release()
        fireRefreshEvent(self)
    # end onStop()

    def onCancel(self, task):
        self.mutex.acquire()
        try:
            self.model.removeTask(task)
        finally:
            self.mutex.release()
        fireRefreshEvent(self)
    # end onCancel()

    def onError(self, task, errorMessage, errorDetails): #@UnusedVariable
        self.mutex.acquire()
        try:
            self.model.removeTask(task)
        finally:
            self.mutex.release()
        fireRefreshEvent(self)
    # end onError()

    def reposition(self):
        self._debugMsg(u"start 'reposition()'") #$NON-NLS-1$
        try:
            ZStatusBar.reposition(self)
        finally:
            self._debugMsg(u"end 'reposition()'") #$NON-NLS-1$
Example #2
0
class ZImagePreviewPanel(ZTransparentPanel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent, wx.ID_ANY)

        self._createWidgets()
        self._layoutWidgets()
    # end __init__()

    def _createWidgets(self):
        self.staticBox = wx.StaticBox(self, wx.ID_ANY, _extstr(u"infodetailswidgets.Preview")) #$NON-NLS-1$

        self.generatingMsg = ZProgressLabelCtrl(self, _extstr(u"infodetailswidgets.GeneratingPreview")) #$NON-NLS-1$
        self.previewUnavailableMsg = wx.StaticText(self, wx.ID_ANY, _extstr(u"infodetailswidgets.PreviewUnavailable")) #$NON-NLS-1$
        self.previewBmp = ZStaticBitmap(self, None)
    # end _createWidgets()

    def _layoutWidgets(self):
        staticBoxSizer = wx.StaticBoxSizer(self.staticBox, wx.HORIZONTAL)
        staticBoxSizer.Add(self.generatingMsg, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 3)
        staticBoxSizer.Add(self.previewUnavailableMsg, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 3)
        staticBoxSizer.Add(self.previewBmp, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 3)

        self.SetAutoLayout(True)
        self.SetSizer(staticBoxSizer)
    # end _layoutWidgets()

    def reset(self):
        self.generatingMsg.Show(True)
        self.generatingMsg.start()
        self.previewUnavailableMsg.Show(False)
        self.previewBmp.Show(False)
    # end reset()

    def updateFromError(self, error):
        # Log the error
        getLoggerService().exception(error)
        self.generatingMsg.Show(False)
        self.generatingMsg.stop()
        self.previewUnavailableMsg.Show(True)
        self.previewBmp.Show(False)
    # end updateFromError()

    def updateFromConnectionRespInfo(self, connectionRespInfo): #@UnusedVariable
        # Do nothing...
        pass
    # end updateFromConnectionRespInfo()

    def updateFromConnectionResp(self, connectionResp):
        imagingService = getApplicationModel().getService(IZAppServiceIDs.IMAGING_SERVICE_ID)
        bgColor = self.GetBackgroundColour()
        tnParams = ZThumbnailParams(backgroundColor = (bgColor.Red(), bgColor.Green(), bgColor.Blue()), dropShadow = True)
        tnFile = os.path.join(getApplicationModel().getUserProfile().getTempDirectory(), u"_ZImagePreviewPanel_tn.png") #$NON-NLS-1$
        try:
            imagingService.generateThumbnail(connectionResp.getContentFilename(), tnParams, tnFile)

            image = wx.Image(tnFile, getImageType(tnFile))
            if image is None:
                raise ZException()

            bitmap = image.ConvertToBitmap()
            self.previewBmp.setBitmap(bitmap)
            deleteFile(tnFile)
            self.generatingMsg.Show(False)
            self.generatingMsg.stop()
            self.previewUnavailableMsg.Show(False)
            self.previewBmp.Show(True)
        except Exception, e:
            getLoggerService().exception(e)
            self.updateFromError(e)