def initUI( self ): """ in: nothing returns nothing """ # superclass openwindow ListWindow.initUI( self ) # add signal handlers canv = gnomecanvas.Canvas( aa = True ) canv.show_all() self['scrolledwindow1'].add(canv) self.thePathwayCanvas = PathwayCanvas( self, canv ) self.theLayout.attachToCanvas( self.thePathwayCanvas ) self.addHandlers({ 'on_zoom_in_button_clicked' : self.__zoom_in,\ 'on_zoom_out_button_clicked' : self.__zoom_out,\ 'on_zoom_to_fit_button_clicked' : self.__zoom_to_fit,\ 'on_print_button_clicked' : self.__print,\ 'on_selector_button_toggled' : self.__palette_toggled,\ 'on_variable_button_toggled' : self.__palette_toggled, \ 'on_system_button_toggled' : self.__palette_toggled,\ 'on_process_button_toggled' : self.__palette_toggled,\ 'on_text_button_toggled' : self.__palette_toggled,\ 'on_layout_name_entry_activate' : self.__rename_layout,\ 'on_layout_name_entry_editing_done' : self.__rename_layout,\ #'on_layout_name_entry_focus_out_event' : self.__rename_layout, 'on_delete_button_clicked': self.__DeleteLayoutButton_clicked,\ 'on_clone_button_clicked': self.__CloneLayoutButton_clicked,\ 'on_custom_button_toggled' : self.__palette_toggled,\ 'on_search_entry_activate' : self.__search,\ 'on_rename_button_clicked': self.__editLabel,\ 'on_search_entry_editing_done' : self.__search }) self.theHBox = self['hbox7'] self.theLabel = self['layout_name_label'] self.theEntry = self['layout_name_entry'] self['top_frame'].remove(self.theHBox) self.theHBox.remove( self.theEntry ) self.update() #get Palette Button Widgets selector = ListWindow.getWidget(self,'selector_button') selector.set_active(True) variable = ListWindow.getWidget(self,'variable_button') process = ListWindow.getWidget(self,'process_button') system = ListWindow.getWidget(self,'system_button') custom = ListWindow.getWidget(self,'custom_button') text = ListWindow.getWidget(self,'text_button') self.zoomin=ListWindow.getWidget(self,'zoom_in_button') self.zoomout=ListWindow.getWidget(self,'zoom_out_button') self.zoomtofit=ListWindow.getWidget(self,'zoom_to_fit_button') self.theButtonDict={ 'selector':PE_SELECTOR, 'variable':PE_VARIABLE , 'process':PE_PROCESS, 'system':PE_SYSTEM , 'custom':PE_CUSTOM , 'text':PE_TEXT} self.thePaletteButtonDict={'selector': selector, 'variable' : variable , 'process': process, 'system' : system, 'custom' : custom, 'text':text} self.theButtonKeys=self.thePaletteButtonDict.keys().sort() # Sets the return PaletteButton value self.__CurrPaletteButton = 'selector' self.__PrevPaletteButton = None self.isFirst=True
def openWindow(self): """ in: nothing returns nothing """ # superclass openwindow ListWindow.openWindow(self) # add signal handlers canv = gnomecanvas.Canvas() canv.show_all() self['scrolledwindow1'].add(canv) self.thePathwayCanvas = PathwayCanvas(self, canv) self.theLayout.attachToCanvas(self.thePathwayCanvas) self.addHandlers({ 'on_zoom_in_button_clicked' : self.__zoom_in,\ 'on_zoom_out_button_clicked' : self.__zoom_out,\ 'on_zoom_to_fit_button_clicked' : self.__zoom_to_fit,\ 'on_print_button_clicked' : self.__print,\ 'on_selector_button_toggled' : self.__palette_toggled,\ 'on_variable_button_toggled' : self.__palette_toggled, \ 'on_system_button_toggled' : self.__palette_toggled,\ 'on_process_button_toggled' : self.__palette_toggled,\ 'on_text_button_toggled' : self.__palette_toggled,\ 'on_layout_name_entry_activate' : self.__rename_layout,\ 'on_layout_name_entry_editing_done' : self.__rename_layout,\ #'on_layout_name_entry_focus_out_event' : self.__rename_layout, 'on_delete_button_clicked': self.__DeleteLayoutButton_clicked,\ 'on_clone_button_clicked': self.__CloneLayoutButton_clicked,\ 'on_custom_button_toggled' : self.__palette_toggled,\ 'on_search_entry_activate' : self.__search,\ 'on_rename_button_clicked': self.__editLabel,\ 'on_search_entry_editing_done' : self.__search }) self.theHBox = self['hbox7'] self.theLabel = self['layout_name_label'] self.theEntry = self['layout_name_entry'] self['top_frame'].remove(self.theHBox) self.theHBox.remove(self.theEntry) self.update() #get Palette Button Widgets selector = ListWindow.getWidget(self, 'selector_button') selector.set_active(True) variable = ListWindow.getWidget(self, 'variable_button') process = ListWindow.getWidget(self, 'process_button') system = ListWindow.getWidget(self, 'system_button') custom = ListWindow.getWidget(self, 'custom_button') text = ListWindow.getWidget(self, 'text_button') self.zoomin = ListWindow.getWidget(self, 'zoom_in_button') self.zoomout = ListWindow.getWidget(self, 'zoom_out_button') self.zoomtofit = ListWindow.getWidget(self, 'zoom_to_fit_button') self.theButtonDict = { 'selector': PE_SELECTOR, 'variable': PE_VARIABLE, 'process': PE_PROCESS, 'system': PE_SYSTEM, 'custom': PE_CUSTOM, 'text': PE_TEXT } self.thePaletteButtonDict = { 'selector': selector, 'variable': variable, 'process': process, 'system': system, 'custom': custom, 'text': text } self.theButtonKeys = self.thePaletteButtonDict.keys().sort() # Sets the return PaletteButton value self.__CurrPaletteButton = 'selector' self.__PrevPaletteButton = None self.isFirst = True
class PathwayEditor( ListWindow ): def __init__( self, aModelEditor, aLayout, aRoot = 'top_frame' ): """ in: ModelEditor aModelEditor returns nothing """ ListWindow.__init__( self, aModelEditor, aRoot ) self.theLayout = aLayout self.zoom=0.25 self.initUI() def initUI( self ): """ in: nothing returns nothing """ # superclass openwindow ListWindow.initUI( self ) # add signal handlers canv = gnomecanvas.Canvas( aa = True ) canv.show_all() self['scrolledwindow1'].add(canv) self.thePathwayCanvas = PathwayCanvas( self, canv ) self.theLayout.attachToCanvas( self.thePathwayCanvas ) self.addHandlers({ 'on_zoom_in_button_clicked' : self.__zoom_in,\ 'on_zoom_out_button_clicked' : self.__zoom_out,\ 'on_zoom_to_fit_button_clicked' : self.__zoom_to_fit,\ 'on_print_button_clicked' : self.__print,\ 'on_selector_button_toggled' : self.__palette_toggled,\ 'on_variable_button_toggled' : self.__palette_toggled, \ 'on_system_button_toggled' : self.__palette_toggled,\ 'on_process_button_toggled' : self.__palette_toggled,\ 'on_text_button_toggled' : self.__palette_toggled,\ 'on_layout_name_entry_activate' : self.__rename_layout,\ 'on_layout_name_entry_editing_done' : self.__rename_layout,\ #'on_layout_name_entry_focus_out_event' : self.__rename_layout, 'on_delete_button_clicked': self.__DeleteLayoutButton_clicked,\ 'on_clone_button_clicked': self.__CloneLayoutButton_clicked,\ 'on_custom_button_toggled' : self.__palette_toggled,\ 'on_search_entry_activate' : self.__search,\ 'on_rename_button_clicked': self.__editLabel,\ 'on_search_entry_editing_done' : self.__search }) self.theHBox = self['hbox7'] self.theLabel = self['layout_name_label'] self.theEntry = self['layout_name_entry'] self['top_frame'].remove(self.theHBox) self.theHBox.remove( self.theEntry ) self.update() #get Palette Button Widgets selector = ListWindow.getWidget(self,'selector_button') selector.set_active(True) variable = ListWindow.getWidget(self,'variable_button') process = ListWindow.getWidget(self,'process_button') system = ListWindow.getWidget(self,'system_button') custom = ListWindow.getWidget(self,'custom_button') text = ListWindow.getWidget(self,'text_button') self.zoomin=ListWindow.getWidget(self,'zoom_in_button') self.zoomout=ListWindow.getWidget(self,'zoom_out_button') self.zoomtofit=ListWindow.getWidget(self,'zoom_to_fit_button') self.theButtonDict={ 'selector':PE_SELECTOR, 'variable':PE_VARIABLE , 'process':PE_PROCESS, 'system':PE_SYSTEM , 'custom':PE_CUSTOM , 'text':PE_TEXT} self.thePaletteButtonDict={'selector': selector, 'variable' : variable , 'process': process, 'system' : system, 'custom' : custom, 'text':text} self.theButtonKeys=self.thePaletteButtonDict.keys().sort() # Sets the return PaletteButton value self.__CurrPaletteButton = 'selector' self.__PrevPaletteButton = None self.isFirst=True def getLabelWidget( self ): return self.theHBox def update( self, arg1 = None, arg2 = None): if not self.exists(): return self.theEntry.set_text( self.theLayout.getName() ) self.theLabel.set_text( self.theLayout.getName() ) self.theLayout.resumeSelection() def deleted( self, *args ): # detach canvas from layout self.thePathwayCanvas.getLayout().detachFromCanvas() self.theModelEditor.thePathwayEditorList.remove(self) ListWindow.deleted( self, args ) if self.theModelEditor.theObjectEditorWindow!=None: self.theModelEditor.theObjectEditorWindow.destroy(self) def getPathwayCanvas( self ): return self.thePathwayCanvas def getPaletteButton(self): return self.theButtonDict[self.__CurrPaletteButton] def toggle(self,aName,aStat): if aStat: self.thePaletteButtonDict[aName].set_active(True) else: self.thePaletteButtonDict[aName].set_active(False) def getLayout( self ): return self.theLayout # -- Callback Handlers def __editLabel( self, *args ): self.theHBox.remove( self.theLabel ) self.theHBox.pack_start( self.theEntry ) self.theEntry.show() self.theEntry.grab_focus() self['rename_button'].set_sensitive( False ) def __zoom_in( self, *args ): aZoomratio=self.thePathwayCanvas.getZoomRatio() aNewratio=aZoomratio+self.zoom self.thePathwayCanvas.setZoomRatio(aNewratio) if not self.zoomout.get_property('sensitive'): self.zoomout.set_sensitive(True) if not self.zoomtofit.get_property('sensitive'): self.zoomtofit.set_sensitive(True) def __rename_layout( self, *args ): if len(self.theEntry.get_text())>0: oldName = self.theLayout.getName() newName = self.theEntry.get_text() aCommand = RenameLayout( self.theLayout.theLayoutManager, oldName, newName ) if not ecell.util.validateIDString( newName ): utils.showPopupMessage( utils.OK_MODE, "Only alphanumeric characters and _ are allowed in " \ +" layout names!", ME_ERROR ) if aCommand.isExecutable() and ecell.util.validateIDString( newName ): self.theModelEditor.doCommandList( [aCommand] ) else: self.theEntry.set_text(oldName) self.theLabel.set_text(oldName) self.theHBox.remove( self.theEntry ) self.theHBox.pack_start( self.theLabel) self.theLabel.show() self['rename_button'].set_sensitive( True ) def __zoom_out( self, *args ): width,height=self.thePathwayCanvas.getSize() if width<860: self.zoomout.set_sensitive(False) self.zoomtofit.set_sensitive(False) return if width>860: aZoomratio=self.thePathwayCanvas.getZoomRatio() aNewratio=aZoomratio-self.zoom self.thePathwayCanvas.setZoomRatio(aNewratio) def __zoom_to_fit( self, *args ): aNewratio=self.zoom self.thePathwayCanvas.setZoomRatio(aNewratio) self.zoomtofit.set_sensitive(False) self.zoomout.set_sensitive(False) def __print( self, *args ): utils.showPopupMessage( utils.OK_MODE, "Sorry, not implemented !", ME_ERROR ) def __palette_toggled( self, *args ): aButtonName=args[0].get_name().split('_')[0] if self.isFirst: if aButtonName =='custom' or aButtonName =='text': utils.showPopupMessage( utils.OK_MODE, "Sorry, not implemented !", ME_ERROR ) if aButtonName!=self.__CurrPaletteButton: self.isFirst=False self.toggle(aButtonName,True) self.toggle(self.__CurrPaletteButton,False) self.__CurrPaletteButton=aButtonName elif aButtonName==self.__CurrPaletteButton: self.isFirst=False if self.__CurrPaletteButton=='selector': self.toggle(self.__CurrPaletteButton,True) else: self.toggle(self.__CurrPaletteButton,False) self.toggle('selector',True) self.__CurrPaletteButton='selector' else: self.isFirst=True def __search( self, *args ): utils.showPopupMessage( utils.OK_MODE, "Sorry, not implemented !", ME_ERROR ) def __DeleteLayoutButton_clicked(self, *args): layoutManager = self.theModelEditor.theLayoutManager layoutName = self.theLayout.getName() if layoutName == 'Choose...': utils.showPopupMessage( utils.OK_MODE, "This is not a valid layout name", ME_ERROR ) return aCommand = DeleteLayout( layoutManager, layoutName) self.theModelEditor.doCommandList( [ aCommand ] ) def __CloneLayoutButton_clicked(self, *args): layoutManager = self.theModelEditor.theLayoutManager layoutName = self.theLayout.getName() if layoutName == 'Choose...': utils.showPopupMessage("This is not a valid layout name", ME_WARNING) return aCommand = CloneLayout( layoutManager, layoutName) self.theModelEditor.doCommandList( [ aCommand ] ) newLayoutName = "copyOf" + layoutName self.theModelEditor.createPathwayEditor( layoutManager.getLayout( newLayoutName ) )
class PathwayEditor(ListWindow): def __init__(self, theModelEditor, aLayout, aRoot=None): """ in: ModelEditor theModelEditor returns nothing """ # init superclass ListWindow.__init__(self, theModelEditor, aRoot) self.theLayout = aLayout self.theModelEditor = theModelEditor self.zoom = 0.25 def openWindow(self): """ in: nothing returns nothing """ # superclass openwindow ListWindow.openWindow(self) # add signal handlers canv = gnomecanvas.Canvas() canv.show_all() self['scrolledwindow1'].add(canv) self.thePathwayCanvas = PathwayCanvas(self, canv) self.theLayout.attachToCanvas(self.thePathwayCanvas) self.addHandlers({ 'on_zoom_in_button_clicked' : self.__zoom_in,\ 'on_zoom_out_button_clicked' : self.__zoom_out,\ 'on_zoom_to_fit_button_clicked' : self.__zoom_to_fit,\ 'on_print_button_clicked' : self.__print,\ 'on_selector_button_toggled' : self.__palette_toggled,\ 'on_variable_button_toggled' : self.__palette_toggled, \ 'on_system_button_toggled' : self.__palette_toggled,\ 'on_process_button_toggled' : self.__palette_toggled,\ 'on_text_button_toggled' : self.__palette_toggled,\ 'on_layout_name_entry_activate' : self.__rename_layout,\ 'on_layout_name_entry_editing_done' : self.__rename_layout,\ #'on_layout_name_entry_focus_out_event' : self.__rename_layout, 'on_delete_button_clicked': self.__DeleteLayoutButton_clicked,\ 'on_clone_button_clicked': self.__CloneLayoutButton_clicked,\ 'on_custom_button_toggled' : self.__palette_toggled,\ 'on_search_entry_activate' : self.__search,\ 'on_rename_button_clicked': self.__editLabel,\ 'on_search_entry_editing_done' : self.__search }) self.theHBox = self['hbox7'] self.theLabel = self['layout_name_label'] self.theEntry = self['layout_name_entry'] self['top_frame'].remove(self.theHBox) self.theHBox.remove(self.theEntry) self.update() #get Palette Button Widgets selector = ListWindow.getWidget(self, 'selector_button') selector.set_active(True) variable = ListWindow.getWidget(self, 'variable_button') process = ListWindow.getWidget(self, 'process_button') system = ListWindow.getWidget(self, 'system_button') custom = ListWindow.getWidget(self, 'custom_button') text = ListWindow.getWidget(self, 'text_button') self.zoomin = ListWindow.getWidget(self, 'zoom_in_button') self.zoomout = ListWindow.getWidget(self, 'zoom_out_button') self.zoomtofit = ListWindow.getWidget(self, 'zoom_to_fit_button') self.theButtonDict = { 'selector': PE_SELECTOR, 'variable': PE_VARIABLE, 'process': PE_PROCESS, 'system': PE_SYSTEM, 'custom': PE_CUSTOM, 'text': PE_TEXT } self.thePaletteButtonDict = { 'selector': selector, 'variable': variable, 'process': process, 'system': system, 'custom': custom, 'text': text } self.theButtonKeys = self.thePaletteButtonDict.keys().sort() # Sets the return PaletteButton value self.__CurrPaletteButton = 'selector' self.__PrevPaletteButton = None self.isFirst = True def getLabelWidget(self): return self.theHBox def update(self, arg1=None, arg2=None): if not self.exists(): return self.theEntry.set_text(self.theLayout.getName()) self.theLabel.set_text(self.theLayout.getName()) self.theLayout.resumeSelection() def deleted(self, *args): # detach canvas from layout self.thePathwayCanvas.getLayout().detachFromCanvas() self.theModelEditor.thePathwayEditorList.remove(self) ListWindow.deleted(self, args) if self.theModelEditor.theObjectEditorWindow != None: self.theModelEditor.theObjectEditorWindow.destroy(self) def getPathwayCanvas(self): return self.thePathwayCanvas def getPaletteButton(self): return self.theButtonDict[self.__CurrPaletteButton] def toggle(self, aName, aStat): if aStat: self.thePaletteButtonDict[aName].set_active(True) else: self.thePaletteButtonDict[aName].set_active(False) def getLayout(self): return self.theLayout ############################################################ #Callback Handlers ############################################################ def __editLabel(self, *args): self.theHBox.remove(self.theLabel) self.theHBox.pack_start(self.theEntry) self.theEntry.show() self.theEntry.grab_focus() self['rename_button'].set_sensitive(False) def __zoom_in(self, *args): aZoomratio = self.thePathwayCanvas.getZoomRatio() aNewratio = aZoomratio + self.zoom self.thePathwayCanvas.setZoomRatio(aNewratio) if not self.zoomout.get_property('sensitive'): self.zoomout.set_sensitive(True) if not self.zoomtofit.get_property('sensitive'): self.zoomtofit.set_sensitive(True) def __rename_layout(self, *args): if len(self.theEntry.get_text()) > 0: oldName = self.theLayout.getName() newName = self.theEntry.get_text() aCommand = RenameLayout(self.theLayout.theLayoutManager, oldName, newName) if not isIDEligible(newName): self.theModelEditor.printMessage( "Only alphanumeric characters and _ are allowed in layout names!", ME_ERROR) if aCommand.isExecutable() and isIDEligible(newName): self.theModelEditor.doCommandList([aCommand]) else: self.theEntry.set_text(oldName) self.theLabel.set_text(oldName) self.theHBox.remove(self.theEntry) self.theHBox.pack_start(self.theLabel) self.theLabel.show() self['rename_button'].set_sensitive(True) def __zoom_out(self, *args): width, height = self.thePathwayCanvas.getSize() if width < 860: self.zoomout.set_sensitive(False) self.zoomtofit.set_sensitive(False) return if width > 860: aZoomratio = self.thePathwayCanvas.getZoomRatio() aNewratio = aZoomratio - self.zoom self.thePathwayCanvas.setZoomRatio(aNewratio) def __zoom_to_fit(self, *args): aNewratio = self.zoom self.thePathwayCanvas.setZoomRatio(aNewratio) self.zoomtofit.set_sensitive(False) self.zoomout.set_sensitive(False) def __print(self, *args): self.theModelEditor.printMessage("Sorry, not implemented !", ME_ERROR) def __palette_toggled(self, *args): aButtonName = args[0].get_name().split('_')[0] if self.isFirst: if aButtonName == 'custom' or aButtonName == 'text': self.theModelEditor.printMessage("Sorry, not implemented !", ME_ERROR) if aButtonName != self.__CurrPaletteButton: self.isFirst = False self.toggle(aButtonName, True) self.toggle(self.__CurrPaletteButton, False) self.__CurrPaletteButton = aButtonName elif aButtonName == self.__CurrPaletteButton: self.isFirst = False if self.__CurrPaletteButton == 'selector': self.toggle(self.__CurrPaletteButton, True) else: self.toggle(self.__CurrPaletteButton, False) self.toggle('selector', True) self.__CurrPaletteButton = 'selector' else: self.isFirst = True def __search(self, *args): self.theModelEditor.printMessage("Sorry, not implemented !", ME_ERROR) def __DeleteLayoutButton_clicked(self, *args): layoutManager = self.theModelEditor.theLayoutManager layoutName = self.theLayout.getName() if layoutName == 'Choose...': self.theModelEditor.printMessage("This is not a valid layout name", ME_WARNING) return aCommand = DeleteLayout(layoutManager, layoutName) self.theModelEditor.doCommandList([aCommand]) def __CloneLayoutButton_clicked(self, *args): layoutManager = self.theModelEditor.theLayoutManager layoutName = self.theLayout.getName() if layoutName == 'Choose...': self.theModelEditor.printMessage("This is not a valid layout name", ME_WARNING) return aCommand = CloneLayout(layoutManager, layoutName) self.theModelEditor.doCommandList([aCommand]) newLayoutName = "copyOf" + layoutName self.theModelEditor.createPathwayEditor( layoutManager.getLayout(newLayoutName))