From 8e2815bc8784f7fef14fed4f612f91c4484b0847 Mon Sep 17 00:00:00 2001 From: Tobias Manske Date: Fri, 24 Mar 2023 17:05:23 +0100 Subject: [PATCH] Add option to split side-by-side view. Also fixes split ratio handling Signed-off-by: Tobias Manske --- src/__init__.py | 56 ++++++++++++++++++++++++++++++++++++------------- src/config.json | 6 +++++- src/config.md | 5 ++++- 3 files changed, 50 insertions(+), 17 deletions(-) diff --git a/src/__init__.py b/src/__init__.py index 76f84e0..af8ed11 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -29,9 +29,9 @@ class EditorPreview(object): def editor_init_hook(self, ed: editor.Editor): - ed.webview = AnkiWebView(title="editor_preview") + ed.editor_preview = AnkiWebView(title="editor_preview") # This is taken out of clayout.py - ed.webview.stdHtml( + ed.editor_preview.stdHtml( ed.mw.reviewer.revHtml(), css=["css/reviewer.css"], js=self.js, @@ -39,24 +39,50 @@ class EditorPreview(object): ) if not config['showPreviewAutomatically']: - ed.webview.hide() + ed.editor_preview.hide() self._inject_splitter(ed) gui_hooks.editor_did_fire_typing_timer.append(lambda o: self.onedit_hook(ed, o)) gui_hooks.editor_did_load_note.append(lambda o: None if o != ed else self.editor_note_hook(o)) + def _get_splitter(self, editor): + layout = editor.outerLayout + mainR, editorR = [int(r) for r in config['splitRatio'].split(":")] + location = config['location'] + split = QSplitter() + if location == 'above': + split.setOrientation(Qt.Vertical) + split.addWidget(editor.editor_preview) + split.addWidget(editor.web) + sizes = [editorR, mainR] + elif location == 'below': + split.setOrientation(Qt.Vertical) + split.addWidget(editor.web) + split.addWidget(editor.editor_preview) + sizes = [mainR, editorR] + elif location == 'left': + split.setOrientation(Qt.Horizontal) + split.addWidget(editor.editor_preview) + split.addWidget(editor.web) + sizes = [editorR, mainR] + elif location == 'right': + split.setOrientation(Qt.Horizontal) + split.addWidget(editor.web) + split.addWidget(editor.editor_preview) + sizes = [mainR, editorR] + else: + raise ValueError("Invalid value for config key location") + + split.setSizes(sizes) + return split + + def _inject_splitter(self, editor: editor.Editor): layout = editor.outerLayout - split = QSplitter() - split.setOrientation(Qt.Vertical) web_index = layout.indexOf(editor.web) layout.removeWidget(editor.web) - split.addWidget(editor.web) - split.addWidget(editor.webview) - splitRatio = config['splitRatio'] - upperR, lowerR = [int(r) for r in splitRatio.split(":")] - split.setStretchFactor(0, upperR) - split.setStretchFactor(1, lowerR) + + split = self._get_splitter(editor) layout.insertWidget(web_index, split) @@ -72,10 +98,10 @@ class EditorPreview(object): buttons.append(b) def onEditorPreviewButton(self, origin: editor.Editor): - if origin.webview.isHidden(): - origin.webview.show() + if origin.editor_preview.isHidden(): + origin.editor_preview.show() else: - origin.webview.hide() + origin.editor_preview.hide() def _obtainCardText(self, note): @@ -92,6 +118,6 @@ class EditorPreview(object): def onedit_hook(self, editor, origin): if editor.note == origin: - editor.webview.eval(self._obtainCardText(editor.note)) + editor.editor_preview.eval(self._obtainCardText(editor.note)) eprev = EditorPreview() diff --git a/src/config.json b/src/config.json index f9a193d..8ab917f 100644 --- a/src/config.json +++ b/src/config.json @@ -1 +1,5 @@ -{"showPreviewAutomatically": true, "splitRatio": "4:1"} \ No newline at end of file +{ + "showPreviewAutomatically": true, + "splitRatio": "1:1", + "location": "below" +} diff --git a/src/config.md b/src/config.md index d9471b1..2acf2c8 100644 --- a/src/config.md +++ b/src/config.md @@ -2,5 +2,8 @@ \- `showPreviewAutomatically` [boolean (true | false)]:
   Defines if the preview window should show up automatically as you enter the Editor (default: true)

\- `splitRatio` [int:int]:
-   Defines the default split ratio of the main view and preview view (default: 4:1) +   Defines the default split ratio of the main view and preview view (default: 1:1)
+
+\- `location` [string (above | below | left | right)]:
+   Defines where to render the preview (default: below)