class MainWindow(QtGui.QMainWindow): def __init__(self): QtGui.QMainWindow.__init__(self) self.setWindowIcon(QtGui.QIcon(resource_path('data/icon.ico'))); self.resize(Config.getint('window_width'), Config.getint('window_height')) if Config.getboolean("window_maximized"): self.setWindowState(QtCore.Qt.WindowMaximized) self.setMinimumSize(300, 200) self.setWindowTitle(u'H**o Monitor') self.web_view = QWebView() self.web_view.setZoomFactor(Config.getfloat('zoom')) self.setCentralWidget(self.web_view) self.web_view.loadFinished.connect(self._load_finished) self.web_view.loadStarted.connect(self._load_started) self.web_view.titleChanged.connect(self._title_changed) # create progress bar self.loading = QtGui.QLabel() self.loading.setMinimumSize(32, 8) self.loading.hide() movie = QtGui.QMovie(resource_path("data/loading.gif")) self.loading.setMovie(movie) movie.start() self.statusBar().addPermanentWidget(self.loading) # Reload reload = QtGui.QAction(QtGui.QIcon(resource_path('data/reload.png')), 'Reload', self) reload.setShortcut('F5') reload.setStatusTip('Reload') self.connect(reload, QtCore.SIGNAL('triggered()'), self.reload) # Open in Browser browser = QtGui.QAction(QtGui.QIcon(resource_path('data/browser.png')), 'Open in Browser', self) browser.setShortcut('F9') browser.setStatusTip('Open in Browser') self.connect(browser, QtCore.SIGNAL('triggered()'), self.browser) # Exit exit = QtGui.QAction(QtGui.QIcon(resource_path('data/exit.png')), 'Exit', self) exit.setShortcut('Esc') exit.setStatusTip('Exit application') self.connect(exit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()')) # Zoom Plus + zoomPlus = QtGui.QAction(QtGui.QIcon(resource_path('data/zoom_plus.png')), 'Zoom In', self) zoomPlus.setShortcut('Ctrl+=') zoomPlus.setStatusTip('Zoom In') self.connect(zoomPlus, QtCore.SIGNAL('triggered()'), self.zoomPlus) # Zoom Minus - zoomMinus = QtGui.QAction(QtGui.QIcon(resource_path('data/zoom_minus.png')), 'Zoom Out', self) zoomMinus.setShortcut('Ctrl+-') zoomMinus.setStatusTip('Zoom Out') self.connect(zoomMinus, QtCore.SIGNAL('triggered()'), self.zoomMinus) # Zoom Reset 0 zoomReset = QtGui.QAction(QtGui.QIcon(resource_path('data/zoom_reset.png')), 'Reset zoom', self) zoomReset.setShortcut('Ctrl+0') zoomReset.setStatusTip('Reset zoom') self.connect(zoomReset, QtCore.SIGNAL('triggered()'), self.zoomReset) # Toolbar self.toolbar = self.addToolBar('Toolbar') #self.toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.edit = QtGui.QLineEdit() self.edit.setText(Config.get('hosts').decode('utf8')) self.edit.setPlaceholderText("Enter miner IP-addresses... (Comma separated)") self.edit.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.edit.setFont(QtGui.QFont("Arial", 14)) self.toolbar.addWidget(self.edit) self.toolbar.addAction(reload) spacer = QtGui.QLabel() spacer.setMinimumSize(100,10) #spacer.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.toolbar.addWidget(spacer) self.toolbar.addAction(zoomMinus) self.toolbar.addAction(zoomReset) self.toolbar.addAction(zoomPlus) self.toolbar.addSeparator() self.toolbar.addAction(browser) # Menu File file = self.menuBar().addMenu('&File') file.addAction(reload) file.addAction(browser) file.addSeparator() file.addAction(exit) # Menu View view = self.menuBar().addMenu('&View') view.addAction(zoomPlus) view.addAction(zoomMinus) view.addSeparator() view.addAction(zoomReset) # Menu Settings settings = self.menuBar().addMenu('&Settings') ag = QtGui.QActionGroup(self, exclusive=True) act = ag.addAction(QtGui.QAction('Auto refresh every 5 sec', self, checkable=True, checked=(Config.getint("auto_refresh") == 5))) settings.addAction(act) self.connect(act, QtCore.SIGNAL('triggered()'), self.setAutoRefresh5) act = ag.addAction(QtGui.QAction('Auto refresh every 10 sec', self, checkable=True, checked=(Config.getint("auto_refresh") == 10))) settings.addAction(act) self.connect(act, QtCore.SIGNAL('triggered()'), self.setAutoRefresh10) act = ag.addAction(QtGui.QAction('Auto refresh every 20 sec', self, checkable=True, checked=(Config.getint("auto_refresh") == 20))) settings.addAction(act) self.connect(act, QtCore.SIGNAL('triggered()'), self.setAutoRefresh20) settings.addSeparator(); # Options Dialog oDialog = QtGui.QAction(QtGui.QIcon(resource_path('data/options.png')), 'Options...', self) oDialog.setShortcut('F10') oDialog.setStatusTip('Options dialog') self.connect(oDialog, QtCore.SIGNAL('triggered()'), self.optionsDialog) settings.addAction(oDialog) # Menu Help helpMenu = self.menuBar().addMenu('&Help') # About about = QtGui.QAction(QtGui.QIcon(resource_path('data/info.png')), '&About H**o Monitor', self) about.setStatusTip('Show an about box for H**o Monitor') self.connect(about, QtCore.SIGNAL('triggered()'), self.about) helpMenu.addAction(about) # About Qt actionAboutQt = QtGui.QAction("About &Qt", self) actionAboutQt.setStatusTip("Show an about box for Qt.") self.connect(actionAboutQt, QtCore.SIGNAL("triggered()"), self.aboutQt) helpMenu.addAction(actionAboutQt) StartServer() def _load_started(self): self.loading.show() def _load_finished(self): self.loading.hide() def _title_changed(self): if len(self.sender().title()) > 0: self.setWindowTitle(self.sender().title() + u' - H**o Monitor') def closeEvent(self, event): """ reply = QtGui.QMessageBox.question(self, 'Message', "Are you sure to quit?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: server.socket.close() event.accept() else: event.ignore() """ server.socket.close() Config.set("window_maximized", int(self.windowState() == QtCore.Qt.WindowMaximized)) def resizeEvent(self,resizeEvent): if self.windowState() == QtCore.Qt.WindowMaximized: return Config.set("window_width", self.width()) Config.set("window_height", self.height()) def reload(self): Config.set("hosts", unicode(self.edit.text()), utf8 = True) self.web_view.reload() def browser(self): webbrowser.open("http://localhost:%d" % PORT_NUMBER) def zoomPlus(self): self.web_view.setZoomFactor(self.web_view.zoomFactor() + 0.1) Config.set('zoom', round(self.web_view.zoomFactor(), 2)) def zoomMinus(self): self.web_view.setZoomFactor(self.web_view.zoomFactor() - 0.1) Config.set('zoom', round(self.web_view.zoomFaBctor(), 2)) def zoomReset(self): self.web_view.setZoomFactor(1) Config.set('zoom', round(self.web_view.zoomFactor(), 2)) def setAutoRefresh5(self): Config.set('auto_refresh', '5') self.web_view.reload() def setAutoRefresh10(self): Config.set('auto_refresh', '10') self.web_view.reload() def setAutoRefresh20(self): Config.set('auto_refresh', '20') self.web_view.reload() def optionsDialog(self): dialog = OptionsDialog() dialog.exec_() def aboutQt(self): QtGui.QMessageBox.aboutQt(self) def about(self): dialog = AboutDialog() dialog.exec_()