def __init__(self, p: Project) -> None: super(MainWindow, self).__init__() self.project: Project = p self.viewArea = BoardViewWidget(self.project) self.installEventFilter(self.viewArea) self.undo_stack = QtWidgets.QUndoStack() self.undo_stack.indexChanged.connect(self.viewArea.update) self.pcbre_actions = MainWindowActions(self) self.debug_actions = DebugActions(self) self.setCentralWidget(self.viewArea) self.createToolbars() self.createMenubar() self.createDockWidgets() self.setWindowTitle("PCB Reversing Suite") self.current_tool: Optional[BaseTool] = None self.current_controller: Optional[BaseToolController] = None
def __init__(self, p): super(MainWindow, self).__init__() self.project = p self.viewArea = BoardViewWidget(self.project) self.installEventFilter(self.viewArea) self.actions = MainWindowActions(self) self.setCentralWidget(self.viewArea) self.createToolbars() self.createMenubar() self.createDockWidgets() self.setWindowTitle("PCB Reversing Suite") self.current_tool = None self.current_controller = None
def __init__(self, p): super(MainWindow, self).__init__() self.project = p self.viewArea = BoardViewWidget(self.project) self.installEventFilter(self.viewArea) self.setCentralWidget(self.viewArea) self.createActions() self.createToolbars() self.createMenus() self.createDockWidgets() self.setupInvisibleActions() self.setWindowTitle("PCB Reversing Suite") self.current_tool = None self.current_controller = None
class MainWindow(QtWidgets.QMainWindow): # Emitted when something changes the currently selected layer def __init__(self, p: Project) -> None: super(MainWindow, self).__init__() self.project: Project = p self.viewArea = BoardViewWidget(self.project) self.installEventFilter(self.viewArea) self.undo_stack = QtWidgets.QUndoStack() self.undo_stack.indexChanged.connect(self.viewArea.update) self.pcbre_actions = MainWindowActions(self) self.debug_actions = DebugActions(self) self.setCentralWidget(self.viewArea) self.createToolbars() self.createMenubar() self.createDockWidgets() self.setWindowTitle("PCB Reversing Suite") self.current_tool: Optional[BaseTool] = None self.current_controller: Optional[BaseToolController] = None @QtCore.Slot(object) def changeViewLayer(self, layer: Layer) -> None: """Change the selected view layer""" assert layer in self.project.stackup.layers self.viewArea.boardViewState.current_layer = layer def submitCommand(self, cmd: QtWidgets.QUndoCommand) -> None: self.undo_stack.push(cmd) def toolBarChanged(self, bid: int) -> None: self.current_tool = self.tool_map[bid] controller = self.current_tool.getToolController( self.viewArea, self.submitCommand) self.current_controller = controller self.viewArea.setInteractionDelegate(controller) self.viewArea.setFocus() def createToolbars(self) -> None: self.createViewToolbar() self.bg = QtWidgets.QButtonGroup() self.bg.setExclusive(True) self.bg.buttonClicked.connect(self.toolBarChanged) toolbar = self.addToolBar("Tool Selection") self.tool_map: Dict[int, BaseTool] = {} self.current_tool = None for n, tt in enumerate(TOOLS): tool = tt(self.project) toolbutton = tool.getToolButton() self.tool_map[toolbutton] = tool self.bg.addButton(toolbutton) toolbar.addWidget(toolbutton) toolbutton.setCheckable(True) if n == 0: toolbutton.setChecked(True) self.toolBarChanged(toolbutton) def createDockWidgets(self) -> None: # TODO: make this modular, remember view state dock = LayerListWidget(self, self.project, self.viewArea.boardViewState) # dock.hide() self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) self._view_menu.subWindowMenu.addAction(dock.toggleViewAction()) dock = ConsoleWidget(self.project) dock.hide() self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, dock) self._view_menu.subWindowMenu.addAction(dock.toggleViewAction()) dock = UndoDock(self.undo_stack) # dock.hide() self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) self._view_menu.subWindowMenu.addAction(dock.toggleViewAction()) dock = InfoWidget(self.project) dock.hide() self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) self._view_menu.subWindowMenu.addAction(dock.toggleViewAction()) def createViewToolbar(self) -> None: tb = self.addToolBar("View") tb.addAction(self.pcbre_actions.view_flip_x) tb.addAction(self.pcbre_actions.view_flip_y) tb.addAction(self.pcbre_actions.view_rotate_l) tb.addAction(self.pcbre_actions.view_rotate_r) tb.addAction(self.pcbre_actions.view_cycle_draw_order) def closeEvent(self, evt: QtCore.QEvent) -> None: if checkCloseSave(self): evt.accept() else: evt.ignore() def createMenubar(self) -> None: from pcbre.ui.menu.file import FileMenu from pcbre.ui.menu.edit import EditMenu from pcbre.ui.menu.view import ViewMenu from pcbre.ui.menu.pcb import PCBMenu from pcbre.ui.menu.debug import DebugMenu self.menuBar().addMenu(FileMenu(self)) self.menuBar().addMenu(EditMenu(self)) self._view_menu = ViewMenu(self) self.menuBar().addMenu(self._view_menu) self.menuBar().addMenu(PCBMenu(self)) # TODO: Only show menu if started in debug mode self.menuBar().addMenu(DebugMenu(self))
def __init__(self, window: BoardViewWidget) -> None: # File actions self.file_add_image = AddImageDialogAction(window) self.file_save = SaveAction(window) self.file_save_as = SaveAsDialogAction(window) self.file_exit = ExitAction(window) # View actions vs = window.viewArea.viewState self.view_flip_x = FlipXAction(window, vs) self.view_flip_y = FlipYAction(window, vs) self.view_rotate_l = RotateLAction(window, vs) self.view_rotate_r = RotateRAction(window, vs) self.view_cycle_draw_order = CycleDrawOrderAction(window) self.view_zoom_fit = ZoomFitAction( window, vs, window.viewArea.get_visible_point_cloud) self.view_hide_trace_geom = HideDrawnGeometry( window, window.viewArea.boardViewState) self.view_set_mode_trace = SetModeTraceAction( window, window.viewArea.boardViewState) self.view_set_mode_cad = SetModeCADAction( window, window.viewArea.boardViewState) self.undo = window.undo_stack.createUndoAction(window) self.undo.setShortcut(QtGui.QKeySequence.Undo) self.redo = window.undo_stack.createRedoAction(window) self.redo.setShortcut(QtGui.QKeySequence.Redo) # PCB Actions self.pcb_stackup_setup_dialog = StackupSetupDialogAction(window) self.pcb_layer_view_setup_dialog = LayerViewSetupDialogAction(window) self.pcb_rebuild_connectivity = RebuildConnectivityAction(window) # Invisible actions - don't need to save these for i in range(0, 9): window.addAction(LayerJumpAction(window, i)) window.addAction(ShowToolSettingsAction(window)) window.addAction(NudgeUpAction(window)) window.addAction(NudgeDownAction(window)) window.addAction(NudgeLeftAction(window)) window.addAction(NudgeRightAction(window)) window.addAction( CycleModeAction(window, window.viewArea.boardViewState))
class MainWindow(QtGui.QMainWindow): def __init__(self, p): super(MainWindow, self).__init__() self.project = p self.viewArea = BoardViewWidget(self.project) self.installEventFilter(self.viewArea) self.setCentralWidget(self.viewArea) self.createActions() self.createToolbars() self.createMenus() self.createDockWidgets() self.setupInvisibleActions() self.setWindowTitle("PCB Reversing Suite") self.current_tool = None self.current_controller = None def toolBarChanged(self, bid): self.current_tool = self.tool_map[bid] controller = self.current_tool.getToolController(self.viewArea) self.current_controller = controller self.viewArea.setInteractionDelegate(controller) def createToolbars(self): self.createViewToolbar() self.bg = QtGui.QButtonGroup() self.bg.setExclusive(True) self.bg.buttonClicked.connect(self.toolBarChanged) toolbar = self.addToolBar("Tool Selection") self.tool_map = {} self.current_tool = None for n, tt in enumerate(TOOLS): tool = tt(self.project) toolbutton = tool.getToolButton() self.tool_map[toolbutton] = tool self.bg.addButton(toolbutton) toolbar.addWidget(toolbutton) toolbutton.setCheckable(True) if n == 0: toolbutton.setChecked(True) self.toolBarChanged(toolbutton) def createLayerSelectionWidget(self): dock = LayerListWidget(self.project, self.viewArea.viewState) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) dock = InfoWidget(self.project) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) self.subWindowMenu.addAction(dock.toggleViewAction()) def createDockWidgets(self): self.createLayerSelectionWidget() def save(self): self.project.save() def saveAs(self): filename, _ =QtGui.QFileDialog.getSaveFileName(self, "Save project as....", filter="PCBRE Project Files (*.pcbre)") if filename is not None: print("Saving to %s" % filename) self.project.save(filename, update_path=True) def createActions(self): self.exitAct = QtGui.QAction("E&xit", self, shortcut="Ctrl+Q", triggered=self.close) self.saveAction = QtGui.QAction("Save", self, shortcut="Ctrl+S", triggered=self.save) self.saveAsAction = QtGui.QAction("Save-As", self, shortcut="Ctrl+Shift+S", triggered=self.saveAs) self.editStackup = QtGui.QAction("Edit Stackup", self, triggered=self.doStackupSetup) self.rebuildConnectivity = QtGui.QAction("Rebuild Connectivity", self, triggered=self.project.artwork.rebuild_connectivity) self.editLayerViews = QtGui.QAction("Edit Stackup/Imagery pairing", self, triggered=self.doLayerviewSetup) def setupInvisibleActions(self): self.setupLayerSelection() def showToolSettings(): if self.current_controller: self.current_controller.showSettingsDialog() a = QtGui.QAction("raise controls", self, triggered=showToolSettings) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Tab)) self.addAction(a) def nudge(dx, dy): pos = QtGui.QCursor.pos() QtGui.QCursor.setPos(pos.x() + dx, pos.y() + dy) a = QtGui.QAction("nudge left", self, triggered=lambda: nudge(-1, 0)) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Left)) self.addAction(a) a = QtGui.QAction("nudge right", self, triggered=lambda: nudge(1, 0)) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Right)) self.addAction(a) a = QtGui.QAction("nudge up", self, triggered=lambda: nudge(0, -1)) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Up)) self.addAction(a) a = QtGui.QAction("nudge down", self, triggered=lambda: nudge(0, 1)) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Down)) self.addAction(a) def setupLayerSelection(self): def _act(arg): selected_layer = arg - 1 if selected_layer >= len(self.project.stackup.layers): return self.viewArea.viewState.current_layer = self.project.stackup.layers[selected_layer] for i in range(0, 10): # Closure def fn(i): a = QtGui.QAction("layer %d" % i, self, triggered=lambda: _act(i)) a.setShortcut(QtGui.QKeySequence("%d" % i)) self.addAction(a) fn(i) def createViewToolbar(self): flipX = QtGui.QAction("Flip X", self, triggered=lambda: self.viewArea.viewState.flip(0)) flipX.setShortcut(QtGui.QKeySequence("f")) flipY = QtGui.QAction("Flip Y", self, triggered=lambda: self.viewArea.viewState.flip(1)) flipY.setShortcut(QtGui.QKeySequence("shift+f")) def rotater(deg): def _(): self.viewArea.viewState.rotate(deg) return _ self.rotate90L = QtGui.QAction("Rotate 90 (CCW)", self, triggered=rotater(-90)) self.rotate90L.setShortcut(QtGui.QKeySequence("ctlr+shift+r")) self.rotate90R = QtGui.QAction("Rotate 90 (CW)", self, triggered=rotater(90)) self.rotate90R.setShortcut(QtGui.QKeySequence("ctrl+r")) tb = self.addToolBar("View") tb.addAction(flipX) tb.addAction(flipY) tb.addAction(self.rotate90L) tb.addAction(self.rotate90R) self.flipX = flipX self.flipY = flipY def doStackupSetup(self): dlg = pcbre.ui.dialogs.stackupsetup.StackupSetupDialog(self, self.project) dlg.exec_() def doLayerviewSetup(self): dlg = pcbre.ui.dialogs.layerviewsetup.LayerViewSetupDialog(self, self.project) dlg.exec_() def addImage(self): fname, _ = QtGui.QFileDialog.getOpenFileName(self, "Open Image") if not fname: return il = ImageLayer.fromFile(self.project, fname) # Allow the user to align the image dlg = LayerAlignmentDialog(self, self.project, il) res = dlg.exec_() if res == QtGui.QDialog.Accepted: self.project.imagery.add_imagelayer(il) def createMenus(self): fileMenu = QtGui.QMenu("&File", self) subMenuAdd = fileMenu.addMenu("Add") act = QtGui.QAction("Image", self, triggered=self.addImage) subMenuAdd.addAction(act) fileMenu.addSeparator() fileMenu.addAction(self.saveAction) fileMenu.addAction(self.saveAsAction) fileMenu.addSeparator() fileMenu.addAction(self.exitAct) def updateCanSave(): self.saveAction.setEnabled(self.project.can_save) fileMenu.aboutToShow.connect(updateCanSave) helpMenu = QtGui.QMenu("&Help", self) self.viewMenu = QtGui.QMenu("&View", self) self.subWindowMenu = self.viewMenu.addMenu("Sub-Windows") self.viewMenu.addSeparator() self.viewMenu.addAction(self.rotate90L) self.viewMenu.addAction(self.rotate90R) self.viewMenu.addAction(self.flipX) self.viewMenu.addAction(self.flipY) self.viewMenu.addSeparator() self.viewMenu.addAction(self.rotate90L) # Show Imagery Checkbox show_images = QtGui.QAction("Show Imagery", self) def change_show_images(): self.viewArea.viewState.show_images = show_images.isChecked() show_images.setCheckable(True) show_images.setChecked(True) show_images.triggered.connect(change_show_images) self.viewMenu.addAction(show_images) # Show Other Images Checkbox other_layers = QtGui.QAction("Show Other Layers artwork", self) def change_other_layers(): self.viewArea.viewState.draw_other_layers = other_layers.isChecked() other_layers.setCheckable(True) other_layers.setChecked(True) other_layers.triggered.connect(change_other_layers) self.viewMenu.addAction(other_layers) pcbMenu = QtGui.QMenu("&PCB") pcbMenu.addAction(self.editStackup) pcbMenu.addAction(self.editLayerViews) lsm = ImageSelectionMenu(self.project) lsm.setTitle("Edit image alignment") def m(action): ly = action.data() dlg = LayerAlignmentDialog(self, self.project, ly) dlg.exec_() lsm.triggered.connect(m) pcbMenu.addMenu(lsm) pcbMenu.addSeparator() pcbMenu.addAction(self.rebuildConnectivity) self.menuBar().addMenu(fileMenu) self.menuBar().addMenu(helpMenu) self.menuBar().addMenu(self.viewMenu) self.menuBar().addMenu(pcbMenu)
class MainWindow(QtGui.QMainWindow): def __init__(self, p): super(MainWindow, self).__init__() self.project = p self.viewArea = BoardViewWidget(self.project) self.installEventFilter(self.viewArea) self.actions = MainWindowActions(self) self.setCentralWidget(self.viewArea) self.createToolbars() self.createMenubar() self.createDockWidgets() self.setWindowTitle("PCB Reversing Suite") self.current_tool = None self.current_controller = None def toolBarChanged(self, bid): self.current_tool = self.tool_map[bid] controller = self.current_tool.getToolController(self.viewArea) self.current_controller = controller self.viewArea.setInteractionDelegate(controller) def createToolbars(self): self.createViewToolbar() self.bg = QtGui.QButtonGroup() self.bg.setExclusive(True) self.bg.buttonClicked.connect(self.toolBarChanged) toolbar = self.addToolBar("Tool Selection") self.tool_map = {} self.current_tool = None for n, tt in enumerate(TOOLS): tool = tt(self.project) toolbutton = tool.getToolButton() self.tool_map[toolbutton] = tool self.bg.addButton(toolbutton) toolbar.addWidget(toolbutton) toolbutton.setCheckable(True) if n == 0: toolbutton.setChecked(True) self.toolBarChanged(toolbutton) def createLayerSelectionWidget(self): dock = LayerListWidget(self.project, self.viewArea.viewState) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) dock = InfoWidget(self.project) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) #self.subWindowMenu.addAction(dock.toggleViewAction()) def createDockWidgets(self): self.createLayerSelectionWidget() def createViewToolbar(self): tb = self.addToolBar("View") tb.addAction(self.actions.view_flip_x) tb.addAction(self.actions.view_flip_y) tb.addAction(self.actions.view_rotate_l) tb.addAction(self.actions.view_rotate_r) tb.addAction(self.actions.view_cycle_draw_order) def closeEvent(self, evt): if checkCloseSave(self): evt.accept() else: evt.ignore() def createMenubar(self): from pcbre.ui.menu.file import FileMenu from pcbre.ui.menu.view import ViewMenu from pcbre.ui.menu.pcb import PCBMenu self.menuBar().addMenu(FileMenu(self)) self.menuBar().addMenu(ViewMenu(self)) self.menuBar().addMenu(PCBMenu(self))
class MainWindow(QtGui.QMainWindow): def __init__(self, p): super(MainWindow, self).__init__() self.project = p self.viewArea = BoardViewWidget(self.project) self.installEventFilter(self.viewArea) self.setCentralWidget(self.viewArea) self.createActions() self.createToolbars() self.createMenus() self.createDockWidgets() self.setupInvisibleActions() self.setWindowTitle("PCB Reversing Suite") self.current_tool = None self.current_controller = None def toolBarChanged(self, bid): self.current_tool = self.tool_map[bid] controller = self.current_tool.getToolController(self.viewArea) self.current_controller = controller self.viewArea.setInteractionDelegate(controller) def createToolbars(self): self.createViewToolbar() self.bg = QtGui.QButtonGroup() self.bg.setExclusive(True) self.bg.buttonClicked.connect(self.toolBarChanged) toolbar = self.addToolBar("Tool Selection") self.tool_map = {} self.current_tool = None for n, tt in enumerate(TOOLS): tool = tt(self.project) toolbutton = tool.getToolButton() self.tool_map[toolbutton] = tool self.bg.addButton(toolbutton) toolbar.addWidget(toolbutton) toolbutton.setCheckable(True) if n == 0: toolbutton.setChecked(True) self.toolBarChanged(toolbutton) def createLayerSelectionWidget(self): dock = LayerListWidget(self.project, self.viewArea.viewState) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) dock = InfoWidget(self.project) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) self.subWindowMenu.addAction(dock.toggleViewAction()) def createDockWidgets(self): self.createLayerSelectionWidget() def save(self): self.project.save() def saveAs(self): filename, _ = QtGui.QFileDialog.getSaveFileName( self, "Save project as....", filter="PCBRE Project Files (*.pcbre)") if filename is not None: print("Saving to %s" % filename) self.project.save(filename, update_path=True) def createActions(self): self.exitAct = QtGui.QAction("E&xit", self, shortcut="Ctrl+Q", triggered=self.close) self.saveAction = QtGui.QAction("Save", self, shortcut="Ctrl+S", triggered=self.save) self.saveAsAction = QtGui.QAction("Save-As", self, shortcut="Ctrl+Shift+S", triggered=self.saveAs) self.editStackup = QtGui.QAction("Edit Stackup", self, triggered=self.doStackupSetup) self.rebuildConnectivity = QtGui.QAction( "Rebuild Connectivity", self, triggered=self.project.artwork.rebuild_connectivity) self.editLayerViews = QtGui.QAction("Edit Stackup/Imagery pairing", self, triggered=self.doLayerviewSetup) def setupInvisibleActions(self): self.setupLayerSelection() def showToolSettings(): if self.current_controller: self.current_controller.showSettingsDialog() a = QtGui.QAction("raise controls", self, triggered=showToolSettings) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Tab)) self.addAction(a) def nudge(dx, dy): pos = QtGui.QCursor.pos() QtGui.QCursor.setPos(pos.x() + dx, pos.y() + dy) a = QtGui.QAction("nudge left", self, triggered=lambda: nudge(-1, 0)) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Left)) self.addAction(a) a = QtGui.QAction("nudge right", self, triggered=lambda: nudge(1, 0)) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Right)) self.addAction(a) a = QtGui.QAction("nudge up", self, triggered=lambda: nudge(0, -1)) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Up)) self.addAction(a) a = QtGui.QAction("nudge down", self, triggered=lambda: nudge(0, 1)) a.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Down)) self.addAction(a) def setupLayerSelection(self): def _act(arg): selected_layer = arg - 1 if selected_layer >= len(self.project.stackup.layers): return self.viewArea.viewState.current_layer = self.project.stackup.layers[ selected_layer] for i in range(0, 10): # Closure def fn(i): a = QtGui.QAction("layer %d" % i, self, triggered=lambda: _act(i)) a.setShortcut(QtGui.QKeySequence("%d" % i)) self.addAction(a) fn(i) def createViewToolbar(self): flipX = QtGui.QAction( "Flip X", self, triggered=lambda: self.viewArea.viewState.flip(0)) flipX.setShortcut(QtGui.QKeySequence("f")) flipY = QtGui.QAction( "Flip Y", self, triggered=lambda: self.viewArea.viewState.flip(1)) flipY.setShortcut(QtGui.QKeySequence("shift+f")) def rotater(deg): def _(): self.viewArea.viewState.rotate(deg) return _ self.rotate90L = QtGui.QAction("Rotate 90 (CCW)", self, triggered=rotater(-90)) self.rotate90L.setShortcut(QtGui.QKeySequence("ctlr+shift+r")) self.rotate90R = QtGui.QAction("Rotate 90 (CW)", self, triggered=rotater(90)) self.rotate90R.setShortcut(QtGui.QKeySequence("ctrl+r")) self.permute = QtGui.QAction( "Cycle Image Draw Order", self, triggered=self.viewArea.viewState.permute_layer_order) self.permute.setShortcut(QtGui.QKeySequence("]")) tb = self.addToolBar("View") tb.addAction(flipX) tb.addAction(flipY) tb.addAction(self.rotate90L) tb.addAction(self.rotate90R) tb.addAction(self.permute) self.flipX = flipX self.flipY = flipY def doStackupSetup(self): dlg = pcbre.ui.dialogs.stackupsetup.StackupSetupDialog( self, self.project) dlg.exec_() def doLayerviewSetup(self): dlg = pcbre.ui.dialogs.layerviewsetup.LayerViewSetupDialog( self, self.project) dlg.exec_() def addImage(self): fname, _ = QtGui.QFileDialog.getOpenFileName(self, "Open Image") if not fname: return il = ImageLayer.fromFile(self.project, fname) # Allow the user to align the image dlg = LayerAlignmentDialog(self, self.project, il) res = dlg.exec_() if res == QtGui.QDialog.Accepted: self.project.imagery.add_imagelayer(il) def createMenus(self): fileMenu = QtGui.QMenu("&File", self) subMenuAdd = fileMenu.addMenu("Add") act = QtGui.QAction("Image", self, triggered=self.addImage) subMenuAdd.addAction(act) fileMenu.addSeparator() fileMenu.addAction(self.saveAction) fileMenu.addAction(self.saveAsAction) fileMenu.addSeparator() fileMenu.addAction(self.exitAct) def updateCanSave(): self.saveAction.setEnabled(self.project.can_save) fileMenu.aboutToShow.connect(updateCanSave) helpMenu = QtGui.QMenu("&Help", self) self.viewMenu = QtGui.QMenu("&View", self) self.subWindowMenu = self.viewMenu.addMenu("Sub-Windows") self.viewMenu.addSeparator() self.viewMenu.addAction(self.rotate90L) self.viewMenu.addAction(self.rotate90R) self.viewMenu.addAction(self.flipX) self.viewMenu.addAction(self.flipY) self.viewMenu.addAction(self.permute) self.viewMenu.addSeparator() self.viewMenu.addAction(self.rotate90L) # Show Imagery Checkbox show_images = QtGui.QAction("Show Imagery", self) def change_show_images(): self.viewArea.viewState.show_images = show_images.isChecked() show_images.setCheckable(True) show_images.setChecked(True) show_images.triggered.connect(change_show_images) self.viewMenu.addAction(show_images) # Show Other Images Checkbox other_layers = QtGui.QAction("Show Other Layers artwork", self) def change_other_layers(): self.viewArea.viewState.draw_other_layers = other_layers.isChecked( ) other_layers.setCheckable(True) other_layers.setChecked(True) other_layers.triggered.connect(change_other_layers) self.viewMenu.addAction(other_layers) pcbMenu = QtGui.QMenu("&PCB") pcbMenu.addAction(self.editStackup) pcbMenu.addAction(self.editLayerViews) lsm = ImageSelectionMenu(self.project) lsm.setTitle("Edit image alignment") def m(action): ly = action.data() dlg = LayerAlignmentDialog(self, self.project, ly) dlg.exec_() lsm.triggered.connect(m) pcbMenu.addMenu(lsm) pcbMenu.addSeparator() pcbMenu.addAction(self.rebuildConnectivity) self.menuBar().addMenu(fileMenu) self.menuBar().addMenu(helpMenu) self.menuBar().addMenu(self.viewMenu) self.menuBar().addMenu(pcbMenu)