Center wide task pages and group related actions in one row
@@ -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()
|
||||
|
||||
@@ -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):
|
||||
|
||||
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
@@ -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())
|
||||
|
||||