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["meeting"] = self._scrolled(self._meeting_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():
self.pages.addWidget(page)
self.footer = _label("", "footer")
self.footer = _label("", "footer", True)
root.addWidget(self.footer)
self._timer = QTimer(self)
self._timer.setInterval(500)
@@ -189,6 +189,7 @@ class HomeWindow(QWidget):
page.setMaximumWidth(680)
area = QScrollArea()
area.setWidgetResizable(True)
area.setAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop)
area.setFrameShape(QFrame.Shape.NoFrame)
area.setWidget(page)
return area
@@ -282,13 +283,16 @@ class HomeWindow(QWidget):
layout.addWidget(self.ask_status)
self.ask_scope = _label("", "muted")
layout.addWidget(self.ask_scope)
actions = QHBoxLayout()
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)
layout.addWidget(self.ask_pause)
self.ask_cancel = _button(t("Stop"), self._cancel_ask)
layout.addWidget(self.ask_cancel)
layout.addWidget(_button(t("Start a new conversation"), self.controller.reset_conversation))
self.ask_error = _label()
layout.addWidget(self.ask_error)
self.ask_output = QPlainTextEdit()
+4 -6
View File
@@ -1154,6 +1154,7 @@ class SettingsWindow(QDialog):
page.setMaximumWidth(680)
area = QScrollArea()
area.setWidgetResizable(True)
area.setAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop)
area.setFrameShape(QScrollArea.Shape.NoFrame)
area.setWidget(page)
for box in page.findChildren((QComboBox, QAbstractSpinBox)):
@@ -1986,14 +1987,11 @@ class SettingsWindow(QDialog):
row = QHBoxLayout()
row.addWidget(copy)
row.addWidget(self.minutes_retry)
row.addWidget(folder)
row.addWidget(delete)
row.addWidget(reload_)
row.addStretch()
layout.addLayout(row)
more = QHBoxLayout()
more.addWidget(folder)
more.addWidget(delete)
more.addWidget(reload_)
more.addStretch()
layout.addLayout(more)
return page
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 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.app import Dikte
@@ -86,6 +86,40 @@ class Home(DikteTest):
self.assertLess(self.window.meeting_button.width(), 300)
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):
self.assertEqual(self.window.latest_text.toPlainText(), "")
self.assertFalse(self.window.copy_button.isEnabled())