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 CHANGED
@@ -34,7 +34,7 @@ License: MIT
34
34
  """
35
35
 
36
36
  # Version Information.
37
- __version__ = "1.9.130"
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
- superlookup_action.setShortcut("Ctrl+K")
6477
- superlookup_action.triggered.connect(self._go_to_superlookup)
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)
@@ -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.130
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.130 (January 20, 2026)
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=eJ5_bOujQP7K5tJcAUb0j8-vq_jepeHj4yKo9rlfq04,2140984
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=HbrMeHY9RzgreqjBhtY3YhQYH_FvSgFO2qzOxyaPXl8,31737
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.130.dist-info/licenses/LICENSE,sha256=m28u-4qL5nXIWnJ6xlQVw__H30rWFtRK3pCOais2OuY,1092
81
- supervertaler-1.9.130.dist-info/METADATA,sha256=av1kXTxICFggrHAUMtQ0rl77MkSvmiSLHAi6gwNX1NY,42458
82
- supervertaler-1.9.130.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
83
- supervertaler-1.9.130.dist-info/entry_points.txt,sha256=NP4hiCvx-_30YYKqgr-jfJYQvHr1qTYBMfoVmKIXSM8,53
84
- supervertaler-1.9.130.dist-info/top_level.txt,sha256=9tUHBYUSfaE4S2E4W3eavJsDyYymkwLfeWAHHAPT6Dk,22
85
- supervertaler-1.9.130.dist-info/RECORD,,
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,,