supervertaler 1.9.130__py3-none-any.whl → 1.9.132__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.
- Supervertaler.py +66 -5
- modules/shortcut_manager.py +7 -0
- {supervertaler-1.9.130.dist-info → supervertaler-1.9.132.dist-info}/METADATA +2 -2
- {supervertaler-1.9.130.dist-info → supervertaler-1.9.132.dist-info}/RECORD +8 -8
- {supervertaler-1.9.130.dist-info → supervertaler-1.9.132.dist-info}/WHEEL +0 -0
- {supervertaler-1.9.130.dist-info → supervertaler-1.9.132.dist-info}/entry_points.txt +0 -0
- {supervertaler-1.9.130.dist-info → supervertaler-1.9.132.dist-info}/licenses/LICENSE +0 -0
- {supervertaler-1.9.130.dist-info → supervertaler-1.9.132.dist-info}/top_level.txt +0 -0
Supervertaler.py
CHANGED
|
@@ -34,7 +34,7 @@ License: MIT
|
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
36
|
# Version Information.
|
|
37
|
-
__version__ = "1.9.
|
|
37
|
+
__version__ = "1.9.132"
|
|
38
38
|
__phase__ = "0.9"
|
|
39
39
|
__release_date__ = "2026-01-19"
|
|
40
40
|
__edition__ = "Qt"
|
|
@@ -126,7 +126,7 @@ try:
|
|
|
126
126
|
QScrollArea, QSizePolicy, QSlider, QToolButton, QAbstractItemView
|
|
127
127
|
)
|
|
128
128
|
from PyQt6.QtCore import Qt, QSize, QTimer, pyqtSignal, QObject, QUrl
|
|
129
|
-
from PyQt6.QtGui import QFont, QAction, QKeySequence, QIcon, QTextOption, QColor, QDesktopServices, QTextCharFormat, QTextCursor, QBrush, QSyntaxHighlighter, QPalette, QTextBlockFormat
|
|
129
|
+
from PyQt6.QtGui import QFont, QAction, QKeySequence, QIcon, QTextOption, QColor, QDesktopServices, QTextCharFormat, QTextCursor, QBrush, QSyntaxHighlighter, QPalette, QTextBlockFormat, QCursor
|
|
130
130
|
from PyQt6.QtWidgets import QStyleOptionViewItem, QStyle
|
|
131
131
|
from PyQt6.QtCore import QRectF
|
|
132
132
|
from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
|
|
@@ -5683,6 +5683,9 @@ class SupervertalerQt(QMainWindow):
|
|
|
5683
5683
|
|
|
5684
5684
|
# Ctrl+N - Focus Segment Note tab
|
|
5685
5685
|
create_shortcut("editor_focus_notes", "Ctrl+N", self.focus_segment_notes)
|
|
5686
|
+
|
|
5687
|
+
# Alt+K - Open QuickMenu directly
|
|
5688
|
+
create_shortcut("editor_open_quickmenu", "Alt+K", self.open_quickmenu)
|
|
5686
5689
|
|
|
5687
5690
|
def focus_segment_notes(self):
|
|
5688
5691
|
"""Switch to Segment Note tab and focus the notes editor so user can start typing immediately"""
|
|
@@ -5696,6 +5699,63 @@ class SupervertalerQt(QMainWindow):
|
|
|
5696
5699
|
if hasattr(self, 'bottom_notes_edit'):
|
|
5697
5700
|
self.bottom_notes_edit.setFocus()
|
|
5698
5701
|
|
|
5702
|
+
def open_quickmenu(self):
|
|
5703
|
+
"""Open QuickMenu popup at current cursor position for quick AI prompt selection.
|
|
5704
|
+
|
|
5705
|
+
User can navigate with arrow keys and press Enter to select a prompt.
|
|
5706
|
+
"""
|
|
5707
|
+
try:
|
|
5708
|
+
# Get QuickMenu items from prompt library
|
|
5709
|
+
quickmenu_items = []
|
|
5710
|
+
if hasattr(self, 'prompt_manager_qt') and self.prompt_manager_qt:
|
|
5711
|
+
lib = getattr(self.prompt_manager_qt, 'library', None)
|
|
5712
|
+
if lib and hasattr(lib, 'get_quickmenu_grid_prompts'):
|
|
5713
|
+
quickmenu_items = lib.get_quickmenu_grid_prompts() or []
|
|
5714
|
+
|
|
5715
|
+
if not quickmenu_items:
|
|
5716
|
+
self.log("⚠️ No QuickMenu prompts available. Add prompts with 'Show in Supervertaler QuickMenu' enabled.")
|
|
5717
|
+
return
|
|
5718
|
+
|
|
5719
|
+
# Find the currently focused widget (source or target cell)
|
|
5720
|
+
focus_widget = QApplication.focusWidget()
|
|
5721
|
+
|
|
5722
|
+
# Build the menu
|
|
5723
|
+
menu = QMenu(self)
|
|
5724
|
+
menu.setTitle("⚡ QuickMenu")
|
|
5725
|
+
|
|
5726
|
+
for rel_path, label in sorted(quickmenu_items, key=lambda x: (x[1] or x[0]).lower()):
|
|
5727
|
+
prompt_menu = menu.addMenu(label or rel_path)
|
|
5728
|
+
|
|
5729
|
+
run_show = QAction("▶ Run (show response)…", self)
|
|
5730
|
+
run_show.triggered.connect(
|
|
5731
|
+
lambda checked=False, p=rel_path, w=focus_widget: self.run_grid_quickmenu_prompt(p, origin_widget=w, behavior="show")
|
|
5732
|
+
)
|
|
5733
|
+
prompt_menu.addAction(run_show)
|
|
5734
|
+
|
|
5735
|
+
run_replace = QAction("↺ Run and replace target selection", self)
|
|
5736
|
+
run_replace.triggered.connect(
|
|
5737
|
+
lambda checked=False, p=rel_path, w=focus_widget: self.run_grid_quickmenu_prompt(p, origin_widget=w, behavior="replace")
|
|
5738
|
+
)
|
|
5739
|
+
prompt_menu.addAction(run_replace)
|
|
5740
|
+
|
|
5741
|
+
# Show menu at cursor position (or center of focused widget)
|
|
5742
|
+
if focus_widget:
|
|
5743
|
+
# Get cursor rectangle if it's a text editor
|
|
5744
|
+
if hasattr(focus_widget, 'cursorRect'):
|
|
5745
|
+
cursor_rect = focus_widget.cursorRect()
|
|
5746
|
+
pos = focus_widget.mapToGlobal(cursor_rect.bottomLeft())
|
|
5747
|
+
else:
|
|
5748
|
+
# Fallback to center of widget
|
|
5749
|
+
pos = focus_widget.mapToGlobal(focus_widget.rect().center())
|
|
5750
|
+
else:
|
|
5751
|
+
# Fallback to mouse cursor position
|
|
5752
|
+
pos = QCursor.pos()
|
|
5753
|
+
|
|
5754
|
+
menu.exec(pos)
|
|
5755
|
+
|
|
5756
|
+
except Exception as e:
|
|
5757
|
+
self.log(f"❌ Error opening QuickMenu: {e}")
|
|
5758
|
+
|
|
5699
5759
|
def refresh_shortcut_enabled_states(self):
|
|
5700
5760
|
"""Refresh enabled/disabled states and key bindings of all global shortcuts from shortcut manager.
|
|
5701
5761
|
|
|
@@ -6472,9 +6532,10 @@ class SupervertalerQt(QMainWindow):
|
|
|
6472
6532
|
supercleaner_action.triggered.connect(lambda: self._navigate_to_tool("Supercleaner"))
|
|
6473
6533
|
tools_menu.addAction(supercleaner_action)
|
|
6474
6534
|
|
|
6475
|
-
superlookup_action = QAction("🔍 Super&lookup...", self)
|
|
6476
|
-
|
|
6477
|
-
|
|
6535
|
+
superlookup_action = QAction("🔍 Super&lookup (Ctrl+K)...", self)
|
|
6536
|
+
# Note: Actual Ctrl+K shortcut handled by QShortcut in setup_global_shortcuts()
|
|
6537
|
+
# which calls show_concordance_search() for proper selection capture
|
|
6538
|
+
superlookup_action.triggered.connect(self.show_concordance_search)
|
|
6478
6539
|
tools_menu.addAction(superlookup_action)
|
|
6479
6540
|
|
|
6480
6541
|
supervoice_action = QAction("🎤 Super&voice...", self)
|
modules/shortcut_manager.py
CHANGED
|
@@ -555,6 +555,13 @@ class ShortcutManager:
|
|
|
555
555
|
"action": "add_word_to_dictionary",
|
|
556
556
|
"context": "grid_editor"
|
|
557
557
|
},
|
|
558
|
+
"editor_open_quickmenu": {
|
|
559
|
+
"category": "Editor",
|
|
560
|
+
"description": "Open QuickMenu for AI prompt actions",
|
|
561
|
+
"default": "Alt+K",
|
|
562
|
+
"action": "open_quickmenu",
|
|
563
|
+
"context": "grid_editor"
|
|
564
|
+
},
|
|
558
565
|
"editor_show_context_menu_double_shift": {
|
|
559
566
|
"category": "Editor",
|
|
560
567
|
"description": "Show context menu (double-tap Shift)",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: supervertaler
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.132
|
|
4
4
|
Summary: Professional AI-powered 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
|
|
@@ -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.
|
|
82
|
+
**Current Version:** v1.9.132 (January 20, 2026)
|
|
83
83
|
|
|
84
84
|
### ENHANCED in v1.9.128 - 📝 Placeholders Tab Layout Optimization
|
|
85
85
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Supervertaler.py,sha256=
|
|
1
|
+
Supervertaler.py,sha256=9qsQbd5hEWk77Ai__NsBxX8hVkwa9f6sJG2knb-Otic,2143966
|
|
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=mA5ISI22qN9mH3DQFF4gOTciDyBt5xVR7sHTkgkTIlw,11361
|
|
@@ -41,7 +41,7 @@ modules/quick_access_sidebar.py,sha256=RPn5ssvYXlitNMWFZN9Yxv7So8u_z5RGNpHN6N-SF
|
|
|
41
41
|
modules/ribbon_widget.py,sha256=QNGKxmit_oM5C5nJViadYYEzeRlIdIsla8Bzu_RNGO0,21990
|
|
42
42
|
modules/sdlppx_handler.py,sha256=o6Rj_T0B94toiYlvDDwMYLSz4q6kANgegFaDK5i3yhs,33538
|
|
43
43
|
modules/setup_wizard.py,sha256=1prK5GPrUU4U4CqdT3G1RA3iy8FG1Z4jgPmPPZXOOEA,13115
|
|
44
|
-
modules/shortcut_manager.py,sha256=
|
|
44
|
+
modules/shortcut_manager.py,sha256=Yf3ZlzJg8c0P0Z_GhfOYosLCAj5FWXWnmYe2DMXS8GU,31993
|
|
45
45
|
modules/simple_segmenter.py,sha256=-V7L-tjajW1M3DADxvcYEgBu0VLJvmRQl6VB9OshiuM,4480
|
|
46
46
|
modules/spellcheck_manager.py,sha256=jwduHJ66pOKv1MtzSAltxpP8LPgz11FvF6j8h7BiRZY,27592
|
|
47
47
|
modules/statuses.py,sha256=t6TCA9pNZHDw3SbKTxT73uKezJhwWk9gFLr0NOgEufs,6911
|
|
@@ -77,9 +77,9 @@ modules/unified_prompt_manager_qt.py,sha256=kpR-Tk1xmVyJGHnZdHm6NbGQPTZ1jB8t4tI_
|
|
|
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.
|
|
81
|
-
supervertaler-1.9.
|
|
82
|
-
supervertaler-1.9.
|
|
83
|
-
supervertaler-1.9.
|
|
84
|
-
supervertaler-1.9.
|
|
85
|
-
supervertaler-1.9.
|
|
80
|
+
supervertaler-1.9.132.dist-info/licenses/LICENSE,sha256=m28u-4qL5nXIWnJ6xlQVw__H30rWFtRK3pCOais2OuY,1092
|
|
81
|
+
supervertaler-1.9.132.dist-info/METADATA,sha256=3TgEBK08En64IJMCwc9ea5VUYzJ3vJ4_mpiaOmgCKjs,42458
|
|
82
|
+
supervertaler-1.9.132.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
83
|
+
supervertaler-1.9.132.dist-info/entry_points.txt,sha256=NP4hiCvx-_30YYKqgr-jfJYQvHr1qTYBMfoVmKIXSM8,53
|
|
84
|
+
supervertaler-1.9.132.dist-info/top_level.txt,sha256=9tUHBYUSfaE4S2E4W3eavJsDyYymkwLfeWAHHAPT6Dk,22
|
|
85
|
+
supervertaler-1.9.132.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|