Center wide task pages and group related actions in one row

This commit is contained in:
2026-09-09 14:31:06 +03:00
parent e5e9ae66e8
commit a71545a88a
7 changed files with 47 additions and 11 deletions
+8 -4
View File
@@ -160,10 +160,10 @@ class HomeWindow(QWidget):
self.mode_pages["file"] = settings.task_pages["file"] self.mode_pages["file"] = settings.task_pages["file"]
self.mode_pages["meeting"] = self._scrolled(self._meeting_page()) self.mode_pages["meeting"] = self._scrolled(self._meeting_page())
self.mode_pages["ask"] = self._scrolled(self._assistant_page()) self.mode_pages["ask"] = self._scrolled(self._assistant_page())
self.mode_pages["history"] = self._history_page() self.mode_pages["history"] = self._scrolled(self._history_page())
for page in self.mode_pages.values(): for page in self.mode_pages.values():
self.pages.addWidget(page) self.pages.addWidget(page)
self.footer = _label("", "footer") self.footer = _label("", "footer", True)
root.addWidget(self.footer) root.addWidget(self.footer)
self._timer = QTimer(self) self._timer = QTimer(self)
self._timer.setInterval(500) self._timer.setInterval(500)
@@ -189,6 +189,7 @@ class HomeWindow(QWidget):
page.setMaximumWidth(680) page.setMaximumWidth(680)
area = QScrollArea() area = QScrollArea()
area.setWidgetResizable(True) area.setWidgetResizable(True)
area.setAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop)
area.setFrameShape(QFrame.Shape.NoFrame) area.setFrameShape(QFrame.Shape.NoFrame)
area.setWidget(page) area.setWidget(page)
return area return area
@@ -282,13 +283,16 @@ class HomeWindow(QWidget):
layout.addWidget(self.ask_status) layout.addWidget(self.ask_status)
self.ask_scope = _label("", "muted") self.ask_scope = _label("", "muted")
layout.addWidget(self.ask_scope) layout.addWidget(self.ask_scope)
actions = QHBoxLayout()
self.ask_button = _button("", self._ask, "primary") self.ask_button = _button("", self._ask, "primary")
layout.addWidget(self.ask_button) actions.addWidget(self.ask_button)
actions.addWidget(_button(t("Start a new conversation"), self.controller.reset_conversation))
actions.addStretch()
layout.addLayout(actions)
self.ask_pause = _button(t("Pause the recording"), self._pause) self.ask_pause = _button(t("Pause the recording"), self._pause)
layout.addWidget(self.ask_pause) layout.addWidget(self.ask_pause)
self.ask_cancel = _button(t("Stop"), self._cancel_ask) self.ask_cancel = _button(t("Stop"), self._cancel_ask)
layout.addWidget(self.ask_cancel) layout.addWidget(self.ask_cancel)
layout.addWidget(_button(t("Start a new conversation"), self.controller.reset_conversation))
self.ask_error = _label() self.ask_error = _label()
layout.addWidget(self.ask_error) layout.addWidget(self.ask_error)
self.ask_output = QPlainTextEdit() self.ask_output = QPlainTextEdit()
+4 -6
View File
@@ -1154,6 +1154,7 @@ class SettingsWindow(QDialog):
page.setMaximumWidth(680) page.setMaximumWidth(680)
area = QScrollArea() area = QScrollArea()
area.setWidgetResizable(True) area.setWidgetResizable(True)
area.setAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop)
area.setFrameShape(QScrollArea.Shape.NoFrame) area.setFrameShape(QScrollArea.Shape.NoFrame)
area.setWidget(page) area.setWidget(page)
for box in page.findChildren((QComboBox, QAbstractSpinBox)): for box in page.findChildren((QComboBox, QAbstractSpinBox)):
@@ -1986,14 +1987,11 @@ class SettingsWindow(QDialog):
row = QHBoxLayout() row = QHBoxLayout()
row.addWidget(copy) row.addWidget(copy)
row.addWidget(self.minutes_retry) row.addWidget(self.minutes_retry)
row.addWidget(folder)
row.addWidget(delete)
row.addWidget(reload_)
row.addStretch() row.addStretch()
layout.addLayout(row) layout.addLayout(row)
more = QHBoxLayout()
more.addWidget(folder)
more.addWidget(delete)
more.addWidget(reload_)
more.addStretch()
layout.addLayout(more)
return page return page
def _file_tab(self): def _file_tab(self):
Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

+35 -1
View File
@@ -4,7 +4,7 @@ from types import SimpleNamespace
from unittest import mock from unittest import mock
from PyQt6.QtCore import Qt from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QApplication, QMessageBox from PyQt6.QtWidgets import QApplication, QMessageBox, QPushButton
from dikte import config as cfg, home_ui, i18n from dikte import config as cfg, home_ui, i18n
from dikte.app import Dikte from dikte.app import Dikte
@@ -86,6 +86,40 @@ class Home(DikteTest):
self.assertLess(self.window.meeting_button.width(), 300) self.assertLess(self.window.meeting_button.width(), 300)
self.assertLessEqual(self.settings.minutes_view.width(), 680) self.assertLessEqual(self.settings.minutes_view.width(), 680)
def test_wide_windows_center_every_task_and_settings_page(self):
self.window.resize(1900, 1000)
for mode, area in self.window.mode_pages.items():
self.window.show_mode(mode)
QApplication.processEvents()
with self.subTest(mode=mode):
self.assertLessEqual(area.widget().width(), 680)
self.assertAlmostEqual(area.widget().geometry().center().x(),
area.viewport().rect().center().x(), delta=1)
self.settings.resize(1900, 1000)
self.settings.show()
for index in range(self.settings.tabs.count()):
self.settings.tabs.setCurrentIndex(index)
QApplication.processEvents()
area = self.settings.tabs.widget(index)
with self.subTest(settings=index):
self.assertAlmostEqual(area.widget().geometry().center().x(),
area.viewport().rect().center().x(), delta=1)
def test_meeting_and_assistant_actions_share_one_row(self):
self.window.resize(620, 760)
for mode, labels in (
("meeting", ("Copy", "Write it up", "Open the folder", "Delete selected", "Reload")),
("ask", (self.window.ask_button.text(), "Start a new conversation")),
):
self.window.show_mode(mode)
QApplication.processEvents()
page = self.window.mode_pages[mode]
buttons = {b.text(): b for b in page.findChildren(QPushButton)}
positions = [buttons[label].mapTo(page, buttons[label].rect().center()).y()
for label in labels]
with self.subTest(mode=mode):
self.assertLessEqual(max(positions) - min(positions), 1)
def test_empty_state_does_not_invent_a_transcript(self): def test_empty_state_does_not_invent_a_transcript(self):
self.assertEqual(self.window.latest_text.toPlainText(), "") self.assertEqual(self.window.latest_text.toPlainText(), "")
self.assertFalse(self.window.copy_button.isEnabled()) self.assertFalse(self.window.copy_button.isEnabled())