Ignore:
Timestamp:
12/05/08 08:33:22 (4 years ago)
Author:
fma
Message:

Use signals for synchronisation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/papywizard/controller/shootController.py

    r1120 r1132  
    6464 
    6565from papywizard.common.loggingServices import Logger 
     66from papywizard.common.helpers import sToHmsAsStr 
    6667from papywizard.common.configManager import ConfigManager 
    6768from papywizard.controller.messageController import ErrorMessageController 
    6869from papywizard.controller.abstractController import AbstractController 
    69 #from papywizard.controller.generalInfoController import GeneralInfoController 
    7070from papywizard.controller.configController import ConfigController 
    7171from papywizard.controller.spy import Spy 
     
    7878    def _init(self): 
    7979        self._gladeFile = "shootDialog.glade" 
    80         self._signalDict = {"on_rewindButton_clicked": self.__onRewindButtonclicked, 
     80        self._signalDict = {"on_textViewTogglebutton_toggled": self.__onTextViewTogglebuttonToggled, 
     81                            "on_rewindButton_clicked": self.__onRewindButtonclicked, 
    8182                            "on_forwardButton_clicked": self.__onForwardButtonclicked, 
    8283                            "on_stepByStepCheckbutton_toggled": self.__onStepByStepCheckbuttonToggled, 
     
    117118        self.viewport.add(self.shootingArea) 
    118119        self.shootingArea.show() 
     120         
     121        # Create text shooting area 
     122        self.textShootingArea = gtk.VBox() 
     123        self.position1Label = gtk.Label() 
     124        self.position1Label.modify_font(pango.FontDescription("Arial 18")) 
     125        self.textShootingArea.pack_start(self.position1Label) 
     126        self.position1Label.set_text("--") 
     127        self.position2Label = gtk.Label() 
     128        self.position2Label.modify_font(pango.FontDescription("Arial 18")) 
     129        self.textShootingArea.pack_start(self.position2Label) 
     130        self.position2Label.set_text("") 
     131        self.repeatLabel = gtk.Label() 
     132        self.repeatLabel.modify_font(pango.FontDescription("Arial 18")) 
     133        self.repeatLabel.set_text("--") 
     134        self.textShootingArea.pack_start(self.repeatLabel) 
     135        self.textShootingArea.show_all() 
    119136 
    120137        self.rewindButton = self.wTree.get_widget("rewindButton") 
     
    166183 
    167184        Spy().newPosSignal.connect(self.__refreshPos) 
    168         self._model.newPositionSignal.connect(self.__shootingNewPosition) 
    169185        self._model.startedSignal.connect(self.__shootingStarted) 
    170186        self._model.pausedSignal.connect(self.__shootingPaused) 
    171187        self._model.resumedSignal.connect(self.__shootingResumed) 
    172188        self._model.stoppedSignal.connect(self.__shootingStopped) 
    173         self._model.updateInfoSignal.connect(self.__shootingUpdateInfo) 
     189        self._model.waitingSignal.connect(self.__shootingWaiting) 
     190        self._model.beginShootSignal.connect(self.__shootingBeginShoot) 
     191        self._model.progressSignal.connect(self.__shootingProgress) 
     192        self._model.repeatSignal.connect(self.__shootingRepeat) 
     193        self._model.newPositionSignal.connect(self.__shootingNewPosition) 
     194        self._model.sequenceSignal.connect(self.__shootingSequence) 
     195        self._model.bracketSignal.connect(self.__shootingBracket) 
    174196 
    175197    # Callbacks GTK 
     
    327349                Logger().debug("ShootController.__onMotionNotify(): drag x=%d, y=%d" % (x, y)) 
    328350 
     351    def __onTextViewTogglebuttonToggled(self, widget): 
     352        Logger().trace("ShootController.__onTextViewTogglebuttonToggled()") 
     353        if widget.get_active(): 
     354            self.viewport.remove(self.shootingArea) 
     355            self.viewport.add(self.textShootingArea) 
     356        else: 
     357            self.viewport.remove(self.textShootingArea) 
     358            self.viewport.add(self.shootingArea) 
     359 
    329360    def __onRewindButtonclicked(self, widget): 
    330361        Logger().trace("ShootController.__onRewindButtonclicked()") 
     
    343374        Logger().trace("ShootController.__onDataFileButtonclicked()") 
    344375        controller = ConfigController(self, self._model, self._serializer) 
    345         controller.notebook.set_current_page(5) 
     376        controller.selectPage(5, disable=True) 
    346377        response = controller.run() 
    347378        controller.shutdown() 
     
    349380 
    350381    def __onTimerButtonClicked(self, widget): 
     382        Logger().trace("ShootController.__onTimerButtonClicked()") 
    351383        controller = ConfigController(self, self._model, self._serializer) 
    352         controller.notebook.set_current_page(6) 
     384        controller.selectPage(6, disable=True) 
    353385        response = controller.run() 
    354386        controller.shutdown() 
     
    375407 
    376408    # Callback model (all GUI calls must be done via the serializer) 
    377     def __shootingNewPosition(self, yaw, pitch, status=None, next=False): 
    378         Logger().trace("ShootController.__shootingNewPosition()") 
    379         self.shootingArea.add_pict(yaw, pitch, status, next) 
    380         self._serializer.addWork(self.shootingArea.refresh) 
    381  
    382409    def __shootingStarted(self): 
    383410        Logger().trace("ShootController.__shootingStarted()") 
    384411        self._serializer.addWork(self.shootingArea.clear) 
     412        self._serializer.addWork(self.progressbar.set_fraction, 0.) 
     413        self._serializer.addWork(self.position1Label.set_text, "--") 
     414        self._serializer.addWork(self.position2Label.set_text, "") 
     415        self._serializer.addWork(self.repeatLabel.set_text, "--") 
    385416        self._serializer.addWork(self.dataFileButton.set_sensitive, False) 
    386417        self._serializer.addWork(self.timerButton.set_sensitive, False) 
     
    417448        self._serializer.addWork(self.timerButton.set_sensitive, True) 
    418449        self._serializer.addWork(self.startButton.set_sensitive, True) 
    419         #self._serializer.addWork(self.pauseResumeLabel.set_text, _("Pause")) 
    420450        self._serializer.addWork(self.pauseResumeButton.set_sensitive, False) 
    421451        self._serializer.addWork(self.stopButton.set_sensitive, False) 
    422452        self._serializer.addWork(self.doneButton.set_sensitive, True) 
    423         #self._serializer.addWork(self.rewindButton.set_sensitive, False) 
    424         #self._serializer.addWork(self.forwardButton.set_sensitive, False) 
    425  
    426     def __shootingUpdateInfo(self, info): 
    427         Logger().debug("ShootController.__shootingUpdateInfo(): info=%s" % info) 
    428         if info.has_key('sequence'): 
    429             self._serializer.addWork(self.progressbar.set_text, info['sequence']) 
    430         elif info.has_key('progress'): 
    431             self._serializer.addWork(self.progressbar.set_fraction, info['progress']) 
     453 
     454    def __shootingWaiting(self, wait): 
     455        Logger().trace("ShootController.__shootingRepeat()") 
     456        sequenceMessage = _("Waiting %s") % sToHmsAsStr(wait) 
     457        self._serializer.addWork(self.progressbar.set_text, sequenceMessage) 
     458 
     459    def __shootingBeginShoot(self): 
     460        Logger().trace("ShootController.__shootingBeginShoot()") 
     461        self._serializer.addWork(self.shootingArea.clear) 
     462 
     463    def __shootingProgress(self, progress): 
     464        Logger().trace("ShootController.__shootingProgress()") 
     465        self._serializer.addWork(self.progressbar.set_fraction, progress) 
     466 
     467    def __shootingRepeat(self, repeat): 
     468        Logger().trace("ShootController.__shootingRepeat()") 
     469        sequenceMessage = _("Repeat #%d of %d") % (repeat, self._model.timerEveryRepeat) 
     470        #self._serializer.addWork(self.progressbar.set_text, sequenceMessage) 
     471        self.repeatLabel.set_text(sequenceMessage) 
     472 
     473    def __shootingNewPosition(self, index, yaw, pitch, status=None, next=False): 
     474        Logger().trace("ShootController.__shootingNewPosition()") 
     475        if isinstance(index, tuple): 
     476            index, yawIndex, pitchIndex = index 
     477            position2 = _("(yaw #%(yawIndex)d of %(yawNbPicts)d, pitch #%(pitchIndex)d of %(pitchNbPicts)d)") 
     478            positionData = {'totalNbPicts': self._model.mosaic.totalNbPicts, 
     479                            'yawNbPicts': self._model.mosaic.yawNbPicts, 
     480                            'pitchNbPicts' : self._model.mosaic.pitchNbPicts} 
     481            positionData.update({'index': index, 'yawIndex': yawIndex, 'pitchIndex': pitchIndex}) 
     482            self._serializer.addWork(self.position2Label.set_text, "%s" % position2 % positionData) 
     483        else: 
     484            positionData = {'totalNbPicts': self._model.preset.totalNbPicts} 
     485            positionData.update({'index': index}) 
     486        #Logger().debug("ShootController.__shootingNewPosition(): %s" % sequence % sequenceData) 
     487        position1 = _("Position #%(index)d of %(totalNbPicts)d") 
     488        self._serializer.addWork(self.position1Label.set_text, "%s" % position1 % positionData) 
     489        self.shootingArea.add_pict(yaw, pitch, status, next) 
     490        self._serializer.addWork(self.shootingArea.refresh) 
     491 
     492    def __shootingSequence(self, sequence, **kwargs): 
     493        Logger().trace("ShootController.__shootingSequence()") 
     494        if sequence == 'moving': 
     495            self._serializer.addWork(self.progressbar.set_text, _("Moving")) 
     496        elif sequence == 'stabilization': 
     497            self._serializer.addWork(self.progressbar.set_text, _("Stabilization")) 
     498        elif sequence == 'mirror': 
     499            self._serializer.addWork(self.progressbar.set_text, _("Mirror lockup")) 
     500        elif sequence == 'shutter': 
     501            bracket = kwargs['bracket'] 
     502            totalNbPicts = self._model.camera.bracketingNbPicts 
     503            self._serializer.addWork(self.progressbar.set_text, _("Shutter cycle - Pict #%d of %d") % (bracket, totalNbPicts)) 
     504 
     505    def __shootingBracket(self, bracket): 
     506        Logger().trace("ShootController.__shootingBracket()") 
     507        sequenceData = {'bracket': bracket, 
     508                        'bracketingNbPicts': self._model.camera.bracketingNbPicts} 
     509        Logger().debug("ShootController.__shootingBracket(): bracket=%(bracket)d of %(bracketingNbPicts)d" % sequenceData) 
     510        #self._serializer.addWork(self.textShootingArea.set_text, "%s" % sequence % sequenceData) 
    432511 
    433512    def __refreshPos(self, yaw, pitch): 
    434         """ Refresh position according to new pos. 
    435  
    436         @param yaw: yaw axis value 
    437         @type yaw: float 
    438  
    439         @param pitch: pitch axix value 
    440         @type pitch: float 
    441         """ 
    442513        Logger().trace("ShootController.__refreshPos()") 
    443514        self.shootingArea.set_current_head_position(yaw, pitch) 
     
    494565        if self.__thread is not None: 
    495566            self.__thread.join() 
    496         self._model.newPositionSignal.disconnect(self.__shootingNewPosition) 
     567        Spy().newPosSignal.disconnect(self.__refreshPos) 
    497568        self._model.startedSignal.disconnect(self.__shootingStarted) 
    498569        self._model.pausedSignal.disconnect(self.__shootingPaused) 
    499570        self._model.resumedSignal.disconnect(self.__shootingResumed) 
    500571        self._model.stoppedSignal.disconnect(self.__shootingStopped) 
    501         self._model.updateInfoSignal.disconnect(self.__shootingUpdateInfo) 
    502         Spy().newPosSignal.disconnect(self.__refreshPos) 
     572        self._model.waitingSignal.disconnect(self.__shootingWaiting) 
     573        self._model.beginShootSignal.disconnect(self.__shootingBeginShoot) 
     574        self._model.progressSignal.disconnect(self.__shootingProgress) 
     575        self._model.repeatSignal.connect(self.__shootingRepeat) 
     576        self._model.newPositionSignal.disconnect(self.__shootingNewPosition) 
     577        self._model.sequenceSignal.disconnect(self.__shootingSequence) 
     578        self._model.bracketSignal.disconnect(self.__shootingBracket) 
    503579 
    504580    def refreshView(self): 
    505         self.dataFileButtonImage.set_sensitive(ConfigManager().getBoolean('Preferences', 'DATA_FILE_ENABLE')) 
    506         self.timerButtonImage.set_sensitive(ConfigManager().getBoolean('Preferences', 'TIMER_EVERY_ENABLE')) 
     581        dataFileFlag = ConfigManager().getBoolean('Preferences', 'DATA_FILE_ENABLE') 
     582        self.dataFileButtonImage.set_sensitive(dataFileFlag) 
     583        timerFlag = ConfigManager().getBoolean('Preferences', 'TIMER_AFTER_ENABLE') or ConfigManager().getBoolean('Preferences', 'TIMER_EVERY_ENABLE') 
     584        self.timerButtonImage.set_sensitive(timerFlag) 
Note: See TracChangeset for help on using the changeset viewer.