Example #1
0
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.settings = Config.settings
        self.toolBars = []
        self.sandboxieINIIsModified = False
        self.view = 'accounts'

        self.setWindowTitle('TF2Idle')
        windowXSize, windowYSize = eval(
            self.settings.get_option('Settings', 'ui_window_size'))
        if (windowXSize, windowYSize) == (0, 0):
            self.setWindowState(QtCore.Qt.WindowMaximized)
        else:
            self.resize(windowXSize, windowYSize)
        self.setWindowIcon(
            QtGui.QIcon(returnResourcePath('images/tf2idle.png')))

        self.createSystemTray()

        self.drawToolBars()

        # Add menu bar
        self.menuBar = QtGui.QMenuBar(self)
        self.menuBar.setObjectName('menubar')
        self.setMenuBar(self.menuBar)

        # Add File menu
        fileMenu = self.addMenu('File')
        self.addSubMenu(
            fileMenu,
            text='Settings',
            shortcut='Ctrl+S',
            action={
                'trigger': 'triggered()',
                'action': self.openSettings
            },
            iconimage=returnResourcePath('images/settings_logo.png'))
        fileMenu.addSeparator()
        self.addSubMenu(fileMenu,
                        text='Exit',
                        shortcut='Ctrl+Q',
                        action={
                            'trigger': 'triggered()',
                            'action': self.close
                        },
                        iconimage=returnResourcePath('images/exit_logo.png'))

        # Add About menu
        helpMenu = self.addMenu('Help')
        self.addSubMenu(helpMenu,
                        text='Readme / Source',
                        action={
                            'trigger': 'triggered()',
                            'action': self.openGithub
                        },
                        iconimage=returnResourcePath('images/readme_logo.png'))
        self.addSubMenu(
            helpMenu,
            text='Facepunch thread',
            action={
                'trigger': 'triggered()',
                'action': self.openFacepunch
            },
            iconimage=returnResourcePath('images/facepunch_logo.png'))
        self.addSubMenu(
            helpMenu,
            text='Steam group',
            action={
                'trigger': 'triggered()',
                'action': self.openSteamGroup
            },
            iconimage=returnResourcePath('images/steam_group_logo.png'))
        self.addSubMenu(helpMenu,
                        text='Check for update',
                        action={
                            'trigger': 'triggered()',
                            'action': self.checkForUpdate
                        },
                        iconimage=returnResourcePath('images/update_logo.png'))
        self.addSubMenu(helpMenu,
                        text='Bugs/Features/Feedback',
                        action={
                            'trigger': 'triggered()',
                            'action': self.openFeedback
                        },
                        iconimage=returnResourcePath('images/uservoice.png'))
        self.addSubMenu(helpMenu,
                        text='About',
                        action={
                            'trigger': 'triggered()',
                            'action': self.showAbout
                        },
                        iconimage=returnResourcePath('images/tf2idle.png'))

        # Add Steam menu
        steamMenu = self.addMenu('Powered by Steam')
        self.addSubMenu(steamMenu,
                        text='Steam website',
                        action={
                            'trigger': 'triggered()',
                            'action': self.openSteamSite
                        },
                        iconimage=returnResourcePath('images/steam_logo.png'))

        # Set starting view as accounts page
        self.accountsView = AccountsView(self)
        self.dropLogView = DropLogView(self, self.tray)

        self.stackedWidget = QtGui.QStackedWidget(self)
        self.stackedWidget.addWidget(self.accountsView)
        self.stackedWidget.addWidget(self.dropLogView)
        self.setCentralWidget(self.stackedWidget)

        # Connect signals used for passing account information between views
        QtCore.QObject.connect(
            self.accountsView,
            QtCore.SIGNAL('returnedSelectedAccounts(PyQt_PyObject)'),
            self.dropLogView.setSelectedAccounts)
        QtCore.QObject.connect(self.dropLogView,
                               QtCore.SIGNAL('retrieveSelectedAccounts'),
                               self.accountsView.returnSelectedAccounts)
        QtCore.QObject.connect(self.accountsView,
                               QtCore.SIGNAL('startDropLog(PyQt_PyObject)'),
                               self.dropLogView.addAccount)
        QtCore.QObject.connect(self.accountsView,
                               QtCore.SIGNAL('stopDropLog(PyQt_PyObject)'),
                               self.dropLogView.removeAccount)

        self.changeView()

        self.dropLogView.toggleItemValues()
