def setupUi(self): #self.setFixedSize(800, 500) vbox = QVBoxLayout() self.setLayout(vbox) label = self.label = QLabel() sp = QSizePolicy() sp.setVerticalStretch(0) label.setSizePolicy(sp) vbox.addWidget(label) view = self.view = QtWebEngineWidgets.QWebView() cache = QtNetwork.QNetworkDiskCache() cache.setCacheDirectory("cache") view.page().networkAccessManager().setCache(cache) view.page().networkAccessManager() view.page().mainFrame().addToJavaScriptWindowObject("MainWindow", self) view.page().setLinkDelegationPolicy( QtWebEngineWidgets.QWebPage.DelegateAllLinks) view.load(QtCore.QUrl('map.html')) view.loadFinished.connect(self.onLoadFinished) view.linkClicked.connect(QDesktopServices.openUrl) vbox.addWidget(view) button = QPushButton('Go to Paris') panToParis = functools.partial(self.panMap, 2.3272, 48.8620) button.clicked.connect(panToParis) vbox.addWidget(button)
def __init__(self, parent=None): super(Main_widget, self).__init__(parent) self.sdsready = False self.ecunamemap = {} self.plugins = {} self.setWindowTitle(_("DDT4All")) self.ecu_scan = ecu.Ecu_scanner() self.ecu_scan.qapp = app options.ecu_scanner = self.ecu_scan print("%i " + _("loaded ECUs in database.")) % self.ecu_scan.getNumEcuDb() if self.ecu_scan.getNumEcuDb() == 0: msgbox = gui.QMessageBox() msgbox.setIcon(gui.QMessageBox.Warning) msgbox.setText("No database found") msgbox.setInformativeText("Check documentation") msgbox.exec_() self.paramview = None if platform.system() == 'Darwin': self.docview = webkitwidgets.QWebEngineView() self.docview.load( core.QUrl("https://github.com/cedricp/ddt4all/wiki")) self.docview.settings().setAttribute( webkitwidgets.QWebEngineSettings.JavascriptEnabled, True) self.docview.settings().setAttribute( webkitwidgets.QWebEngineSettings.PluginsEnabled, True) self.docview.settings().setAttribute( webkitwidgets.QWebEngineSettings.AutoLoadImages, True) else: self.docview = webkitwidgets.QWebView() self.docview.load( core.QUrl("https://github.com/cedricp/ddt4all/wiki")) self.docview.settings().setAttribute( webkit.QWebSettings.JavascriptEnabled, True) self.docview.settings().setAttribute( webkit.QWebSettings.PluginsEnabled, True) self.docview.settings().setAttribute( webkit.QWebSettings.AutoLoadImages, True) self.screennames = [] self.statusBar = widgets.QStatusBar() self.setStatusBar(self.statusBar) self.connectedstatus = widgets.QLabel() self.connectedstatus.setAlignment(core.Qt.AlignHCenter | core.Qt.AlignVCenter) self.protocolstatus = widgets.QLabel() self.progressstatus = widgets.QProgressBar() self.infostatus = widgets.QLabel() self.connectedstatus.setFixedWidth(100) self.protocolstatus.setFixedWidth(200) self.progressstatus.setFixedWidth(150) self.infostatus.setFixedWidth(200) self.refreshtimebox = widgets.QSpinBox() self.refreshtimebox.setRange(100, 2000) self.refreshtimebox.setSingleStep(100) self.refreshtimebox.valueChanged.connect(self.changeRefreshTime) refrestimelabel = widgets.QLabel(_("Refresh rate (ms):")) self.cantimeout = widgets.QSpinBox() self.cantimeout.setRange(0, 1000) self.cantimeout.setSingleStep(200) self.cantimeout.setValue(options.cantimeout) self.cantimeout.valueChanged.connect(self.changeCanTimeout) cantimeoutlabel = widgets.QLabel(_("Can timeout (ms) [0:AUTO] :")) self.statusBar.addWidget(self.connectedstatus) self.statusBar.addWidget(self.protocolstatus) self.statusBar.addWidget(self.progressstatus) self.statusBar.addWidget(refrestimelabel) self.statusBar.addWidget(self.refreshtimebox) self.statusBar.addWidget(cantimeoutlabel) self.statusBar.addWidget(self.cantimeout) self.statusBar.addWidget(self.infostatus) self.tabbedview = widgets.QTabWidget() self.setCentralWidget(self.tabbedview) self.scrollview = widgets.QScrollArea() self.scrollview.setWidgetResizable(False) self.snifferview = sniffer.sniffer() self.tabbedview.addTab(self.docview, _("Documentation")) self.tabbedview.addTab(self.scrollview, _("Screen")) self.tabbedview.addTab(self.snifferview, _("CAN Sniffer")) if options.simulation_mode: self.buttonEditor = dataeditor.buttonEditor() self.requesteditor = dataeditor.requestEditor() self.dataitemeditor = dataeditor.dataEditor() self.ecuparameditor = dataeditor.ecuParamEditor() self.tabbedview.addTab(self.requesteditor, _("Requests")) self.tabbedview.addTab(self.dataitemeditor, _("Data")) self.tabbedview.addTab(self.buttonEditor, _("Buttons")) self.tabbedview.addTab(self.ecuparameditor, _("Ecu parameters")) screen_widget = widgets.QWidget() self.treedock_widget = widgets.QDockWidget(self) self.treedock_widget.setWidget(screen_widget) self.treeview_params = widgets.QTreeWidget() self.treeview_params.setSortingEnabled(True) self.treeview_params.sortByColumn(0, core.Qt.AscendingOrder) self.screenmenu = widgets.QMenuBar() treedock_layout = widgets.QVBoxLayout() treedock_layout.addWidget(self.screenmenu) treedock_layout.addWidget(self.treeview_params) screen_widget.setLayout(treedock_layout) self.treeview_params.setHeaderLabels([_("Screens")]) self.treeview_params.clicked.connect(self.changeScreen) actionmenu = self.screenmenu.addMenu(_("Action")) cat_action = widgets.QAction(_("New Category"), actionmenu) screen_action = widgets.QAction(_("New Screen"), actionmenu) rename_action = widgets.QAction(_("Rename"), actionmenu) actionmenu.addAction(cat_action) actionmenu.addAction(screen_action) actionmenu.addAction(rename_action) cat_action.triggered.connect(self.newCategory) screen_action.triggered.connect(self.newScreen) rename_action.triggered.connect(self.screenRename) self.treedock_logs = widgets.QDockWidget(self) self.logview = widgets.QTextEdit() self.logview.setReadOnly(True) self.treedock_logs.setWidget(self.logview) self.treedock_ecu = widgets.QDockWidget(self) self.treeview_ecu = widgets.QListWidget(self.treedock_ecu) self.treedock_ecu.setWidget(self.treeview_ecu) self.treeview_ecu.clicked.connect(self.changeECU) self.eculistwidget = Ecu_list(self.ecu_scan, self.treeview_ecu) self.treeview_eculist = widgets.QDockWidget(self) self.treeview_eculist.setWidget(self.eculistwidget) self.addDockWidget(core.Qt.LeftDockWidgetArea, self.treeview_eculist) self.addDockWidget(core.Qt.LeftDockWidgetArea, self.treedock_ecu) self.addDockWidget(core.Qt.LeftDockWidgetArea, self.treedock_widget) self.addDockWidget(core.Qt.BottomDockWidgetArea, self.treedock_logs) self.toolbar = self.addToolBar(_("File")) self.diagaction = widgets.QAction(gui.QIcon("icons/dtc.png"), _("Read DTC"), self) self.diagaction.triggered.connect(self.readDtc) self.diagaction.setEnabled(False) self.log = widgets.QAction(gui.QIcon("icons/log.png"), _("Full log"), self) self.log.setCheckable(True) self.log.setChecked(options.log_all) self.log.triggered.connect(self.changeLogMode) self.expert = widgets.QAction(gui.QIcon("icons/expert.png"), _("Expert mode (enable writing)"), self) self.expert.setCheckable(True) self.expert.setChecked(options.promode) self.expert.triggered.connect(self.changeUserMode) self.autorefresh = widgets.QAction(gui.QIcon("icons/autorefresh.png"), _("Auto refresh"), self) self.autorefresh.setCheckable(True) self.autorefresh.setChecked(options.auto_refresh) self.autorefresh.triggered.connect(self.changeAutorefresh) self.refresh = widgets.QAction(gui.QIcon("icons/refresh.png"), _("Refresh (one shot)"), self) self.refresh.triggered.connect(self.refreshParams) self.refresh.setEnabled(not options.auto_refresh) self.hexinput = widgets.QAction(gui.QIcon("icons/hex.png"), _("Manual command"), self) self.hexinput.triggered.connect(self.hexeditor) self.hexinput.setEnabled(False) self.sdscombo = widgets.QComboBox() self.sdscombo.setFixedWidth(300) self.sdscombo.currentIndexChanged.connect(self.changeSds) self.sdscombo.setEnabled(False) self.zoominbutton = widgets.QPushButton(_("Zoom In")) self.zoomoutbutton = widgets.QPushButton(_("Zoom Out")) self.zoominbutton.clicked.connect(self.zoomin) self.zoomoutbutton.clicked.connect(self.zoomout) self.toolbar.addSeparator() self.toolbar.addAction(self.log) self.toolbar.addAction(self.expert) self.toolbar.addSeparator() self.toolbar.addAction(self.autorefresh) self.toolbar.addAction(self.refresh) self.toolbar.addSeparator() self.toolbar.addAction(self.diagaction) self.toolbar.addSeparator() self.toolbar.addAction(self.hexinput) self.toolbar.addSeparator() self.toolbar.addWidget(self.sdscombo) self.toolbar.addSeparator() self.toolbar.addWidget(self.zoominbutton) self.toolbar.addWidget(self.zoomoutbutton) if options.simulation_mode: self.toolbar.addSeparator() self.ui_edit_button = widgets.QPushButton(_("UI Edit")) self.ui_edit_button.setCheckable(True) self.toolbar.addSeparator() self.toolbar.addWidget(self.ui_edit_button) self.ui_edit_button.clicked.connect(self.toggle_edit) vehicle_dir = "vehicles" if not os.path.exists(vehicle_dir): os.mkdir(vehicle_dir) ecu_files = [] for filename in os.listdir(vehicle_dir): basename, ext = os.path.splitext(filename) if ext == '.ecu': ecu_files.append(basename) menu = self.menuBar() diagmenu = menu.addMenu(_("File")) xmlopenaction = diagmenu.addAction(_("Open XML")) newecuction = diagmenu.addAction(_("Create New ECU")) saveecuaction = diagmenu.addAction(_("Save current ECU")) diagmenu.addSeparator() savevehicleaction = diagmenu.addAction(_("Save ECU list")) savevehicleaction.triggered.connect(self.saveEcus) saveecuaction.triggered.connect(self.saveEcu) newecuction.triggered.connect(self.newEcu) xmlopenaction.triggered.connect(self.openxml) diagmenu.addSeparator() zipdbaction = diagmenu.addAction(_("Zip database")) zipdbaction.triggered.connect(self.zipdb) diagmenu.addSeparator() for ecuf in ecu_files: ecuaction = diagmenu.addAction(ecuf) ecuaction.triggered.connect(lambda state, a=ecuf: self.loadEcu(a)) plugins_menu = menu.addMenu(_("Plugins")) category_menus = {} plugins = glob.glob("./ddtplugins/*.py") for plugin in plugins: try: modulename = os.path.basename(plugin).replace(".py", "") plug = imp.load_source(modulename, plugin) category = plug.category name = plug.plugin_name need_hw = plug.need_hw #if options.simulation_mode and need_hw: # continue if not category in category_menus: category_menus[category] = plugins_menu.addMenu(category) plug_action = category_menus[category].addAction(name) plug_action.triggered.connect( lambda state, a=plug.plugin_entry: self.launchPlugin(a)) self.plugins[modulename] = plug except Exception as e: print _("Cannot load plugin %s, %s") % (plugin, traceback.format_exc()) self.setConnected(True)