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$
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)