Example #2
0
	def __init__(self):
		QtGui.QMainWindow.__init__(self)
		self.settings = Config.settings
		self.toolBars = []
		self.sandboxieINIIsModified = False
		self.view = 'accounts'

		self.setWindowTitle('TF2Idle')
		windowXSize, windowYSize = eval(self.settings.get_option('Settings', 'ui_window_size'))
		if (windowXSize, windowYSize) == (0, 0):
			self.setWindowState(QtCore.Qt.WindowMaximized)
		else:
			self.resize(windowXSize, windowYSize)
		self.setWindowIcon(QtGui.QIcon(returnResourcePath('images/tf2idle.png')))

		self.createSystemTray()

		self.drawToolBars()
		
		# Add menu bar
		self.menuBar = QtGui.QMenuBar(self)
		self.menuBar.setObjectName('menubar')
		self.setMenuBar(self.menuBar)
		
		# Add File menu
		fileMenu = self.addMenu('File')
		self.addSubMenu(fileMenu, text='Settings', shortcut='Ctrl+S', action={'trigger':'triggered()', 'action':self.openSettings}, iconimage=returnResourcePath('images/settings_logo.png'))
		fileMenu.addSeparator()
		self.addSubMenu(fileMenu, text='Exit', shortcut='Ctrl+Q', action={'trigger':'triggered()', 'action':self.close}, iconimage=returnResourcePath('images/exit_logo.png'))

		# Add About menu
		helpMenu = self.addMenu('Help')
		self.addSubMenu(helpMenu, text='Readme / Source', action={'trigger':'triggered()', 'action':self.openGithub}, iconimage=returnResourcePath('images/readme_logo.png'))
		self.addSubMenu(helpMenu, text='Facepunch thread', action={'trigger':'triggered()', 'action':self.openFacepunch}, iconimage=returnResourcePath('images/facepunch_logo.png'))
		self.addSubMenu(helpMenu, text='Steam group', action={'trigger':'triggered()', 'action':self.openSteamGroup}, iconimage=returnResourcePath('images/steam_group_logo.png'))
		self.addSubMenu(helpMenu, text='Check for update', action={'trigger':'triggered()', 'action':self.checkForUpdate}, iconimage=returnResourcePath('images/update_logo.png'))
		self.addSubMenu(helpMenu, text='Bugs/Features/Feedback', action={'trigger':'triggered()', 'action':self.openFeedback}, iconimage=returnResourcePath('images/uservoice.png'))
		self.addSubMenu(helpMenu, text='About', action={'trigger':'triggered()', 'action':self.showAbout}, iconimage=returnResourcePath('images/tf2idle.png'))

		# Add Steam menu
		steamMenu = self.addMenu('Powered by Steam')
		self.addSubMenu(steamMenu, text='Steam website', action={'trigger':'triggered()', 'action':self.openSteamSite}, iconimage=returnResourcePath('images/steam_logo.png'))
		
		# Set starting view as accounts page
		self.accountsView = AccountsView(self)
		self.dropLogView = DropLogView(self, self.tray)
		
		self.stackedWidget = QtGui.QStackedWidget(self)
		self.stackedWidget.addWidget(self.accountsView)
		self.stackedWidget.addWidget(self.dropLogView)
		self.setCentralWidget(self.stackedWidget)
		
		# Connect signals used for passing account information between views
		QtCore.QObject.connect(self.accountsView, QtCore.SIGNAL('returnedSelectedAccounts(PyQt_PyObject)'), self.dropLogView.setSelectedAccounts)
		QtCore.QObject.connect(self.dropLogView, QtCore.SIGNAL('retrieveSelectedAccounts'), self.accountsView.returnSelectedAccounts)
		QtCore.QObject.connect(self.accountsView, QtCore.SIGNAL('startDropLog(PyQt_PyObject)'), self.dropLogView.addAccount)
		QtCore.QObject.connect(self.accountsView, QtCore.SIGNAL('stopDropLog(PyQt_PyObject)'), self.dropLogView.removeAccount)

		self.changeView()

		self.dropLogView.toggleItemValues()
