def __init__(self, bot, configFile, parent): """Constructor method. bot - bot object which is being edited configFile - bot's config file which is being edited parent - a top level window, the config window will positioned on top this """ self.configFile = configFile self.builder = gtk.Builder() self.builder.add_from_file(resourcePath('configwindow.glade')) self.dialog = self.builder.get_object('configDialog') self.botRef = weakref.ref(bot) self.parentRef = weakref.ref(parent) # append bot name to dialog's title self.dialog.set_title(self.dialog.get_title() % bot.getName()) weakConnect(self.dialog, 'response', self.onConfigDialogResponse) weakConnect(self.dialog, 'response', self.onConfigDialogResponse) weakConnect(self.builder.get_object('dbTypeCombobox'), 'changed', self.onDbTypeChanged) weakConnect(self.builder.get_object('useProxyCheckbox'), 'toggled', self.onUseProxyToggled) # add buttons, must be added in Gnome's preferred order, see: # http://developer.gnome.org/hig-book/3.4/windows-alert.html.en#alert-button-order self.dialog.add_button(gtk.STOCK_CANCEL, self.RESPONSE_CANCEL) saveButton = self.dialog.add_button(gtk.STOCK_SAVE, self.RESPONSE_SAVE) saveButton.grab_default() # add alternative order for Windows, see: # http://msdn.microsoft.com/en-us/library/windows/desktop/aa511268.aspx#commitButtons self.dialog.set_alternative_button_order([self.RESPONSE_SAVE, self.RESPONSE_CANCEL]) # set tooltip texts to widgets for tooltipData in self.TOOLTIPS: widgetNames = tooltipData[0] text = tooltipData[1] for widgetName in widgetNames: widget = self.builder.get_object(widgetName) widget.set_tooltip_text(text)
def onConfigDialogResponse(self, caller, responseId): """This signal handler is called when user clicks either Save or Cancel button. In both cases the window is closed, but if Save is clicked the config file is also saved. """ if responseId == self.RESPONSE_CANCEL: self.dialog.destroy() elif responseId == self.RESPONSE_SAVE: self.saveConfigFile() self.dialog.destroy() if self.botRef().get_property('isRunning'): self.restartDialog = gtk.MessageDialog( parent = self.parentRef(), flags = gtk.DIALOG_MODAL, type = gtk.MESSAGE_QUESTION, buttons = gtk.BUTTONS_YES_NO, message_format = "The bot is currently running. These changes will not affect it before it is restarted. Would you like to restart it now?" ) weakConnect(self.restartDialog, 'response', self.onRestartDialogResponse) self.restartDialog.show_all()
def __init__(self, bot): """Constructor method.""" self.__gobject_init__() self.bot = bot # load botwindow.glade file self.builder = gtk.Builder() self.builder.add_from_file(resourcePath('botwindow.glade')) # get some widgets and objects for easier access self.botWindow = self.builder.get_object('botwindow') outputScrollArea = self.builder.get_object('outputScrollArea') self.outputView = self.builder.get_object('outputView') self.commandEntry = self.builder.get_object('commandInputEntry') self.destinationSelector = self.builder.get_object('destinationSelector') self.startButton = self.builder.get_object('startButton') self.restartButton = self.builder.get_object('restartButton') self.shutdownButton = self.builder.get_object('shutdownButton') self.terminateButton = self.builder.get_object('terminateButton') self.statusImage = self.builder.get_object('statusImage') self.statusLabel = self.builder.get_object('statusLabel') # call scrollViewToBottom() when scroll area's vertical scrollbar changes weakConnect(outputScrollArea.get_vadjustment(), 'changed', self.scrollViewToBottom) # call onCommandGiven() when user hits enter-key within the entry weakConnect(self.commandEntry, 'activate', self.onCommandGiven) # prevent deletion of the window on close weakConnect(self.botWindow, 'delete-event', self.onDeleteEvent) # be notified of bot's changes weakConnect(self.bot, 'notify::isRunning', self.onBotPropertyChanged) weakConnect(self.bot, 'notify::apiAccessible', self.onBotPropertyChanged) # handle button clicks weakConnect(self.startButton, 'clicked', self.onButtonClicked) weakConnect(self.restartButton, 'clicked', self.onButtonClicked) weakConnect(self.shutdownButton, 'clicked', self.onButtonClicked) weakConnect(self.terminateButton, 'clicked', self.onButtonClicked) self.outputView.set_buffer(self.bot.getConsoleModel()) self.statusImage.set_property('icon-size', gtk.icon_size_from_name('status-icon-size')) self.updateControlStates()