diff --git a/dikte/home_ui.py b/dikte/home_ui.py index c25ac6a..293a650 100644 --- a/dikte/home_ui.py +++ b/dikte/home_ui.py @@ -100,7 +100,7 @@ def processing_locations(conf, mode="dictation", file_cleanup=None, file_timesta if provider in ("codex", "agy") and not conf[f"cleanup_{provider}_model"].strip(): model = t("{name} default model", name="Codex" if provider == "codex" else "Antigravity") text = _model_location(model, provider, local.get("llama")) if enabled else t("Editing off") - location = t("Audio: {sound} / Text: {text}", sound=sound, text=text) + location = t("Dictation: {sound} / Cleanup: {text}", sound=sound, text=text) if mode == "meeting": location += " / " + t("Minutes: {model}", model=_model_location(conf["meeting_model"], "openrouter")) elif mode == "ask": diff --git a/dikte/i18n.py b/dikte/i18n.py index c8badc9..f930830 100644 --- a/dikte/i18n.py +++ b/dikte/i18n.py @@ -68,7 +68,7 @@ TR = { "Local CPU": "Yerel CPU", "Model not selected": "Model seçilmedi", "{name} default model": "{name} varsayılan modeli", - "Audio: {sound} / Text: {text}": "Ses: {sound} / Metin: {text}", + "Dictation: {sound} / Cleanup: {text}": "Dikte: {sound} / Temizleme: {text}", "Minutes: {model}": "Tutanak: {model}", "Assistant: {model}": "Asistan: {model}", "Completed with a warning: {error}": "Uyarıyla tamamlandı: {error}", diff --git a/dikte/icons/check-light.svg b/dikte/icons/check-light.svg new file mode 100644 index 0000000..47e04cf --- /dev/null +++ b/dikte/icons/check-light.svg @@ -0,0 +1 @@ + diff --git a/dikte/icons/check.svg b/dikte/icons/check.svg new file mode 100644 index 0000000..3b9baff --- /dev/null +++ b/dikte/icons/check.svg @@ -0,0 +1 @@ + diff --git a/dikte/theme.py b/dikte/theme.py index 1939158..e3e81cf 100644 --- a/dikte/theme.py +++ b/dikte/theme.py @@ -74,15 +74,30 @@ QComboBox::drop-down { width: 26px; border: none; background: transparent; } QComboBox::down-arrow { image: url("__ICONS__/chevron-down@arrow_suffix.svg"); width: 12px; height: 12px; } -QSpinBox { padding-right: 28px; min-height: 18px; } +QSpinBox { padding: 2px 20px 2px 6px; min-height: 18px; } +QSpinBox > QLineEdit { border: none; background: transparent; padding: 0; } QSpinBox::up-button, QSpinBox::down-button { - subcontrol-origin: border; width: 26px; border: none; background: transparent; + subcontrol-origin: border; width: 20px; border: none; background: transparent; } QSpinBox::up-button { subcontrol-position: top right; border-top-right-radius: 5px; } QSpinBox::down-button { subcontrol-position: bottom right; border-bottom-right-radius: 5px; } QSpinBox::up-button:hover, QSpinBox::down-button:hover { background: @border; } QSpinBox::up-arrow { image: url("__ICONS__/chevron-up@arrow_suffix.svg"); width: 10px; height: 10px; } QSpinBox::down-arrow { image: url("__ICONS__/chevron-down@arrow_suffix.svg"); width: 10px; height: 10px; } +QCheckBox { spacing: 7px; } +QCheckBox::indicator { + width: 14px; height: 14px; border: 1px solid @border; + border-radius: 4px; background: @surface; +} +QCheckBox::indicator:hover { border-color: @accent; } +QCheckBox::indicator:checked { + background: @accent; border-color: @accent; + image: url("__ICONS__/check@arrow_suffix.svg"); +} +QCheckBox:focus::indicator { border-color: @text; } +QCheckBox:disabled { color: @disabled_text; } +QCheckBox::indicator:disabled { background: @disabled_bg; border-color: @disabled_text; } +QCheckBox::indicator:checked:disabled { background: @disabled_text; } QComboBox QAbstractItemView { background: @surface; color: @text; selection-background-color: @border; } QTabWidget::pane { border: none; } QTabBar::tab { background: @surface; padding: 10px; } diff --git a/docs/home.webp b/docs/home.webp index a7b1051..2009ec6 100644 Binary files a/docs/home.webp and b/docs/home.webp differ diff --git a/docs/settings-agent.webp b/docs/settings-agent.webp index afb5e42..8c5dad9 100644 Binary files a/docs/settings-agent.webp and b/docs/settings-agent.webp differ diff --git a/docs/settings-api.webp b/docs/settings-api.webp index 3558f6d..d4c45e5 100644 Binary files a/docs/settings-api.webp and b/docs/settings-api.webp differ diff --git a/docs/settings-audio-file.webp b/docs/settings-audio-file.webp index 747eba9..743ff3b 100644 Binary files a/docs/settings-audio-file.webp and b/docs/settings-audio-file.webp differ diff --git a/docs/settings-display.webp b/docs/settings-display.webp index e22ce8a..322cfb8 100644 Binary files a/docs/settings-display.webp and b/docs/settings-display.webp differ diff --git a/docs/settings-general.webp b/docs/settings-general.webp index cbd4787..0ec9e53 100644 Binary files a/docs/settings-general.webp and b/docs/settings-general.webp differ diff --git a/docs/settings-meeting.webp b/docs/settings-meeting.webp index 578d3ce..16f3295 100644 Binary files a/docs/settings-meeting.webp and b/docs/settings-meeting.webp differ diff --git a/tests/test_home_ui.py b/tests/test_home_ui.py index 491084a..34c499c 100644 --- a/tests/test_home_ui.py +++ b/tests/test_home_ui.py @@ -390,7 +390,8 @@ class Home(DikteTest): i18n.set_language("tr") self.window.refresh() self.assertEqual(self.window.capture_status.text(), "Konuşmaya hazır") - self.assertIn("Ses:", self.window.capture_models.text()) + self.assertIn("Dikte:", self.window.capture_models.text()) + self.assertIn("Temizleme:", self.window.capture_models.text()) def test_completed_run_refreshes_workspace_without_changing_controller_state(self): controller = Dikte.__new__(Dikte)