supervertaler 1.9.164__py3-none-any.whl → 1.9.165__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of supervertaler might be problematic. Click here for more details.

Supervertaler.py CHANGED
@@ -34,9 +34,9 @@ License: MIT
34
34
  """
35
35
 
36
36
  # Version Information.
37
- __version__ = "1.9.164"
37
+ __version__ = "1.9.165"
38
38
  __phase__ = "0.9"
39
- __release_date__ = "2026-01-26"
39
+ __release_date__ = "2026-01-27"
40
40
  __edition__ = "Qt"
41
41
 
42
42
  import sys
@@ -14858,6 +14858,13 @@ class SupervertalerQt(QMainWindow):
14858
14858
 
14859
14859
  layout.addWidget(settings_tabs)
14860
14860
 
14861
+ # Apply saved UI font scale on startup
14862
+ saved_scale = self._get_settings_ui_font_scale()
14863
+ if saved_scale != 100:
14864
+ # Defer application to ensure widgets are fully created
14865
+ from PyQt6.QtCore import QTimer
14866
+ QTimer.singleShot(100, lambda: self._apply_settings_ui_font_scale(saved_scale))
14867
+
14861
14868
  return tab
14862
14869
 
14863
14870
  def _wrap_in_scroll(self, widget):
@@ -17019,6 +17026,58 @@ class SupervertalerQt(QMainWindow):
17019
17026
  termview_group.setLayout(termview_layout)
17020
17027
  layout.addWidget(termview_group)
17021
17028
 
17029
+ # ===== UI Font Scale (for Settings panels) =====
17030
+ ui_scale_group = QGroupBox("🖥️ Settings Panel Font Size")
17031
+ ui_scale_layout = QVBoxLayout()
17032
+
17033
+ ui_scale_info = QLabel(
17034
+ "Adjust the font size for all Settings panel text. Useful for high-DPI/4K displays.\n"
17035
+ "Changes apply immediately. Default is 100%."
17036
+ )
17037
+ ui_scale_info.setWordWrap(True)
17038
+ ui_scale_layout.addWidget(ui_scale_info)
17039
+
17040
+ ui_scale_row = QHBoxLayout()
17041
+ ui_scale_row.addWidget(QLabel("UI Font Scale:"))
17042
+ ui_scale_spin = QSpinBox()
17043
+ ui_scale_spin.setMinimum(80)
17044
+ ui_scale_spin.setMaximum(200)
17045
+ ui_scale_spin.setValue(font_settings.get('settings_ui_font_scale', 100))
17046
+ ui_scale_spin.setSuffix("%")
17047
+ ui_scale_spin.setSingleStep(10)
17048
+ ui_scale_spin.setToolTip("Scale Settings panel text (80%-200%)")
17049
+ ui_scale_spin.setMinimumHeight(28)
17050
+ ui_scale_spin.setMinimumWidth(90)
17051
+ ui_scale_spin.setStyleSheet("""
17052
+ QSpinBox {
17053
+ padding-right: 20px;
17054
+ }
17055
+ QSpinBox::up-button {
17056
+ width: 20px;
17057
+ height: 14px;
17058
+ }
17059
+ QSpinBox::down-button {
17060
+ width: 20px;
17061
+ height: 14px;
17062
+ }
17063
+ """)
17064
+ ui_scale_row.addWidget(ui_scale_spin)
17065
+
17066
+ # Apply button for immediate feedback
17067
+ apply_scale_btn = QPushButton("Apply")
17068
+ apply_scale_btn.setToolTip("Apply font scale immediately")
17069
+ apply_scale_btn.clicked.connect(lambda: self._apply_settings_ui_font_scale(ui_scale_spin.value()))
17070
+ ui_scale_row.addWidget(apply_scale_btn)
17071
+
17072
+ ui_scale_row.addStretch()
17073
+ ui_scale_layout.addLayout(ui_scale_row)
17074
+
17075
+ # Store reference for saving
17076
+ self._ui_scale_spin = ui_scale_spin
17077
+
17078
+ ui_scale_group.setLayout(ui_scale_layout)
17079
+ layout.addWidget(ui_scale_group)
17080
+
17022
17081
  # Quick Reference section
17023
17082
  reference_group = QGroupBox("⌨️ Font Size Quick Reference")
17024
17083
  reference_layout = QVBoxLayout()
@@ -17043,12 +17102,20 @@ class SupervertalerQt(QMainWindow):
17043
17102
  # Save button
17044
17103
  save_btn = QPushButton("💾 Save View Settings")
17045
17104
  save_btn.setStyleSheet("font-weight: bold; padding: 8px;")
17046
- save_btn.clicked.connect(lambda: self._save_view_settings_from_ui(
17047
- grid_font_spin, match_font_spin, compare_font_spin, show_tags_check, tag_color_btn,
17048
- alt_colors_check, even_color_btn, odd_color_btn, invisible_char_color_btn, grid_font_family_combo,
17049
- termview_font_family_combo, termview_font_spin, termview_bold_check,
17050
- border_color_btn, border_thickness_spin, badge_text_color_btn, tabs_above_check
17051
- ))
17105
+
17106
+ def save_view_settings_with_scale():
17107
+ # Save the UI scale setting first
17108
+ if hasattr(self, '_ui_scale_spin'):
17109
+ self._apply_settings_ui_font_scale(self._ui_scale_spin.value())
17110
+ # Then save other view settings
17111
+ self._save_view_settings_from_ui(
17112
+ grid_font_spin, match_font_spin, compare_font_spin, show_tags_check, tag_color_btn,
17113
+ alt_colors_check, even_color_btn, odd_color_btn, invisible_char_color_btn, grid_font_family_combo,
17114
+ termview_font_family_combo, termview_font_spin, termview_bold_check,
17115
+ border_color_btn, border_thickness_spin, badge_text_color_btn, tabs_above_check
17116
+ )
17117
+
17118
+ save_btn.clicked.connect(save_view_settings_with_scale)
17052
17119
  layout.addWidget(save_btn)
17053
17120
 
17054
17121
  layout.addStretch()
@@ -19167,6 +19234,73 @@ class SupervertalerQt(QMainWindow):
19167
19234
  msg.setStandardButtons(QMessageBox.StandardButton.Ok)
19168
19235
  msg.exec()
19169
19236
 
19237
+ def _apply_settings_ui_font_scale(self, scale_percent: int):
19238
+ """Apply font scale to all Settings panels for better readability on high-DPI displays"""
19239
+ # Save the setting
19240
+ general_settings = self.load_general_settings()
19241
+ general_settings['settings_ui_font_scale'] = scale_percent
19242
+ self.save_general_settings(general_settings)
19243
+
19244
+ # Calculate base font size (default system font is typically 9-10pt)
19245
+ base_size = 10 # Base font size in points
19246
+ scaled_size = int(base_size * scale_percent / 100)
19247
+
19248
+ # Create stylesheet for Settings panels
19249
+ settings_stylesheet = f"""
19250
+ QGroupBox {{
19251
+ font-size: {scaled_size + 1}pt;
19252
+ font-weight: bold;
19253
+ }}
19254
+ QGroupBox QLabel {{
19255
+ font-size: {scaled_size}pt;
19256
+ }}
19257
+ QGroupBox QCheckBox {{
19258
+ font-size: {scaled_size}pt;
19259
+ }}
19260
+ QGroupBox QRadioButton {{
19261
+ font-size: {scaled_size}pt;
19262
+ }}
19263
+ QGroupBox QComboBox {{
19264
+ font-size: {scaled_size}pt;
19265
+ }}
19266
+ QGroupBox QSpinBox {{
19267
+ font-size: {scaled_size}pt;
19268
+ }}
19269
+ QGroupBox QLineEdit {{
19270
+ font-size: {scaled_size}pt;
19271
+ }}
19272
+ QGroupBox QPushButton {{
19273
+ font-size: {scaled_size}pt;
19274
+ }}
19275
+ QGroupBox QTextEdit {{
19276
+ font-size: {scaled_size}pt;
19277
+ }}
19278
+ QGroupBox QPlainTextEdit {{
19279
+ font-size: {scaled_size}pt;
19280
+ }}
19281
+ """
19282
+
19283
+ # Apply to settings_tabs if it exists
19284
+ if hasattr(self, 'settings_tabs') and self.settings_tabs is not None:
19285
+ self.settings_tabs.setStyleSheet(
19286
+ "QTabBar::tab { outline: 0; font-size: " + str(scaled_size) + "pt; } "
19287
+ "QTabBar::tab:focus { outline: none; } "
19288
+ "QTabBar::tab:selected { border-bottom: 1px solid #2196F3; background-color: rgba(33, 150, 243, 0.08); }"
19289
+ )
19290
+
19291
+ # Apply to each tab's content
19292
+ for i in range(self.settings_tabs.count()):
19293
+ widget = self.settings_tabs.widget(i)
19294
+ if widget:
19295
+ widget.setStyleSheet(settings_stylesheet)
19296
+
19297
+ self.log(f"✓ Settings UI font scale set to {scale_percent}% (base: {scaled_size}pt)")
19298
+
19299
+ def _get_settings_ui_font_scale(self) -> int:
19300
+ """Get the current Settings UI font scale percentage"""
19301
+ general_settings = self.load_general_settings()
19302
+ return general_settings.get('settings_ui_font_scale', 100)
19303
+
19170
19304
  def create_grid_view_widget(self):
19171
19305
  """Create the Grid View widget (existing grid functionality)"""
19172
19306
  widget = QWidget()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.164
3
+ Version: 1.9.165
4
4
  Summary: Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core).
5
5
  Home-page: https://supervertaler.com
6
6
  Author: Michael Beijer
@@ -71,7 +71,7 @@ Dynamic: home-page
71
71
  Dynamic: license-file
72
72
  Dynamic: requires-python
73
73
 
74
- # 🚀 Supervertaler v1.9.164
74
+ # 🚀 Supervertaler v1.9.165
75
75
 
76
76
  [![PyPI version](https://badge.fury.io/py/supervertaler.svg)](https://pypi.org/project/Supervertaler/)
77
77
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
@@ -79,7 +79,7 @@ Dynamic: requires-python
79
79
 
80
80
  AI-enhanced CAT tool with multi-LLM support (GPT-4, Claude, Gemini, Ollama), innovative Superlookup concordance system offering access to multiple terminology sources (TMs, glossaries, web resources, etc.), and seamless CAT tool integration (memoQ, Trados, CafeTran, Phrase).
81
81
 
82
- **Current Version:** v1.9.164 (January 26, 2026)
82
+ **Current Version:** v1.9.165 (January 27, 2026)
83
83
 
84
84
  ### NEW in v1.9.162 - ⚡ Cache Kill Switch & Performance Testing
85
85
 
@@ -1,4 +1,4 @@
1
- Supervertaler.py,sha256=gh-67gpR65ZbNF8grWDpJJR9pUXr5wQ1p37nTRtsj3w,2264715
1
+ Supervertaler.py,sha256=BVlMHT0MeI4aUMZFQ4gaorKvxQlx0hE1u-L56rauErw,2270102
2
2
  modules/__init__.py,sha256=G58XleS-EJ2sX4Kehm-3N2m618_W2Es0Kg8CW_eBG7g,327
3
3
  modules/ai_actions.py,sha256=i5MJcM-7Y6CAvKUwxmxrVHeoZAVtAP7aRDdWM5KLkO0,33877
4
4
  modules/ai_attachment_manager.py,sha256=juZlrW3UPkIkcnj0SREgOQkQROLf0fcu3ShZcKXMxsI,11361
@@ -77,9 +77,9 @@ modules/unified_prompt_manager_qt.py,sha256=fyF3_r0N8hnImT-CcWo1AuBOQ1Dn_ExeeUCk
77
77
  modules/voice_commands.py,sha256=iBb-gjWxRMLhFH7-InSRjYJz1EIDBNA2Pog8V7TtJaY,38516
78
78
  modules/voice_dictation.py,sha256=QmitXfkG-vRt5hIQATjphHdhXfqmwhzcQcbXB6aRzIg,16386
79
79
  modules/voice_dictation_lite.py,sha256=jorY0BmWE-8VczbtGrWwt1zbnOctMoSlWOsQrcufBcc,9423
80
- supervertaler-1.9.164.dist-info/licenses/LICENSE,sha256=m28u-4qL5nXIWnJ6xlQVw__H30rWFtRK3pCOais2OuY,1092
81
- supervertaler-1.9.164.dist-info/METADATA,sha256=5YYkounxUPZNOqsTIUmZbqpOZYhoJebihJuKCIXycI4,46629
82
- supervertaler-1.9.164.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
83
- supervertaler-1.9.164.dist-info/entry_points.txt,sha256=NP4hiCvx-_30YYKqgr-jfJYQvHr1qTYBMfoVmKIXSM8,53
84
- supervertaler-1.9.164.dist-info/top_level.txt,sha256=9tUHBYUSfaE4S2E4W3eavJsDyYymkwLfeWAHHAPT6Dk,22
85
- supervertaler-1.9.164.dist-info/RECORD,,
80
+ supervertaler-1.9.165.dist-info/licenses/LICENSE,sha256=m28u-4qL5nXIWnJ6xlQVw__H30rWFtRK3pCOais2OuY,1092
81
+ supervertaler-1.9.165.dist-info/METADATA,sha256=8K-OPj7vfJPny7y-ccTLCFAmdR-SQjMEZlV2cMLm1Es,46629
82
+ supervertaler-1.9.165.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
83
+ supervertaler-1.9.165.dist-info/entry_points.txt,sha256=NP4hiCvx-_30YYKqgr-jfJYQvHr1qTYBMfoVmKIXSM8,53
84
+ supervertaler-1.9.165.dist-info/top_level.txt,sha256=9tUHBYUSfaE4S2E4W3eavJsDyYymkwLfeWAHHAPT6Dk,22
85
+ supervertaler-1.9.165.dist-info/RECORD,,