From 80dd69055db8f98481bbbd6cb2ccee6aadeaa864 Mon Sep 17 00:00:00 2001 From: Urban Wallasch Date: Sun, 20 Jun 2021 14:02:03 +0200 Subject: [PATCH] * Clicking the Kanji in the KanjiDic info pane looks it up in word dictionary, when KanjiDic was started from Jiten-pai. --- jiten-pai.py | 13 ++++++++++-- kanjidic.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 3 deletions(-) diff --git a/jiten-pai.py b/jiten-pai.py index 126508b..0371764 100755 --- a/jiten-pai.py +++ b/jiten-pai.py @@ -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() diff --git a/kanjidic.py b/kanjidic.py index c801f87..a14a4ec 100755 --- a/kanjidic.py +++ b/kanjidic.py @@ -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() -- 2.30.2