Example #1
0
 def addFileToolBar(self):
     """Create toolbar to house file actions"""
     tb = QToolBar()
     tb.setWindowTitle("File Actions")
     tb.addActions([
         self.openAction,
         self.saveAction,
         self.closeAction,
     ])
     self.addToolBar(tb)
Example #2
0
    def __init__(self):
        super().__init__()

        widget = QWidget()
        self.setCentralWidget(widget)
        
        file_icons = {
            "file" : "icons/file.svg",
            "folder" : "icons/folder.svg",
            "save" : "icons/save.svg",
            "search" : "icons/search.svg",
        }
        contact_icons = {
            "facebook" : "icons/facebook.svg",
            "instagram" : "icons/instagram.svg",
            "twitter" : "icons/twitter.svg",
            "mail" : "icons/mail.svg",
            "phone" : "icons/phone.svg",
        }

        file_actions    = [QAction(QIcon(src), label, self) for label, src in file_icons.items()]
        contact_actions = [QAction(QIcon(src), label, self) for label, src in contact_icons.items()]
        
        menubar = self.menuBar()
        file_menu = menubar.addMenu("File")
        file_menu.addActions(file_actions)

        contact_menu = menubar.addMenu("Contact")
        contact_menu.addActions(contact_actions)
        
        file_toolbar = QToolBar("File")
        file_toolbar.addActions(file_actions)
        self.addToolBar(file_toolbar)

        contact_toolbar = QToolBar("Contact")
        contact_toolbar.addActions(contact_actions)
        self.addToolBar(contact_toolbar)

        self.insertToolBarBreak(contact_toolbar)
