summaryrefslogtreecommitdiffstats
path: root/ui/main_window.py
diff options
context:
space:
mode:
Diffstat (limited to 'ui/main_window.py')
-rw-r--r--ui/main_window.py54
1 files changed, 51 insertions, 3 deletions
diff --git a/ui/main_window.py b/ui/main_window.py
index cbefa5f..01e4cf2 100644
--- a/ui/main_window.py
+++ b/ui/main_window.py
@@ -1,4 +1,5 @@
from __future__ import annotations
+import subprocess
from PyQt6.QtWidgets import (
QMainWindow, QWidget, QHBoxLayout, QVBoxLayout,
QLabel, QPushButton, QStackedWidget, QFrame,
@@ -54,9 +55,32 @@ class MainWindow(QMainWindow):
self._stack = QStackedWidget()
root.addWidget(self._stack, stretch=1)
- # Placeholder pages (replaced in later tasks)
- for name in ["articles", "no_translation", "new_article", "taxonomy",
- "media", "translations", "git", "hugo"]:
+ from ui.articles_view import ArticlesView, MissingTranslationView
+
+ self._articles_view = ArticlesView()
+ self._articles_view.article_selected.connect(self._on_article_selected)
+ self._stack.addWidget(self._articles_view)
+ self._page_articles = self._stack.count() - 1
+
+ self._missing_view = MissingTranslationView()
+ self._missing_view.article_selected.connect(self._on_article_selected)
+ self._stack.addWidget(self._missing_view)
+ self._page_no_translation = self._stack.count() - 1
+
+ from ui.article_detail import ArticleDetailView
+
+ self._detail_view = ArticleDetailView()
+ self._detail_view.open_typora.connect(self._do_open_typora)
+ self._detail_view.open_frontmatter.connect(self._do_open_frontmatter)
+ self._detail_view.translate.connect(self._do_translate)
+ self._detail_view.push_master.connect(lambda a: self._do_git_push("master"))
+ self._detail_view.publish.connect(lambda a: self._do_git_push("production"))
+ self._detail_view.delete_article.connect(self._do_delete_article)
+ self._stack.addWidget(self._detail_view)
+ self._page_detail = self._stack.count() - 1
+
+ # Remaining placeholders
+ for name in ["new_article", "taxonomy", "media", "translations", "git", "hugo"]:
w = QLabel(f"[{name}]")
w.setAlignment(Qt.AlignmentFlag.AlignCenter)
self._stack.addWidget(w)
@@ -136,9 +160,33 @@ class MainWindow(QMainWindow):
if not self.config.blog_repo:
return
self._articles = scan_articles(Path(self.config.blog_repo))
+ self._articles_view.set_articles(self._articles)
+ self._missing_view.set_articles(self._articles)
missing = [a for a in self._articles if not a.has_translation]
self._badge_no_trans.setText(str(len(missing)))
+ def _on_article_selected(self, article: Article):
+ self._detail_view.set_article(article)
+ self._stack.setCurrentIndex(self._page_detail)
+
+ def _do_open_typora(self, article: Article):
+ subprocess.Popen([self.config.typora_bin, str(article.path)])
+
+ def _do_open_frontmatter(self, article: Article):
+ from ui.frontmatter_editor import FrontmatterEditor
+ dlg = FrontmatterEditor(article, Path(self.config.blog_repo), self)
+ if dlg.exec():
+ self._detail_view.set_article(article)
+
+ def _do_translate(self, article: Article):
+ pass # implemented in Task 15
+
+ def _do_git_push(self, branch: str):
+ pass # implemented in Task 16
+
+ def _do_delete_article(self, article: Article):
+ pass # implemented in Task 16
+
def _setup_watcher(self):
if not self.config.blog_repo:
return