* Added result sorting options to KanjiDic.
authorUrban Wallasch <urban.wallasch@freenet.de>
Sat, 26 Jun 2021 15:04:15 +0000 (17:04 +0200)
committerUrban Wallasch <urban.wallasch@freenet.de>
Sat, 26 Jun 2021 15:30:27 +0000 (17:30 +0200)
kanjidic.py

index 6f4195e1a8032693ced7a4176f163dd6e17c924e..0d8c509e1aec6b59966a020eb0f3126693227e94 100755 (executable)
@@ -682,11 +682,25 @@ class kdMainWindow(QDialog):
         text_search_layout = zQHBoxLayout()
         text_search_layout.addWidget(self.text_search_box, 10)
         text_search_layout.addWidget(self.text_search_clearbtn, 1)
+        # result sorting
+        self.sort_check = QCheckBox('S&ort Results by:')
+        self.sort_stroke = QRadioButton('Strokes')
+        self.sort_radic = QRadioButton('Radicals')
+        self.sort_codep = QRadioButton('Codepoint')
+        self.sort_stroke.setChecked(True)
+        sort_layout = zQHBoxLayout()
+        sort_layout.addWidget(self.sort_stroke, 1)
+        sort_layout.addSpacing(10)
+        sort_layout.addWidget(self.sort_radic, 1)
+        sort_layout.addSpacing(10)
+        sort_layout.addWidget(self.sort_codep, 1)
+        sort_layout.addStretch(999)
         # search option layout
         opt_layout = zQFormLayout()
         opt_layout.addRow(self.stroke_search_check, stroke_search_layout )
         opt_layout.addRow(self.rad_search_check, rad_search_layout )
         opt_layout.addRow(self.text_search_check, text_search_layout )
+        opt_layout.addRow(self.sort_check, sort_layout )
         self.opt_group.setLayout(opt_layout)
         # search results
         self.result_group = zQGroupBox('Search Results:')
@@ -738,6 +752,12 @@ class kdMainWindow(QDialog):
         self.text_search_check.toggled.connect(self.text_search_toggle)
         self.text_search_check.setChecked(True)
         self.text_search_check.setChecked(False)
+        self.sort_check.toggled.connect(self.sort_toggle)
+        self.sort_stroke.toggled.connect(self.sort_toggle)
+        self.sort_radic.toggled.connect(self.sort_toggle)
+        self.sort_codep.toggled.connect(self.sort_toggle)
+        self.sort_check.setChecked(True)
+        self.sort_check.setChecked(False)
 
     def reject(self):
         if self.radlist:
@@ -805,6 +825,13 @@ class kdMainWindow(QDialog):
         self.text_search_clearbtn.setEnabled(en)
         self.update_search()
 
+    def sort_toggle(self):
+        en = self.sort_check.isChecked()
+        self.sort_stroke.setEnabled(en)
+        self.sort_radic.setEnabled(en)
+        self.sort_codep.setEnabled(en)
+        self.update_search()
+
     def on_rad_search_clear(self):
         self.rad_search_box.clearEditText()
         if self.radlist:
@@ -875,6 +902,15 @@ class kdMainWindow(QDialog):
             res = sets[0]
             for s in sets[1:]:
                 res = res.intersection(s)
+        # sort results
+        if self.sort_check.isChecked():
+            if self.sort_stroke.isChecked():
+                key = lambda k: int(_kanjidic_lookup(k)['strokes'])
+            elif self.sort_radic.isChecked():
+                key = lambda k: _kanjidic_lookup(k)['radicals']
+            else: # self.sort_codep
+                key = lambda k: ord(k)
+            res = sorted(res, key=key)
         # update search results pane
         self.result_group.setTitle('Search Results: %d' % len(res))
         self.result_area.clear()