Example #3
0
class Ui_FE14CharacterEditor(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.search_bar = QLineEdit()
        self.search_bar.setPlaceholderText("Search...")
        self.search_bar.setFixedWidth(225)
        self.characters_list_view = QListView()
        self.characters_list_view.setContextMenuPolicy(
            QtCore.Qt.CustomContextMenu)
        self.characters_list_view.setFixedWidth(225)
        self.characters_list_layout = QVBoxLayout()
        self.characters_list_layout.addWidget(self.search_bar)
        self.characters_list_layout.addWidget(self.characters_list_view)

        self.character_details_box = QGroupBox(title="Character Details")
        self.portrait_display = QGraphicsView()
        self.portrait_display.setFixedSize(140, 140)
        self.character_details_form_contents_1 = QWidget()
        self.character_details_form_contents_2 = QWidget()
        self.character_details_layout = QHBoxLayout()
        self.character_details_layout.addWidget(self.portrait_display)
        self.character_details_layout.addWidget(
            self.character_details_form_contents_1)
        self.character_details_layout.addWidget(
            self.character_details_form_contents_2)
        self.character_details_box.setLayout(self.character_details_layout)
        self.character_details_box.setFixedHeight(200)

        self.tab_widget = QTabWidget()
        self.ids_tab = QWidget()
        self.classes_tab = QWidget()
        self.stats_tab = QScrollArea()
        self.skills_tab = QScrollArea()
        self.misc_tab = QScrollArea()
        self.portraits_tab = PortraitViewer()

        self.stats_contents = QWidget()
        self.stats_tab.setWidget(self.stats_contents)
        self.stats_tab.setWidgetResizable(True)
        self.stats_layout = QVBoxLayout()
        self.stats_layout.setAlignment(QtCore.Qt.AlignTop)
        self.stats_contents.setLayout(self.stats_layout)

        self.skills_contents = QWidget()
        self.skills_tab.setWidget(self.skills_contents)
        self.skills_tab.setWidgetResizable(True)

        self.misc_contents = QWidget()
        self.misc_tab.setWidget(self.misc_contents)
        self.misc_tab.setWidgetResizable(True)
        self.misc_layout = QVBoxLayout()
        self.misc_layout.setAlignment(QtCore.Qt.AlignTop)
        self.misc_contents.setLayout(self.misc_layout)

        self.tab_widget.addTab(self.ids_tab, "IDs")
        self.tab_widget.addTab(self.classes_tab, "Classes")
        self.tab_widget.addTab(self.stats_tab, "Stats")
        self.tab_widget.addTab(self.skills_tab, "Skills")
        self.tab_widget.addTab(self.misc_tab, "Misc.")
        self.tab_widget.addTab(self.portraits_tab, "Portraits")

        self.editor_layout = QVBoxLayout()
        self.editor_layout.addWidget(self.character_details_box)
        self.editor_layout.addWidget(self.tab_widget)

        self.main_layout = QHBoxLayout()
        self.main_layout.addLayout(self.characters_list_layout)
        self.visual_splitter = QFrame()
        self.visual_splitter.setFrameShape(QFrame.VLine)
        self.visual_splitter.setFrameShadow(QFrame.Sunken)
        self.main_layout.addWidget(self.visual_splitter)
        self.main_layout.addLayout(self.editor_layout)

        self.tool_bar = QToolBar()
        self.action_add = QAction(text="Add")
        self.action_remove = QAction(text="Remove")
        self.action_copy_to = QAction(text="Copy To")
        self.tool_bar.addActions(
            [self.action_add, self.action_remove, self.action_copy_to])

        self.addToolBar(self.tool_bar)

        self.resize(1000, 600)
        central_widget = QWidget()
        central_widget.setLayout(self.main_layout)
        self.setWindowTitle("Character Editor")
        self.setWindowIcon(QIcon("paragon.ico"))
        self.setCentralWidget(central_widget)
Example #4
0
class MainWindow(QMainWindow):
    def __init__(self, app: QApplication):
        super().__init__()

        self.current_file = None

        self.console_dock: QDockWidget = None
        self.tools_dock: QDockWidget = None

        self.toolbar: QToolBar = None

        self.graph_widget: GraphWidget = None
        self.log_console_widget: LogConsoleWidget = None
        self.tools_widget: ToolsWidget = None

        self.file_menu: QMenu = None
        self.help_menu: QMenu = None
        self.view_menu: QMenu = None
        self.docks_menu: QMenu = None

        self.about_action: QAction = None
        self.new_action: QAction = None
        self.open_action: QAction = None
        self.save_action: QAction = None
        self.save_as_action: QAction = None
        self.exit_action: QAction = None
        self.toggle_tools_dock: QAction = None
        self.toggle_console_dock: QAction = None

        self.create_actions(app)
        self.create_widgets()
        self.create_docks()
        self.create_menus()
        self.create_toolbar()
        self.create_statusbar()

        self.setCentralWidget(self.graph_widget)
        self.addDockWidget(Qt.BottomDockWidgetArea, self.console_dock)
        self.addDockWidget(Qt.RightDockWidgetArea, self.tools_dock)
        self.addToolBar(self.toolbar)
        self.setWindowTitle(self.tr("Proofy"))

        self.read_settings()

    def create_statusbar(self):
        self.statusBar().showMessage(self.tr("Welcome to Proofy!"))

    def create_docks(self):
        self.console_dock = QDockWidget(self.tr("Console"))
        self.console_dock.setWidget(self.log_console_widget)

        self.tools_dock = QDockWidget(self.tr("Tools"))
        self.tools_dock.setWidget(self.tools_widget)

    def create_toolbar(self):
        self.toolbar = QToolBar(self.tr("Tools"), self)
        self.toolbar.setStatusTip(self.tr("Tools"))
        self.toolbar.addActions([
            self.new_action,
            self.open_action,
            self.save_action,
            self.save_as_action,
            self.exit_action,
        ])
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.about_action)

    def create_widgets(self):
        self.log_console_widget = LogConsoleWidget()
        self.log_console_widget.add_loggers(logger)
        self.graph_widget = GraphWidget(self.log_console_widget)
        self.tools_widget = ToolsWidget(graph_widget=self.graph_widget)

    def create_menus(self):
        self.file_menu = self.menuBar().addMenu("File")
        self.file_menu.setStatusTip(self.tr("File operations"))
        self.file_menu.addActions([
            self.new_action,
            self.open_action,
            self.save_action,
            self.save_as_action,
            self.exit_action,
        ])

        self.view_menu = self.menuBar().addMenu("View")
        self.view_menu.setStatusTip(self.tr("View settings"))
        self.docks_menu = self.view_menu.addMenu("Docks")
        self.docks_menu.addAction(self.toggle_tools_dock)
        self.docks_menu.addAction(self.toggle_console_dock)

        self.help_menu = self.menuBar().addMenu("Help")
        self.help_menu.setStatusTip(self.tr("Help"))
        self.help_menu.addAction(self.about_action)

    def create_actions(self, app):

        self.about_action = QAction(
            app.style().standardIcon(
                QtWidgets.QStyle.SP_MessageBoxInformation),
            "About",
            self,
        )
        self.about_action.setStatusTip("Show information about Proofy")
        self.about_action.triggered.connect(self.about)

        self.new_action = QAction(
            app.style().standardIcon(QtWidgets.QStyle.SP_FileIcon), "New...",
            self)
        self.new_action.setStatusTip(self.tr("Create a new file"))
        self.new_action.setShortcuts(QKeySequence.New)
        self.new_action.triggered.connect(self.new)

        self.open_action = QAction(
            app.style().standardIcon(QtWidgets.QStyle.SP_DialogOpenButton),
            "Open...",
            self,
        )
        self.open_action.setStatusTip(self.tr("Open file"))
        self.open_action.setShortcuts(QKeySequence.Open)
        self.open_action.triggered.connect(self.open)

        self.save_action = QAction(
            app.style().standardIcon(QtWidgets.QStyle.SP_DialogSaveButton),
            "Save...",
            self,
        )
        self.save_action.setStatusTip(self.tr("Save file"))
        self.save_action.setShortcuts(QKeySequence.Save)
        self.save_action.triggered.connect(self.save)

        self.save_as_action = QAction(
            app.style().standardIcon(QtWidgets.QStyle.SP_DriveFDIcon),
            "Save As...",
            self,
        )
        self.save_as_action.setStatusTip(self.tr("Save to file"))
        self.save_as_action.setShortcuts(QKeySequence.SaveAs)
        self.save_as_action.triggered.connect(self.save_as)

        self.exit_action = QAction(
            app.style().standardIcon(QtWidgets.QStyle.SP_DialogCloseButton),
            "Exit",
            self,
        )
        self.exit_action.setStatusTip(self.tr("Exit Proofy"))
        self.exit_action.setShortcuts(QKeySequence.Quit)
        self.exit_action.triggered.connect(self.exit)

        self.toggle_console_dock = QAction("Toggle Console Dock", self)
        self.toggle_console_dock.setStatusTip(
            "Toggle visibility of the console dock")
        self.toggle_console_dock.triggered.connect(
            lambda _: self.console_dock.setVisible(not self.console_dock.
                                                   isVisible()))

        self.toggle_tools_dock = QAction("Toggle Tools Dock", self)
        self.toggle_tools_dock.setStatusTip(
            "Toggle visibility of the tools dock")
        self.toggle_tools_dock.triggered.connect(
            lambda _: self.tools_dock.setVisible(not self.tools_dock.isVisible(
            )))

    @Slot()
    def about(self):
        logger.debug(locals())
        QMessageBox.about(
            self,
            "About Proofy",
            self.tr(f"""
                <h1>Proofy {__version__}</h1>
                <p>
                <b>Proofy is a formal proof system GUI.</b>
                </p>
                <p>
                Oh, it looks like Proofy wants to talk!
                <blockquote>Proofy likes Sequent Calculus! And circles! And edges! And arrows! And ...</blockquote>
                </p>
                """),
        )

    def closeEvent(self, event: QCloseEvent):
        logger.debug(locals())
        if self.unsaved_check():
            self.write_settings()
            event.accept()
        else:
            event.ignore()

    @Slot()
    def exit(self):
        logger.debug(locals())
        if self.unsaved_check():
            QApplication.quit()

    @Slot()
    def new(self):
        logger.debug(locals())
        if self.unsaved_check():
            self.current_file = None

    def set_file_status(self, *, modified: bool):
        if self.current_file:
            file = pathlib.Path(self.current_file[0])
            self.setWindowTitle(f"{file.name}[*] [{file}] - Proofy")
            self.setWindowModified(modified)
        else:
            self.setWindowTitle(f"Proofy[*]")
            self.setWindowModified(modified)

    @Slot()
    def open(self):
        logger.debug(locals())
        if self.unsaved_check():
            if (path := QFileDialog.getOpenFileName(
                    self,
                    caption=self.tr("Open File"),
                    filter=self.graph_widget.get_open_file_extensions(),
            )):
                try:
                    QApplication.setOverrideCursor(Qt.WaitCursor)
                    self.graph_widget.open_file(*path)
                    self.statusBar().showMessage(f"Opened {path} successfully")
                    self.current_file = path
                    self.set_file_status(modified=False)
                except Exception as e:
                    logger.error(e)
                finally:
                    QApplication.restoreOverrideCursor()
