From 6fd3783878907ef1464895be8241c9ea0fd717c7 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Sat, 29 Jan 2022 18:53:05 +0100 Subject: [PATCH] add notes plugin --- main.py | 1 + raven/mainwindow.py | 9 ++++--- raven/plugins/notes/__init__.py | 0 raven/plugins/notes/noteswidget.py | 14 +++++++++++ raven/plugins/notesplugin.py | 38 ++++++++++++++++++++++++++++++ raven/plugins/ravenlogplugin.py | 9 ++++++- 6 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 raven/plugins/notes/__init__.py create mode 100644 raven/plugins/notes/noteswidget.py create mode 100644 raven/plugins/notesplugin.py diff --git a/main.py b/main.py index dc02690..675f41c 100644 --- a/main.py +++ b/main.py @@ -54,6 +54,7 @@ if __name__ == "__main__": PluginRegistry.load_plugin("RavenLogPlugin") PluginRegistry.load_plugin("OpenFilePlugin") PluginRegistry.load_plugin("LogFilePlugin") + PluginRegistry.load_plugin("NotesPlugin") window = PluginRegistry.execute_single("create_main_window") RavenUI.window = window diff --git a/raven/mainwindow.py b/raven/mainwindow.py index fa913c1..b2c22f4 100644 --- a/raven/mainwindow.py +++ b/raven/mainwindow.py @@ -3,13 +3,14 @@ from typing import List from PyQt6.QtWidgets import * from PyQt6.QtGui import * - +from PyQt6.QtCore import Qt import urlutils from cutesettings import CuteSettings from raven.pluginregistry import PluginRegistry from raven.plugins.domain.menucontribution import MenuContribution, sort_menu_contributions from raven.plugins.domain.raction import RAction from raven.plugins.domain.rmenu import RMenu +from raven.plugins.ravenlog.Tab import Tab from settingsstore import SettingsStore from highlightingdialog import HighlightingDialog from tabs import Tabs @@ -33,7 +34,7 @@ class MainWindow(QMainWindow): self.settings = SettingsStore.load() PluginRegistry.execute("set_settings", self.settings) - PluginRegistry.execute("set_translator", lambda string: self.tr(string)) + PluginRegistry.execute("set_translator", self.tr) self.setWindowTitle(self.tr("RavenLog")) self._restore_window() @@ -44,12 +45,13 @@ class MainWindow(QMainWindow): self.tabs = Tabs(self.settings) self._menu_recent_files = QMenu(self.tr("Open &Recent"), self) - self.setCentralWidget(self.tabs) self.status_bar = QStatusBar(self) self.setStatusBar(self.status_bar) self.setMenuBar(self.create_dynamic_menu_bar()) + self.setTabPosition(Qt.DockWidgetArea.AllDockWidgetAreas, QTabWidget.TabPosition.North) + def create_dynamic_menu_bar(self) -> QMenuBar: menu_bar = QMenuBar() @@ -63,6 +65,7 @@ class MainWindow(QMainWindow): known_menus = [ ("file", self.tr("&File")), ("settings", self.tr("&Settings")), + ("window", self.tr("&Window")), ("help", self.tr("&Help")) ] diff --git a/raven/plugins/notes/__init__.py b/raven/plugins/notes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/raven/plugins/notes/noteswidget.py b/raven/plugins/notes/noteswidget.py new file mode 100644 index 0000000..791cae2 --- /dev/null +++ b/raven/plugins/notes/noteswidget.py @@ -0,0 +1,14 @@ +from raven.plugins.ravenlog.Tab import Tab +from PyQt6.QtWidgets import * + + +class NotesWidget(Tab): + + def __init__(self, unique_id: str, title: str): + super(NotesWidget, self).__init__(unique_id, title) + + self.text_area = QTextEdit(self) + + self.layout = QVBoxLayout(self) + self.layout.setContentsMargins(0, 0, 0, 0) + self.layout.addWidget(self.text_area) diff --git a/raven/plugins/notesplugin.py b/raven/plugins/notesplugin.py new file mode 100644 index 0000000..ed51f70 --- /dev/null +++ b/raven/plugins/notesplugin.py @@ -0,0 +1,38 @@ +from typing import Callable + +from PyQt6.QtCore import Qt + +from raven.pluginbase import PluginBase +from raven.pluginregistry import PluginRegistry +from raven.plugins.domain.menucontribution import MenuContribution +from raven.plugins.domain.raction import RAction +from raven.plugins.notes.noteswidget import NotesWidget + + +class NotesPlugin(PluginBase): + + def __init__(self): + super(NotesPlugin, self).__init__() + self.settings = None + self.tr = None + self.tab_counter = 0 + + def set_translator(self, tr: Callable[[str], str]): + self.tr = tr + + def get_menu_contributions(self) -> [MenuContribution]: + return [ + MenuContribution("window", action=self._add_notes_tab_action(), action_id="add notes tab", after=""), + ] + + def _add_notes_tab_action(self) -> RAction: + open_file = RAction("&Add Notes", self._add_notes_tab, shortcut='Ctrl+Shift+N', + icon_from_theme="filenew") + return open_file + + def _add_notes_tab(self): + self.tab_counter = self.tab_counter + 1 + notes = NotesWidget( + "notes_tab_%d" % self.tab_counter, + self.tr("Notes %d") % self.tab_counter) + PluginRegistry.execute_single("add_dock", Qt.DockWidgetArea.RightDockWidgetArea, notes) diff --git a/raven/plugins/ravenlogplugin.py b/raven/plugins/ravenlogplugin.py index 1b51081..3d3b5d8 100644 --- a/raven/plugins/ravenlogplugin.py +++ b/raven/plugins/ravenlogplugin.py @@ -1,11 +1,13 @@ import sys from typing import Optional +from PyQt6.QtCore import Qt +from PyQt6.QtWidgets import QDockWidget, QLabel + import constants from aboutdialog import AboutDialog from raven.mainwindow import MainWindow from raven.pluginbase import PluginBase -from raven.pluginregistry import PluginRegistry from raven.plugins.domain.menucontribution import MenuContribution from raven.plugins.domain.raction import RAction from raven.plugins.ravenlog.Tab import Tab @@ -33,6 +35,11 @@ class RavenLogPlugin(PluginBase): def add_tab(self, tab: Tab): self.main_window.tabs.add_tab(tab) + def add_dock(self, area: Qt.DockWidgetArea, widget: Tab): + dock_widget = QDockWidget(widget.title, self.main_window) + dock_widget.setWidget(widget) + self.main_window.addDockWidget(area, dock_widget) + def _action_about(self) -> RAction: about_action = RAction( "&About",