Example #1
0
	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)
Example #2
0
	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()
Example #3
0
	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()