Example #3
0
class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.settings = Config.settings
        self.toolBars = []
        self.sandboxieINIIsModified = False
        self.view = 'accounts'

        self.setWindowTitle('TF2Idle')
        windowXSize, windowYSize = eval(
            self.settings.get_option('Settings', 'ui_window_size'))
        if (windowXSize, windowYSize) == (0, 0):
            self.setWindowState(QtCore.Qt.WindowMaximized)
        else:
            self.resize(windowXSize, windowYSize)
        self.setWindowIcon(
            QtGui.QIcon(returnResourcePath('images/tf2idle.png')))

        self.createSystemTray()

        self.drawToolBars()

        # Add menu bar
        self.menuBar = QtGui.QMenuBar(self)
        self.menuBar.setObjectName('menubar')
        self.setMenuBar(self.menuBar)

        # Add File menu
        fileMenu = self.addMenu('File')
        self.addSubMenu(
            fileMenu,
            text='Settings',
            shortcut='Ctrl+S',
            action={
                'trigger': 'triggered()',
                'action': self.openSettings
            },
            iconimage=returnResourcePath('images/settings_logo.png'))
        fileMenu.addSeparator()
        self.addSubMenu(fileMenu,
                        text='Exit',
                        shortcut='Ctrl+Q',
                        action={
                            'trigger': 'triggered()',
                            'action': self.close
                        },
                        iconimage=returnResourcePath('images/exit_logo.png'))

        # Add About menu
        helpMenu = self.addMenu('Help')
        self.addSubMenu(helpMenu,
                        text='Readme / Source',
                        action={
                            'trigger': 'triggered()',
                            'action': self.openGithub
                        },
                        iconimage=returnResourcePath('images/readme_logo.png'))
        self.addSubMenu(
            helpMenu,
            text='Facepunch thread',
            action={
                'trigger': 'triggered()',
                'action': self.openFacepunch
            },
            iconimage=returnResourcePath('images/facepunch_logo.png'))
        self.addSubMenu(
            helpMenu,
            text='Steam group',
            action={
                'trigger': 'triggered()',
                'action': self.openSteamGroup
            },
            iconimage=returnResourcePath('images/steam_group_logo.png'))
        self.addSubMenu(helpMenu,
                        text='Check for update',
                        action={
                            'trigger': 'triggered()',
                            'action': self.checkForUpdate
                        },
                        iconimage=returnResourcePath('images/update_logo.png'))
        self.addSubMenu(helpMenu,
                        text='Bugs/Features/Feedback',
                        action={
                            'trigger': 'triggered()',
                            'action': self.openFeedback
                        },
                        iconimage=returnResourcePath('images/uservoice.png'))
        self.addSubMenu(helpMenu,
                        text='About',
                        action={
                            'trigger': 'triggered()',
                            'action': self.showAbout
                        },
                        iconimage=returnResourcePath('images/tf2idle.png'))

        # Add Steam menu
        steamMenu = self.addMenu('Powered by Steam')
        self.addSubMenu(steamMenu,
                        text='Steam website',
                        action={
                            'trigger': 'triggered()',
                            'action': self.openSteamSite
                        },
                        iconimage=returnResourcePath('images/steam_logo.png'))

        # Set starting view as accounts page
        self.accountsView = AccountsView(self)
        self.dropLogView = DropLogView(self, self.tray)

        self.stackedWidget = QtGui.QStackedWidget(self)
        self.stackedWidget.addWidget(self.accountsView)
        self.stackedWidget.addWidget(self.dropLogView)
        self.setCentralWidget(self.stackedWidget)

        # Connect signals used for passing account information between views
        QtCore.QObject.connect(
            self.accountsView,
            QtCore.SIGNAL('returnedSelectedAccounts(PyQt_PyObject)'),
            self.dropLogView.setSelectedAccounts)
        QtCore.QObject.connect(self.dropLogView,
                               QtCore.SIGNAL('retrieveSelectedAccounts'),
                               self.accountsView.returnSelectedAccounts)
        QtCore.QObject.connect(self.accountsView,
                               QtCore.SIGNAL('startDropLog(PyQt_PyObject)'),
                               self.dropLogView.addAccount)
        QtCore.QObject.connect(self.accountsView,
                               QtCore.SIGNAL('stopDropLog(PyQt_PyObject)'),
                               self.dropLogView.removeAccount)

        self.changeView()

        self.dropLogView.toggleItemValues()

    # Override right click context menu to display nothing
    def createPopupMenu(self):
        pass

    def closeEvent(self, event):
        # Check if close button is clicked
        if self.sender() is None:
            if self.settings.get_option('Settings', 'close_to_tray') == 'True':
                self.hide()
                event.ignore()
            else:
                reply = QtGui.QMessageBox.question(
                    self, 'Quit', 'Are you sure you want to quit?',
                    QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                    QtGui.QMessageBox.No)
                if reply == QtGui.QMessageBox.Yes:
                    self.saveWindowState()
                    # If sandboxie.ini has been modified restore from backup copy
                    if self.sandboxieINIIsModified:
                        Sandboxie.restoreSandboxieINI()
                else:
                    event.ignore()
        else:
            # Close and save window size
            self.saveWindowState()

    def saveWindowState(self):
        # Save main window size on exit
        if self.isMaximized():
            self.settings.set_option('Settings', 'ui_window_size', '(0, 0)')
        else:
            self.settings.set_option(
                'Settings', 'ui_window_size',
                '(%s, %s)' % (self.width(), self.height()))

    def createSystemTray(self):
        self.tray = QtGui.QSystemTrayIcon(
            QtGui.QIcon(returnResourcePath('images/tf2idle.png')), self)
        QtCore.QObject.connect(
            self.tray,
            QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"),
            self.sysTrayIconActivated)

        self.iconMenu = QtGui.QMenu(self)
        openAction = self.iconMenu.addAction('Open')
        QtCore.QObject.connect(openAction, QtCore.SIGNAL('triggered()'),
                               self.show)
        exitAction = self.iconMenu.addAction('Exit')
        QtCore.QObject.connect(exitAction, QtCore.SIGNAL('triggered()'),
                               self.close)
        self.tray.setContextMenu(self.iconMenu)

        self.tray.show()

    def sysTrayIconActivated(self, reason):
        if reason == QtGui.QSystemTrayIcon.DoubleClick:
            self.show()

    def redrawWindowStates(self):
        if self.view == 'log':
            self.drawToolBars()
            self.accountsView.updateWindow()
        elif self.view == 'accounts':
            self.drawToolBars(hideRightToolbar=True)
            self.dropLogView.updateWindow()

    def drawToolBars(self, hideRightToolbar=False):
        for toolbar in self.toolBars:
            toolbar.close()
            del toolbar
        self.toolBars = []

        if not hideRightToolbar:
            # Create vertical toolbar
            self.vtoolBar = QtGui.QToolBar(self)
            self.vtoolBar.setObjectName('vtoolBar')
            self.vtoolBar.setIconSize(QtCore.QSize(40, 40))
            self.vtoolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
            self.vtoolBar.setMovable(False)

        # Create horizontal toolbar
        self.htoolBar = QtGui.QToolBar(self)
        self.htoolBar.setObjectName('htoolBar')
        self.htoolBar.setIconSize(QtCore.QSize(40, 40))
        self.htoolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
        self.htoolBar.setMovable(False)

        # Add toolbars to toolbar list so can be deleted when MainWindow is refreshed
        self.toolBars.append(self.vtoolBar)
        self.toolBars.append(self.htoolBar)

        # Attach toolbars to MainWindow
        if not hideRightToolbar:
            self.addToolBar(QtCore.Qt.RightToolBarArea, self.vtoolBar)
            self.toolBars.append(self.vtoolBar)

        self.addToolBar(QtCore.Qt.BottomToolBarArea, self.htoolBar)
        self.toolBars.append(self.htoolBar)

    def changeView(self):
        if self.view == 'accounts':
            self.drawToolBars()
            self.accountsView.updateWindow()
            self.stackedWidget.setCurrentIndex(0)
            self.view = 'log'
        elif self.view == 'log':
            self.drawToolBars(hideRightToolbar=True)
            self.dropLogView.updateWindow()
            self.stackedWidget.setCurrentIndex(1)
            self.view = 'accounts'

    def sandboxieINIHasBeenModified(self):
        self.sandboxieINIIsModified = True

    def addMenu(self, menuname):
        self.menu = QtGui.QMenu(self.menuBar)
        self.menu.setObjectName('menu' + menuname)
        self.menu.setTitle(menuname)
        self.menuBar.addAction(self.menu.menuAction())
        return self.menu

    def addSubMenu(self,
                   menu,
                   shortcut=None,
                   text=None,
                   tooltip=None,
                   action=None,
                   iconimage=None):
        self.action = QtGui.QAction(self)
        if shortcut:
            self.action.setShortcut(shortcut)
        menu.addAction(self.action)
        if action:
            QtCore.QObject.connect(self.action,
                                   QtCore.SIGNAL(action['trigger']),
                                   action['action'])
        if text:
            self.action.setText(text)
        if tooltip:
            self.action.setToolTip(tooltip)
        if iconimage:
            icon = QtGui.QIcon(iconimage)
            self.action.setIcon(icon)

    def openSettings(self):
        dialogWindow = SettingsDialog()
        QtCore.QObject.connect(dialogWindow, QtCore.SIGNAL('web_view_status'),
                               self.dropLogView.changeWebServerStatus)
        QtCore.QObject.connect(dialogWindow,
                               QtCore.SIGNAL('toggle_sys_tray_notification'),
                               self.dropLogView.toggleSysTrayNotifications)
        QtCore.QObject.connect(dialogWindow,
                               QtCore.SIGNAL('toggle_item_values_display'),
                               self.dropLogView.toggleItemValues)
        dialogWindow.setModal(True)
        dialogWindow.exec_()
        self.accountsView.updateAccountBoxes()
        self.dropLogView.updateLogDisplay()

    def openGithub(self):
        webbrowser.open('http://github.com/Moussekateer/TF2IdleGUI')

    def openFacepunch(self):
        webbrowser.open('http://www.facepunch.com/threads/1250564')

    def openSteamGroup(self):
        webbrowser.open('http://steamcommunity.com/groups/tf2idletool')

    def openSteamSite(self):
        webbrowser.open('http://steampowered.com')

    def openFeedback(self):
        webbrowser.open('https://tf2idle.uservoice.com')

    def checkForUpdate(self):
        self.updateCheckThread = UpdateCheckThread()
        QtCore.QObject.connect(self.updateCheckThread,
                               QtCore.SIGNAL('recievedVersion'),
                               self.updateDialog)
        self.updateCheckThread.start()

    def updateDialog(self, currentversion):
        if currentversion is None:
            QtGui.QMessageBox.warning(
                self, 'Error',
                'Could not retrieve the current version number, check your connection.'
            )
        else:
            currentversionlist = currentversion.split('.')
            version = Version.version.split('.')
            update = False
            index = 0
            for n in currentversionlist:
                if int(n) > int(version[index]):
                    update = True
                    break
                elif int(n) < int(version[index]):
                    break
                index += 1

            updateMessageDialog = QtGui.QDialog(self)
            vBoxLayout = QtGui.QVBoxLayout(updateMessageDialog)

            textLabel = QtGui.QLabel(updateMessageDialog)
            textLabel.setTextFormat(QtCore.Qt.RichText)
            textLabel.setOpenExternalLinks(True)
            textLabel.setAlignment(QtCore.Qt.AlignHCenter
                                   | QtCore.Qt.AlignVCenter)
            vBoxLayout.addWidget(textLabel)

            buttonBox = QtGui.QDialogButtonBox(updateMessageDialog)
            buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
            buttonBox.setCenterButtons(True)
            QtCore.QObject.connect(buttonBox, QtCore.SIGNAL('accepted()'),
                                   updateMessageDialog.accept)
            vBoxLayout.addWidget(buttonBox)

            if update:
                updateMessageDialog.setWindowTitle('New update')
                textLabel.setText("""<b>New update available!</b>
									 <br/><br/>Your version: <b>v%s</b>
									 <br/><br/>Current version: <b>v%s</b>
									 <br/><br/><a href="http://github.com/Moussekateer/TF2IdleGUI">Read the latest changes</a>.
									 <br/><br/><a href="http://code.google.com/p/tf2idle/downloads/list">Download the newest version</a>.<br/><br/>"""
                                  % (Version.version, currentversion))
            else:
                updateMessageDialog.setWindowTitle('No update')
                textLabel.setText("""You have the latest version.
									 <br/><br/>Your version: <b>v%s</b>
									 <br/><br/>Current version: <b>v%s</b><br/><br/>""" %
                                  (Version.version, currentversion))

            updateMessageDialog.show()

    def showAbout(self):
        about = AboutDialog(self)
        about.exec_()