Example #5
0
class Ui_FE14MapEditor(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.toolbar = QToolBar()
        self.toggle_coordinate_type_action = QAction("Toggle Coordinate Type")
        self.refresh_action = QAction("Refresh")
        self.refresh_action.setShortcut(QKeySequence("Ctrl+R"))
        self.copy_spawn_action = QAction("Copy Spawn")
        self.copy_spawn_action.setShortcut(QKeySequence("Ctrl+C"))
        self.paste_spawn_action = QAction("Paste Spawn")
        self.paste_spawn_action.setShortcut(QKeySequence("Ctrl+V"))
        self.add_spawn_action = QAction("Add Spawn")
        self.delete_spawn_action = QAction("Delete Spawn")
        self.add_group_action = QAction("Add Group")
        self.delete_group_action = QAction("Delete Group")
        self.add_tile_action = QAction("Add Tile")
        self.toggle_mode_action = QAction("Toggle Mode")
        self.undo_action = QAction("Undo")
        self.undo_action.setShortcut(QKeySequence("Ctrl+Z"))
        self.redo_action = QAction("Redo")
        self.redo_action.setShortcut(QKeySequence("Ctrl+Shift+Z"))
        self.toolbar.addActions(
            [self.toggle_coordinate_type_action, self.refresh_action])
        self.toolbar.addSeparator()
        self.toolbar.addActions([
            self.copy_spawn_action, self.paste_spawn_action,
            self.add_spawn_action, self.delete_spawn_action,
            self.add_group_action, self.delete_group_action
        ])
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.add_tile_action)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.toggle_mode_action)
        self.toolbar.addSeparator()
        self.toolbar.addActions([self.undo_action, self.redo_action])
        self.addToolBar(self.toolbar)

        self.model_view = QTreeView()
        self.model_view.setHeaderHidden(True)
        self.grid = FE14MapGrid()
        self.grid_scroll = QScrollArea()
        self.grid_scroll.setWidgetResizable(True)
        self.grid_scroll.setWidget(self.grid)
        self.tile_list = QListView()
        self.terrain_pane = FE14TerrainEditorPane()
        self.spawn_pane = FE14SpawnEditorPane()

        self.model_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.model_view_context_menu = QMenu()
        self.model_view_context_menu.addActions(
            [self.toggle_coordinate_type_action, self.refresh_action])
        self.model_view_context_menu.addSeparator()
        self.model_view_context_menu.addActions([
            self.copy_spawn_action, self.paste_spawn_action,
            self.add_spawn_action, self.delete_spawn_action,
            self.add_group_action, self.delete_group_action
        ])
        self.model_view_context_menu.addSeparator()
        self.model_view_context_menu.addAction(self.add_tile_action)
        self.model_view_context_menu.addSeparator()
        self.model_view_context_menu.addAction(self.toggle_mode_action)
        self.model_view_context_menu.addSeparator()
        self.model_view_context_menu.addActions(
            [self.undo_action, self.redo_action])

        self.status_bar = QStatusBar()
        self.coordinate_type_label = QLabel()
        self.status_bar.addPermanentWidget(self.coordinate_type_label)
        self.setStatusBar(self.status_bar)

        self.main_widget = QSplitter()
        self.main_widget.setOrientation(QtCore.Qt.Horizontal)
        self.main_widget.addWidget(self.model_view)
        self.main_widget.addWidget(self.grid_scroll)
        self.main_widget.addWidget(self.spawn_pane)
        self.main_widget.addWidget(self.terrain_pane)
        self.setCentralWidget(self.main_widget)