From: <mor...@us...> - 2011-01-24 12:46:23
|
Revision: 3893 http://ecell.svn.sourceforge.net/ecell/?rev=3893&view=rev Author: moriyoshi Date: 2011-01-24 12:46:14 +0000 (Mon, 24 Jan 2011) Log Message: ----------- * Overhaul. Modified Paths: -------------- ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/EntityListWindow.py ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/MainWindow.py ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/OsogoUtil.py ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/StepperWindow.py ecell3/trunk/ecell/frontend/session-monitor/glade/EntityListWindow.glade ecell3/trunk/ecell/frontend/session-monitor/glade/MainWindow.glade ecell3/trunk/ecell/frontend/session-monitor/glade/StepperWindow.glade ecell3/trunk/ecell/frontend/session-monitor/plugins/BargraphWindow.py ecell3/trunk/ecell/frontend/session-monitor/plugins/PropertyWindow.glade ecell3/trunk/ecell/frontend/session-monitor/plugins/PropertyWindow.py ecell3/trunk/ecell/pyecell/ecell/StepperStub.py Modified: ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/EntityListWindow.py =================================================================== --- ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/EntityListWindow.py 2011-01-20 11:56:01 UTC (rev 3892) +++ ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/EntityListWindow.py 2011-01-24 12:46:14 UTC (rev 3893) @@ -884,7 +884,6 @@ def updateListLabels( self ): - self.__updateViewLabel( 'Variable', self['variable_label'],\ self.variableTree ) self.__updateViewLabel( 'Process', self['process_label'],\ @@ -893,15 +892,11 @@ self.systemTree ) def __updateViewLabel( self, type, label, view ): - shownCount = len( view.get_model() ) selectedCount = view.get_selection().count_selected_rows() - labelText = type + ' (' + str( selectedCount ) + '/' + \ - str( shownCount ) + ')' - label.set_text( labelText ) + labelText = '<b>%s</b> (%d / %d)' % (type, selectedCount, shownCount ) + label.set_markup( labelText ) - - def selectProcess( self, selection ): if self.donotHandle: return Modified: ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/MainWindow.py =================================================================== --- ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/MainWindow.py 2011-01-20 11:56:01 UTC (rev 3892) +++ ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/MainWindow.py 2011-01-24 12:46:14 UTC (rev 3893) @@ -57,13 +57,17 @@ import ecell.ui.osogo.MessageWindow as MessageWindow class SimulationButton: - def __init__( self ): + def __init__( self, container ): self.startImage = os.path.join( config.GLADEFILE_PATH, "icon_start.png" ) self.stopImage = os.path.join( config.GLADEFILE_PATH, "icon_stop.png" ) - self.image = gtk.Image() - self.image.set_from_file( self.startImage ) + for widget in container.get_children(): + if isinstance( widget, gtk.Image ): + self.image = widget + elif isinstance( widget, gtk.Label ): + self.label = widget + self.__currentState = 'stop' self.image.show() @@ -75,11 +79,12 @@ def setCurrentState( self, aCurrentState ): self.__currentState = aCurrentState - if ( self.__currentState == 'run' ): self.image.set_from_file( self.stopImage ) + self.label.set_text( 'Stop' ) elif ( self.__currentState == 'stop' ): self.image.set_from_file( self.startImage ) + self.label.set_text( 'Start' ) class LogoAnimation: iconList = ( @@ -194,11 +199,8 @@ # create SimulationButton # ------------------------------------- - self.SimulationButton = SimulationButton() - self['SimulationButton'].add( self.SimulationButton.getCurrentImage() ) - self['SimulationButtonLabel'].set_text('Start') + self.SimulationButton = SimulationButton( self['SimulationButton'] ) - # --------------------------- # create logo button # --------------------------- @@ -341,22 +343,6 @@ """ pass - def __resizeVertically( self, height ): #gets entitylistarea or messagebox height - """__resizeVertically - Return None - """ - - # gets fix components height - menu_height=self['handlebox22'].get_child_requisition()[1] - toolbar_height=self['handlebox19'].get_child_requisition()[1] - - # gets window_width - window_width=self['MainWindow'].get_size()[0] - - # resizes - window_height=menu_height+toolbar_height+height - self['MainWindow'].resize(window_width,window_height) - def __setMenuAndButtonsStatus( self, aDataLoadedStatus ): """sets initial widgets status aDataLoadedStatus -- the status of loading data @@ -652,27 +638,25 @@ if self.theSession.theRunningFlag: # stop simulation temporarily self.theSession.stop() - running_flag = True - # If there is no logger data, exit this program. - if len(self.theSession.getLoggerList()) != 0: - aMessage = 'Are you sure you want to quit?' - aTitle = 'Question' - # Popup confirm window, and check user request - aDialog = ConfirmWindow(1,aMessage,aTitle) + if self.theSession.theSession is not None: + # If there is no logger data, exit this program. + if len(self.theSession.getLoggerList()) != 0: + aMessage = 'Are you sure you want to quit?' + aTitle = 'Question' + # Popup confirm window, and check user request + aDialog = ConfirmWindow(1,aMessage,aTitle) - # ok is pressed - - if aDialog.return_result() != OK_PRESSED: - if running_flag: - self.theSession.run() - return True + # ok is pressed + + if aDialog.return_result() != OK_PRESSED: + if running_flag: + self.theSession.run() + return True self.setStopState() - self.close() - self.theSession.QuitGUI() return True @@ -688,9 +672,7 @@ OsogoWindow.close( self ) def setStartState( self ): - self.SimulationButton.setCurrentState( 'run' ) - self['SimulationButtonLabel'].set_text('Stop') if self.logoMovable: self.logoAnimation.start() @@ -700,7 +682,6 @@ def setStopState( self ): self.SimulationButton.setCurrentState( 'stop' ) - self['SimulationButtonLabel'].set_text('Start') self.logoAnimation.stop() self.setTempTime() @@ -923,10 +904,6 @@ if self.theToolbarVisible: self['toolbar_handlebox'].hide() self.theToolbarVisible = False - - if self.theMessageWindowVisible == False and \ - self.theEntityListWindowVisible == False: - self.__resizeVertically( 0 ) else: self['toolbar_handlebox'].show() self.theToolbarVisible = True @@ -937,10 +914,6 @@ if self.theStatusbarVisible: self['statusbar'].hide() self.theStatusbarVisible = False - - if self.theMessageWindowVisible == False and \ - self.theEntityListWindowVisible == False: - self.__resizeVertically( 0 ) else: self['statusbar'].show() self.theStatusbarVisible = True @@ -1036,16 +1009,9 @@ if anObject.get_active(): self.theMessageWindowVisible = True self.showMessageWindow() - self.__resizeVertically( self.theMessageWindow.getActualSize()[1] ) - # hide else: self.theMessageWindowVisible = False self.hideMessageWindow() - - if self.theEntityListWindowVisible: - self.__resizeVertically( self['entitylistarea'].get_allocation()[3] ) - else: - self.__resizeVertically( 0 ) self.updateButtons() @@ -1053,17 +1019,10 @@ if arg[0].get_active(): self.theEntityListWindowVisible = True self['entitylistarea'].show() - self.__resizeVertically( self['entitylistarea'].get_allocation()[3] ) - else: self.theEntityListWindowVisible = False self['entitylistarea'].hide() - if self.theMessageWindowVisible: - self.__resizeVertically( self.theMessageWindow.getActualSize()[1] ) - else: - self.__resizeVertically( 0 ) - def __displayAbout ( self, *args ): # show about information self.createAboutSessionMonitor() @@ -1124,7 +1083,8 @@ delete this window. Returns True """ - return self.__deleted( *arg ) + pass + #return self.__deleted( *arg ) Modified: ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/OsogoUtil.py =================================================================== --- ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/OsogoUtil.py 2011-01-20 11:56:01 UTC (rev 3892) +++ ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/OsogoUtil.py 2011-01-24 12:46:14 UTC (rev 3893) @@ -47,20 +47,6 @@ SINGLE = 0 MULTIPLE = 1 -# ---------------------------------------------------------------------- -# decodeAttribute -# -# anAttribute : an attribute ( TRUE or FALSE ) -# -# return -> '+' or '-' -# ---------------------------------------------------------------------- -def decodeAttribute(anAttribute): - - if anAttribute: - return '+' - else: - return '-' - # end of decodeAttribute Modified: ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/StepperWindow.py =================================================================== --- ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/StepperWindow.py 2011-01-20 11:56:01 UTC (rev 3892) +++ ecell3/trunk/ecell/frontend/session-monitor/ecell/ui/osogo/StepperWindow.py 2011-01-24 12:46:14 UTC (rev 3893) @@ -10,7 +10,7 @@ # # E-Cell System is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public -# License as published by the Free Software Foundation; either +# License as published by the Free Software Foundation either # version 2 of the License, or (at your option) any later version. # # E-Cell System is distributed in the hope that it will be useful, @@ -53,468 +53,325 @@ import copy class StepperWindow(OsogoWindow): - """StepperWindow - - displayes all stepper property - - user can change each stepper property - """ + """StepperWindow + - displayes all stepper property + - user can change each stepper property + """ - # ========================================================================== - def __init__( self, aSession ): - """Constructor - aSession --- the reference of session - aSession --- the reference of Session - """ + # ========================================================================== + def __init__( self, aSession ): + """Constructor + aSession --- the reference of session + aSession --- the reference of Session + """ - # calls superclass's constructor - OsogoWindow.__init__( self, aSession, 'StepperWindow.glade' ) + # calls superclass's constructor + OsogoWindow.__init__( self, aSession, 'StepperWindow.glade' ) - self.theSession = aSession + self.theSession = aSession - # ========================================================================== - def openWindow(self): + # ========================================================================== + def openWindow(self): + OsogoWindow.openWindow(self) + # initializes attributes + self.theSelectedStepperID = None # selected stepperID (str) + self.theFirstPropertyIter = {} # key:iter(TreeIter) value:None + self.theSelectedPath = {} # key:aStepperID(str) value:Path + self.thePropertyMap = {} + aListStore = gtk.ListStore( gobject.TYPE_STRING ) + self['stepper_id_list'].set_model( aListStore ) + column=gtk.TreeViewColumn('Stepper',gtk.CellRendererText(),text=0) + self['stepper_id_list'].append_column(column) - OsogoWindow.openWindow(self) + aPropertyModel = gtk.ListStore( + gobject.TYPE_STRING, + gobject.TYPE_STRING, + gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN ) + self['property_list'].set_model(aPropertyModel) - # initializes attributes - self.theSelectedStepperID = None # selected stepperID (str) - self.theFirstPropertyIter = {} # key:iter(TreeIter) value:None - self.theSelectedPath = {} # key:aStepperID(str) value:Path - self.thePropertyMap = {} + column=gtk.TreeViewColumn( 'Property',gtk.CellRendererText(),\ + text=PROPERTY_INDEX ) + column.set_resizable(True) + self['property_list'].append_column(column) - aListStore = gtk.ListStore( gobject.TYPE_STRING ) - self['stepper_id_list'].set_model( aListStore ) - column=gtk.TreeViewColumn('Stepper',gtk.CellRendererText(),text=0) - self['stepper_id_list'].append_column(column) + renderer = gtk.CellRendererText() + renderer.connect( 'edited', self.__updateProperty ) + column=gtk.TreeViewColumn( 'Value', renderer,\ + text=VALUE_INDEX, editable=SET_INDEX, sensitive=SET_INDEX ) + column.set_resizable(True) + self['property_list'].append_column(column) - aPropertyModel=gtk.ListStore( gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING) - self['property_list'].set_model(aPropertyModel) - column=gtk.TreeViewColumn( 'Property',gtk.CellRendererText(),\ - text=PROPERTY_INDEX ) - column.set_resizable(True) - self['property_list'].append_column(column) - column=gtk.TreeViewColumn( 'Value',gtk.CellRendererText(),\ - text=VALUE_INDEX ) - column.set_resizable(True) - self['property_list'].append_column(column) - column=gtk.TreeViewColumn( 'Get',gtk.CellRendererText(),\ - text=GET_INDEX ) - column.set_resizable(True) - self['property_list'].append_column(column) - column=gtk.TreeViewColumn( 'Set',gtk.CellRendererText(),\ - text=SET_INDEX ) - column.set_resizable(True) - self['property_list'].append_column(column) - + column=gtk.TreeViewColumn( 'Get',gtk.CellRendererToggle(),\ + active=GET_INDEX ) + column.set_resizable(True) + self['property_list'].append_column(column) - # adds handlers - self.addHandlers({ \ - 'on_stepper_id_list_select' : self.__selectStepperID, # StepperID list - 'on_property_list_select_row' : self.__selectProperty, # Property list - 'on_update_button_clicked' : self.__updateProperty, # update button - 'on_close_button_clicked' : self.deleted, # close button - }) + column=gtk.TreeViewColumn( 'Set',gtk.CellRendererToggle(),\ + active=SET_INDEX ) + column.set_resizable(True) + self['property_list'].append_column(column) + + # adds handlers + self.addHandlers({ \ + 'on_stepper_id_list_select' : self.__selectStepperID, # StepperID list + 'on_close_button_clicked' : self.deleted, # close button + }) - aModel = self['stepper_id_list'].get_model() - aModel.clear() - aFirstIter = None - #for aValue in self.theStepperIDList: - for aValue in self.theSession.getStepperList(): - anIter = aModel.append() - if aFirstIter == None: - aFirstIter = anIter - aModel.set( anIter, 0, aValue ) + aModel = self['stepper_id_list'].get_model() + aModel.clear() - self[self.__class__.__name__].show_all() + aFirstIter = None + #for aValue in self.theStepperIDList: + for aValue in self.theSession.getStepperList(): + anIter = aModel.append() + if aFirstIter == None: + aFirstIter = anIter + aModel.set( anIter, 0, aValue ) - self['stepper_id_list'].get_selection().select_iter(aFirstIter) - self.__selectStepperID(None) + self[self.__class__.__name__].show_all() - def close( self ): - self.theSelectedPath = {} - OsogoWindow.close(self) + self['stepper_id_list'].get_selection().select_iter(aFirstIter) + self.__selectStepperID(None) + def close( self ): + self.theSelectedPath = {} + OsogoWindow.close(self) - # ========================================================================== - def selectStepperID( self, aStepperID ): - """ selects StepperID on screen and displays its property list - if StepperID exists returns True, else returns False - """ - anIter=self['stepper_id_list'].get_model().get_iter_first() - while True: - if anIter == None: - return False - aTitle = self['stepper_id_list'].get_model().get_value(anIter, 0 ) - if aTitle == aStepperID: - aPath = self['stepper_id_list'].get_model().get_path ( anIter ) - self['stepper_id_list'].set_cursor( aPath, None, False ) - break - anIter=self['stepper_id_list'].get_model().iter_next(anIter) - self.__selectStepperID( None ) - return False - + # ========================================================================== + def selectStepperID( self, aStepperID ): + """ selects StepperID on screen and displays its property list + if StepperID exists returns True, else returns False + """ + anIter=self['stepper_id_list'].get_model().get_iter_first() + while True: + if anIter == None: + return False + aTitle = self['stepper_id_list'].get_model().get_value(anIter, 0 ) + if aTitle == aStepperID: + aPath = self['stepper_id_list'].get_model().get_path ( anIter ) + self['stepper_id_list'].set_cursor( aPath, None, False ) + break + anIter=self['stepper_id_list'].get_model().iter_next(anIter) + self.__selectStepperID( None ) + return False - # ========================================================================== - def __selectStepperID( self, *arg ): - """selects stepper ID - Return None - """ + - # When window is not created, does nothing. - if not self.exists(): - return None + # ========================================================================== + def __selectStepperID( self, *arg ): + """selects stepper ID + Return None + """ - # -------------------------------------------------- - # Creates selected StepperSub - # -------------------------------------------------- - iter = self['stepper_id_list'].get_selection().get_selected()[1] - # aStepperID is selected stepper id - aStepperID = self['stepper_id_list'].get_model().get_value(iter,0) - - # When same StepperID is selected, does nothing - if self.theSelectedStepperID != None and aStepperID == self.theSelectedStepperID: - return None - self.theSelectedStepperID = aStepperID - self.thePropertyMap = {} - # aStepperStub is selected StepperStub of selected stepper - aStepperStub = self.theSession.StepperStub( aStepperID ) + # When window is not created, does nothing. + if not self.exists(): + return None + # -------------------------------------------------- + # Creates selected StepperSub + # -------------------------------------------------- + iter = self['stepper_id_list'].get_selection().get_selected()[1] + # aStepperID is selected stepper id + aStepperID = self['stepper_id_list'].get_model().get_value(iter,0) + + # When same StepperID is selected, does nothing + if self.theSelectedStepperID != None and aStepperID == self.theSelectedStepperID: + return None + self.theSelectedStepperID = aStepperID + self.thePropertyMap = {} + # aStepperStub is selected StepperStub of selected stepper + aStepperStub = self.theSession.createStepperStub( aStepperID ) - - # updates property list - aPropertyModel=self['property_list'].get_model() - aPropertyModel.clear() + # updates property list + aPropertyModel = self['property_list'].get_model() + aPropertyModel.clear() - # creats list of ClassName's row - aList = [ 'ClassName', ] + # creats list of ClassName's row + aList = [ 'ClassName', ] - # value - aClassName = aStepperStub.getClassname( ) - aList.append( str(aClassName) ) - self.thePropertyMap[ 'ClassName'] = str( aClassName ) + # value + aClassName = aStepperStub.getClassname( ) + aList.append( str(aClassName) ) + self.thePropertyMap[ 'ClassName' ] = str( aClassName ) - # gettable and settable - aList.append( decodeAttribute( True ) ) # gettable is '+' - aList.append( decodeAttribute( False ) ) # settable is '-' + # gettable and settable + aList.append( True ) # gettable is '+' + aList.append( False ) # settable is '-' - # sets this list to TreeModel - iter = aPropertyModel.append() - for i in range(0,4): - aPropertyModel.set_value(iter,i,aList[i]) - - self.theFirstPropertyIter[aStepperID] = iter + # sets this list to TreeModel + iter = aPropertyModel.append() + for i in range(0, 4): + aPropertyModel.set_value(iter, i, aList[i]) + + self.theFirstPropertyIter[aStepperID] = iter - # -------------------------------------------------- - # sets all propertys' row other than ClassName - # -------------------------------------------------- - for aProperty in aStepperStub.getPropertyList(): + # -------------------------------------------------- + # sets all propertys' row other than ClassName + # -------------------------------------------------- + for aProperty in aStepperStub.getPropertyList(): - # property - aList = [ aProperty, ] # first element + # property + aList = [ aProperty, ] # first element - # gettable and settable - anAttribute = aStepperStub.getPropertyAttributes( aProperty ) - # value - if anAttribute[GETABLE] == 0: - continue - aValue = aStepperStub.getProperty( aProperty ) - self.thePropertyMap[ aProperty ] = aValue + # gettable and settable + anAttribute = aStepperStub.getPropertyAttributes( aProperty ) + # value + if anAttribute[GETABLE] == 0: + continue + aValue = aStepperStub.getProperty( aProperty ) + self.thePropertyMap[ aProperty ] = aValue - aValueString = str( aValue ) - # second element - aList.append( shortenString( aValueString,\ - MAX_STRING_NUMBER) ) + aValueString = str( aValue ) + # second element + aList.append( shortenString( aValueString,\ + MAX_STRING_NUMBER) ) - aList.append( decodeAttribute(anAttribute[GETABLE]) ) # third element - aList.append( decodeAttribute(anAttribute[SETTABLE]) ) # forth element + aList.append( anAttribute[GETABLE] ) # third element + aList.append( anAttribute[SETTABLE] ) # forth element - # sets this list to TreeModel - iter = aPropertyModel.append( ) - #anIterListElement = [iter] - for i in range(0,4): - aPropertyModel.set_value(iter,i,aList[i]) + # sets this list to TreeModel + iter = aPropertyModel.append() + #anIterListElement = [iter] + for i in range(0,4): + aPropertyModel.set_value(iter, i, aList[i]) - self.update() + self.update() - if self.theSelectedPath.has_key(aStepperID): - aPath = self.theSelectedPath[aStepperID] - self['property_list'].get_selection().select_path(aPath) - else: - aPath = (0,) - self.theSelectedPath[aStepperID] = aPath - self['property_list'].get_selection().select_path(aPath) + if self.theSelectedPath.has_key(aStepperID): + aPath = self.theSelectedPath[aStepperID] + self['property_list'].get_selection().select_path(aPath) + else: + aPath = (0,) + self.theSelectedPath[aStepperID] = aPath + self['property_list'].get_selection().select_path(aPath) - self.__selectProperty() + # ========================================================================== + def selectProperty(self, aPropertyName): + """ selects PropertyName on screen + if PropertyName exists returns True, else returns False + """ + anIter=self['property_list'].get_model().get_iter_first() + while True: + if anIter == None: + return False + aTitle = self['property_list'].get_model().get_value(anIter, PROPERTY_INDEX ) + if aTitle == aPropertyName: + aPath = self['property_list'].get_model().get_path ( anIter ) + self['property_list'].set_cursor( aPath, None, False ) + break + anIter=self['property_list'].get_model().iter_next(anIter) - # ========================================================================== - def selectProperty(self, aPropertyName): - """ selects PropertyName on screen - if PropertyName exists returns True, else returns False - """ - anIter=self['property_list'].get_model().get_iter_first() + return False - while True: - if anIter == None: - return False - aTitle = self['property_list'].get_model().get_value(anIter, PROPERTY_INDEX ) - if aTitle == aPropertyName: - aPath = self['property_list'].get_model().get_path ( anIter ) - self['property_list'].set_cursor( aPath, None, False ) - break - anIter=self['property_list'].get_model().iter_next(anIter) + # ========================================================================== + # ========================================================================== + def __updateProperty( self, renderer, path, aValue, *kwarg ): + """updates property + Return None + """ - self.__selectProperty( None ) - return False + # -------------------------------------------------- + # creates selected StepperSub + # -------------------------------------------------- + iter = self['stepper_id_list'].get_selection().get_selected()[1] + aStepperID = self['stepper_id_list'].get_model().get_value(iter,0) + aStepperStub = self.theSession.createStepperStub( aStepperID ) + # gets selected property row + aPropertyModel = self['property_list'].get_model() + iter = aPropertyModel.get_iter(path) + # ----------------------------------------------------------- + # get a property name from property list + # ----------------------------------------------------------- + aPropertyName = aPropertyModel.get_value( iter, PROPERTY_INDEX ) - # ========================================================================== - def __selectProperty( self, *arg ): - """when a property is selected, calls this method. - updates - Returns None - """ + # converts value type + anOldValue = aStepperStub.getProperty( aPropertyName ) - # If Window is closed, do nothing. - if not self.exists(): - return None + # --------------------------------------------------- + # checks float and int type of inputted value + # does not check str. ( not needed ) + # --------------------------------------------------- + # float + if type(anOldValue) == float: + try: + aValue = float(aValue) + except: + # displays confirm window + anErrorMessage = "Input float value." + aDialog = ConfirmWindow(OK_MODE,"Can't set property!\n" + anErrorMessage,'Error!') + return None - # -------------------------------------------------- - # Creates selected StepperSub - # -------------------------------------------------- - iter_stepper = self['stepper_id_list'].get_selection().get_selected()[1] - aStepperID = self['stepper_id_list'].get_model().get_value(iter_stepper,0) - aStepperStub = self.theSession.createStepperStub( aStepperID ) + # int + if type(anOldValue) == int: + try: + aValue = int(aValue) + except: + # displays confirm window + anErrorMessage = "Input int value." + aDialog = ConfirmWindow(OK_MODE,"Can't set property!\n" + anErrorMessage,'Error!') + return None - # -------------------------------------------------- - # gets selected property name - # -------------------------------------------------- - iter = self['property_list'].get_selection().get_selected()[1] - # When nothing is selected, does nothing. - if iter == None: - return None - aPropertyName = self['property_list'].get_model().get_value( iter, PROPERTY_INDEX ) - self.theSelectedPath[aStepperID]=self['property_list'].get_model().get_path(iter) + # sets new value + try: + aStepperStub.setProperty( aPropertyName, aValue ) + aPropertyModel.set_value( iter, VALUE_INDEX, aValue ) + except: - # -------------------------------------------------- - # sets value to value_entry - # -------------------------------------------------- - aValue = None + # displays error message to MessageWindow + anErrorMessage = '\n'.join( traceback.format_exception( sys.exc_type,sys.exc_value,sys.exc_traceback ) ) + self.theSession.message( anErrorMessage ) - # If selected Property is 'ClassName' - if aPropertyName == 'ClassName': - aValue = aStepperStub.getClassname() + # displays confirm window + anErrorMessage = "See MessageWindow for details." + aDialog = ConfirmWindow(OK_MODE,aMessage,"Can't set property!\n" + anErrorMessage) + return False - # If selected Property is not 'ClassName' - else: - aValue = aStepperStub.getProperty( aPropertyName ) + # when to set property is succeeded, + else: + # refreshs self['property_list'] + self.update() + return True - self['value_entry'].set_text( str( aValue ) ) + # ========================================================================== + def update( self ): + """overwrites superclass's method + updates the value of self['property_list'] + """ - # -------------------------------------------------- - # when the selected property is settable, set sensitive value_entry - # when not, set unsensitive value_entry - # -------------------------------------------------- - if self['property_list'].get_model().get_value( iter, SET_INDEX ) == decodeAttribute( True ): - self['value_entry'].set_sensitive( True ) - self['update_button'].set_sensitive( True ) - else: - self['value_entry'].set_sensitive( False ) - self['update_button'].set_sensitive( False ) + # When this window does not created, does nothing + if not self.exists(): + return None - # ========================================================================== - def updateProperty(self, aValue): - """ overwrites selected Property on screen - """ - if self['value_entry'].get_editable(): - self['value_entry'].set_text ( str( aValue ) ) - self.__updateProperty(None) + # gets stepperID + iter_stepper = self['stepper_id_list'].get_selection().get_selected()[1] + aStepperID = self['stepper_id_list'].get_model().get_value(iter_stepper,0) + aStepperStub = self.theSession.createStepperStub( aStepperID ) - # ========================================================================== - def __updateProperty( self, *arg ): - """updates property - Return None - """ + iter = self.theFirstPropertyIter[aStepperID] - # If Window is closed, do nothing. - if not self.exists(): - return None + # updates all value of self['property_list'] + while( True ): + iter = self['property_list'].get_model().iter_next(iter) + if iter == None: + break + aProperty = self['property_list'].get_model().get_value(iter,0) + if type ( self.thePropertyMap[ aProperty ] ) != type( () ): + if aStepperStub.getPropertyAttributes( aProperty )[GETABLE]: + aValue = str( aStepperStub.getProperty( aProperty ) ) + else: + aValue = '' + self['property_list'].get_model().set_value(iter,1,aValue) - # -------------------------------------------------- - # creates selected StepperSub - # -------------------------------------------------- - iter = self['stepper_id_list'].get_selection().get_selected()[1] - aStepperID = self['stepper_id_list'].get_model().get_value(iter,0) - aStepperStub = self.theSession.createStepperStub( aStepperID ) + # updates text - # gets selected property row - iter = self['property_list'].get_selection().get_selected()[1] - if iter == None: - aMessage = 'Select a property.' - aDialog = ConfirmWindow(OK_MODE,aMessage,'Error!') - self['statusbar'].push(1,'property is not selected.') - return None - - self['statusbar'].pop(1) - - # ----------------------------------------------------------- - # gets a value to update - # ----------------------------------------------------------- - aValue = self['value_entry'].get_text( ) - - # ----------------------------------------------------------- - # get a property name from property list - # ----------------------------------------------------------- - aPropertyName = self['property_list'].get_model().get_value( iter, PROPERTY_INDEX ) - - # When the property value is scalar - if type(aValue) != list and type(aValue) != tuple: - - # converts value type - anOldValue = aStepperStub.getProperty( aPropertyName ) - - # --------------------------------------------------- - # checks float and int type of inputted value - # does not check str. ( not needed ) - # --------------------------------------------------- - # float - if type(anOldValue) == float: - try: - aValue = float(aValue) - except: - # displays confirm window - anErrorMessage = "Input float value." - self['statusbar'].push(1,anErrorMessage) - aDialog = ConfirmWindow(OK_MODE,"Can't set property!\n" + anErrorMessage,'Error!') - return None - - # int - if type(anOldValue) == int: - try: - aValue = int(aValue) - except: - # displays confirm window - anErrorMessage = "Input int value." - self['statusbar'].push(1,anErrorMessage) - aDialog = ConfirmWindow(OK_MODE,"Can't set property!\n" + anErrorMessage,'Error!') - return None - - # sets new value - try: - aStepperStub.setProperty( aPropertyName, aValue ) - except: - - # displays error message to MessageWindow - anErrorMessage = '\n'.join( traceback.format_exception( sys.exc_type,sys.exc_value,sys.exc_traceback ) ) - self.theSession.message( anErrorMessage ) - - # displays confirm window - anErrorMessage = "See MessageWindow for details." - self['statusbar'].push(1,anErrorMessage) - aDialog = ConfirmWindow(OK_MODE,aMessage,"Can't set property!\n" + anErrorMessage) - return None - - # when to set property is succeeded, - else: - - # refreshs self['property_list'] - self.update() - - # displays message to status bar - aMessage = "Property is changed." - self['statusbar'].push(1,aMessage) - - # ------------------------------------ - # When the property value is tuple - # ------------------------------------ - else: - - # ------------------------------------------- - # converts value type - # do not check the type of ecah element. - # ------------------------------------------- - anOldValue = aStepperStub.getProperty( aPropertyName ) - anIndexOfTuple = int(aNumber)-1 - - # ------------------------------------------- - # create tuple to set - # ------------------------------------------- - if anIndexOfTuple == 0: - aNewValue = (aValue,) + aValueTuple[anIndexOfTuple+1:] - elif anIndexOfTuple == len(aValueTuple)-1: - aNewValue = aValueTuple[:anIndexOfTuple] + (aValue,) - else: - aNewValue = aValueTuple[:anIndexOfTuple] + (aValue,) + aValueTuple[anIndexOfTuple+1:] - - - # ------------------------------------------- - # sets new value - # ------------------------------------------- - try: - aStepperStub.setProperty( aPropertyName, aNewValue ) - - except: - - # displays error message to MessageWindow - anErrorMessage = '\n'.join( traceback.format_exception( sys.exc_type,sys.exc_value,sys.exc_traceback ) ) - self.theSession.message( aErroeMessage ) - - # displays confirm window - anErrorMessage = "See MessageWindow for details." - aDialog = ConfirmWindow(OK_MODE,aMessage,"Can't set property!\n" + anErrorMessage) - self['statusbar'].push(1,anErrorMessage) - return None - - - # ========================================================================== - def update( self ): - """overwrites superclass's method - updates the value of self['property_list'] - """ - - # When this window does not created, does nothing - if not self.exists(): - return None - - # clears message on statusbar. - self['statusbar'].pop(1) - - # gets stepperID - iter_stepper = self['stepper_id_list'].get_selection().get_selected()[1] - aStepperID = self['stepper_id_list'].get_model().get_value(iter_stepper,0) - aStepperStub = self.theSession.createStepperStub( aStepperID ) - - iter = self.theFirstPropertyIter[aStepperID] - - # updates all value of self['property_list'] - while( True ): - iter = self['property_list'].get_model().iter_next(iter) - if iter == None: - break - aProperty = self['property_list'].get_model().get_value(iter,0) - if type ( self.thePropertyMap[ aProperty ] ) != type( () ): - if aStepperStub.getPropertyAttributes( aProperty )[GETABLE]: - aValue = str( aStepperStub.getProperty( aProperty ) ) - else: - aValue = '' - self['property_list'].get_model().set_value(iter,1,aValue) - - # updates text - self.__selectProperty() - - -# end of StepperWindow - - - Modified: ecell3/trunk/ecell/frontend/session-monitor/glade/EntityListWindow.glade =================================================================== --- ecell3/trunk/ecell/frontend/session-monitor/glade/EntityListWindow.glade 2011-01-20 11:56:01 UTC (rev 3892) +++ ecell3/trunk/ecell/frontend/session-monitor/glade/EntityListWindow.glade 2011-01-24 12:46:14 UTC (rev 3893) @@ -1,630 +1,404 @@ -<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> -<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> - +<?xml version="1.0" encoding="UTF-8"?> <glade-interface> -<requires lib="gnome"/> - -<widget class="GtkWindow" id="EntityListWindow"> - <property name="visible">True</property> - <property name="title" translatable="yes">EntityList</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - - <child> - <widget class="GtkVBox" id="top_frame"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox96"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkComboBox" id="search_scope"> - <property name="visible">True</property> - <property name="items" translatable="yes">All systems + <!-- interface-requires gtk+ 2.6 --> + <!-- interface-naming-policy toplevel-contextual --> + <widget class="GtkWindow" id="EntityListWindow"> + <property name="visible">True</property> + <property name="title" translatable="yes">EntityList</property> + <child> + <widget class="GtkVBox" id="top_frame"> + <property name="visible">True</property> + <property name="border_width">6</property> + <child> + <widget class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="bottom_padding">4</property> + <child> + <widget class="GtkHBox" id="hbox96"> + <property name="visible">True</property> + <child> + <widget class="GtkComboBox" id="search_scope"> + <property name="visible">True</property> + <property name="items" translatable="yes">All systems Selected systems</property> - <signal name="changed" handler="on_search_scope_changed" last_modification_time="Thu, 05 Aug 2004 12:04:22 GMT"/> - </widget> - <packing> - <property name="padding">1</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkComboBox" id="search_method"> - <property name="visible">True</property> - <property name="items" translatable="yes">ID contains</property> - </widget> - <packing> - <property name="padding">1</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkEntry" id="search_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char" translatable="yes">*</property> - <property name="activates_default">False</property> - <signal name="key_press_event" handler="on_search_entry_key_press_event" last_modification_time="Wed, 21 Jul 2004 04:35:49 GMT"/> - </widget> - <packing> - <property name="padding">1</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="search_button"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="label">gtk-find</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_search_button_clicked" last_modification_time="Wed, 21 Jul 2004 03:42:47 GMT"/> - <accelerator key="F" modifiers="GDK_CONTROL_MASK" signal="clicked"/> - </widget> - <packing> - <property name="padding">3</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="clear_button"> - <property name="visible">True</property> - <property name="sensitive">False</property> - <property name="can_focus">True</property> - <property name="label">gtk-clear</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_clear_button_clicked" last_modification_time="Wed, 04 Aug 2004 13:11:36 GMT"/> - <accelerator key="c" modifiers="GDK_CONTROL_MASK" signal="clicked"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkVSeparator" id="vseparator1"> - <property name="visible">True</property> - </widget> - <packing> - <property name="padding">3</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkToolButton" id="backbutton"> - <property name="visible">True</property> - <property name="label" translatable="yes"></property> - <property name="use_underline">True</property> - <property name="stock_id">gtk-go-back</property> - <property name="visible_horizontal">True</property> - <property name="visible_vertical">True</property> - <property name="is_important">False</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkToolButton" id="forwardbutton"> - <property name="visible">True</property> - <property name="label" translatable="yes"></property> - <property name="use_underline">True</property> - <property name="stock_id">gtk-go-forward</property> - <property name="visible_horizontal">True</property> - <property name="visible_vertical">True</property> - <property name="is_important">False</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHPaned" id="hpaned7"> - <property name="width_request">500</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - - <child> - <widget class="GtkVBox" id="hoge_frame"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <placeholder/> - </child> - - <child> - <widget class="GtkVPaned" id="vpaned2"> - <property name="width_request">300</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - - <child> - <widget class="GtkVBox" id="vbox77"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkFrame" id="_system_tree"> - <property name="width_request">100</property> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow21"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="system_tree"> - <property name="height_request">120</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <signal name="button_press_event" handler="on_system_tree_button_press_event" last_modification_time="Tue, 25 Mar 2003 17:37:41 GMT"/> - </widget> - </child> - </widget> - </child> - - <child> - <widget class="GtkLabel" id="system_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">System</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">False</property> - </packing> - </child> - - <child> - <widget class="GtkHPaned" id="hpaned8"> - <property name="width_request">300</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - - <child> - <widget class="GtkFrame" id="frame11"> - <property name="width_request">130</property> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - - <child> - <widget class="GtkVBox" id="vbox75"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow15"> - <property name="width_request">80</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="variable_tree"> - <property name="height_request">200</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="events">GDK_BUTTON_PRESS_MASK</property> - <property name="headers_visible">True</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <signal name="button_press_event" handler="on_variable_tree_button_press_event" last_modification_time="Tue, 20 Jul 2004 09:09:53 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - - <child> - <widget class="GtkLabel" id="variable_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">Variable</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">True</property> - </packing> - </child> - - <child> - <widget class="GtkFrame" id="frame12"> - <property name="width_request">130</property> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property> - - <child> - <widget class="GtkVBox" id="vbox76"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow16"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkTreeView" id="process_tree"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">True</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <signal name="button_press_event" handler="on_process_tree_button_press_event" last_modification_time="Tue, 20 Jul 2004 09:10:13 GMT"/> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - </child> - - <child> - <widget class="GtkLabel" id="process_label"> - <property name="visible">True</property> - <property name="label" translatable="yes">Process</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </widget> - <packing> - <property name="type">label_item</property> - </packing> - </child> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">True</property> - </packing> - </child> - </widget> - <packing> - <property name="shrink">True</property> - <property name="resize">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox91"> - <property name="width_request">300</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox92"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">5</property> - - <child> - <widget class="GtkHBox" id="hbox93"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox94"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkHBox" id="hbox95"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - - <child> - <widget class="GtkScrolledWindow" id="scrolledwindow20"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="vscrollbar_policy">GTK_POLICY_NEVER</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - - <child> - <widget class="GtkViewport" id="viewport7"> - <property name="visible">True</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - - <child> - <widget class="GtkOptionMenu" id="plugin_optionmenu"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Create new PluginWindow</property> - <property name="can_focus">True</property> - <property name="history">-1</property> - </widget> - </child> - </widget> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkButton" id="view_button"> - <property name="visible">True</property> - <property name="tooltip" translatable="yes">Create New PluginWindow</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">View Selected</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal name="clicked" handler="on_view_button_clicked" last_modification_time="Tue, 20 Jul 2004 02:48:22 GMT"/> - <accelerator key="C" modifiers="GDK_MOD1_MASK" signal="clicked"/> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </widget> - <packing> - ... [truncated message content] |