Example #4
0
class MainWindow(QtGui.QMainWindow):
	def __init__(self):
		QtGui.QMainWindow.__init__(self)
		self.settings = Config.settings
		self.toolBars = []
		self.sandboxieINIIsModified = False
		self.view = 'accounts'

		self.setWindowTitle('TF2Idle')
		windowXSize, windowYSize = eval(self.settings.get_option('Settings', 'ui_window_size'))
		if (windowXSize, windowYSize) == (0, 0):
			self.setWindowState(QtCore.Qt.WindowMaximized)
		else:
			self.resize(windowXSize, windowYSize)
		self.setWindowIcon(QtGui.QIcon(returnResourcePath('images/tf2idle.png')))

		self.createSystemTray()

		self.drawToolBars()
		
		# Add menu bar
		self.menuBar = QtGui.QMenuBar(self)
		self.menuBar.setObjectName('menubar')
		self.setMenuBar(self.menuBar)
		
		# Add File menu
		fileMenu = self.addMenu('File')
		self.addSubMenu(fileMenu, text='Settings', shortcut='Ctrl+S', action={'trigger':'triggered()', 'action':self.openSettings}, iconimage=returnResourcePath('images/settings_logo.png'))
		fileMenu.addSeparator()
		self.addSubMenu(fileMenu, text='Exit', shortcut='Ctrl+Q', action={'trigger':'triggered()', 'action':self.close}, iconimage=returnResourcePath('images/exit_logo.png'))

		# Add About menu
		helpMenu = self.addMenu('Help')
		self.addSubMenu(helpMenu, text='Readme / Source', action={'trigger':'triggered()', 'action':self.openGithub}, iconimage=returnResourcePath('images/readme_logo.png'))
		self.addSubMenu(helpMenu, text='Facepunch thread', action={'trigger':'triggered()', 'action':self.openFacepunch}, iconimage=returnResourcePath('images/facepunch_logo.png'))
		self.addSubMenu(helpMenu, text='Steam group', action={'trigger':'triggered()', 'action':self.openSteamGroup}, iconimage=returnResourcePath('images/steam_group_logo.png'))
		self.addSubMenu(helpMenu, text='Check for update', action={'trigger':'triggered()', 'action':self.checkForUpdate}, iconimage=returnResourcePath('images/update_logo.png'))
		self.addSubMenu(helpMenu, text='Bugs/Features/Feedback', action={'trigger':'triggered()', 'action':self.openFeedback}, iconimage=returnResourcePath('images/uservoice.png'))
		self.addSubMenu(helpMenu, text='About', action={'trigger':'triggered()', 'action':self.showAbout}, iconimage=returnResourcePath('images/tf2idle.png'))

		# Add Steam menu
		steamMenu = self.addMenu('Powered by Steam')
		self.addSubMenu(steamMenu, text='Steam website', action={'trigger':'triggered()', 'action':self.openSteamSite}, iconimage=returnResourcePath('images/steam_logo.png'))
		
		# Set starting view as accounts page
		self.accountsView = AccountsView(self)
		self.dropLogView = DropLogView(self, self.tray)
		
		self.stackedWidget = QtGui.QStackedWidget(self)
		self.stackedWidget.addWidget(self.accountsView)
		self.stackedWidget.addWidget(self.dropLogView)
		self.setCentralWidget(self.stackedWidget)
		
		# Connect signals used for passing account information between views
		QtCore.QObject.connect(self.accountsView, QtCore.SIGNAL('returnedSelectedAccounts(PyQt_PyObject)'), self.dropLogView.setSelectedAccounts)
		QtCore.QObject.connect(self.dropLogView, QtCore.SIGNAL('retrieveSelectedAccounts'), self.accountsView.returnSelectedAccounts)
		QtCore.QObject.connect(self.accountsView, QtCore.SIGNAL('startDropLog(PyQt_PyObject)'), self.dropLogView.addAccount)
		QtCore.QObject.connect(self.accountsView, QtCore.SIGNAL('stopDropLog(PyQt_PyObject)'), self.dropLogView.removeAccount)

		self.changeView()

		self.dropLogView.toggleItemValues()
	
	# Override right click context menu to display nothing
	def createPopupMenu(self):
		pass

	def closeEvent(self, event):
		# Check if close button is clicked
		if self.sender() is None:
			if self.settings.get_option('Settings', 'close_to_tray') == 'True':
				self.hide()
				event.ignore()
			else:
				reply = QtGui.QMessageBox.question(self, 'Quit', 'Are you sure you want to quit?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
				if reply == QtGui.QMessageBox.Yes:
					self.saveWindowState()
					# If sandboxie.ini has been modified restore from backup copy
					if self.sandboxieINIIsModified:
						Sandboxie.restoreSandboxieINI()
				else:
					event.ignore()
		else:
			# Close and save window size
			self.saveWindowState()

	def saveWindowState(self):
		# Save main window size on exit
		if self.isMaximized():
			self.settings.set_option('Settings', 'ui_window_size', '(0, 0)')
		else:
			self.settings.set_option('Settings', 'ui_window_size', '(%s, %s)' % (self.width(), self.height()))

	def createSystemTray(self):
		self.tray = QtGui.QSystemTrayIcon(QtGui.QIcon(returnResourcePath('images/tf2idle.png')), self)
		QtCore.QObject.connect(self.tray, QtCore.SIGNAL("activated(QSystemTrayIcon::ActivationReason)"), self.sysTrayIconActivated)

		self.iconMenu = QtGui.QMenu(self)
		openAction = self.iconMenu.addAction('Open')
		QtCore.QObject.connect(openAction, QtCore.SIGNAL('triggered()'), self.show)
		exitAction = self.iconMenu.addAction('Exit')
		QtCore.QObject.connect(exitAction, QtCore.SIGNAL('triggered()'), self.close)
		self.tray.setContextMenu(self.iconMenu)

		self.tray.show()

	def sysTrayIconActivated(self, reason):
		if reason == QtGui.QSystemTrayIcon.DoubleClick:
			self.show()

	def redrawWindowStates(self):
		if self.view == 'log':
			self.drawToolBars()
			self.accountsView.updateWindow()
		elif self.view == 'accounts':
			self.drawToolBars(hideRightToolbar=True)
			self.dropLogView.updateWindow()

	def drawToolBars(self, hideRightToolbar=False):
		for toolbar in self.toolBars:
			toolbar.close()
			del toolbar
		self.toolBars = []
	
		if not hideRightToolbar:
			# Create vertical toolbar
			self.vtoolBar = QtGui.QToolBar(self)
			self.vtoolBar.setObjectName('vtoolBar')
			self.vtoolBar.setIconSize(QtCore.QSize(40, 40))
			self.vtoolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
			self.vtoolBar.setMovable(False)
		
		# Create horizontal toolbar
		self.htoolBar = QtGui.QToolBar(self)
		self.htoolBar.setObjectName('htoolBar')
		self.htoolBar.setIconSize(QtCore.QSize(40, 40))
		self.htoolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
		self.htoolBar.setMovable(False)
		
		# Add toolbars to toolbar list so can be deleted when MainWindow is refreshed
		self.toolBars.append(self.vtoolBar)
		self.toolBars.append(self.htoolBar)
		
		# Attach toolbars to MainWindow
		if not hideRightToolbar:
			self.addToolBar(QtCore.Qt.RightToolBarArea, self.vtoolBar)
			self.toolBars.append(self.vtoolBar)

		self.addToolBar(QtCore.Qt.BottomToolBarArea, self.htoolBar)
		self.toolBars.append(self.htoolBar)
	
	def changeView(self):
		if self.view == 'accounts':
			self.drawToolBars()
			self.accountsView.updateWindow()
			self.stackedWidget.setCurrentIndex(0)
			self.view = 'log'
		elif self.view == 'log':
			self.drawToolBars(hideRightToolbar=True)
			self.dropLogView.updateWindow()
			self.stackedWidget.setCurrentIndex(1)
			self.view = 'accounts'
	
	def sandboxieINIHasBeenModified(self):
		self.sandboxieINIIsModified = True

	def addMenu(self, menuname):
		self.menu = QtGui.QMenu(self.menuBar)
		self.menu.setObjectName('menu' + menuname)
		self.menu.setTitle(menuname)
		self.menuBar.addAction(self.menu.menuAction())
		return self.menu
	
	def addSubMenu(self, menu, shortcut=None, text=None, tooltip=None, action=None, iconimage=None):
		self.action = QtGui.QAction(self)
		if shortcut:
			self.action.setShortcut(shortcut)
		menu.addAction(self.action)
		if action:
			QtCore.QObject.connect(self.action, QtCore.SIGNAL(action['trigger']), action['action'])
		if text:
			self.action.setText(text)
		if tooltip:
			self.action.setToolTip(tooltip)
		if iconimage:
			icon = QtGui.QIcon(iconimage)
			self.action.setIcon(icon)
	
	def openSettings(self):
		dialogWindow = SettingsDialog()
		QtCore.QObject.connect(dialogWindow, QtCore.SIGNAL('web_view_status'), self.dropLogView.changeWebServerStatus)
		QtCore.QObject.connect(dialogWindow, QtCore.SIGNAL('toggle_sys_tray_notification'), self.dropLogView.toggleSysTrayNotifications)
		QtCore.QObject.connect(dialogWindow, QtCore.SIGNAL('toggle_item_values_display'), self.dropLogView.toggleItemValues)
		dialogWindow.setModal(True)
		dialogWindow.exec_()
		self.accountsView.updateAccountBoxes()
		self.dropLogView.updateLogDisplay()

	def openGithub(self):
		webbrowser.open('http://github.com/Moussekateer/TF2IdleGUI')

	def openFacepunch(self):
		webbrowser.open('http://www.facepunch.com/threads/1250564')

	def openSteamGroup(self):
		webbrowser.open('http://steamcommunity.com/groups/tf2idletool')

	def openSteamSite(self):
		webbrowser.open('http://steampowered.com')

	def openFeedback(self):
		webbrowser.open('https://tf2idle.uservoice.com')

	def checkForUpdate(self):
		self.updateCheckThread = UpdateCheckThread()
		QtCore.QObject.connect(self.updateCheckThread, QtCore.SIGNAL('recievedVersion'), self.updateDialog)
		self.updateCheckThread.start()
	
	def updateDialog(self, currentversion):
		if currentversion is None:
			QtGui.QMessageBox.warning(self, 'Error', 'Could not retrieve the current version number, check your connection.')
		else:
			currentversionlist = currentversion.split('.')
			version = Version.version.split('.')
			update = False
			index = 0
			for n in currentversionlist:
				if int(n) > int(version[index]):
					update = True
					break
				elif int(n) < int(version[index]):
					break
				index += 1
			
			updateMessageDialog = QtGui.QDialog(self)
			vBoxLayout = QtGui.QVBoxLayout(updateMessageDialog)

			textLabel = QtGui.QLabel(updateMessageDialog)
			textLabel.setTextFormat(QtCore.Qt.RichText)
			textLabel.setOpenExternalLinks(True)
			textLabel.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)
			vBoxLayout.addWidget(textLabel)
				
			buttonBox = QtGui.QDialogButtonBox(updateMessageDialog)
			buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
			buttonBox.setCenterButtons(True)
			QtCore.QObject.connect(buttonBox, QtCore.SIGNAL('accepted()'), updateMessageDialog.accept)
			vBoxLayout.addWidget(buttonBox)

			if update:
				updateMessageDialog.setWindowTitle('New update')
				textLabel.setText("""<b>New update available!</b>
									 <br/><br/>Your version: <b>v%s</b>
									 <br/><br/>Current version: <b>v%s</b>
									 <br/><br/><a href="http://github.com/Moussekateer/TF2IdleGUI">Read the latest changes</a>.
									 <br/><br/><a href="http://code.google.com/p/tf2idle/downloads/list">Download the newest version</a>.<br/><br/>"""
									 % (Version.version, currentversion))
			else:
				updateMessageDialog.setWindowTitle('No update')
				textLabel.setText("""You have the latest version.
									 <br/><br/>Your version: <b>v%s</b>
									 <br/><br/>Current version: <b>v%s</b><br/><br/>"""
									 % (Version.version, currentversion))

			updateMessageDialog.show()

	def showAbout(self):
		about = AboutDialog(self)
		about.exec_()