Beispiel #1
0
    def __init__(self, viewer=None):
        """Constructor
        """
        BaseModeLogic.__init__(self)

        # setting new logic for a sheet if viewer already exists
        if viewer is not None:
            self.__viewer = viewer
            sheet = self.__viewer._getSheet()
            if sheet is None: raise RuntimeError("There is no sheet")
        else:
            self.__viewer = SpaceViewer()

        self.mergeModes(self.__viewer)
        self.appendMode(ois.KC_E, scg_modes.SCgEditMode(self))
        self.switchMode(ois.KC_E)
Beispiel #2
0
class SpaceEditor(BaseModeLogic):
    """Logic realization of Space-editor.
    
    To synchronize this object we use transaction model.
    Each transaction applies in update method. That guarantee
    ogre calls in one graphical thread.  
    """
    def __init__(self, viewer=None):
        """Constructor
        """
        BaseModeLogic.__init__(self)

        # setting new logic for a sheet if viewer already exists
        if viewer is not None:
            self.__viewer = viewer
            sheet = self.__viewer._getSheet()
            if sheet is None: raise RuntimeError("There is no sheet")
        else:
            self.__viewer = SpaceViewer()

        self.mergeModes(self.__viewer)
        self.appendMode(ois.KC_E, scg_modes.SCgEditMode(self))
        self.switchMode(ois.KC_E)

    def __del__(self):
        """Destructor
        """
        BaseModeLogic.__del__(self)

    def delete(self):
        """Deletion message
        """
        BaseModeLogic.delete(self)
        if self.__viewer: self.__viewer.delete()

    def __getattr__(self, _name):
        """Returning attributes that exists in viewer to unify
        calling from modes
        """
        return getattr(self.__viewer, _name)

    def _setSheet(self, _sheet):
        """Notification about sheet changed for logic
        
        @param _sheet: sheet object logic sets to
        @type _sheet: ObjectSheet  
         
        @attention: this method only for internal usage and calls by 
        ObhectSheet automatically when you set logic for it 
        """
        self.__viewer._setSheet(_sheet)
        BaseModeLogic._setSheet(self, _sheet)

        _sheet.eventUpdateView = self._onUpdateView
        _sheet.eventUpdate = self._onUpdate

        _sheet.eventRootChanged = self._onRootChanged

        _sheet.eventSelectionChanged = self._modes[ois.KC_E]._handlerSelChanged

    def _onUpdate(self, _dt):
        """Update sheet event
        @param _dt: time since last frame
        @type _dt: float  
        """
        if self._active_mode is not None:
            self._active_mode._update(_dt)

    def _onUpdateView(self):
        """Update sheet view event
        """
        pass

    def _onRootChanged(self, _isRoot):
        """Root state changed event
        @param _isRoot: new root state
        @type _isRoot: bool  
        """
        BaseModeLogic._onRootChanged(self, _isRoot)