diff options
Diffstat (limited to 'ui/main_window.py')
| -rw-r--r-- | ui/main_window.py | 54 |
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 |
