* Clicking the Kanji in the KanjiDic info pane looks it up in word dictionary, when...
authorUrban Wallasch <urban.wallasch@freenet.de>
Sun, 20 Jun 2021 12:02:03 +0000 (14:02 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Sun, 20 Jun 2021 12:02:03 +0000 (14:02 +0200)
jiten-pai.py
kanjidic.py

index 126508b1b1873a687e3b5228610ea0e55392584e..03717646f09d6f99483640357f1ca25e6f387831 100755 (executable)
@@ -407,22 +407,24 @@ class zQGroupBox(QGroupBox):
 class zQTextEdit(QTextEdit):
     kanji = None
     kanji_click = pyqtSignal(str)
+    app = None
     _ov_cursor = False
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.kanji = ''
+        self.app = QCoreApplication.instance()
         self.setMouseTracking(True)
 
     def _override_cursor(self):
         if not self._ov_cursor:
             self._ov_cursor = True
-            app.setOverrideCursor(Qt.WhatsThisCursor)
+            self.app.setOverrideCursor(Qt.WhatsThisCursor)
 
     def _restore_cursor(self):
         if self._ov_cursor:
             self._ov_cursor = False
-            app.restoreOverrideCursor()
+            self.app.restoreOverrideCursor()
 
     def mouseMoveEvent(self, event):
         pos = event.pos()
@@ -1166,9 +1168,16 @@ class jpMainWindow(QMainWindow):
         dlg = aboutDialog(self)
         dlg.exec_()
 
+    def kanjidic_clicked(self, kanji=''):
+        if kanji:
+            self.search_box.lineEdit().setText(kanji)
+            self.activateWindow()
+            self.search()
+
     def kanjidic(self, kanji=''):
         if not self.kanji_dlg:
             self.kanji_dlg = kdMainWindow(self)
+            self.kanji_dlg.kanji_click.connect(self.kanjidic_clicked)
         self.kanji_dlg.show_info(kanji)
         self.kanji_dlg.showNormal()
         self.kanji_dlg.activateWindow()
index c801f87861cba707e5bfb22ea64f7137a09f5149..a14a4ec77c8d9820eaa6ed12cfdda2f9fcea77d9 100755 (executable)
@@ -28,6 +28,9 @@ def die(rc=0):
 def eprint(*args, **kwargs):
     print(*args, file=sys.stderr, **kwargs)
 
+def is_kanji(s):
+    return True if re.match("^[\u4e00-\u9FFF]$", s) else False
+
 def _get_dfile_path(fname, mode=os.R_OK):
     cdirs = []
     if os.environ.get('APPDATA'):
@@ -169,11 +172,62 @@ class zQGroupBox(QGroupBox):
             }"""
         )
 
+class zQTextEdit(QTextEdit):
+    kanji = None
+    kanji_click = pyqtSignal(str)
+    app = None
+    _ov_cursor = False
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.kanji = ''
+        self.app = QCoreApplication.instance()
+        self.setMouseTracking(True)
+
+    def _override_cursor(self):
+        if not self._ov_cursor:
+            self._ov_cursor = True
+            self.app.setOverrideCursor(Qt.WhatsThisCursor)
+
+    def _restore_cursor(self):
+        if self._ov_cursor:
+            self._ov_cursor = False
+            self.app.restoreOverrideCursor()
+
+    def mouseMoveEvent(self, event):
+        pos = event.pos()
+        pos.setX(pos.x() - 15)
+        old_tcur = self.textCursor()
+        tcur = self.cursorForPosition(pos)
+        self.setTextCursor(tcur)
+        tcur.movePosition(QTextCursor.Right, QTextCursor.KeepAnchor);
+        char = tcur.selectedText()
+        scr = self.verticalScrollBar().value()
+        self.setTextCursor(old_tcur)
+        self.verticalScrollBar().setValue(scr)
+        if is_kanji(char):
+            self.kanji = char
+            self._override_cursor()
+        else:
+            self.kanji = ''
+            self._restore_cursor()
+        super().mouseMoveEvent(event)
+
+    def mouseReleaseEvent(self, event):
+        if self.kanji and len(self.textCursor().selectedText()) < 1:
+            self.kanji_click.emit(self.kanji)
+
+    def leaveEvent(self, event):
+        self.kanji = ''
+        self._restore_cursor()
+
 
 ############################################################
 # main window class
 
 class kdMainWindow(QDialog):
+    kanji_click = pyqtSignal(str)
+
     def __init__(self, *args, title=_KANJIDIC_NAME + ' ' + _KANJIDIC_VERSION, **kwargs):
         super().__init__(*args, **kwargs)
         self.setModal(False)
@@ -204,7 +258,8 @@ class kdMainWindow(QDialog):
         self.result_group.setLayout(result_layout)
         # info area
         self.info_group = zQGroupBox('Kanji Info:')
-        self.info_pane = QTextEdit()
+        self.info_pane = zQTextEdit()
+        self.info_pane.kanji_click.connect(self.kanji_click)
         self.info_pane.setReadOnly(True)
         self.info_pane.setText('')
         info_layout = zQVBoxLayout()