├── stuff
├── add.png
├── db.png
├── del.png
├── books.png
├── check.png
├── copy.png
├── exec.png
├── font.ttf
├── info.png
├── logo.png
├── prefs.png
├── quit.png
├── sort.png
├── sync.png
├── trash.png
├── wait.gif
├── calendar.png
├── db_add.png
├── db_open.png
├── delete.png
├── filter.png
├── logo64.png
├── paypal.png
├── paypal76.png
├── trans32.png
├── db_compact.png
├── file_edit.png
├── file_save.png
├── files_add.png
├── files_view.png
├── power32red.png
├── refresh16.png
├── show_pages.png
├── view-sync.png
├── view_books.png
├── description.png
├── file_exists.png
├── file_missing.png
├── files_delete.png
├── files_merge.png
├── folder_open.png
├── folder_reader.png
├── label_green.png
├── power32gray.png
└── view-highlights.png
├── docs
└── images
│ ├── 11.png
│ ├── 10_2.png
│ ├── 1_2.png
│ ├── 2_2.png
│ ├── 3_2.png
│ ├── 4_2.png
│ ├── 8_2.png
│ ├── 9_2.png
│ ├── image5.png
│ ├── image6.png
│ └── image7.png
├── screens
├── screen d1.png
├── screen d2.png
├── screen d3.png
├── screen d4.png
├── screen l1.png
├── screen l2.png
├── screen l3.png
└── screen l4.png
├── requirements.txt
├── pyproject.toml
├── LICENSE
├── gui_auto_info.ui
├── images.qrc
├── gui_auto_info.py
├── gui_status.ui
├── gui_edit.py
├── gui_edit.ui
├── gui_status.py
├── gui_sync_item.ui
├── gui_sync_item.py
├── gui_filter.ui
├── gui_filter.py
├── README.md
├── boot_config.py
├── gui_about.py
├── gui_about.ui
├── slppu.py
├── gui_sync_group.py
├── gui_edit_template.ui
├── gui_edit_template.py
├── gui_prefs.py
├── gui_sync_group.ui
├── gui_prefs.ui
├── gui_main.py
└── gui_toolbar.py
/stuff/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/add.png
--------------------------------------------------------------------------------
/stuff/db.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/db.png
--------------------------------------------------------------------------------
/stuff/del.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/del.png
--------------------------------------------------------------------------------
/stuff/books.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/books.png
--------------------------------------------------------------------------------
/stuff/check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/check.png
--------------------------------------------------------------------------------
/stuff/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/copy.png
--------------------------------------------------------------------------------
/stuff/exec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/exec.png
--------------------------------------------------------------------------------
/stuff/font.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/font.ttf
--------------------------------------------------------------------------------
/stuff/info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/info.png
--------------------------------------------------------------------------------
/stuff/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/logo.png
--------------------------------------------------------------------------------
/stuff/prefs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/prefs.png
--------------------------------------------------------------------------------
/stuff/quit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/quit.png
--------------------------------------------------------------------------------
/stuff/sort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/sort.png
--------------------------------------------------------------------------------
/stuff/sync.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/sync.png
--------------------------------------------------------------------------------
/stuff/trash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/trash.png
--------------------------------------------------------------------------------
/stuff/wait.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/wait.gif
--------------------------------------------------------------------------------
/docs/images/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/11.png
--------------------------------------------------------------------------------
/stuff/calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/calendar.png
--------------------------------------------------------------------------------
/stuff/db_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/db_add.png
--------------------------------------------------------------------------------
/stuff/db_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/db_open.png
--------------------------------------------------------------------------------
/stuff/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/delete.png
--------------------------------------------------------------------------------
/stuff/filter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/filter.png
--------------------------------------------------------------------------------
/stuff/logo64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/logo64.png
--------------------------------------------------------------------------------
/stuff/paypal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/paypal.png
--------------------------------------------------------------------------------
/stuff/paypal76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/paypal76.png
--------------------------------------------------------------------------------
/stuff/trans32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/trans32.png
--------------------------------------------------------------------------------
/docs/images/10_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/10_2.png
--------------------------------------------------------------------------------
/docs/images/1_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/1_2.png
--------------------------------------------------------------------------------
/docs/images/2_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/2_2.png
--------------------------------------------------------------------------------
/docs/images/3_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/3_2.png
--------------------------------------------------------------------------------
/docs/images/4_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/4_2.png
--------------------------------------------------------------------------------
/docs/images/8_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/8_2.png
--------------------------------------------------------------------------------
/docs/images/9_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/9_2.png
--------------------------------------------------------------------------------
/stuff/db_compact.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/db_compact.png
--------------------------------------------------------------------------------
/stuff/file_edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/file_edit.png
--------------------------------------------------------------------------------
/stuff/file_save.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/file_save.png
--------------------------------------------------------------------------------
/stuff/files_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/files_add.png
--------------------------------------------------------------------------------
/stuff/files_view.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/files_view.png
--------------------------------------------------------------------------------
/stuff/power32red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/power32red.png
--------------------------------------------------------------------------------
/stuff/refresh16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/refresh16.png
--------------------------------------------------------------------------------
/stuff/show_pages.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/show_pages.png
--------------------------------------------------------------------------------
/stuff/view-sync.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/view-sync.png
--------------------------------------------------------------------------------
/stuff/view_books.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/view_books.png
--------------------------------------------------------------------------------
/docs/images/image5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/image5.png
--------------------------------------------------------------------------------
/docs/images/image6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/image6.png
--------------------------------------------------------------------------------
/docs/images/image7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/docs/images/image7.png
--------------------------------------------------------------------------------
/screens/screen d1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/screens/screen d1.png
--------------------------------------------------------------------------------
/screens/screen d2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/screens/screen d2.png
--------------------------------------------------------------------------------
/screens/screen d3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/screens/screen d3.png
--------------------------------------------------------------------------------
/screens/screen d4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/screens/screen d4.png
--------------------------------------------------------------------------------
/screens/screen l1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/screens/screen l1.png
--------------------------------------------------------------------------------
/screens/screen l2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/screens/screen l2.png
--------------------------------------------------------------------------------
/screens/screen l3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/screens/screen l3.png
--------------------------------------------------------------------------------
/screens/screen l4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/screens/screen l4.png
--------------------------------------------------------------------------------
/stuff/description.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/description.png
--------------------------------------------------------------------------------
/stuff/file_exists.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/file_exists.png
--------------------------------------------------------------------------------
/stuff/file_missing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/file_missing.png
--------------------------------------------------------------------------------
/stuff/files_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/files_delete.png
--------------------------------------------------------------------------------
/stuff/files_merge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/files_merge.png
--------------------------------------------------------------------------------
/stuff/folder_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/folder_open.png
--------------------------------------------------------------------------------
/stuff/folder_reader.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/folder_reader.png
--------------------------------------------------------------------------------
/stuff/label_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/label_green.png
--------------------------------------------------------------------------------
/stuff/power32gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/power32gray.png
--------------------------------------------------------------------------------
/stuff/view-highlights.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/noembryo/KoHighlights/HEAD/stuff/view-highlights.png
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | beautifulsoup4
2 | future
3 | PySide2
4 | requests
5 | packaging
6 | pypiwin32; sys_platform == 'win32'
7 | pywin32; sys_platform == 'win32'
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [project]
2 | name = "KoHighlights"
3 | version = "2.3.1.0"
4 | description = "KOHighlights is a utility for viewing KOReader's highlights and/or export them to simple text, html, csv or markdown files."
5 | readme = "README.md"
6 | requires-python = ">=3.7"
7 | dependencies = [
8 | "beautifulsoup4",
9 | "future",
10 | "packaging",
11 | "PySide2",
12 | "requests",
13 | "pypiwin32; os_name == 'nt'",
14 | "pywin32; os_name == 'nt'"
15 | ]
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016-2019 noEmbryo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/gui_auto_info.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | AutoInfo
4 |
5 |
6 | Qt::NonModal
7 |
8 |
9 |
10 | 0
11 | 0
12 | 300
13 | 100
14 |
15 |
16 |
17 |
18 | 0
19 | 0
20 |
21 |
22 |
23 | Info
24 |
25 |
26 |
27 |
28 |
29 | true
30 |
31 |
32 |
33 | 0
34 |
35 | -
36 |
37 |
38 |
39 | 0
40 | 0
41 |
42 |
43 |
44 | QFrame::Box
45 |
46 |
47 | QFrame::Raised
48 |
49 |
50 |
51 |
52 |
53 | Qt::AutoText
54 |
55 |
56 | Qt::AlignCenter
57 |
58 |
59 | 6
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/images.qrc:
--------------------------------------------------------------------------------
1 |
2 |
3 | stuff/db_add.png
4 | stuff/logo64.png
5 | stuff/folder_open.png
6 | stuff/file_exists.png
7 | stuff/files_view.png
8 | stuff/file_missing.png
9 | stuff/calendar.png
10 | stuff/db.png
11 | stuff/power32red.png
12 | stuff/file_edit.png
13 | stuff/refresh16.png
14 | stuff/trash.png
15 | stuff/trans32.png
16 | stuff/files_merge.png
17 | stuff/delete.png
18 | stuff/file_save.png
19 | stuff/sync.png
20 | stuff/files_delete.png
21 | stuff/view_books.png
22 | stuff/label_green.png
23 | stuff/wait.gif
24 | stuff/copy.png
25 | stuff/books.png
26 | stuff/filter.png
27 | stuff/db_compact.png
28 | stuff/view-highlights.png
29 | stuff/prefs.png
30 | stuff/description.png
31 | stuff/power32gray.png
32 | stuff/paypal.png
33 | stuff/folder_reader.png
34 | stuff/files_add.png
35 | stuff/del.png
36 | stuff/sort.png
37 | stuff/paypal76.png
38 | stuff/logo.png
39 | stuff/add.png
40 | stuff/font.ttf
41 | stuff/db_open.png
42 | stuff/view-sync.png
43 |
44 |
--------------------------------------------------------------------------------
/gui_auto_info.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_auto_info.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_auto_info.ui' applies.
5 | #
6 | # Created: Thu May 2 17:29:33 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_AutoInfo(object):
14 | def setupUi(self, AutoInfo):
15 | AutoInfo.setObjectName("AutoInfo")
16 | AutoInfo.setWindowModality(QtCore.Qt.NonModal)
17 | AutoInfo.resize(300, 100)
18 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
19 | sizePolicy.setHorizontalStretch(0)
20 | sizePolicy.setVerticalStretch(0)
21 | sizePolicy.setHeightForWidth(AutoInfo.sizePolicy().hasHeightForWidth())
22 | AutoInfo.setSizePolicy(sizePolicy)
23 | AutoInfo.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
24 | AutoInfo.setModal(True)
25 | self.verticalLayout = QtWidgets.QVBoxLayout(AutoInfo)
26 | self.verticalLayout.setContentsMargins(0, 0, 0, 0)
27 | self.verticalLayout.setObjectName("verticalLayout")
28 | self.label = QtWidgets.QLabel(AutoInfo)
29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
30 | sizePolicy.setHorizontalStretch(0)
31 | sizePolicy.setVerticalStretch(0)
32 | sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
33 | self.label.setSizePolicy(sizePolicy)
34 | self.label.setFrameShape(QtWidgets.QFrame.Box)
35 | self.label.setFrameShadow(QtWidgets.QFrame.Raised)
36 | self.label.setText("")
37 | self.label.setTextFormat(QtCore.Qt.AutoText)
38 | self.label.setAlignment(QtCore.Qt.AlignCenter)
39 | self.label.setMargin(6)
40 | self.label.setObjectName("label")
41 | self.verticalLayout.addWidget(self.label)
42 |
43 | self.retranslateUi(AutoInfo)
44 | QtCore.QMetaObject.connectSlotsByName(AutoInfo)
45 |
46 | def retranslateUi(self, AutoInfo):
47 | AutoInfo.setWindowTitle(QtWidgets.QApplication.translate("AutoInfo", "Info", None, -1))
48 |
49 | import images_rc
50 |
--------------------------------------------------------------------------------
/gui_status.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Status
4 |
5 |
6 |
7 | 0
8 | 0
9 | 188
10 | 38
11 |
12 |
13 |
14 |
15 | 0
16 |
17 | -
18 |
19 |
20 | QFrame::StyledPanel
21 |
22 |
23 | QFrame::Raised
24 |
25 |
26 |
27 | 0
28 |
29 |
-
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | true
43 |
44 |
45 | Page
46 |
47 |
48 | Show the highlight's page number
49 |
50 |
51 |
52 |
53 | true
54 |
55 |
56 | Date
57 |
58 |
59 | Show the highlight's date
60 |
61 |
62 |
63 |
64 | true
65 |
66 |
67 | Highlight
68 |
69 |
70 | Show the highlight's text
71 |
72 |
73 |
74 |
75 | true
76 |
77 |
78 | Comment
79 |
80 |
81 | Show the highlight's comment
82 |
83 |
84 |
85 |
86 | true
87 |
88 |
89 | Chapter
90 |
91 |
92 | Show the highlight's chapter
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/gui_edit.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_edit.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_edit.ui' applies.
5 | #
6 | # Created: Thu May 2 17:29:33 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_TextDialog(object):
14 | def setupUi(self, TextDialog):
15 | TextDialog.setObjectName("TextDialog")
16 | TextDialog.setWindowModality(QtCore.Qt.ApplicationModal)
17 | TextDialog.resize(360, 180)
18 | TextDialog.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
19 | TextDialog.setModal(False)
20 | self.verticalLayout = QtWidgets.QVBoxLayout(TextDialog)
21 | self.verticalLayout.setObjectName("verticalLayout")
22 | self.high_edit_txt = QtWidgets.QTextEdit(TextDialog)
23 | self.high_edit_txt.setFrameShape(QtWidgets.QFrame.WinPanel)
24 | self.high_edit_txt.setAcceptRichText(False)
25 | self.high_edit_txt.setObjectName("high_edit_txt")
26 | self.verticalLayout.addWidget(self.high_edit_txt)
27 | self.btn_box = QtWidgets.QFrame(TextDialog)
28 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
29 | sizePolicy.setHorizontalStretch(0)
30 | sizePolicy.setVerticalStretch(0)
31 | sizePolicy.setHeightForWidth(self.btn_box.sizePolicy().hasHeightForWidth())
32 | self.btn_box.setSizePolicy(sizePolicy)
33 | self.btn_box.setObjectName("btn_box")
34 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.btn_box)
35 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
36 | self.horizontalLayout.setObjectName("horizontalLayout")
37 | spacerItem = QtWidgets.QSpacerItem(175, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
38 | self.horizontalLayout.addItem(spacerItem)
39 | self.ok_btn = QtWidgets.QPushButton(self.btn_box)
40 | self.ok_btn.setObjectName("ok_btn")
41 | self.horizontalLayout.addWidget(self.ok_btn)
42 | self.cancel_btn = QtWidgets.QPushButton(self.btn_box)
43 | self.cancel_btn.setObjectName("cancel_btn")
44 | self.horizontalLayout.addWidget(self.cancel_btn)
45 | self.verticalLayout.addWidget(self.btn_box)
46 |
47 | self.retranslateUi(TextDialog)
48 | QtCore.QObject.connect(self.cancel_btn, QtCore.SIGNAL("clicked()"), TextDialog.close)
49 | QtCore.QObject.connect(self.ok_btn, QtCore.SIGNAL("clicked()"), TextDialog.close)
50 | QtCore.QMetaObject.connectSlotsByName(TextDialog)
51 |
52 | def retranslateUi(self, TextDialog):
53 | self.ok_btn.setToolTip(QtWidgets.QApplication.translate("TextDialog", "Check online for an updated version", None, -1))
54 | self.ok_btn.setText(QtWidgets.QApplication.translate("TextDialog", "OK", None, -1))
55 | self.cancel_btn.setText(QtWidgets.QApplication.translate("TextDialog", "Cancel", None, -1))
56 |
57 | import images_rc
58 |
--------------------------------------------------------------------------------
/gui_edit.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | TextDialog
4 |
5 |
6 | Qt::ApplicationModal
7 |
8 |
9 |
10 | 0
11 | 0
12 | 360
13 | 180
14 |
15 |
16 |
17 |
18 |
19 |
20 | false
21 |
22 |
23 | -
24 |
25 |
26 | QFrame::WinPanel
27 |
28 |
29 | false
30 |
31 |
32 |
33 | -
34 |
35 |
36 |
37 | 0
38 | 0
39 |
40 |
41 |
42 |
43 | 0
44 |
45 |
-
46 |
47 |
48 | Qt::Horizontal
49 |
50 |
51 |
52 | 175
53 | 20
54 |
55 |
56 |
57 |
58 | -
59 |
60 |
61 | Check online for an updated version
62 |
63 |
64 | OK
65 |
66 |
67 |
68 | -
69 |
70 |
71 | Cancel
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 | cancel_btn
86 | clicked()
87 | TextDialog
88 | close()
89 |
90 |
91 | 169
92 | 116
93 |
94 |
95 | 168
96 | 75
97 |
98 |
99 |
100 |
101 | ok_btn
102 | clicked()
103 | TextDialog
104 | close()
105 |
106 |
107 | 351
108 | 279
109 |
110 |
111 | 239
112 | 279
113 |
114 |
115 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/gui_status.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_status.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_status.ui' applies.
5 | #
6 | # Created: Fri Oct 4 21:42:43 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_Status(object):
14 | def setupUi(self, Status):
15 | Status.setObjectName("Status")
16 | Status.resize(188, 38)
17 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout(Status)
18 | self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
19 | self.horizontalLayout_2.setObjectName("horizontalLayout_2")
20 | self.frame = QtWidgets.QFrame(Status)
21 | self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
22 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
23 | self.frame.setObjectName("frame")
24 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame)
25 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
26 | self.horizontalLayout.setObjectName("horizontalLayout")
27 | self.anim_lbl = QtWidgets.QLabel(self.frame)
28 | self.anim_lbl.setText("")
29 | self.anim_lbl.setObjectName("anim_lbl")
30 | self.horizontalLayout.addWidget(self.anim_lbl)
31 | self.horizontalLayout_2.addWidget(self.frame)
32 | self.act_page = QtWidgets.QAction(Status)
33 | self.act_page.setCheckable(True)
34 | self.act_page.setObjectName("act_page")
35 | self.act_date = QtWidgets.QAction(Status)
36 | self.act_date.setCheckable(True)
37 | self.act_date.setObjectName("act_date")
38 | self.act_text = QtWidgets.QAction(Status)
39 | self.act_text.setCheckable(True)
40 | self.act_text.setObjectName("act_text")
41 | self.act_comment = QtWidgets.QAction(Status)
42 | self.act_comment.setCheckable(True)
43 | self.act_comment.setObjectName("act_comment")
44 | self.act_chapter = QtWidgets.QAction(Status)
45 | self.act_chapter.setCheckable(True)
46 | self.act_chapter.setObjectName("act_chapter")
47 |
48 | self.retranslateUi(Status)
49 | QtCore.QMetaObject.connectSlotsByName(Status)
50 |
51 | def retranslateUi(self, Status):
52 | self.act_page.setText(QtWidgets.QApplication.translate("Status", "Page", None, -1))
53 | self.act_page.setToolTip(QtWidgets.QApplication.translate("Status", "Show the highlight\'s page number", None, -1))
54 | self.act_date.setText(QtWidgets.QApplication.translate("Status", "Date", None, -1))
55 | self.act_date.setToolTip(QtWidgets.QApplication.translate("Status", "Show the highlight\'s date", None, -1))
56 | self.act_text.setText(QtWidgets.QApplication.translate("Status", "Highlight", None, -1))
57 | self.act_text.setToolTip(QtWidgets.QApplication.translate("Status", "Show the highlight\'s text", None, -1))
58 | self.act_comment.setText(QtWidgets.QApplication.translate("Status", "Comment", None, -1))
59 | self.act_comment.setToolTip(QtWidgets.QApplication.translate("Status", "Show the highlight\'s comment", None, -1))
60 | self.act_chapter.setText(QtWidgets.QApplication.translate("Status", "Chapter", None, -1))
61 | self.act_chapter.setToolTip(QtWidgets.QApplication.translate("Status", "Show the highlight\'s chapter", None, -1))
62 |
63 | import images_rc
64 |
--------------------------------------------------------------------------------
/gui_sync_item.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | SyncItem
4 |
5 |
6 |
7 | 0
8 | 0
9 | 446
10 | 25
11 |
12 |
13 |
14 |
15 | 4
16 |
17 |
18 | 0
19 |
20 |
21 | 2
22 |
23 |
24 | 0
25 |
26 | -
27 |
28 |
29 | Sync path
30 |
31 |
32 |
33 | -
34 |
35 |
36 | Qt::CustomContextMenu
37 |
38 |
39 | The path to the book's metadata file
40 |
41 |
42 | The path to the book's metadata file
43 |
44 |
45 | true
46 |
47 |
48 | Select metadata file to sync
49 |
50 |
51 |
52 | -
53 |
54 |
55 | Select/Change the metadata file path
56 |
57 |
58 | Select/Change the metadata file path
59 |
60 |
61 | Select
62 |
63 |
64 |
65 | -
66 |
67 |
68 | QFrame::StyledPanel
69 |
70 |
71 | QFrame::Raised
72 |
73 |
74 |
75 | 0
76 |
77 |
-
78 |
79 |
80 | Add a new Sync path
81 |
82 |
83 | Add a new Sync path
84 |
85 |
86 |
87 |
88 |
89 |
90 | :/stuff/add.png:/stuff/add.png
91 |
92 |
93 |
94 | 10
95 | 10
96 |
97 |
98 |
99 |
100 | -
101 |
102 |
103 | Remove this Sync path
104 |
105 |
106 | Remove this Sync path
107 |
108 |
109 |
110 |
111 |
112 |
113 | :/stuff/del.png:/stuff/del.png
114 |
115 |
116 |
117 | 10
118 | 10
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
--------------------------------------------------------------------------------
/gui_sync_item.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_sync_item.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_sync_item.ui' applies.
5 | #
6 | # Created: Fri Oct 4 21:42:42 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_SyncItem(object):
14 | def setupUi(self, SyncItem):
15 | SyncItem.setObjectName("SyncItem")
16 | SyncItem.resize(446, 25)
17 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout(SyncItem)
18 | self.horizontalLayout_2.setContentsMargins(4, 0, 2, 0)
19 | self.horizontalLayout_2.setObjectName("horizontalLayout_2")
20 | self.label = QtWidgets.QLabel(SyncItem)
21 | self.label.setObjectName("label")
22 | self.horizontalLayout_2.addWidget(self.label)
23 | self.sync_path_txt = QtWidgets.QLineEdit(SyncItem)
24 | self.sync_path_txt.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
25 | self.sync_path_txt.setReadOnly(True)
26 | self.sync_path_txt.setObjectName("sync_path_txt")
27 | self.horizontalLayout_2.addWidget(self.sync_path_txt)
28 | self.sync_path_btn = QtWidgets.QPushButton(SyncItem)
29 | self.sync_path_btn.setObjectName("sync_path_btn")
30 | self.horizontalLayout_2.addWidget(self.sync_path_btn)
31 | self.frame = QtWidgets.QFrame(SyncItem)
32 | self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
33 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
34 | self.frame.setObjectName("frame")
35 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame)
36 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
37 | self.horizontalLayout.setObjectName("horizontalLayout")
38 | self.add_btn = QtWidgets.QToolButton(self.frame)
39 | self.add_btn.setText("")
40 | icon = QtGui.QIcon()
41 | icon.addPixmap(QtGui.QPixmap(":/stuff/add.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
42 | self.add_btn.setIcon(icon)
43 | self.add_btn.setIconSize(QtCore.QSize(10, 10))
44 | self.add_btn.setObjectName("add_btn")
45 | self.horizontalLayout.addWidget(self.add_btn)
46 | self.del_btn = QtWidgets.QToolButton(self.frame)
47 | self.del_btn.setText("")
48 | icon1 = QtGui.QIcon()
49 | icon1.addPixmap(QtGui.QPixmap(":/stuff/del.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
50 | self.del_btn.setIcon(icon1)
51 | self.del_btn.setIconSize(QtCore.QSize(10, 10))
52 | self.del_btn.setObjectName("del_btn")
53 | self.horizontalLayout.addWidget(self.del_btn)
54 | self.horizontalLayout_2.addWidget(self.frame)
55 |
56 | self.retranslateUi(SyncItem)
57 | QtCore.QMetaObject.connectSlotsByName(SyncItem)
58 |
59 | def retranslateUi(self, SyncItem):
60 | self.label.setText(QtWidgets.QApplication.translate("SyncItem", "Sync path", None, -1))
61 | self.sync_path_txt.setToolTip(QtWidgets.QApplication.translate("SyncItem", "The path to the book\'s metadata file", None, -1))
62 | self.sync_path_txt.setStatusTip(QtWidgets.QApplication.translate("SyncItem", "The path to the book\'s metadata file", None, -1))
63 | self.sync_path_txt.setPlaceholderText(QtWidgets.QApplication.translate("SyncItem", "Select metadata file to sync", None, -1))
64 | self.sync_path_btn.setToolTip(QtWidgets.QApplication.translate("SyncItem", "Select/Change the metadata file path", None, -1))
65 | self.sync_path_btn.setStatusTip(QtWidgets.QApplication.translate("SyncItem", "Select/Change the metadata file path", None, -1))
66 | self.sync_path_btn.setText(QtWidgets.QApplication.translate("SyncItem", "Select", None, -1))
67 | self.add_btn.setToolTip(QtWidgets.QApplication.translate("SyncItem", "Add a new Sync path", None, -1))
68 | self.add_btn.setStatusTip(QtWidgets.QApplication.translate("SyncItem", "Add a new Sync path", None, -1))
69 | self.del_btn.setToolTip(QtWidgets.QApplication.translate("SyncItem", "Remove this Sync path", None, -1))
70 | self.del_btn.setStatusTip(QtWidgets.QApplication.translate("SyncItem", "Remove this Sync path", None, -1))
71 |
72 | import images_rc
73 |
--------------------------------------------------------------------------------
/gui_filter.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Filter
4 |
5 |
6 |
7 | 0
8 | 0
9 | 215
10 | 66
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 4
19 |
20 | -
21 |
22 |
23 | QFrame::StyledPanel
24 |
25 |
26 | QFrame::Raised
27 |
28 |
29 |
30 | 0
31 |
32 |
-
33 |
34 |
35 |
36 | 0
37 | 0
38 |
39 |
40 |
41 | Type the keywords to filter the visible items
42 |
43 |
44 |
45 |
46 |
47 | Type here to filter...
48 |
49 |
50 |
51 | -
52 |
53 |
54 |
55 | 0
56 | 0
57 |
58 |
59 |
60 | Set filter
61 |
62 |
63 | Filter
64 |
65 |
66 |
67 | :/stuff/filter.png:/stuff/filter.png
68 |
69 |
70 |
71 |
72 |
73 |
74 | -
75 |
76 |
77 | QFrame::StyledPanel
78 |
79 |
80 | QFrame::Raised
81 |
82 |
83 |
84 | 0
85 |
86 |
-
87 |
88 |
89 | Select where to search for the keywords
90 |
91 |
92 | 0
93 |
94 |
-
95 |
96 | Filter All:
97 |
98 |
99 | -
100 |
101 | Filter Highlights:
102 |
103 |
104 | -
105 |
106 | Filter Comments:
107 |
108 |
109 | -
110 |
111 | Filter Book Titles:
112 |
113 |
114 |
115 |
116 | -
117 |
118 |
119 |
120 |
121 |
122 |
123 | -
124 |
125 |
126 | Qt::Horizontal
127 |
128 |
129 |
130 | 40
131 | 20
132 |
133 |
134 |
135 |
136 | -
137 |
138 |
139 |
140 | 0
141 | 0
142 |
143 |
144 |
145 | Clear the filter field
146 |
147 |
148 | Clears the filter field
149 |
150 |
151 | Clear
152 |
153 |
154 |
155 | :/stuff/trash.png:/stuff/trash.png
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
--------------------------------------------------------------------------------
/gui_filter.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_filter.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_filter.ui' applies.
5 | #
6 | # Created: Thu May 2 17:29:33 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_Filter(object):
14 | def setupUi(self, Filter):
15 | Filter.setObjectName("Filter")
16 | Filter.resize(215, 66)
17 | Filter.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
18 | self.verticalLayout = QtWidgets.QVBoxLayout(Filter)
19 | self.verticalLayout.setContentsMargins(4, 4, 4, 4)
20 | self.verticalLayout.setObjectName("verticalLayout")
21 | self.filter_frm1 = QtWidgets.QFrame(Filter)
22 | self.filter_frm1.setFrameShape(QtWidgets.QFrame.StyledPanel)
23 | self.filter_frm1.setFrameShadow(QtWidgets.QFrame.Raised)
24 | self.filter_frm1.setObjectName("filter_frm1")
25 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.filter_frm1)
26 | self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
27 | self.horizontalLayout_4.setObjectName("horizontalLayout_4")
28 | self.filter_txt = QtWidgets.QLineEdit(self.filter_frm1)
29 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
30 | sizePolicy.setHorizontalStretch(0)
31 | sizePolicy.setVerticalStretch(0)
32 | sizePolicy.setHeightForWidth(self.filter_txt.sizePolicy().hasHeightForWidth())
33 | self.filter_txt.setSizePolicy(sizePolicy)
34 | self.filter_txt.setText("")
35 | self.filter_txt.setObjectName("filter_txt")
36 | self.horizontalLayout_4.addWidget(self.filter_txt)
37 | self.filter_btn = QtWidgets.QPushButton(self.filter_frm1)
38 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
39 | sizePolicy.setHorizontalStretch(0)
40 | sizePolicy.setVerticalStretch(0)
41 | sizePolicy.setHeightForWidth(self.filter_btn.sizePolicy().hasHeightForWidth())
42 | self.filter_btn.setSizePolicy(sizePolicy)
43 | icon = QtGui.QIcon()
44 | icon.addPixmap(QtGui.QPixmap(":/stuff/filter.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
45 | self.filter_btn.setIcon(icon)
46 | self.filter_btn.setObjectName("filter_btn")
47 | self.horizontalLayout_4.addWidget(self.filter_btn)
48 | self.verticalLayout.addWidget(self.filter_frm1)
49 | self.filter_frm2 = QtWidgets.QFrame(Filter)
50 | self.filter_frm2.setFrameShape(QtWidgets.QFrame.StyledPanel)
51 | self.filter_frm2.setFrameShadow(QtWidgets.QFrame.Raised)
52 | self.filter_frm2.setObjectName("filter_frm2")
53 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.filter_frm2)
54 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
55 | self.horizontalLayout.setObjectName("horizontalLayout")
56 | self.filter_box = QtWidgets.QComboBox(self.filter_frm2)
57 | self.filter_box.setObjectName("filter_box")
58 | self.filter_box.addItem("")
59 | self.filter_box.addItem("")
60 | self.filter_box.addItem("")
61 | self.filter_box.addItem("")
62 | self.horizontalLayout.addWidget(self.filter_box)
63 | self.filtered_lbl = QtWidgets.QLabel(self.filter_frm2)
64 | self.filtered_lbl.setText("")
65 | self.filtered_lbl.setObjectName("filtered_lbl")
66 | self.horizontalLayout.addWidget(self.filtered_lbl)
67 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
68 | self.horizontalLayout.addItem(spacerItem)
69 | self.clear_filter_btn = QtWidgets.QPushButton(self.filter_frm2)
70 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
71 | sizePolicy.setHorizontalStretch(0)
72 | sizePolicy.setVerticalStretch(0)
73 | sizePolicy.setHeightForWidth(self.clear_filter_btn.sizePolicy().hasHeightForWidth())
74 | self.clear_filter_btn.setSizePolicy(sizePolicy)
75 | icon1 = QtGui.QIcon()
76 | icon1.addPixmap(QtGui.QPixmap(":/stuff/trash.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
77 | self.clear_filter_btn.setIcon(icon1)
78 | self.clear_filter_btn.setObjectName("clear_filter_btn")
79 | self.horizontalLayout.addWidget(self.clear_filter_btn)
80 | self.verticalLayout.addWidget(self.filter_frm2)
81 |
82 | self.retranslateUi(Filter)
83 | self.filter_box.setCurrentIndex(0)
84 | QtCore.QMetaObject.connectSlotsByName(Filter)
85 |
86 | def retranslateUi(self, Filter):
87 | self.filter_txt.setToolTip(QtWidgets.QApplication.translate("Filter", "Type the keywords to filter the visible items", None, -1))
88 | self.filter_txt.setPlaceholderText(QtWidgets.QApplication.translate("Filter", "Type here to filter...", None, -1))
89 | self.filter_btn.setToolTip(QtWidgets.QApplication.translate("Filter", "Set filter", None, -1))
90 | self.filter_btn.setText(QtWidgets.QApplication.translate("Filter", "Filter", None, -1))
91 | self.filter_box.setToolTip(QtWidgets.QApplication.translate("Filter", "Select where to search for the keywords", None, -1))
92 | self.filter_box.setItemText(0, QtWidgets.QApplication.translate("Filter", "Filter All:", None, -1))
93 | self.filter_box.setItemText(1, QtWidgets.QApplication.translate("Filter", "Filter Highlights:", None, -1))
94 | self.filter_box.setItemText(2, QtWidgets.QApplication.translate("Filter", "Filter Comments:", None, -1))
95 | self.filter_box.setItemText(3, QtWidgets.QApplication.translate("Filter", "Filter Book Titles:", None, -1))
96 | self.clear_filter_btn.setToolTip(QtWidgets.QApplication.translate("Filter", "Clear the filter field", None, -1))
97 | self.clear_filter_btn.setStatusTip(QtWidgets.QApplication.translate("Filter", "Clears the filter field", None, -1))
98 | self.clear_filter_btn.setText(QtWidgets.QApplication.translate("Filter", "Clear", None, -1))
99 |
100 | import images_rc
101 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## General
2 | 
3 |
4 | [![made-with-python][Python]](https://www.python.org/)
5 | [![Generic badge][OS]][ReleaseLink]
6 | [![License: MIT][MIT]](LICENSE)
7 | [![GitHub release][Release]][ReleaseLink]
8 |
9 |
10 |
11 |
12 | **KOHighlights** is a utility for viewing and exporting the
13 | [Koreader](https://github.com/koreader/koreader)'s highlights to simple text, html, csv or markdown files.
14 |
15 | ___
16 | #### Screenshots
17 |
175 |
176 |
177 |
%(title)s
178 | %(authors)s
179 |
180 | """
181 | HIGH_BLOCK = """
182 |
183 |
%(page)s
184 |
%(date)s
185 |
186 |
%(chapter)s
187 |
%(highlight)s
188 |
%(comment)s
189 |
190 | """
191 |
--------------------------------------------------------------------------------
/gui_about.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_about.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_about.ui' applies.
5 | #
6 | # Created: Mon Nov 4 00:35:07 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_About(object):
14 | def setupUi(self, About):
15 | About.setObjectName("About")
16 | About.setWindowModality(QtCore.Qt.ApplicationModal)
17 | About.resize(480, 560)
18 | About.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
19 | About.setModal(False)
20 | self.verticalLayout = QtWidgets.QVBoxLayout(About)
21 | self.verticalLayout.setObjectName("verticalLayout")
22 | self.about_tabs = QtWidgets.QTabWidget(About)
23 | self.about_tabs.setTabShape(QtWidgets.QTabWidget.Rounded)
24 | self.about_tabs.setDocumentMode(True)
25 | self.about_tabs.setObjectName("about_tabs")
26 | self.info_tab = QtWidgets.QWidget()
27 | self.info_tab.setObjectName("info_tab")
28 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.info_tab)
29 | self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
30 | self.verticalLayout_2.setObjectName("verticalLayout_2")
31 | self.scrollArea_2 = QtWidgets.QScrollArea(self.info_tab)
32 | self.scrollArea_2.setStyleSheet("QScrollArea {background-color:transparent;}")
33 | self.scrollArea_2.setWidgetResizable(True)
34 | self.scrollArea_2.setObjectName("scrollArea_2")
35 | self.scrollAreaWidgetContents_2 = QtWidgets.QWidget()
36 | self.scrollAreaWidgetContents_2.setGeometry(QtCore.QRect(0, 0, 460, 490))
37 | self.scrollAreaWidgetContents_2.setStyleSheet("background-color:transparent;")
38 | self.scrollAreaWidgetContents_2.setObjectName("scrollAreaWidgetContents_2")
39 | self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents_2)
40 | self.verticalLayout_6.setContentsMargins(6, 0, 6, 0)
41 | self.verticalLayout_6.setObjectName("verticalLayout_6")
42 | self.text_lbl = QtWidgets.QLabel(self.scrollAreaWidgetContents_2)
43 | self.text_lbl.setText("")
44 | self.text_lbl.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
45 | self.text_lbl.setWordWrap(True)
46 | self.text_lbl.setOpenExternalLinks(True)
47 | self.text_lbl.setObjectName("text_lbl")
48 | self.verticalLayout_6.addWidget(self.text_lbl)
49 | self.scrollArea_2.setWidget(self.scrollAreaWidgetContents_2)
50 | self.verticalLayout_2.addWidget(self.scrollArea_2)
51 | self.about_tabs.addTab(self.info_tab, "")
52 | self.system_tab = QtWidgets.QWidget()
53 | self.system_tab.setObjectName("system_tab")
54 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.system_tab)
55 | self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
56 | self.verticalLayout_4.setObjectName("verticalLayout_4")
57 | self.system_txt = QtWidgets.QTextEdit(self.system_tab)
58 | self.system_txt.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
59 | self.system_txt.setObjectName("system_txt")
60 | self.verticalLayout_4.addWidget(self.system_txt)
61 | self.about_tabs.addTab(self.system_tab, "")
62 | self.usage_tab = QtWidgets.QWidget()
63 | self.usage_tab.setObjectName("usage_tab")
64 | self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.usage_tab)
65 | self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
66 | self.verticalLayout_3.setObjectName("verticalLayout_3")
67 | self.usage_txt = QtWidgets.QTextBrowser(self.usage_tab)
68 | self.usage_txt.setFrameShape(QtWidgets.QFrame.WinPanel)
69 | self.usage_txt.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction)
70 | self.usage_txt.setOpenLinks(False)
71 | self.usage_txt.setObjectName("usage_txt")
72 | self.verticalLayout_3.addWidget(self.usage_txt)
73 | self.about_tabs.addTab(self.usage_tab, "")
74 | self.log_tab = QtWidgets.QWidget()
75 | self.log_tab.setObjectName("log_tab")
76 | self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.log_tab)
77 | self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)
78 | self.verticalLayout_8.setObjectName("verticalLayout_8")
79 | self.log_txt = QtWidgets.QPlainTextEdit(self.log_tab)
80 | self.log_txt.setFrameShape(QtWidgets.QFrame.WinPanel)
81 | self.log_txt.setUndoRedoEnabled(False)
82 | self.log_txt.setReadOnly(True)
83 | self.log_txt.setPlainText("")
84 | self.log_txt.setObjectName("log_txt")
85 | self.verticalLayout_8.addWidget(self.log_txt)
86 | self.about_tabs.addTab(self.log_tab, "")
87 | self.verticalLayout.addWidget(self.about_tabs)
88 | self.btn_box = QtWidgets.QFrame(About)
89 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
90 | sizePolicy.setHorizontalStretch(0)
91 | sizePolicy.setVerticalStretch(0)
92 | sizePolicy.setHeightForWidth(self.btn_box.sizePolicy().hasHeightForWidth())
93 | self.btn_box.setSizePolicy(sizePolicy)
94 | self.btn_box.setObjectName("btn_box")
95 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.btn_box)
96 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
97 | self.horizontalLayout.setObjectName("horizontalLayout")
98 | self.usage_btn = QtWidgets.QPushButton(self.btn_box)
99 | self.usage_btn.setAutoDefault(False)
100 | self.usage_btn.setObjectName("usage_btn")
101 | self.horizontalLayout.addWidget(self.usage_btn)
102 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
103 | self.horizontalLayout.addItem(spacerItem)
104 | self.updates_btn = QtWidgets.QPushButton(self.btn_box)
105 | self.updates_btn.setAutoDefault(False)
106 | self.updates_btn.setObjectName("updates_btn")
107 | self.horizontalLayout.addWidget(self.updates_btn)
108 | spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
109 | self.horizontalLayout.addItem(spacerItem1)
110 | self.close_btn = QtWidgets.QPushButton(self.btn_box)
111 | self.close_btn.setObjectName("close_btn")
112 | self.horizontalLayout.addWidget(self.close_btn)
113 | self.verticalLayout.addWidget(self.btn_box)
114 |
115 | self.retranslateUi(About)
116 | self.about_tabs.setCurrentIndex(0)
117 | QtCore.QObject.connect(self.close_btn, QtCore.SIGNAL("clicked()"), About.close)
118 | QtCore.QMetaObject.connectSlotsByName(About)
119 |
120 | def retranslateUi(self, About):
121 | self.about_tabs.setTabText(self.about_tabs.indexOf(self.info_tab), QtWidgets.QApplication.translate("About", "Information", None, -1))
122 | self.about_tabs.setTabText(self.about_tabs.indexOf(self.system_tab), QtWidgets.QApplication.translate("About", "System", None, -1))
123 | self.about_tabs.setTabText(self.about_tabs.indexOf(self.usage_tab), QtWidgets.QApplication.translate("About", "User Guide", None, -1))
124 | self.about_tabs.setTabText(self.about_tabs.indexOf(self.log_tab), QtWidgets.QApplication.translate("About", "Log", None, -1))
125 | self.usage_btn.setToolTip(QtWidgets.QApplication.translate("About", "View the User Guide online", None, -1))
126 | self.usage_btn.setText(QtWidgets.QApplication.translate("About", "Online Guide", None, -1))
127 | self.updates_btn.setToolTip(QtWidgets.QApplication.translate("About", "Check online for an updated version", None, -1))
128 | self.updates_btn.setText(QtWidgets.QApplication.translate("About", "Check for Updates", None, -1))
129 | self.close_btn.setText(QtWidgets.QApplication.translate("About", "Close", None, -1))
130 |
131 | import images_rc
132 |
--------------------------------------------------------------------------------
/gui_about.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | About
4 |
5 |
6 | Qt::ApplicationModal
7 |
8 |
9 |
10 | 0
11 | 0
12 | 480
13 | 560
14 |
15 |
16 |
17 |
18 |
19 |
20 | false
21 |
22 |
23 | -
24 |
25 |
26 | QTabWidget::Rounded
27 |
28 |
29 | 0
30 |
31 |
32 | true
33 |
34 |
35 |
36 | Information
37 |
38 |
39 |
40 | 0
41 |
42 |
-
43 |
44 |
45 | QScrollArea {background-color:transparent;}
46 |
47 |
48 | true
49 |
50 |
51 |
52 |
53 | 0
54 | 0
55 | 460
56 | 490
57 |
58 |
59 |
60 | background-color:transparent;
61 |
62 |
63 |
64 | 6
65 |
66 |
67 | 0
68 |
69 |
70 | 6
71 |
72 |
73 | 0
74 |
75 |
-
76 |
77 |
78 |
79 |
80 |
81 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
82 |
83 |
84 | true
85 |
86 |
87 | true
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | System
100 |
101 |
102 |
103 | 0
104 |
105 | -
106 |
107 |
108 | Qt::TextSelectableByMouse
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 | User Guide
117 |
118 |
119 |
120 | 0
121 |
122 | -
123 |
124 |
125 | QFrame::WinPanel
126 |
127 |
128 | Qt::TextBrowserInteraction
129 |
130 |
131 | false
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | Log
140 |
141 |
142 |
143 | 0
144 |
145 | -
146 |
147 |
148 | QFrame::WinPanel
149 |
150 |
151 | false
152 |
153 |
154 | true
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 | -
166 |
167 |
168 |
169 | 0
170 | 0
171 |
172 |
173 |
174 |
175 | 0
176 |
177 |
-
178 |
179 |
180 | View the User Guide online
181 |
182 |
183 | Online Guide
184 |
185 |
186 | false
187 |
188 |
189 |
190 | -
191 |
192 |
193 | Qt::Horizontal
194 |
195 |
196 |
197 | 40
198 | 20
199 |
200 |
201 |
202 |
203 | -
204 |
205 |
206 | Check online for an updated version
207 |
208 |
209 | Check for Updates
210 |
211 |
212 | false
213 |
214 |
215 |
216 | -
217 |
218 |
219 | Qt::Horizontal
220 |
221 |
222 |
223 | 40
224 | 20
225 |
226 |
227 |
228 |
229 | -
230 |
231 |
232 | Close
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 | close_btn
247 | clicked()
248 | About
249 | close()
250 |
251 |
252 | 169
253 | 116
254 |
255 |
256 | 168
257 | 75
258 |
259 |
260 |
261 |
262 |
263 |
--------------------------------------------------------------------------------
/slppu.py:
--------------------------------------------------------------------------------
1 | import re
2 | import sys
3 |
4 | # https://github.com/noembryo/slppu
5 |
6 | ERRORS = {'unexp_end_string': u'Unexpected end of string while parsing Lua string.',
7 | 'unexp_end_table': u'Unexpected end of table while parsing Lua string.',
8 | 'mfnumber_minus': u'Malformed number (no digits after initial minus).',
9 | 'mfnumber_dec_point': u'Malformed number (no digits after decimal point).',
10 | 'mfnumber_sci': u'Malformed number (bad scientific format).'}
11 |
12 |
13 | class ParseError(Exception):
14 | pass
15 |
16 |
17 | class SLPPU(object):
18 |
19 | def __init__(self):
20 | self.text = ''
21 | self.ch = ''
22 | self.at = 0
23 | self.len = 0
24 | self.depth = 0
25 | self.space = re.compile(r'\s', re.M)
26 | self.alnum = re.compile(r'\w', re.M)
27 | self.newline = '\n'
28 | self.tab = ' ' # or '\t'
29 |
30 | def decode(self, text):
31 | if not text or not isinstance(text, str):
32 | return
33 | # FIXME: only short comments removed
34 | reg = re.compile('--.*$', re.M)
35 | text = reg.sub('', text, 0)
36 | self.text = text
37 | self.at, self.ch, self.depth = 0, '', 0
38 | self.len = len(text)
39 | self.next_chr()
40 | result = self.value()
41 | return result
42 |
43 | def encode(self, obj):
44 | self.depth = 0
45 | return self.__encode(obj)
46 |
47 | def __encode(self, obj):
48 | s = ''
49 | tab = self.tab
50 | newline = self.newline
51 | tp = type(obj)
52 | if tp == str:
53 | s += '"%s"' % obj.replace(r'"', r'\"')
54 | elif tp in [int, float, complex]:
55 | s += str(obj)
56 | elif tp is bool:
57 | s += str(obj).lower()
58 | elif obj is None:
59 | s += 'nil'
60 | elif tp in [list, tuple, dict]:
61 | self.depth += 1
62 | if len(obj) == 0 or (tp is not dict and
63 | len(filter(lambda x: type(x) in (int, float, str) or
64 | (isinstance(x, str) and
65 | len(x) < 10), obj)) == len(obj)):
66 | newline = tab = ''
67 | dp = tab * self.depth
68 | s += "%s{%s" % (tab * (self.depth - 2), newline)
69 | if tp is dict:
70 | contents = []
71 | for k, v in obj.items():
72 | k = ('[{}]'.format(k) if type(k) in [int, float, complex]
73 | else '["{}"]'.format(k))
74 | contents.append(dp + '%s = %s' % (k, (self.__encode(v))))
75 | s += (',%s' % newline).join(contents)
76 |
77 | else:
78 | s += (',%s' % newline).join(
79 | [dp + self.__encode(el) for el in obj])
80 | self.depth -= 1
81 | s += "%s%s}" % (newline, tab * self.depth)
82 | return s
83 |
84 | def white(self):
85 | while self.ch:
86 | if self.space.match(self.ch):
87 | self.next_chr()
88 | else:
89 | break
90 |
91 | def next_chr(self):
92 | if self.at >= self.len:
93 | self.ch = None
94 | return None
95 | self.ch = self.text[self.at]
96 | self.at += 1
97 | return True
98 |
99 | def value(self):
100 | self.white()
101 | if not self.ch:
102 | return
103 | if self.ch == '{':
104 | return self.object()
105 | if self.ch == "[":
106 | self.next_chr()
107 | if self.ch in ['"', "'", '[']:
108 | return self.string(self.ch)
109 | if self.ch.isdigit() or self.ch == '-':
110 | return self.number()
111 | return self.word()
112 |
113 | def string(self, end=None):
114 | s = ''
115 | start = self.ch
116 | if end == '[':
117 | end = ']'
118 | if start in ['"', "'", '[']:
119 | while self.next_chr():
120 | if self.ch == end:
121 | self.next_chr()
122 | if start != "[" or self.ch == ']':
123 | return s
124 | if self.ch == '\\' and start == end:
125 | self.next_chr()
126 | if self.ch != end:
127 | s += '\\'
128 | s += self.ch
129 | print(ERRORS['unexp_end_string'])
130 |
131 | def object(self):
132 | o = {}
133 | k = None
134 | idx = 0
135 | numeric_keys = False
136 | self.depth += 1
137 | self.next_chr()
138 | self.white()
139 | if self.ch and self.ch == '}':
140 | self.depth -= 1
141 | self.next_chr()
142 | return o # Exit here
143 | else:
144 | while self.ch:
145 | self.white()
146 | if self.ch == '{':
147 | o[idx] = self.object()
148 | idx += 1
149 | continue
150 | elif self.ch == '}':
151 | self.depth -= 1
152 | self.next_chr()
153 | if k is not None:
154 | o[idx] = k
155 | if not numeric_keys and len([key for key in o
156 | if isinstance(key, (str, float, bool,
157 | tuple))]) == 0:
158 | ar = []
159 | for key in o:
160 | ar.insert(key, o[key])
161 | o = ar
162 | return o # or here
163 | else:
164 | if self.ch == ',':
165 | self.next_chr()
166 | continue
167 | else:
168 | k = self.value()
169 | if self.ch == ']':
170 | numeric_keys = True
171 | self.next_chr()
172 | self.white()
173 | ch = self.ch
174 | if ch in ('=', ','):
175 | self.next_chr()
176 | self.white()
177 | if ch == '=':
178 | o[k] = self.value()
179 | else:
180 | o[idx] = k
181 | idx += 1
182 | k = None
183 | print(ERRORS['unexp_end_table']) # Bad exit here
184 |
185 | words = {'true': True, 'false': False, 'nil': None}
186 |
187 | def word(self):
188 | s = ''
189 | if self.ch != '\n':
190 | s = self.ch
191 | self.next_chr()
192 | while self.ch is not None and self.alnum.match(self.ch) and s not in self.words:
193 | s += self.ch
194 | self.next_chr()
195 | return self.words.get(s, s)
196 |
197 | def number(self):
198 | def next_digit(err):
199 | num = self.ch
200 | self.next_chr()
201 | if not self.ch or not self.ch.isdigit():
202 | raise ParseError(err)
203 | return num
204 | n = ''
205 | try:
206 | if self.ch == '-':
207 | n += next_digit(ERRORS['mfnumber_minus'])
208 | n += self.digit()
209 | if n == '0' and self.ch in ['x', 'X']:
210 | n += self.ch
211 | self.next_chr()
212 | n += self.hex()
213 | else:
214 | if self.ch and self.ch == '.':
215 | n += next_digit(ERRORS['mfnumber_dec_point'])
216 | n += self.digit()
217 | if self.ch and self.ch in ['e', 'E']:
218 | n += self.ch
219 | self.next_chr()
220 | if not self.ch or self.ch not in ('+', '-'):
221 | raise ParseError(ERRORS['mfnumber_sci'])
222 | n += next_digit(ERRORS['mfnumber_sci'])
223 | n += self.digit()
224 | except ParseError:
225 | t, e = sys.exc_info()[:2]
226 | print(e)
227 | return 0
228 | # noinspection PyBroadException
229 | try:
230 | return int(n, 0)
231 | except Exception:
232 | pass
233 | return float(n)
234 |
235 | def digit(self):
236 | n = ''
237 | while self.ch and self.ch.isdigit():
238 | n += self.ch
239 | self.next_chr()
240 | return n
241 |
242 | def hex(self):
243 | n = ''
244 | while self.ch and (self.ch in 'ABCDEFabcdef' or self.ch.isdigit()):
245 | n += self.ch
246 | self.next_chr()
247 | return n
248 |
249 |
250 | slppu = SLPPU()
251 |
252 | __all__ = ['slppu']
253 |
--------------------------------------------------------------------------------
/gui_sync_group.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_sync_group.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_sync_group.ui' applies.
5 | #
6 | # Created: Tue May 7 14:53:08 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_SyncGroup(object):
14 | def setupUi(self, SyncGroup):
15 | SyncGroup.setObjectName("SyncGroup")
16 | SyncGroup.resize(672, 50)
17 | self.horizontalLayout_5 = QtWidgets.QHBoxLayout(SyncGroup)
18 | self.horizontalLayout_5.setSpacing(0)
19 | self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
20 | self.horizontalLayout_5.setObjectName("horizontalLayout_5")
21 | self.frame = QtWidgets.QFrame(SyncGroup)
22 | self.frame.setObjectName("frame")
23 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame)
24 | self.verticalLayout.setSpacing(0)
25 | self.verticalLayout.setContentsMargins(0, 0, 1, 0)
26 | self.verticalLayout.setObjectName("verticalLayout")
27 | spacerItem = QtWidgets.QSpacerItem(20, 30, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
28 | self.verticalLayout.addItem(spacerItem)
29 | self.power_btn = QtWidgets.QToolButton(self.frame)
30 | self.power_btn.setText("")
31 | icon = QtGui.QIcon()
32 | icon.addPixmap(QtGui.QPixmap(":/stuff/power32gray.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
33 | icon.addPixmap(QtGui.QPixmap(":/stuff/power32red.png"), QtGui.QIcon.Normal, QtGui.QIcon.On)
34 | self.power_btn.setIcon(icon)
35 | self.power_btn.setIconSize(QtCore.QSize(16, 16))
36 | self.power_btn.setCheckable(True)
37 | self.power_btn.setChecked(True)
38 | self.power_btn.setAutoRaise(True)
39 | self.power_btn.setObjectName("power_btn")
40 | self.verticalLayout.addWidget(self.power_btn)
41 | spacerItem1 = QtWidgets.QSpacerItem(20, 28, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
42 | self.verticalLayout.addItem(spacerItem1)
43 | self.horizontalLayout_5.addWidget(self.frame)
44 | self.group_frm = QtWidgets.QFrame(SyncGroup)
45 | self.group_frm.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
46 | self.group_frm.setFrameShape(QtWidgets.QFrame.Box)
47 | self.group_frm.setFrameShadow(QtWidgets.QFrame.Plain)
48 | self.group_frm.setLineWidth(1)
49 | self.group_frm.setObjectName("group_frm")
50 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.group_frm)
51 | self.verticalLayout_2.setSpacing(0)
52 | self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
53 | self.verticalLayout_2.setObjectName("verticalLayout_2")
54 | self.title_frm = QtWidgets.QFrame(self.group_frm)
55 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
56 | sizePolicy.setHorizontalStretch(0)
57 | sizePolicy.setVerticalStretch(0)
58 | sizePolicy.setHeightForWidth(self.title_frm.sizePolicy().hasHeightForWidth())
59 | self.title_frm.setSizePolicy(sizePolicy)
60 | self.title_frm.setFrameShape(QtWidgets.QFrame.StyledPanel)
61 | self.title_frm.setFrameShadow(QtWidgets.QFrame.Raised)
62 | self.title_frm.setObjectName("title_frm")
63 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.title_frm)
64 | self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
65 | self.horizontalLayout_4.setObjectName("horizontalLayout_4")
66 | self.refresh_btn = QtWidgets.QToolButton(self.title_frm)
67 | self.refresh_btn.setText("")
68 | icon1 = QtGui.QIcon()
69 | icon1.addPixmap(QtGui.QPixmap(":/stuff/refresh16.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
70 | self.refresh_btn.setIcon(icon1)
71 | self.refresh_btn.setIconSize(QtCore.QSize(16, 16))
72 | self.refresh_btn.setChecked(False)
73 | self.refresh_btn.setAutoRaise(True)
74 | self.refresh_btn.setObjectName("refresh_btn")
75 | self.horizontalLayout_4.addWidget(self.refresh_btn)
76 | spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
77 | self.horizontalLayout_4.addItem(spacerItem2)
78 | self.title_lbl = QtWidgets.QLabel(self.title_frm)
79 | self.title_lbl.setAutoFillBackground(True)
80 | self.title_lbl.setText("")
81 | self.title_lbl.setAlignment(QtCore.Qt.AlignCenter)
82 | self.title_lbl.setObjectName("title_lbl")
83 | self.horizontalLayout_4.addWidget(self.title_lbl)
84 | spacerItem3 = QtWidgets.QSpacerItem(161, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
85 | self.horizontalLayout_4.addItem(spacerItem3)
86 | self.sync_btn = QtWidgets.QToolButton(self.title_frm)
87 | icon2 = QtGui.QIcon()
88 | icon2.addPixmap(QtGui.QPixmap(":/stuff/sync.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
89 | self.sync_btn.setIcon(icon2)
90 | self.sync_btn.setChecked(False)
91 | self.sync_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
92 | self.sync_btn.setAutoRaise(True)
93 | self.sync_btn.setObjectName("sync_btn")
94 | self.horizontalLayout_4.addWidget(self.sync_btn)
95 | self.verticalLayout_2.addWidget(self.title_frm)
96 | self.checks_frm = QtWidgets.QFrame(self.group_frm)
97 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
98 | sizePolicy.setHorizontalStretch(0)
99 | sizePolicy.setVerticalStretch(0)
100 | sizePolicy.setHeightForWidth(self.checks_frm.sizePolicy().hasHeightForWidth())
101 | self.checks_frm.setSizePolicy(sizePolicy)
102 | self.checks_frm.setFrameShape(QtWidgets.QFrame.StyledPanel)
103 | self.checks_frm.setFrameShadow(QtWidgets.QFrame.Raised)
104 | self.checks_frm.setObjectName("checks_frm")
105 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.checks_frm)
106 | self.horizontalLayout.setContentsMargins(4, 0, 2, 0)
107 | self.horizontalLayout.setObjectName("horizontalLayout")
108 | self.sync_pos_chk = QtWidgets.QCheckBox(self.checks_frm)
109 | self.sync_pos_chk.setObjectName("sync_pos_chk")
110 | self.horizontalLayout.addWidget(self.sync_pos_chk)
111 | self.merge_chk = QtWidgets.QCheckBox(self.checks_frm)
112 | self.merge_chk.setObjectName("merge_chk")
113 | self.horizontalLayout.addWidget(self.merge_chk)
114 | self.sync_db_chk = QtWidgets.QCheckBox(self.checks_frm)
115 | self.sync_db_chk.setObjectName("sync_db_chk")
116 | self.horizontalLayout.addWidget(self.sync_db_chk)
117 | spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
118 | self.horizontalLayout.addItem(spacerItem4)
119 | self.fold_btn = QtWidgets.QToolButton(self.checks_frm)
120 | self.fold_btn.setStyleSheet("QToolButton{border:none;}")
121 | self.fold_btn.setCheckable(True)
122 | self.fold_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
123 | self.fold_btn.setArrowType(QtCore.Qt.DownArrow)
124 | self.fold_btn.setObjectName("fold_btn")
125 | self.horizontalLayout.addWidget(self.fold_btn)
126 | self.verticalLayout_2.addWidget(self.checks_frm)
127 | self.items_frm = QtWidgets.QFrame(self.group_frm)
128 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
129 | sizePolicy.setHorizontalStretch(0)
130 | sizePolicy.setVerticalStretch(0)
131 | sizePolicy.setHeightForWidth(self.items_frm.sizePolicy().hasHeightForWidth())
132 | self.items_frm.setSizePolicy(sizePolicy)
133 | self.items_frm.setFrameShape(QtWidgets.QFrame.StyledPanel)
134 | self.items_frm.setFrameShadow(QtWidgets.QFrame.Raised)
135 | self.items_frm.setObjectName("items_frm")
136 | self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.items_frm)
137 | self.verticalLayout_3.setSpacing(0)
138 | self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
139 | self.verticalLayout_3.setObjectName("verticalLayout_3")
140 | self.verticalLayout_2.addWidget(self.items_frm)
141 | self.horizontalLayout_5.addWidget(self.group_frm)
142 |
143 | self.retranslateUi(SyncGroup)
144 | QtCore.QObject.connect(self.power_btn, QtCore.SIGNAL("toggled(bool)"), self.group_frm.setEnabled)
145 | QtCore.QMetaObject.connectSlotsByName(SyncGroup)
146 |
147 | def retranslateUi(self, SyncGroup):
148 | self.power_btn.setToolTip(QtWidgets.QApplication.translate("SyncGroup", "Enable or disable this Sync Group", None, -1))
149 | self.power_btn.setStatusTip(QtWidgets.QApplication.translate("SyncGroup", "Enable or disable this Sync Group", None, -1))
150 | self.refresh_btn.setToolTip(QtWidgets.QApplication.translate("SyncGroup", "Reload the Group and check the paths for errors", None, -1))
151 | self.refresh_btn.setStatusTip(QtWidgets.QApplication.translate("SyncGroup", "Reload the Group and check the paths for errors", None, -1))
152 | self.sync_btn.setToolTip(QtWidgets.QApplication.translate("SyncGroup", "Start the sync/merge process for this group", None, -1))
153 | self.sync_btn.setStatusTip(QtWidgets.QApplication.translate("SyncGroup", "Start the sync/merge process for this group", None, -1))
154 | self.sync_btn.setText(QtWidgets.QApplication.translate("SyncGroup", "Sync this group", None, -1))
155 | self.sync_pos_chk.setToolTip(QtWidgets.QApplication.translate("SyncGroup", "Sync the current position and read percent of the books", None, -1))
156 | self.sync_pos_chk.setStatusTip(QtWidgets.QApplication.translate("SyncGroup", "Sync the current position and read percent of the books", None, -1))
157 | self.sync_pos_chk.setText(QtWidgets.QApplication.translate("SyncGroup", "Sync position", None, -1))
158 | self.merge_chk.setToolTip(QtWidgets.QApplication.translate("SyncGroup", "Merge the highlights from both books\\n(and/or the archived version)", None, -1))
159 | self.merge_chk.setStatusTip(QtWidgets.QApplication.translate("SyncGroup", "Merge the highlights from both books\\\\n(and/or the archived version)", None, -1))
160 | self.merge_chk.setText(QtWidgets.QApplication.translate("SyncGroup", "Merge Highlights", None, -1))
161 | self.sync_db_chk.setToolTip(QtWidgets.QApplication.translate("SyncGroup", "Keep a synced version of the book in the archived database", None, -1))
162 | self.sync_db_chk.setStatusTip(QtWidgets.QApplication.translate("SyncGroup", "Keep a synced version of the book in the archived database", None, -1))
163 | self.sync_db_chk.setText(QtWidgets.QApplication.translate("SyncGroup", "Sync with archived", None, -1))
164 | self.fold_btn.setText(QtWidgets.QApplication.translate("SyncGroup", "Hide sync paths", None, -1))
165 |
166 | import images_rc
167 |
--------------------------------------------------------------------------------
/gui_edit_template.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | EditTemplate
4 |
5 |
6 |
7 | 0
8 | 0
9 | 500
10 | 500
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | false
21 |
22 |
23 | -
24 |
25 |
26 |
27 | 0
28 | 200
29 |
30 |
31 |
32 | Qt::Vertical
33 |
34 |
35 | false
36 |
37 |
38 |
39 |
40 |
41 |
42 | Title - Authors
43 |
44 |
45 |
46 | 0
47 |
48 |
-
49 |
50 |
51 |
52 |
53 |
54 | true
55 |
56 |
57 |
58 | -
59 |
60 |
61 | QFrame::StyledPanel
62 |
63 |
64 | QFrame::Raised
65 |
66 |
67 |
68 | 0
69 |
70 |
-
71 |
72 |
73 |
74 | 0
75 | 0
76 |
77 |
78 |
79 | Qt::Horizontal
80 |
81 |
82 |
83 | QFrame::WinPanel
84 |
85 |
86 | false
87 |
88 |
89 |
90 |
91 | QFrame::WinPanel
92 |
93 |
94 | true
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | Highlight
107 |
108 |
109 |
110 | 0
111 |
112 | -
113 |
114 |
115 |
116 |
117 |
118 | true
119 |
120 |
121 |
122 | -
123 |
124 |
125 | QFrame::StyledPanel
126 |
127 |
128 | QFrame::Raised
129 |
130 |
131 |
132 | 0
133 |
134 |
-
135 |
136 |
137 |
138 | 0
139 | 0
140 |
141 |
142 |
143 | Qt::Horizontal
144 |
145 |
146 |
147 | QFrame::WinPanel
148 |
149 |
150 | false
151 |
152 |
153 |
154 |
155 | QFrame::WinPanel
156 |
157 |
158 | true
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 | -
171 |
172 |
173 |
174 | 0
175 |
176 |
-
177 |
178 |
179 |
180 | 0
181 | 0
182 |
183 |
184 |
185 | Split Chapters
186 |
187 |
188 |
189 | -
190 |
191 |
192 | using
193 |
194 |
195 |
196 | -
197 |
198 |
-
199 |
200 | Heading L1
201 |
202 |
203 | -
204 |
205 | Heading L2
206 |
207 |
208 | -
209 |
210 | Heading L3
211 |
212 |
213 | -
214 |
215 | Heading L4
216 |
217 |
218 | -
219 |
220 | Heading L5
221 |
222 |
223 | -
224 |
225 | Heading L6
226 |
227 |
228 |
229 |
230 | -
231 |
232 |
233 | to
234 |
235 |
236 |
237 | -
238 |
239 |
240 | 5
241 |
242 |
-
243 |
244 | Heading L1
245 |
246 |
247 | -
248 |
249 | Heading L2
250 |
251 |
252 | -
253 |
254 | Heading L3
255 |
256 |
257 | -
258 |
259 | Heading L4
260 |
261 |
262 | -
263 |
264 | Heading L5
265 |
266 |
267 | -
268 |
269 | Heading L6
270 |
271 |
272 |
273 |
274 | -
275 |
276 |
277 | Qt::Horizontal
278 |
279 |
280 |
281 | 40
282 | 20
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 | -
291 |
292 |
293 |
294 | 0
295 | 0
296 |
297 |
298 |
299 |
300 | 0
301 |
302 |
-
303 |
304 |
305 | Default
306 |
307 |
308 |
309 | -
310 |
311 |
312 | Qt::Horizontal
313 |
314 |
315 |
316 | 175
317 | 20
318 |
319 |
320 |
321 |
322 | -
323 |
324 |
325 | Check online for an updated version
326 |
327 |
328 | OK
329 |
330 |
331 |
332 | -
333 |
334 |
335 | Cancel
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
--------------------------------------------------------------------------------
/gui_edit_template.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_edit_template.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_edit_template.ui' applies.
5 | #
6 | # Created: Mon Nov 4 00:35:08 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_EditTemplate(object):
14 | def setupUi(self, EditTemplate):
15 | EditTemplate.setObjectName("EditTemplate")
16 | EditTemplate.resize(500, 500)
17 | EditTemplate.setStyleSheet("")
18 | EditTemplate.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
19 | EditTemplate.setModal(False)
20 | self.verticalLayout_3 = QtWidgets.QVBoxLayout(EditTemplate)
21 | self.verticalLayout_3.setObjectName("verticalLayout_3")
22 | self.splitter = QtWidgets.QSplitter(EditTemplate)
23 | self.splitter.setMinimumSize(QtCore.QSize(0, 200))
24 | self.splitter.setOrientation(QtCore.Qt.Vertical)
25 | self.splitter.setChildrenCollapsible(False)
26 | self.splitter.setObjectName("splitter")
27 | self.groupBox = QtWidgets.QGroupBox(self.splitter)
28 | self.groupBox.setStyleSheet("")
29 | self.groupBox.setObjectName("groupBox")
30 | self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
31 | self.verticalLayout.setContentsMargins(0, 0, 0, 0)
32 | self.verticalLayout.setObjectName("verticalLayout")
33 | self.head_help_lbl = QtWidgets.QLabel(self.groupBox)
34 | self.head_help_lbl.setText("")
35 | self.head_help_lbl.setWordWrap(True)
36 | self.head_help_lbl.setObjectName("head_help_lbl")
37 | self.verticalLayout.addWidget(self.head_help_lbl)
38 | self.frame_2 = QtWidgets.QFrame(self.groupBox)
39 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
40 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
41 | self.frame_2.setObjectName("frame_2")
42 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame_2)
43 | self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
44 | self.horizontalLayout_2.setObjectName("horizontalLayout_2")
45 | self.head_split = QtWidgets.QSplitter(self.frame_2)
46 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
47 | sizePolicy.setHorizontalStretch(0)
48 | sizePolicy.setVerticalStretch(0)
49 | sizePolicy.setHeightForWidth(self.head_split.sizePolicy().hasHeightForWidth())
50 | self.head_split.setSizePolicy(sizePolicy)
51 | self.head_split.setOrientation(QtCore.Qt.Horizontal)
52 | self.head_split.setObjectName("head_split")
53 | self.head_edit_txt = QtWidgets.QTextEdit(self.head_split)
54 | self.head_edit_txt.setFrameShape(QtWidgets.QFrame.WinPanel)
55 | self.head_edit_txt.setAcceptRichText(False)
56 | self.head_edit_txt.setObjectName("head_edit_txt")
57 | self.head_preview_txt = QtWidgets.QTextEdit(self.head_split)
58 | self.head_preview_txt.setFrameShape(QtWidgets.QFrame.WinPanel)
59 | self.head_preview_txt.setReadOnly(True)
60 | self.head_preview_txt.setObjectName("head_preview_txt")
61 | self.horizontalLayout_2.addWidget(self.head_split)
62 | self.verticalLayout.addWidget(self.frame_2)
63 | self.groupBox_2 = QtWidgets.QGroupBox(self.splitter)
64 | self.groupBox_2.setObjectName("groupBox_2")
65 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2)
66 | self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
67 | self.verticalLayout_2.setObjectName("verticalLayout_2")
68 | self.body_help_lbl = QtWidgets.QLabel(self.groupBox_2)
69 | self.body_help_lbl.setText("")
70 | self.body_help_lbl.setWordWrap(True)
71 | self.body_help_lbl.setObjectName("body_help_lbl")
72 | self.verticalLayout_2.addWidget(self.body_help_lbl)
73 | self.frame = QtWidgets.QFrame(self.groupBox_2)
74 | self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
75 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
76 | self.frame.setObjectName("frame")
77 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame)
78 | self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
79 | self.horizontalLayout_3.setObjectName("horizontalLayout_3")
80 | self.body_split = QtWidgets.QSplitter(self.frame)
81 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
82 | sizePolicy.setHorizontalStretch(0)
83 | sizePolicy.setVerticalStretch(0)
84 | sizePolicy.setHeightForWidth(self.body_split.sizePolicy().hasHeightForWidth())
85 | self.body_split.setSizePolicy(sizePolicy)
86 | self.body_split.setOrientation(QtCore.Qt.Horizontal)
87 | self.body_split.setObjectName("body_split")
88 | self.body_edit_txt = QtWidgets.QTextEdit(self.body_split)
89 | self.body_edit_txt.setFrameShape(QtWidgets.QFrame.WinPanel)
90 | self.body_edit_txt.setAcceptRichText(False)
91 | self.body_edit_txt.setObjectName("body_edit_txt")
92 | self.body_preview_txt = QtWidgets.QTextEdit(self.body_split)
93 | self.body_preview_txt.setFrameShape(QtWidgets.QFrame.WinPanel)
94 | self.body_preview_txt.setReadOnly(True)
95 | self.body_preview_txt.setObjectName("body_preview_txt")
96 | self.horizontalLayout_3.addWidget(self.body_split)
97 | self.verticalLayout_2.addWidget(self.frame)
98 | self.verticalLayout_3.addWidget(self.splitter)
99 | self.split_chapters_frm = QtWidgets.QFrame(EditTemplate)
100 | self.split_chapters_frm.setObjectName("split_chapters_frm")
101 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.split_chapters_frm)
102 | self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
103 | self.horizontalLayout_4.setObjectName("horizontalLayout_4")
104 | self.split_chapters_chk = QtWidgets.QCheckBox(self.split_chapters_frm)
105 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
106 | sizePolicy.setHorizontalStretch(0)
107 | sizePolicy.setVerticalStretch(0)
108 | sizePolicy.setHeightForWidth(self.split_chapters_chk.sizePolicy().hasHeightForWidth())
109 | self.split_chapters_chk.setSizePolicy(sizePolicy)
110 | self.split_chapters_chk.setObjectName("split_chapters_chk")
111 | self.horizontalLayout_4.addWidget(self.split_chapters_chk)
112 | self.label = QtWidgets.QLabel(self.split_chapters_frm)
113 | self.label.setObjectName("label")
114 | self.horizontalLayout_4.addWidget(self.label)
115 | self.head_min_box = QtWidgets.QComboBox(self.split_chapters_frm)
116 | self.head_min_box.setObjectName("head_min_box")
117 | self.head_min_box.addItem("")
118 | self.head_min_box.addItem("")
119 | self.head_min_box.addItem("")
120 | self.head_min_box.addItem("")
121 | self.head_min_box.addItem("")
122 | self.head_min_box.addItem("")
123 | self.horizontalLayout_4.addWidget(self.head_min_box)
124 | self.label_2 = QtWidgets.QLabel(self.split_chapters_frm)
125 | self.label_2.setObjectName("label_2")
126 | self.horizontalLayout_4.addWidget(self.label_2)
127 | self.head_max_box = QtWidgets.QComboBox(self.split_chapters_frm)
128 | self.head_max_box.setObjectName("head_max_box")
129 | self.head_max_box.addItem("")
130 | self.head_max_box.addItem("")
131 | self.head_max_box.addItem("")
132 | self.head_max_box.addItem("")
133 | self.head_max_box.addItem("")
134 | self.head_max_box.addItem("")
135 | self.horizontalLayout_4.addWidget(self.head_max_box)
136 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
137 | self.horizontalLayout_4.addItem(spacerItem)
138 | self.verticalLayout_3.addWidget(self.split_chapters_frm)
139 | self.btn_box = QtWidgets.QFrame(EditTemplate)
140 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
141 | sizePolicy.setHorizontalStretch(0)
142 | sizePolicy.setVerticalStretch(0)
143 | sizePolicy.setHeightForWidth(self.btn_box.sizePolicy().hasHeightForWidth())
144 | self.btn_box.setSizePolicy(sizePolicy)
145 | self.btn_box.setObjectName("btn_box")
146 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.btn_box)
147 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
148 | self.horizontalLayout.setObjectName("horizontalLayout")
149 | self.default_btn = QtWidgets.QPushButton(self.btn_box)
150 | self.default_btn.setObjectName("default_btn")
151 | self.horizontalLayout.addWidget(self.default_btn)
152 | spacerItem1 = QtWidgets.QSpacerItem(175, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
153 | self.horizontalLayout.addItem(spacerItem1)
154 | self.ok_btn = QtWidgets.QPushButton(self.btn_box)
155 | self.ok_btn.setObjectName("ok_btn")
156 | self.horizontalLayout.addWidget(self.ok_btn)
157 | self.cancel_btn = QtWidgets.QPushButton(self.btn_box)
158 | self.cancel_btn.setObjectName("cancel_btn")
159 | self.horizontalLayout.addWidget(self.cancel_btn)
160 | self.verticalLayout_3.addWidget(self.btn_box)
161 |
162 | self.retranslateUi(EditTemplate)
163 | self.head_max_box.setCurrentIndex(5)
164 | QtCore.QMetaObject.connectSlotsByName(EditTemplate)
165 |
166 | def retranslateUi(self, EditTemplate):
167 | self.groupBox.setTitle(QtWidgets.QApplication.translate("EditTemplate", "Title - Authors", None, -1))
168 | self.groupBox_2.setTitle(QtWidgets.QApplication.translate("EditTemplate", "Highlight", None, -1))
169 | self.split_chapters_chk.setText(QtWidgets.QApplication.translate("EditTemplate", "Split Chapters", None, -1))
170 | self.label.setText(QtWidgets.QApplication.translate("EditTemplate", "using", None, -1))
171 | self.head_min_box.setItemText(0, QtWidgets.QApplication.translate("EditTemplate", "Heading L1", None, -1))
172 | self.head_min_box.setItemText(1, QtWidgets.QApplication.translate("EditTemplate", "Heading L2", None, -1))
173 | self.head_min_box.setItemText(2, QtWidgets.QApplication.translate("EditTemplate", "Heading L3", None, -1))
174 | self.head_min_box.setItemText(3, QtWidgets.QApplication.translate("EditTemplate", "Heading L4", None, -1))
175 | self.head_min_box.setItemText(4, QtWidgets.QApplication.translate("EditTemplate", "Heading L5", None, -1))
176 | self.head_min_box.setItemText(5, QtWidgets.QApplication.translate("EditTemplate", "Heading L6", None, -1))
177 | self.label_2.setText(QtWidgets.QApplication.translate("EditTemplate", "to", None, -1))
178 | self.head_max_box.setItemText(0, QtWidgets.QApplication.translate("EditTemplate", "Heading L1", None, -1))
179 | self.head_max_box.setItemText(1, QtWidgets.QApplication.translate("EditTemplate", "Heading L2", None, -1))
180 | self.head_max_box.setItemText(2, QtWidgets.QApplication.translate("EditTemplate", "Heading L3", None, -1))
181 | self.head_max_box.setItemText(3, QtWidgets.QApplication.translate("EditTemplate", "Heading L4", None, -1))
182 | self.head_max_box.setItemText(4, QtWidgets.QApplication.translate("EditTemplate", "Heading L5", None, -1))
183 | self.head_max_box.setItemText(5, QtWidgets.QApplication.translate("EditTemplate", "Heading L6", None, -1))
184 | self.default_btn.setText(QtWidgets.QApplication.translate("EditTemplate", "Default", None, -1))
185 | self.ok_btn.setToolTip(QtWidgets.QApplication.translate("EditTemplate", "Check online for an updated version", None, -1))
186 | self.ok_btn.setText(QtWidgets.QApplication.translate("EditTemplate", "OK", None, -1))
187 | self.cancel_btn.setText(QtWidgets.QApplication.translate("EditTemplate", "Cancel", None, -1))
188 |
189 | import images_rc
190 |
--------------------------------------------------------------------------------
/gui_prefs.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_prefs.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_prefs.ui' applies.
5 | #
6 | # Created: Mon Nov 4 00:35:07 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_Prefs(object):
14 | def setupUi(self, Prefs):
15 | Prefs.setObjectName("Prefs")
16 | Prefs.resize(232, 373)
17 | Prefs.setToolTip("")
18 | Prefs.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
19 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(Prefs)
20 | self.verticalLayout_2.setObjectName("verticalLayout_2")
21 | self.gridLayout = QtWidgets.QGridLayout()
22 | self.gridLayout.setObjectName("gridLayout")
23 | self.label = QtWidgets.QLabel(Prefs)
24 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
25 | sizePolicy.setHorizontalStretch(0)
26 | sizePolicy.setVerticalStretch(0)
27 | sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
28 | self.label.setSizePolicy(sizePolicy)
29 | self.label.setObjectName("label")
30 | self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
31 | self.frame = QtWidgets.QFrame(Prefs)
32 | self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
33 | self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
34 | self.frame.setObjectName("frame")
35 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame)
36 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
37 | self.horizontalLayout.setObjectName("horizontalLayout")
38 | self.theme_box = QtWidgets.QComboBox(self.frame)
39 | self.theme_box.setObjectName("theme_box")
40 | self.theme_box.addItem("")
41 | self.theme_box.addItem("")
42 | self.theme_box.addItem("")
43 | self.theme_box.addItem("")
44 | self.theme_box.addItem("")
45 | self.theme_box.addItem("")
46 | self.horizontalLayout.addWidget(self.theme_box)
47 | spacerItem = QtWidgets.QSpacerItem(9, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
48 | self.horizontalLayout.addItem(spacerItem)
49 | self.gridLayout.addWidget(self.frame, 0, 1, 1, 1)
50 | self.alt_title_sort_chk = QtWidgets.QCheckBox(Prefs)
51 | self.alt_title_sort_chk.setObjectName("alt_title_sort_chk")
52 | self.gridLayout.addWidget(self.alt_title_sort_chk, 1, 0, 1, 2)
53 | self.verticalLayout_2.addLayout(self.gridLayout)
54 | self.frame_4 = QtWidgets.QFrame(Prefs)
55 | self.frame_4.setFrameShape(QtWidgets.QFrame.HLine)
56 | self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
57 | self.frame_4.setObjectName("frame_4")
58 | self.verticalLayout_2.addWidget(self.frame_4)
59 | self.groupBox = QtWidgets.QGroupBox(Prefs)
60 | self.groupBox.setObjectName("groupBox")
61 | self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
62 | self.verticalLayout.setContentsMargins(0, 0, 0, 0)
63 | self.verticalLayout.setObjectName("verticalLayout")
64 | self.show_page_chk = QtWidgets.QCheckBox(self.groupBox)
65 | self.show_page_chk.setCheckable(True)
66 | self.show_page_chk.setChecked(True)
67 | self.show_page_chk.setObjectName("show_page_chk")
68 | self.verticalLayout.addWidget(self.show_page_chk)
69 | self.show_date_chk = QtWidgets.QCheckBox(self.groupBox)
70 | self.show_date_chk.setChecked(True)
71 | self.show_date_chk.setObjectName("show_date_chk")
72 | self.verticalLayout.addWidget(self.show_date_chk)
73 | self.show_high_chk = QtWidgets.QCheckBox(self.groupBox)
74 | self.show_high_chk.setChecked(True)
75 | self.show_high_chk.setObjectName("show_high_chk")
76 | self.verticalLayout.addWidget(self.show_high_chk)
77 | self.show_chap_chk = QtWidgets.QCheckBox(self.groupBox)
78 | self.show_chap_chk.setChecked(True)
79 | self.show_chap_chk.setObjectName("show_chap_chk")
80 | self.verticalLayout.addWidget(self.show_chap_chk)
81 | self.show_comm_chk = QtWidgets.QCheckBox(self.groupBox)
82 | self.show_comm_chk.setChecked(True)
83 | self.show_comm_chk.setObjectName("show_comm_chk")
84 | self.verticalLayout.addWidget(self.show_comm_chk)
85 | self.show_ref_pg_chk = QtWidgets.QCheckBox(self.groupBox)
86 | self.show_ref_pg_chk.setChecked(True)
87 | self.show_ref_pg_chk.setObjectName("show_ref_pg_chk")
88 | self.verticalLayout.addWidget(self.show_ref_pg_chk)
89 | self.custom_date_btn = QtWidgets.QToolButton(self.groupBox)
90 | icon = QtGui.QIcon()
91 | icon.addPixmap(QtGui.QPixmap(":/stuff/calendar.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
92 | self.custom_date_btn.setIcon(icon)
93 | self.custom_date_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
94 | self.custom_date_btn.setObjectName("custom_date_btn")
95 | self.verticalLayout.addWidget(self.custom_date_btn)
96 | self.frame_6 = QtWidgets.QFrame(self.groupBox)
97 | self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel)
98 | self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised)
99 | self.frame_6.setObjectName("frame_6")
100 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_6)
101 | self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
102 | self.horizontalLayout_3.setObjectName("horizontalLayout_3")
103 | self.custom_template_chk = QtWidgets.QCheckBox(self.frame_6)
104 | self.custom_template_chk.setObjectName("custom_template_chk")
105 | self.horizontalLayout_3.addWidget(self.custom_template_chk)
106 | self.custom_template_btn = QtWidgets.QToolButton(self.frame_6)
107 | self.custom_template_btn.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
108 | icon1 = QtGui.QIcon()
109 | icon1.addPixmap(QtGui.QPixmap(":/stuff/file_edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
110 | self.custom_template_btn.setIcon(icon1)
111 | self.custom_template_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
112 | self.custom_template_btn.setObjectName("custom_template_btn")
113 | self.horizontalLayout_3.addWidget(self.custom_template_btn)
114 | self.verticalLayout.addWidget(self.frame_6)
115 | self.frame_3 = QtWidgets.QFrame(self.groupBox)
116 | self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
117 | self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
118 | self.frame_3.setObjectName("frame_3")
119 | self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.frame_3)
120 | self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
121 | self.horizontalLayout_4.setObjectName("horizontalLayout_4")
122 | self.sort_box = QtWidgets.QComboBox(self.frame_3)
123 | self.sort_box.setObjectName("sort_box")
124 | self.sort_box.addItem("")
125 | self.sort_box.addItem("")
126 | self.horizontalLayout_4.addWidget(self.sort_box)
127 | spacerItem1 = QtWidgets.QSpacerItem(76, 9, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
128 | self.horizontalLayout_4.addItem(spacerItem1)
129 | self.verticalLayout.addWidget(self.frame_3)
130 | self.verticalLayout_2.addWidget(self.groupBox)
131 | spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
132 | self.verticalLayout_2.addItem(spacerItem2)
133 | self.frame_5 = QtWidgets.QFrame(Prefs)
134 | self.frame_5.setFrameShape(QtWidgets.QFrame.HLine)
135 | self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)
136 | self.frame_5.setObjectName("frame_5")
137 | self.verticalLayout_2.addWidget(self.frame_5)
138 | self.frame_2 = QtWidgets.QFrame(Prefs)
139 | self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
140 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
141 | self.frame_2.setObjectName("frame_2")
142 | self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame_2)
143 | self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
144 | self.horizontalLayout_2.setObjectName("horizontalLayout_2")
145 | spacerItem3 = QtWidgets.QSpacerItem(79, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
146 | self.horizontalLayout_2.addItem(spacerItem3)
147 | self.close_btn = QtWidgets.QPushButton(self.frame_2)
148 | self.close_btn.setObjectName("close_btn")
149 | self.horizontalLayout_2.addWidget(self.close_btn)
150 | spacerItem4 = QtWidgets.QSpacerItem(79, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
151 | self.horizontalLayout_2.addItem(spacerItem4)
152 | self.verticalLayout_2.addWidget(self.frame_2)
153 |
154 | self.retranslateUi(Prefs)
155 | QtCore.QObject.connect(self.close_btn, QtCore.SIGNAL("clicked()"), Prefs.close)
156 | QtCore.QMetaObject.connectSlotsByName(Prefs)
157 |
158 | def retranslateUi(self, Prefs):
159 | Prefs.setWindowTitle(QtWidgets.QApplication.translate("Prefs", "Preferences", None, -1))
160 | self.label.setToolTip(QtWidgets.QApplication.translate("Prefs", "Change the application\'s appearance", None, -1))
161 | self.label.setText(QtWidgets.QApplication.translate("Prefs", "Appearance", None, -1))
162 | self.theme_box.setToolTip(QtWidgets.QApplication.translate("Prefs", "Change the application\'s appearance", None, -1))
163 | self.theme_box.setItemText(0, QtWidgets.QApplication.translate("Prefs", "No theme - Old icons", None, -1))
164 | self.theme_box.setItemText(1, QtWidgets.QApplication.translate("Prefs", "No theme - New icons", None, -1))
165 | self.theme_box.setItemText(2, QtWidgets.QApplication.translate("Prefs", "Dark theme - Old icons", None, -1))
166 | self.theme_box.setItemText(3, QtWidgets.QApplication.translate("Prefs", "Dark theme - New icons", None, -1))
167 | self.theme_box.setItemText(4, QtWidgets.QApplication.translate("Prefs", "Light theme - Old icons", None, -1))
168 | self.theme_box.setItemText(5, QtWidgets.QApplication.translate("Prefs", "Light theme - New icons", None, -1))
169 | self.alt_title_sort_chk.setToolTip(QtWidgets.QApplication.translate("Prefs", "Ignore the english articles \"A\" and \"The\" when sorting by Title", None, -1))
170 | self.alt_title_sort_chk.setText(QtWidgets.QApplication.translate("Prefs", "Ignore english articles", None, -1))
171 | self.groupBox.setTitle(QtWidgets.QApplication.translate("Prefs", "Highlight Options", None, -1))
172 | self.show_page_chk.setToolTip(QtWidgets.QApplication.translate("Prefs", "Show the highlight\'s page number", None, -1))
173 | self.show_page_chk.setText(QtWidgets.QApplication.translate("Prefs", "Show page", None, -1))
174 | self.show_date_chk.setToolTip(QtWidgets.QApplication.translate("Prefs", "Show the highlight\'s date", None, -1))
175 | self.show_date_chk.setText(QtWidgets.QApplication.translate("Prefs", "Show date", None, -1))
176 | self.show_high_chk.setToolTip(QtWidgets.QApplication.translate("Prefs", "Show the highlight\'s text", None, -1))
177 | self.show_high_chk.setText(QtWidgets.QApplication.translate("Prefs", "Show highlight", None, -1))
178 | self.show_chap_chk.setToolTip(QtWidgets.QApplication.translate("Prefs", "Show the highlight\'s chapter", None, -1))
179 | self.show_chap_chk.setText(QtWidgets.QApplication.translate("Prefs", "Show chapter", None, -1))
180 | self.show_comm_chk.setToolTip(QtWidgets.QApplication.translate("Prefs", "Show the highlight\'s comment", None, -1))
181 | self.show_comm_chk.setText(QtWidgets.QApplication.translate("Prefs", "Show comment", None, -1))
182 | self.show_ref_pg_chk.setToolTip(QtWidgets.QApplication.translate("Prefs", "Prefer reference page numbers if exists", None, -1))
183 | self.show_ref_pg_chk.setText(QtWidgets.QApplication.translate("Prefs", "Use Reference page numbers", None, -1))
184 | self.custom_date_btn.setToolTip(QtWidgets.QApplication.translate("Prefs", "Change the way date is displayed", None, -1))
185 | self.custom_date_btn.setText(QtWidgets.QApplication.translate("Prefs", "Custom Date format", None, -1))
186 | self.custom_template_chk.setToolTip(QtWidgets.QApplication.translate("Prefs", "Use a custom template for Markdown export", None, -1))
187 | self.custom_template_chk.setText(QtWidgets.QApplication.translate("Prefs", "Custom Markdown", None, -1))
188 | self.custom_template_btn.setToolTip(QtWidgets.QApplication.translate("Prefs", "Edit the Markdown export template", None, -1))
189 | self.custom_template_btn.setText(QtWidgets.QApplication.translate("Prefs", "Edit", None, -1))
190 | self.sort_box.setToolTip(QtWidgets.QApplication.translate("Prefs", "Change the sorting method of the highlights", None, -1))
191 | self.sort_box.setItemText(0, QtWidgets.QApplication.translate("Prefs", "Sort Highlights by Date", None, -1))
192 | self.sort_box.setItemText(1, QtWidgets.QApplication.translate("Prefs", "Sort Highlights by Page", None, -1))
193 | self.close_btn.setText(QtWidgets.QApplication.translate("Prefs", "Close", None, -1))
194 |
195 | import images_rc
196 |
--------------------------------------------------------------------------------
/gui_sync_group.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | SyncGroup
4 |
5 |
6 |
7 | 0
8 | 0
9 | 672
10 | 50
11 |
12 |
13 |
14 |
15 | 0
16 |
17 |
18 | 0
19 |
20 | -
21 |
22 |
23 |
24 | 0
25 |
26 |
27 | 0
28 |
29 |
30 | 0
31 |
32 |
33 | 1
34 |
35 |
36 | 0
37 |
38 |
-
39 |
40 |
41 | Qt::Vertical
42 |
43 |
44 |
45 | 20
46 | 30
47 |
48 |
49 |
50 |
51 | -
52 |
53 |
54 | Enable or disable this Sync Group
55 |
56 |
57 | Enable or disable this Sync Group
58 |
59 |
60 |
61 |
62 |
63 |
64 | :/stuff/power32gray.png
65 | :/stuff/power32red.png:/stuff/power32gray.png
66 |
67 |
68 |
69 | 16
70 | 16
71 |
72 |
73 |
74 | true
75 |
76 |
77 | true
78 |
79 |
80 | true
81 |
82 |
83 |
84 | -
85 |
86 |
87 | Qt::Vertical
88 |
89 |
90 |
91 | 20
92 | 28
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 | -
101 |
102 |
103 | Qt::CustomContextMenu
104 |
105 |
106 | QFrame::Box
107 |
108 |
109 | QFrame::Plain
110 |
111 |
112 | 1
113 |
114 |
115 |
116 | 0
117 |
118 |
119 | 0
120 |
121 |
-
122 |
123 |
124 |
125 | 0
126 | 0
127 |
128 |
129 |
130 | QFrame::StyledPanel
131 |
132 |
133 | QFrame::Raised
134 |
135 |
136 |
137 | 0
138 |
139 |
-
140 |
141 |
142 | Reload the Group and check the paths for errors
143 |
144 |
145 | Reload the Group and check the paths for errors
146 |
147 |
148 |
149 |
150 |
151 |
152 | :/stuff/refresh16.png:/stuff/refresh16.png
153 |
154 |
155 |
156 | 16
157 | 16
158 |
159 |
160 |
161 | false
162 |
163 |
164 | true
165 |
166 |
167 |
168 | -
169 |
170 |
171 | Qt::Horizontal
172 |
173 |
174 |
175 | 40
176 | 20
177 |
178 |
179 |
180 |
181 | -
182 |
183 |
184 | true
185 |
186 |
187 |
188 |
189 |
190 | Qt::AlignCenter
191 |
192 |
193 |
194 | -
195 |
196 |
197 | Qt::Horizontal
198 |
199 |
200 |
201 | 161
202 | 20
203 |
204 |
205 |
206 |
207 | -
208 |
209 |
210 | Start the sync/merge process for this group
211 |
212 |
213 | Start the sync/merge process for this group
214 |
215 |
216 | Sync this group
217 |
218 |
219 |
220 | :/stuff/sync.png:/stuff/sync.png
221 |
222 |
223 | false
224 |
225 |
226 | Qt::ToolButtonTextBesideIcon
227 |
228 |
229 | true
230 |
231 |
232 |
233 |
234 |
235 |
236 | -
237 |
238 |
239 |
240 | 0
241 | 0
242 |
243 |
244 |
245 | QFrame::StyledPanel
246 |
247 |
248 | QFrame::Raised
249 |
250 |
251 |
252 | 4
253 |
254 |
255 | 0
256 |
257 |
258 | 2
259 |
260 |
261 | 0
262 |
263 |
-
264 |
265 |
266 | Sync the current position and read percent of the books
267 |
268 |
269 | Sync the current position and read percent of the books
270 |
271 |
272 | Sync position
273 |
274 |
275 |
276 | -
277 |
278 |
279 | Merge the highlights from both books\n(and/or the archived version)
280 |
281 |
282 | Merge the highlights from both books\\n(and/or the archived version)
283 |
284 |
285 | Merge Highlights
286 |
287 |
288 |
289 | -
290 |
291 |
292 | Keep a synced version of the book in the archived database
293 |
294 |
295 | Keep a synced version of the book in the archived database
296 |
297 |
298 | Sync with archived
299 |
300 |
301 |
302 | -
303 |
304 |
305 | Qt::Horizontal
306 |
307 |
308 |
309 | 40
310 | 20
311 |
312 |
313 |
314 |
315 | -
316 |
317 |
318 | QToolButton{border:none;}
319 |
320 |
321 | Hide sync paths
322 |
323 |
324 | true
325 |
326 |
327 | Qt::ToolButtonTextBesideIcon
328 |
329 |
330 | Qt::DownArrow
331 |
332 |
333 |
334 |
335 |
336 |
337 | -
338 |
339 |
340 |
341 | 0
342 | 0
343 |
344 |
345 |
346 | QFrame::StyledPanel
347 |
348 |
349 | QFrame::Raised
350 |
351 |
352 |
353 | 0
354 |
355 |
356 | 0
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 | power_btn
372 | toggled(bool)
373 | group_frm
374 | setEnabled(bool)
375 |
376 |
377 | 22
378 | 21
379 |
380 |
381 | 81
382 | 83
383 |
384 |
385 |
386 |
387 |
388 |
--------------------------------------------------------------------------------
/gui_prefs.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Prefs
4 |
5 |
6 |
7 | 0
8 | 0
9 | 232
10 | 373
11 |
12 |
13 |
14 | Preferences
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | -
24 |
25 |
-
26 |
27 |
28 |
29 | 0
30 | 0
31 |
32 |
33 |
34 | Change the application's appearance
35 |
36 |
37 | Appearance
38 |
39 |
40 |
41 | -
42 |
43 |
44 | QFrame::StyledPanel
45 |
46 |
47 | QFrame::Raised
48 |
49 |
50 |
51 | 0
52 |
53 |
-
54 |
55 |
56 | Change the application's appearance
57 |
58 |
-
59 |
60 | No theme - Old icons
61 |
62 |
63 | -
64 |
65 | No theme - New icons
66 |
67 |
68 | -
69 |
70 | Dark theme - Old icons
71 |
72 |
73 | -
74 |
75 | Dark theme - New icons
76 |
77 |
78 | -
79 |
80 | Light theme - Old icons
81 |
82 |
83 | -
84 |
85 | Light theme - New icons
86 |
87 |
88 |
89 |
90 | -
91 |
92 |
93 | Qt::Horizontal
94 |
95 |
96 |
97 | 9
98 | 20
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | -
107 |
108 |
109 | Ignore the english articles "A" and "The" when sorting by Title
110 |
111 |
112 | Ignore english articles
113 |
114 |
115 |
116 |
117 |
118 | -
119 |
120 |
121 | QFrame::HLine
122 |
123 |
124 | QFrame::Raised
125 |
126 |
127 |
128 | -
129 |
130 |
131 | Highlight Options
132 |
133 |
134 |
135 | 0
136 |
137 |
-
138 |
139 |
140 | Show the highlight's page number
141 |
142 |
143 | Show page
144 |
145 |
146 | true
147 |
148 |
149 | true
150 |
151 |
152 |
153 | -
154 |
155 |
156 | Show the highlight's date
157 |
158 |
159 | Show date
160 |
161 |
162 | true
163 |
164 |
165 |
166 | -
167 |
168 |
169 | Show the highlight's text
170 |
171 |
172 | Show highlight
173 |
174 |
175 | true
176 |
177 |
178 |
179 | -
180 |
181 |
182 | Show the highlight's chapter
183 |
184 |
185 | Show chapter
186 |
187 |
188 | true
189 |
190 |
191 |
192 | -
193 |
194 |
195 | Show the highlight's comment
196 |
197 |
198 | Show comment
199 |
200 |
201 | true
202 |
203 |
204 |
205 | -
206 |
207 |
208 | Prefer reference page numbers if exists
209 |
210 |
211 | Use Reference page numbers
212 |
213 |
214 | true
215 |
216 |
217 |
218 | -
219 |
220 |
221 | Change the way date is displayed
222 |
223 |
224 | Custom Date format
225 |
226 |
227 |
228 | :/stuff/calendar.png:/stuff/calendar.png
229 |
230 |
231 | Qt::ToolButtonTextBesideIcon
232 |
233 |
234 |
235 | -
236 |
237 |
238 | QFrame::StyledPanel
239 |
240 |
241 | QFrame::Raised
242 |
243 |
244 |
245 | 0
246 |
247 |
-
248 |
249 |
250 | Use a custom template for Markdown export
251 |
252 |
253 | Custom Markdown
254 |
255 |
256 |
257 | -
258 |
259 |
260 | Qt::CustomContextMenu
261 |
262 |
263 | Edit the Markdown export template
264 |
265 |
266 | Edit
267 |
268 |
269 |
270 | :/stuff/file_edit.png:/stuff/file_edit.png
271 |
272 |
273 | Qt::ToolButtonTextBesideIcon
274 |
275 |
276 |
277 |
278 |
279 |
280 | -
281 |
282 |
283 | QFrame::StyledPanel
284 |
285 |
286 | QFrame::Raised
287 |
288 |
289 |
290 | 0
291 |
292 |
-
293 |
294 |
295 | Change the sorting method of the highlights
296 |
297 |
-
298 |
299 | Sort Highlights by Date
300 |
301 |
302 | -
303 |
304 | Sort Highlights by Page
305 |
306 |
307 |
308 |
309 | -
310 |
311 |
312 | Qt::Horizontal
313 |
314 |
315 |
316 | 76
317 | 9
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 | -
329 |
330 |
331 | Qt::Vertical
332 |
333 |
334 |
335 | 20
336 | 40
337 |
338 |
339 |
340 |
341 | -
342 |
343 |
344 | QFrame::HLine
345 |
346 |
347 | QFrame::Raised
348 |
349 |
350 |
351 | -
352 |
353 |
354 | QFrame::StyledPanel
355 |
356 |
357 | QFrame::Raised
358 |
359 |
360 |
361 | 0
362 |
363 |
-
364 |
365 |
366 | Qt::Horizontal
367 |
368 |
369 |
370 | 79
371 | 20
372 |
373 |
374 |
375 |
376 | -
377 |
378 |
379 | Close
380 |
381 |
382 |
383 | -
384 |
385 |
386 | Qt::Horizontal
387 |
388 |
389 |
390 | 79
391 | 20
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 | close_btn
403 |
404 |
405 |
406 |
407 |
408 |
409 | close_btn
410 | clicked()
411 | Prefs
412 | close()
413 |
414 |
415 | 156
416 | 169
417 |
418 |
419 | 239
420 | 179
421 |
422 |
423 |
424 |
425 |
426 |
--------------------------------------------------------------------------------
/gui_main.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_main.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_main.ui' applies.
5 | #
6 | # Created: Mon Nov 4 00:35:07 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_Base(object):
14 | def setupUi(self, Base):
15 | Base.setObjectName("Base")
16 | Base.resize(640, 512)
17 | icon = QtGui.QIcon()
18 | icon.addPixmap(QtGui.QPixmap(":/stuff/logo64.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
19 | Base.setWindowIcon(icon)
20 | Base.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
21 | Base.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
22 | self.centralwidget = QtWidgets.QWidget(Base)
23 | self.centralwidget.setObjectName("centralwidget")
24 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget)
25 | self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
26 | self.verticalLayout_2.setObjectName("verticalLayout_2")
27 | self.views = QtWidgets.QStackedWidget(self.centralwidget)
28 | self.views.setObjectName("views")
29 | self.books_pg = QtWidgets.QWidget()
30 | self.books_pg.setObjectName("books_pg")
31 | self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.books_pg)
32 | self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
33 | self.verticalLayout_3.setObjectName("verticalLayout_3")
34 | self.splitter = QtWidgets.QSplitter(self.books_pg)
35 | self.splitter.setOrientation(QtCore.Qt.Horizontal)
36 | self.splitter.setObjectName("splitter")
37 | self.file_table = DropTableWidget(self.splitter)
38 | self.file_table.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
39 | self.file_table.setAcceptDrops(True)
40 | self.file_table.setFrameShape(QtWidgets.QFrame.WinPanel)
41 | self.file_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
42 | self.file_table.setDragDropMode(QtWidgets.QAbstractItemView.DropOnly)
43 | self.file_table.setDefaultDropAction(QtCore.Qt.CopyAction)
44 | self.file_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
45 | self.file_table.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
46 | self.file_table.setWordWrap(False)
47 | self.file_table.setCornerButtonEnabled(False)
48 | self.file_table.setColumnCount(8)
49 | self.file_table.setObjectName("file_table")
50 | self.file_table.setColumnCount(8)
51 | self.file_table.setRowCount(0)
52 | item = QtWidgets.QTableWidgetItem()
53 | self.file_table.setHorizontalHeaderItem(0, item)
54 | item = QtWidgets.QTableWidgetItem()
55 | self.file_table.setHorizontalHeaderItem(1, item)
56 | item = QtWidgets.QTableWidgetItem()
57 | self.file_table.setHorizontalHeaderItem(2, item)
58 | item = QtWidgets.QTableWidgetItem()
59 | self.file_table.setHorizontalHeaderItem(3, item)
60 | item = QtWidgets.QTableWidgetItem()
61 | self.file_table.setHorizontalHeaderItem(4, item)
62 | item = QtWidgets.QTableWidgetItem()
63 | self.file_table.setHorizontalHeaderItem(5, item)
64 | item = QtWidgets.QTableWidgetItem()
65 | self.file_table.setHorizontalHeaderItem(6, item)
66 | item = QtWidgets.QTableWidgetItem()
67 | self.file_table.setHorizontalHeaderItem(7, item)
68 | self.file_table.horizontalHeader().setDefaultSectionSize(22)
69 | self.file_table.horizontalHeader().setHighlightSections(False)
70 | self.file_table.horizontalHeader().setMinimumSectionSize(22)
71 | self.file_table.horizontalHeader().setSortIndicatorShown(True)
72 | self.file_table.verticalHeader().setDefaultSectionSize(22)
73 | self.file_table.verticalHeader().setHighlightSections(True)
74 | self.file_table.verticalHeader().setMinimumSectionSize(22)
75 | self.frame = QtWidgets.QFrame(self.splitter)
76 | self.frame.setFrameShape(QtWidgets.QFrame.WinPanel)
77 | self.frame.setFrameShadow(QtWidgets.QFrame.Sunken)
78 | self.frame.setObjectName("frame")
79 | self.verticalLayout = QtWidgets.QVBoxLayout(self.frame)
80 | self.verticalLayout.setSpacing(3)
81 | self.verticalLayout.setContentsMargins(0, 0, 0, 0)
82 | self.verticalLayout.setObjectName("verticalLayout")
83 | self.header = QtWidgets.QWidget(self.frame)
84 | self.header.setObjectName("header")
85 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.header)
86 | self.horizontalLayout.setContentsMargins(0, 0, -1, 0)
87 | self.horizontalLayout.setObjectName("horizontalLayout")
88 | self.fold_btn = QtWidgets.QToolButton(self.header)
89 | self.fold_btn.setStyleSheet("QToolButton{border:none;}")
90 | self.fold_btn.setCheckable(True)
91 | self.fold_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
92 | self.fold_btn.setArrowType(QtCore.Qt.DownArrow)
93 | self.fold_btn.setObjectName("fold_btn")
94 | self.horizontalLayout.addWidget(self.fold_btn)
95 | self.frame_2 = QtWidgets.QFrame(self.header)
96 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
97 | sizePolicy.setHorizontalStretch(0)
98 | sizePolicy.setVerticalStretch(0)
99 | sizePolicy.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth())
100 | self.frame_2.setSizePolicy(sizePolicy)
101 | self.frame_2.setFrameShape(QtWidgets.QFrame.HLine)
102 | self.frame_2.setFrameShadow(QtWidgets.QFrame.Sunken)
103 | self.frame_2.setLineWidth(1)
104 | self.frame_2.setObjectName("frame_2")
105 | self.horizontalLayout.addWidget(self.frame_2)
106 | self.verticalLayout.addWidget(self.header)
107 | self.book_info = QtWidgets.QFrame(self.frame)
108 | self.book_info.setFrameShape(QtWidgets.QFrame.StyledPanel)
109 | self.book_info.setFrameShadow(QtWidgets.QFrame.Raised)
110 | self.book_info.setObjectName("book_info")
111 | self.gridLayout = QtWidgets.QGridLayout(self.book_info)
112 | self.gridLayout.setContentsMargins(6, 0, 6, 0)
113 | self.gridLayout.setObjectName("gridLayout")
114 | self.pages_txt = QtWidgets.QLineEdit(self.book_info)
115 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
116 | sizePolicy.setHorizontalStretch(0)
117 | sizePolicy.setVerticalStretch(0)
118 | sizePolicy.setHeightForWidth(self.pages_txt.sizePolicy().hasHeightForWidth())
119 | self.pages_txt.setSizePolicy(sizePolicy)
120 | self.pages_txt.setMaximumSize(QtCore.QSize(40, 16777215))
121 | self.pages_txt.setReadOnly(True)
122 | self.pages_txt.setObjectName("pages_txt")
123 | self.gridLayout.addWidget(self.pages_txt, 4, 3, 1, 1)
124 | self.lang_lbl = QtWidgets.QLabel(self.book_info)
125 | self.lang_lbl.setObjectName("lang_lbl")
126 | self.gridLayout.addWidget(self.lang_lbl, 4, 0, 1, 1)
127 | self.title_lbl = QtWidgets.QLabel(self.book_info)
128 | self.title_lbl.setObjectName("title_lbl")
129 | self.gridLayout.addWidget(self.title_lbl, 0, 0, 1, 1)
130 | self.series_lbl = QtWidgets.QLabel(self.book_info)
131 | self.series_lbl.setObjectName("series_lbl")
132 | self.gridLayout.addWidget(self.series_lbl, 2, 0, 1, 1)
133 | self.author_txt = QtWidgets.QLineEdit(self.book_info)
134 | self.author_txt.setReadOnly(True)
135 | self.author_txt.setObjectName("author_txt")
136 | self.gridLayout.addWidget(self.author_txt, 1, 1, 1, 6)
137 | self.author_lbl = QtWidgets.QLabel(self.book_info)
138 | self.author_lbl.setObjectName("author_lbl")
139 | self.gridLayout.addWidget(self.author_lbl, 1, 0, 1, 1)
140 | self.description_btn = QtWidgets.QToolButton(self.book_info)
141 | icon1 = QtGui.QIcon()
142 | icon1.addPixmap(QtGui.QPixmap(":/stuff/description.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
143 | self.description_btn.setIcon(icon1)
144 | self.description_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
145 | self.description_btn.setObjectName("description_btn")
146 | self.gridLayout.addWidget(self.description_btn, 4, 6, 1, 1)
147 | self.pages_lbl = QtWidgets.QLabel(self.book_info)
148 | self.pages_lbl.setObjectName("pages_lbl")
149 | self.gridLayout.addWidget(self.pages_lbl, 4, 2, 1, 1)
150 | self.lang_txt = QtWidgets.QLineEdit(self.book_info)
151 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
152 | sizePolicy.setHorizontalStretch(0)
153 | sizePolicy.setVerticalStretch(0)
154 | sizePolicy.setHeightForWidth(self.lang_txt.sizePolicy().hasHeightForWidth())
155 | self.lang_txt.setSizePolicy(sizePolicy)
156 | self.lang_txt.setMaximumSize(QtCore.QSize(25, 16777215))
157 | self.lang_txt.setReadOnly(True)
158 | self.lang_txt.setObjectName("lang_txt")
159 | self.gridLayout.addWidget(self.lang_txt, 4, 1, 1, 1)
160 | self.tags_lbl = QtWidgets.QLabel(self.book_info)
161 | self.tags_lbl.setObjectName("tags_lbl")
162 | self.gridLayout.addWidget(self.tags_lbl, 3, 0, 1, 1)
163 | self.tags_txt = QtWidgets.QLineEdit(self.book_info)
164 | self.tags_txt.setReadOnly(True)
165 | self.tags_txt.setObjectName("tags_txt")
166 | self.gridLayout.addWidget(self.tags_txt, 3, 1, 1, 6)
167 | self.series_txt = QtWidgets.QLineEdit(self.book_info)
168 | self.series_txt.setReadOnly(True)
169 | self.series_txt.setObjectName("series_txt")
170 | self.gridLayout.addWidget(self.series_txt, 2, 1, 1, 6)
171 | self.review_txt = QtWidgets.QLabel(self.book_info)
172 | self.review_txt.setFrameShape(QtWidgets.QFrame.NoFrame)
173 | self.review_txt.setText("")
174 | self.review_txt.setWordWrap(True)
175 | self.review_txt.setObjectName("review_txt")
176 | self.gridLayout.addWidget(self.review_txt, 5, 1, 1, 6)
177 | self.title_txt = QtWidgets.QLineEdit(self.book_info)
178 | self.title_txt.setReadOnly(True)
179 | self.title_txt.setObjectName("title_txt")
180 | self.gridLayout.addWidget(self.title_txt, 0, 1, 1, 6)
181 | self.review_lbl = QtWidgets.QLabel(self.book_info)
182 | self.review_lbl.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
183 | self.review_lbl.setObjectName("review_lbl")
184 | self.gridLayout.addWidget(self.review_lbl, 5, 0, 1, 1)
185 | self.custom_btn = QtWidgets.QToolButton(self.book_info)
186 | self.custom_btn.setEnabled(False)
187 | self.custom_btn.setText("")
188 | icon2 = QtGui.QIcon()
189 | icon2.addPixmap(QtGui.QPixmap(":/stuff/file_edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
190 | self.custom_btn.setIcon(icon2)
191 | self.custom_btn.setCheckable(True)
192 | self.custom_btn.setObjectName("custom_btn")
193 | self.gridLayout.addWidget(self.custom_btn, 4, 5, 1, 1)
194 | spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
195 | self.gridLayout.addItem(spacerItem, 4, 4, 1, 1)
196 | self.verticalLayout.addWidget(self.book_info)
197 | self.high_list = QtWidgets.QListWidget(self.frame)
198 | self.high_list.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
199 | self.high_list.setFrameShape(QtWidgets.QFrame.WinPanel)
200 | self.high_list.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
201 | self.high_list.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
202 | self.high_list.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
203 | self.high_list.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
204 | self.high_list.setWordWrap(True)
205 | self.high_list.setObjectName("high_list")
206 | self.verticalLayout.addWidget(self.high_list)
207 | self.verticalLayout_3.addWidget(self.splitter)
208 | self.views.addWidget(self.books_pg)
209 | self.highlights_pg = QtWidgets.QWidget()
210 | self.highlights_pg.setObjectName("highlights_pg")
211 | self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.highlights_pg)
212 | self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
213 | self.verticalLayout_4.setObjectName("verticalLayout_4")
214 | self.high_table = QtWidgets.QTableWidget(self.highlights_pg)
215 | self.high_table.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
216 | self.high_table.setFrameShape(QtWidgets.QFrame.WinPanel)
217 | self.high_table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
218 | self.high_table.setDragDropMode(QtWidgets.QAbstractItemView.DropOnly)
219 | self.high_table.setDefaultDropAction(QtCore.Qt.CopyAction)
220 | self.high_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
221 | self.high_table.setHorizontalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel)
222 | self.high_table.setWordWrap(False)
223 | self.high_table.setCornerButtonEnabled(False)
224 | self.high_table.setColumnCount(8)
225 | self.high_table.setObjectName("high_table")
226 | self.high_table.setColumnCount(8)
227 | self.high_table.setRowCount(0)
228 | item = QtWidgets.QTableWidgetItem()
229 | self.high_table.setHorizontalHeaderItem(0, item)
230 | item = QtWidgets.QTableWidgetItem()
231 | self.high_table.setHorizontalHeaderItem(1, item)
232 | item = QtWidgets.QTableWidgetItem()
233 | self.high_table.setHorizontalHeaderItem(2, item)
234 | item = QtWidgets.QTableWidgetItem()
235 | self.high_table.setHorizontalHeaderItem(3, item)
236 | item = QtWidgets.QTableWidgetItem()
237 | self.high_table.setHorizontalHeaderItem(4, item)
238 | item = QtWidgets.QTableWidgetItem()
239 | self.high_table.setHorizontalHeaderItem(5, item)
240 | item = QtWidgets.QTableWidgetItem()
241 | self.high_table.setHorizontalHeaderItem(6, item)
242 | item = QtWidgets.QTableWidgetItem()
243 | self.high_table.setHorizontalHeaderItem(7, item)
244 | self.high_table.horizontalHeader().setHighlightSections(False)
245 | self.high_table.horizontalHeader().setMinimumSectionSize(22)
246 | self.high_table.horizontalHeader().setSortIndicatorShown(True)
247 | self.high_table.horizontalHeader().setStretchLastSection(True)
248 | self.high_table.verticalHeader().setDefaultSectionSize(22)
249 | self.high_table.verticalHeader().setHighlightSections(True)
250 | self.high_table.verticalHeader().setMinimumSectionSize(22)
251 | self.verticalLayout_4.addWidget(self.high_table)
252 | self.views.addWidget(self.highlights_pg)
253 | self.sync_pg = QtWidgets.QWidget()
254 | self.sync_pg.setObjectName("sync_pg")
255 | self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.sync_pg)
256 | self.verticalLayout_5.setContentsMargins(0, 0, 0, 0)
257 | self.verticalLayout_5.setObjectName("verticalLayout_5")
258 | self.sync_table = XTableWidget(self.sync_pg)
259 | self.sync_table.setAcceptDrops(True)
260 | self.sync_table.setDragEnabled(True)
261 | self.sync_table.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
262 | self.sync_table.setDefaultDropAction(QtCore.Qt.MoveAction)
263 | self.sync_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
264 | self.sync_table.setObjectName("sync_table")
265 | self.sync_table.setColumnCount(1)
266 | self.sync_table.setRowCount(0)
267 | item = QtWidgets.QTableWidgetItem()
268 | self.sync_table.setHorizontalHeaderItem(0, item)
269 | self.sync_table.horizontalHeader().setVisible(False)
270 | self.sync_table.horizontalHeader().setStretchLastSection(True)
271 | self.sync_table.verticalHeader().setDefaultSectionSize(90)
272 | self.sync_table.verticalHeader().setMinimumSectionSize(90)
273 | self.verticalLayout_5.addWidget(self.sync_table)
274 | self.views.addWidget(self.sync_pg)
275 | self.verticalLayout_2.addWidget(self.views)
276 | Base.setCentralWidget(self.centralwidget)
277 | self.statusbar = QtWidgets.QStatusBar(Base)
278 | self.statusbar.setStyleSheet("QStatusBar{padding-left:8px;font-weight:bold;}")
279 | self.statusbar.setObjectName("statusbar")
280 | Base.setStatusBar(self.statusbar)
281 | self.tool_bar = QtWidgets.QToolBar(Base)
282 | self.tool_bar.setWindowTitle("toolBar")
283 | self.tool_bar.setMovable(True)
284 | self.tool_bar.setAllowedAreas(QtCore.Qt.BottomToolBarArea|QtCore.Qt.TopToolBarArea)
285 | self.tool_bar.setIconSize(QtCore.QSize(32, 32))
286 | self.tool_bar.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
287 | self.tool_bar.setObjectName("tool_bar")
288 | Base.addToolBar(QtCore.Qt.TopToolBarArea, self.tool_bar)
289 | self.act_english = QtWidgets.QAction(Base)
290 | self.act_english.setCheckable(True)
291 | self.act_english.setChecked(False)
292 | self.act_english.setObjectName("act_english")
293 | self.act_greek = QtWidgets.QAction(Base)
294 | self.act_greek.setCheckable(True)
295 | self.act_greek.setChecked(False)
296 | self.act_greek.setObjectName("act_greek")
297 | self.act_view_book = QtWidgets.QAction(Base)
298 | icon3 = QtGui.QIcon()
299 | icon3.addPixmap(QtGui.QPixmap(":/stuff/files_view.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
300 | self.act_view_book.setIcon(icon3)
301 | self.act_view_book.setObjectName("act_view_book")
302 |
303 | self.retranslateUi(Base)
304 | self.views.setCurrentIndex(0)
305 | QtCore.QMetaObject.connectSlotsByName(Base)
306 |
307 | def retranslateUi(self, Base):
308 | self.file_table.setSortingEnabled(True)
309 | self.file_table.horizontalHeaderItem(0).setText(QtWidgets.QApplication.translate("Base", "Title", None, -1))
310 | self.file_table.horizontalHeaderItem(1).setText(QtWidgets.QApplication.translate("Base", "Author", None, -1))
311 | self.file_table.horizontalHeaderItem(2).setText(QtWidgets.QApplication.translate("Base", "Type", None, -1))
312 | self.file_table.horizontalHeaderItem(3).setText(QtWidgets.QApplication.translate("Base", "Percent", None, -1))
313 | self.file_table.horizontalHeaderItem(4).setText(QtWidgets.QApplication.translate("Base", "Rating", None, -1))
314 | self.file_table.horizontalHeaderItem(5).setText(QtWidgets.QApplication.translate("Base", "Highlights", None, -1))
315 | self.file_table.horizontalHeaderItem(6).setText(QtWidgets.QApplication.translate("Base", "Modified", None, -1))
316 | self.file_table.horizontalHeaderItem(7).setText(QtWidgets.QApplication.translate("Base", "Path", None, -1))
317 | self.fold_btn.setText(QtWidgets.QApplication.translate("Base", "Hide Book Info", None, -1))
318 | self.lang_lbl.setText(QtWidgets.QApplication.translate("Base", "Language", None, -1))
319 | self.title_lbl.setText(QtWidgets.QApplication.translate("Base", "Title", None, -1))
320 | self.series_lbl.setText(QtWidgets.QApplication.translate("Base", "Series", None, -1))
321 | self.author_lbl.setText(QtWidgets.QApplication.translate("Base", "Author", None, -1))
322 | self.description_btn.setText(QtWidgets.QApplication.translate("Base", "Description", None, -1))
323 | self.pages_lbl.setText(QtWidgets.QApplication.translate("Base", "Pages", None, -1))
324 | self.tags_lbl.setText(QtWidgets.QApplication.translate("Base", "Tags", None, -1))
325 | self.review_lbl.setText(QtWidgets.QApplication.translate("Base", "Review", None, -1))
326 | self.custom_btn.setToolTip(QtWidgets.QApplication.translate("Base", "Show the custom properties of the book", None, -1))
327 | self.custom_btn.setStatusTip(QtWidgets.QApplication.translate("Base", "Show the custom properties of the book", None, -1))
328 | self.high_table.setSortingEnabled(True)
329 | self.high_table.horizontalHeaderItem(0).setText(QtWidgets.QApplication.translate("Base", "Highlight", None, -1))
330 | self.high_table.horizontalHeaderItem(1).setText(QtWidgets.QApplication.translate("Base", "Comment", None, -1))
331 | self.high_table.horizontalHeaderItem(2).setText(QtWidgets.QApplication.translate("Base", "Date", None, -1))
332 | self.high_table.horizontalHeaderItem(3).setText(QtWidgets.QApplication.translate("Base", "Title", None, -1))
333 | self.high_table.horizontalHeaderItem(4).setText(QtWidgets.QApplication.translate("Base", "Author", None, -1))
334 | self.high_table.horizontalHeaderItem(5).setText(QtWidgets.QApplication.translate("Base", "Page", None, -1))
335 | self.high_table.horizontalHeaderItem(6).setText(QtWidgets.QApplication.translate("Base", "Chapter", None, -1))
336 | self.high_table.horizontalHeaderItem(7).setText(QtWidgets.QApplication.translate("Base", "Path", None, -1))
337 | self.sync_table.horizontalHeaderItem(0).setText(QtWidgets.QApplication.translate("Base", "Sync Groups", None, -1))
338 | self.act_english.setText(QtWidgets.QApplication.translate("Base", "English", None, -1))
339 | self.act_greek.setText(QtWidgets.QApplication.translate("Base", "Greek", None, -1))
340 | self.act_view_book.setText(QtWidgets.QApplication.translate("Base", "View Book", None, -1))
341 | self.act_view_book.setShortcut(QtWidgets.QApplication.translate("Base", "Ctrl+B", None, -1))
342 |
343 | from secondary import DropTableWidget, XTableWidget
344 | import images_rc
345 |
--------------------------------------------------------------------------------
/gui_toolbar.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_toolbar.ui',
4 | # licensing of 'D:\Apps\DEV\PROJECTS\KoHighlights\gui_toolbar.ui' applies.
5 | #
6 | # Created: Fri Oct 4 21:42:42 2024
7 | # by: pyside2-uic running on PySide2 5.13.2
8 | #
9 | # WARNING! All changes made in this file will be lost!
10 |
11 | from PySide2 import QtCore, QtGui, QtWidgets
12 |
13 | class Ui_ToolBar(object):
14 | def setupUi(self, ToolBar):
15 | ToolBar.setObjectName("ToolBar")
16 | ToolBar.resize(1107, 91)
17 | ToolBar.setContextMenuPolicy(QtCore.Qt.PreventContextMenu)
18 | ToolBar.setWindowTitle("")
19 | ToolBar.setLocale(QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates))
20 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(ToolBar)
21 | self.verticalLayout_2.setSpacing(0)
22 | self.verticalLayout_2.setContentsMargins(0, 0, 2, 0)
23 | self.verticalLayout_2.setObjectName("verticalLayout_2")
24 | self.tool_frame = QtWidgets.QFrame(ToolBar)
25 | self.tool_frame.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
26 | self.tool_frame.setObjectName("tool_frame")
27 | self.horizontalLayout = QtWidgets.QHBoxLayout(self.tool_frame)
28 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
29 | self.horizontalLayout.setObjectName("horizontalLayout")
30 | self.scan_btn = QtWidgets.QToolButton(self.tool_frame)
31 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
32 | sizePolicy.setHorizontalStretch(0)
33 | sizePolicy.setVerticalStretch(0)
34 | sizePolicy.setHeightForWidth(self.scan_btn.sizePolicy().hasHeightForWidth())
35 | self.scan_btn.setSizePolicy(sizePolicy)
36 | self.scan_btn.setMinimumSize(QtCore.QSize(80, 0))
37 | icon = QtGui.QIcon()
38 | icon.addPixmap(QtGui.QPixmap(":/stuff/folder_reader.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
39 | self.scan_btn.setIcon(icon)
40 | self.scan_btn.setIconSize(QtCore.QSize(48, 48))
41 | self.scan_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
42 | self.scan_btn.setAutoRaise(True)
43 | self.scan_btn.setObjectName("scan_btn")
44 | self.horizontalLayout.addWidget(self.scan_btn)
45 | self.export_btn = QtWidgets.QToolButton(self.tool_frame)
46 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
47 | sizePolicy.setHorizontalStretch(0)
48 | sizePolicy.setVerticalStretch(0)
49 | sizePolicy.setHeightForWidth(self.export_btn.sizePolicy().hasHeightForWidth())
50 | self.export_btn.setSizePolicy(sizePolicy)
51 | self.export_btn.setMinimumSize(QtCore.QSize(80, 0))
52 | icon1 = QtGui.QIcon()
53 | icon1.addPixmap(QtGui.QPixmap(":/stuff/file_save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
54 | self.export_btn.setIcon(icon1)
55 | self.export_btn.setIconSize(QtCore.QSize(48, 48))
56 | self.export_btn.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
57 | self.export_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
58 | self.export_btn.setAutoRaise(True)
59 | self.export_btn.setObjectName("export_btn")
60 | self.horizontalLayout.addWidget(self.export_btn)
61 | self.open_btn = QtWidgets.QToolButton(self.tool_frame)
62 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
63 | sizePolicy.setHorizontalStretch(0)
64 | sizePolicy.setVerticalStretch(0)
65 | sizePolicy.setHeightForWidth(self.open_btn.sizePolicy().hasHeightForWidth())
66 | self.open_btn.setSizePolicy(sizePolicy)
67 | self.open_btn.setMinimumSize(QtCore.QSize(80, 0))
68 | icon2 = QtGui.QIcon()
69 | icon2.addPixmap(QtGui.QPixmap(":/stuff/files_view.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
70 | self.open_btn.setIcon(icon2)
71 | self.open_btn.setIconSize(QtCore.QSize(48, 48))
72 | self.open_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
73 | self.open_btn.setAutoRaise(True)
74 | self.open_btn.setObjectName("open_btn")
75 | self.horizontalLayout.addWidget(self.open_btn)
76 | self.add_btn = QtWidgets.QToolButton(self.tool_frame)
77 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
78 | sizePolicy.setHorizontalStretch(0)
79 | sizePolicy.setVerticalStretch(0)
80 | sizePolicy.setHeightForWidth(self.add_btn.sizePolicy().hasHeightForWidth())
81 | self.add_btn.setSizePolicy(sizePolicy)
82 | icon3 = QtGui.QIcon()
83 | icon3.addPixmap(QtGui.QPixmap(":/stuff/files_add.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
84 | self.add_btn.setIcon(icon3)
85 | self.add_btn.setIconSize(QtCore.QSize(48, 48))
86 | self.add_btn.setChecked(False)
87 | self.add_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
88 | self.add_btn.setAutoRaise(True)
89 | self.add_btn.setObjectName("add_btn")
90 | self.horizontalLayout.addWidget(self.add_btn)
91 | self.filter_btn = QtWidgets.QToolButton(self.tool_frame)
92 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
93 | sizePolicy.setHorizontalStretch(0)
94 | sizePolicy.setVerticalStretch(0)
95 | sizePolicy.setHeightForWidth(self.filter_btn.sizePolicy().hasHeightForWidth())
96 | self.filter_btn.setSizePolicy(sizePolicy)
97 | icon4 = QtGui.QIcon()
98 | icon4.addPixmap(QtGui.QPixmap(":/stuff/filter.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
99 | self.filter_btn.setIcon(icon4)
100 | self.filter_btn.setIconSize(QtCore.QSize(48, 48))
101 | self.filter_btn.setCheckable(True)
102 | self.filter_btn.setChecked(False)
103 | self.filter_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
104 | self.filter_btn.setAutoRaise(True)
105 | self.filter_btn.setObjectName("filter_btn")
106 | self.horizontalLayout.addWidget(self.filter_btn)
107 | self.merge_btn = QtWidgets.QToolButton(self.tool_frame)
108 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
109 | sizePolicy.setHorizontalStretch(0)
110 | sizePolicy.setVerticalStretch(0)
111 | sizePolicy.setHeightForWidth(self.merge_btn.sizePolicy().hasHeightForWidth())
112 | self.merge_btn.setSizePolicy(sizePolicy)
113 | self.merge_btn.setMinimumSize(QtCore.QSize(80, 0))
114 | icon5 = QtGui.QIcon()
115 | icon5.addPixmap(QtGui.QPixmap(":/stuff/files_merge.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
116 | self.merge_btn.setIcon(icon5)
117 | self.merge_btn.setIconSize(QtCore.QSize(48, 48))
118 | self.merge_btn.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
119 | self.merge_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
120 | self.merge_btn.setAutoRaise(True)
121 | self.merge_btn.setObjectName("merge_btn")
122 | self.horizontalLayout.addWidget(self.merge_btn)
123 | self.delete_btn = QtWidgets.QToolButton(self.tool_frame)
124 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
125 | sizePolicy.setHorizontalStretch(0)
126 | sizePolicy.setVerticalStretch(0)
127 | sizePolicy.setHeightForWidth(self.delete_btn.sizePolicy().hasHeightForWidth())
128 | self.delete_btn.setSizePolicy(sizePolicy)
129 | self.delete_btn.setMinimumSize(QtCore.QSize(80, 0))
130 | icon6 = QtGui.QIcon()
131 | icon6.addPixmap(QtGui.QPixmap(":/stuff/files_delete.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
132 | self.delete_btn.setIcon(icon6)
133 | self.delete_btn.setIconSize(QtCore.QSize(48, 48))
134 | self.delete_btn.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
135 | self.delete_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
136 | self.delete_btn.setAutoRaise(True)
137 | self.delete_btn.setObjectName("delete_btn")
138 | self.horizontalLayout.addWidget(self.delete_btn)
139 | self.clear_btn = QtWidgets.QToolButton(self.tool_frame)
140 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
141 | sizePolicy.setHorizontalStretch(0)
142 | sizePolicy.setVerticalStretch(0)
143 | sizePolicy.setHeightForWidth(self.clear_btn.sizePolicy().hasHeightForWidth())
144 | self.clear_btn.setSizePolicy(sizePolicy)
145 | self.clear_btn.setMinimumSize(QtCore.QSize(80, 0))
146 | icon7 = QtGui.QIcon()
147 | icon7.addPixmap(QtGui.QPixmap(":/stuff/trash.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
148 | self.clear_btn.setIcon(icon7)
149 | self.clear_btn.setIconSize(QtCore.QSize(48, 48))
150 | self.clear_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
151 | self.clear_btn.setAutoRaise(True)
152 | self.clear_btn.setObjectName("clear_btn")
153 | self.horizontalLayout.addWidget(self.clear_btn)
154 | spacerItem = QtWidgets.QSpacerItem(86, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
155 | self.horizontalLayout.addItem(spacerItem)
156 | self.view_grp = QtWidgets.QGroupBox(self.tool_frame)
157 | self.view_grp.setObjectName("view_grp")
158 | self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.view_grp)
159 | self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
160 | self.horizontalLayout_3.setObjectName("horizontalLayout_3")
161 | self.books_view_btn = QtWidgets.QToolButton(self.view_grp)
162 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
163 | sizePolicy.setHorizontalStretch(0)
164 | sizePolicy.setVerticalStretch(0)
165 | sizePolicy.setHeightForWidth(self.books_view_btn.sizePolicy().hasHeightForWidth())
166 | self.books_view_btn.setSizePolicy(sizePolicy)
167 | icon8 = QtGui.QIcon()
168 | icon8.addPixmap(QtGui.QPixmap(":/stuff/view_books.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
169 | self.books_view_btn.setIcon(icon8)
170 | self.books_view_btn.setIconSize(QtCore.QSize(48, 48))
171 | self.books_view_btn.setCheckable(True)
172 | self.books_view_btn.setChecked(True)
173 | self.books_view_btn.setAutoExclusive(True)
174 | self.books_view_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
175 | self.books_view_btn.setAutoRaise(True)
176 | self.books_view_btn.setObjectName("books_view_btn")
177 | self.horizontalLayout_3.addWidget(self.books_view_btn)
178 | self.high_view_btn = QtWidgets.QToolButton(self.view_grp)
179 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
180 | sizePolicy.setHorizontalStretch(0)
181 | sizePolicy.setVerticalStretch(0)
182 | sizePolicy.setHeightForWidth(self.high_view_btn.sizePolicy().hasHeightForWidth())
183 | self.high_view_btn.setSizePolicy(sizePolicy)
184 | icon9 = QtGui.QIcon()
185 | icon9.addPixmap(QtGui.QPixmap(":/stuff/view-highlights.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
186 | self.high_view_btn.setIcon(icon9)
187 | self.high_view_btn.setIconSize(QtCore.QSize(48, 48))
188 | self.high_view_btn.setCheckable(True)
189 | self.high_view_btn.setAutoExclusive(True)
190 | self.high_view_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
191 | self.high_view_btn.setAutoRaise(True)
192 | self.high_view_btn.setObjectName("high_view_btn")
193 | self.horizontalLayout_3.addWidget(self.high_view_btn)
194 | self.sync_view_btn = QtWidgets.QToolButton(self.view_grp)
195 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
196 | sizePolicy.setHorizontalStretch(0)
197 | sizePolicy.setVerticalStretch(0)
198 | sizePolicy.setHeightForWidth(self.sync_view_btn.sizePolicy().hasHeightForWidth())
199 | self.sync_view_btn.setSizePolicy(sizePolicy)
200 | icon10 = QtGui.QIcon()
201 | icon10.addPixmap(QtGui.QPixmap(":/stuff/view-sync.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
202 | self.sync_view_btn.setIcon(icon10)
203 | self.sync_view_btn.setIconSize(QtCore.QSize(48, 48))
204 | self.sync_view_btn.setCheckable(True)
205 | self.sync_view_btn.setAutoExclusive(True)
206 | self.sync_view_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
207 | self.sync_view_btn.setAutoRaise(True)
208 | self.sync_view_btn.setObjectName("sync_view_btn")
209 | self.horizontalLayout_3.addWidget(self.sync_view_btn)
210 | self.horizontalLayout.addWidget(self.view_grp)
211 | self.mode_grp = QtWidgets.QGroupBox(self.tool_frame)
212 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
213 | sizePolicy.setHorizontalStretch(0)
214 | sizePolicy.setVerticalStretch(0)
215 | sizePolicy.setHeightForWidth(self.mode_grp.sizePolicy().hasHeightForWidth())
216 | self.mode_grp.setSizePolicy(sizePolicy)
217 | self.mode_grp.setObjectName("mode_grp")
218 | self.verticalLayout = QtWidgets.QVBoxLayout(self.mode_grp)
219 | self.verticalLayout.setSpacing(0)
220 | self.verticalLayout.setContentsMargins(0, 0, 0, 0)
221 | self.verticalLayout.setObjectName("verticalLayout")
222 | self.loaded_btn = QtWidgets.QToolButton(self.mode_grp)
223 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
224 | sizePolicy.setHorizontalStretch(0)
225 | sizePolicy.setVerticalStretch(0)
226 | sizePolicy.setHeightForWidth(self.loaded_btn.sizePolicy().hasHeightForWidth())
227 | self.loaded_btn.setSizePolicy(sizePolicy)
228 | self.loaded_btn.setMinimumSize(QtCore.QSize(80, 0))
229 | icon11 = QtGui.QIcon()
230 | icon11.addPixmap(QtGui.QPixmap(":/stuff/books.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
231 | self.loaded_btn.setIcon(icon11)
232 | self.loaded_btn.setIconSize(QtCore.QSize(24, 24))
233 | self.loaded_btn.setCheckable(True)
234 | self.loaded_btn.setChecked(True)
235 | self.loaded_btn.setAutoExclusive(True)
236 | self.loaded_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
237 | self.loaded_btn.setAutoRaise(True)
238 | self.loaded_btn.setObjectName("loaded_btn")
239 | self.verticalLayout.addWidget(self.loaded_btn)
240 | self.db_btn = XToolButton(self.mode_grp)
241 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
242 | sizePolicy.setHorizontalStretch(0)
243 | sizePolicy.setVerticalStretch(0)
244 | sizePolicy.setHeightForWidth(self.db_btn.sizePolicy().hasHeightForWidth())
245 | self.db_btn.setSizePolicy(sizePolicy)
246 | self.db_btn.setMinimumSize(QtCore.QSize(80, 0))
247 | icon12 = QtGui.QIcon()
248 | icon12.addPixmap(QtGui.QPixmap(":/stuff/db.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
249 | self.db_btn.setIcon(icon12)
250 | self.db_btn.setIconSize(QtCore.QSize(24, 24))
251 | self.db_btn.setCheckable(True)
252 | self.db_btn.setAutoExclusive(True)
253 | self.db_btn.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup)
254 | self.db_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
255 | self.db_btn.setAutoRaise(True)
256 | self.db_btn.setObjectName("db_btn")
257 | self.verticalLayout.addWidget(self.db_btn)
258 | self.horizontalLayout.addWidget(self.mode_grp)
259 | self.prefs_btn = QtWidgets.QToolButton(self.tool_frame)
260 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
261 | sizePolicy.setHorizontalStretch(0)
262 | sizePolicy.setVerticalStretch(0)
263 | sizePolicy.setHeightForWidth(self.prefs_btn.sizePolicy().hasHeightForWidth())
264 | self.prefs_btn.setSizePolicy(sizePolicy)
265 | self.prefs_btn.setMinimumSize(QtCore.QSize(80, 0))
266 | icon13 = QtGui.QIcon()
267 | icon13.addPixmap(QtGui.QPixmap(":/stuff/prefs.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
268 | self.prefs_btn.setIcon(icon13)
269 | self.prefs_btn.setIconSize(QtCore.QSize(48, 48))
270 | self.prefs_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
271 | self.prefs_btn.setAutoRaise(True)
272 | self.prefs_btn.setObjectName("prefs_btn")
273 | self.horizontalLayout.addWidget(self.prefs_btn)
274 | self.about_btn = QtWidgets.QToolButton(self.tool_frame)
275 | sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
276 | sizePolicy.setHorizontalStretch(0)
277 | sizePolicy.setVerticalStretch(0)
278 | sizePolicy.setHeightForWidth(self.about_btn.sizePolicy().hasHeightForWidth())
279 | self.about_btn.setSizePolicy(sizePolicy)
280 | self.about_btn.setMinimumSize(QtCore.QSize(80, 0))
281 | icon14 = QtGui.QIcon()
282 | icon14.addPixmap(QtGui.QPixmap(":/stuff/logo64.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
283 | self.about_btn.setIcon(icon14)
284 | self.about_btn.setIconSize(QtCore.QSize(48, 48))
285 | self.about_btn.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)
286 | self.about_btn.setAutoRaise(True)
287 | self.about_btn.setObjectName("about_btn")
288 | self.horizontalLayout.addWidget(self.about_btn)
289 | self.verticalLayout_2.addWidget(self.tool_frame)
290 |
291 | self.retranslateUi(ToolBar)
292 | QtCore.QMetaObject.connectSlotsByName(ToolBar)
293 |
294 | def retranslateUi(self, ToolBar):
295 | self.tool_frame.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Right-click to change icon size", None, -1))
296 | self.tool_frame.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Right-click to change icon size", None, -1))
297 | self.scan_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Scans a directory for Koreader metadata files\n"
298 | "Can also be the eReader\'s root directory (Ctrl+L)", None, -1))
299 | self.scan_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Scans a directory for Koreader metadata files. Can also be the eReader\'s root directory (Ctrl+L)", None, -1))
300 | self.scan_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Scan Directory", None, -1))
301 | self.export_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Export selected highlights (Ctrl+S)", None, -1))
302 | self.export_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Export selected highlights (Ctrl+S)", None, -1))
303 | self.export_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Export", None, -1))
304 | self.open_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "View the selected book (Ctrl+B)", None, -1))
305 | self.open_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "View the selected book (Ctrl+B)", None, -1))
306 | self.open_btn.setText(QtWidgets.QApplication.translate("ToolBar", "View", None, -1))
307 | self.add_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Add a sync group", None, -1))
308 | self.add_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Add a sync group", None, -1))
309 | self.add_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Add", None, -1))
310 | self.filter_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Open the filtering popup (Alt+F)", None, -1))
311 | self.filter_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Open the filtering popup (Alt+F)", None, -1))
312 | self.filter_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Filter", None, -1))
313 | self.filter_btn.setShortcut(QtWidgets.QApplication.translate("ToolBar", "Alt+F", None, -1))
314 | self.merge_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Merge the highlights from the same book in two different\n"
315 | "devices, and/or sync their reading position.\n"
316 | "Activated only if two entries of the same book are selected.", None, -1))
317 | self.merge_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Merge the highlights from the same book in two different devices, and/or sync their reading position. Activated only if two entries of the same book are selected.", None, -1))
318 | self.merge_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Merge/Sync", None, -1))
319 | self.delete_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Delete selected", None, -1))
320 | self.delete_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Delete", None, -1))
321 | self.clear_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Clear the list\'s entries (Ctrl+Backspace)", None, -1))
322 | self.clear_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Clear the list\'s entries (Ctrl+Backspace)", None, -1))
323 | self.clear_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Clear List", None, -1))
324 | self.books_view_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Books View", None, -1))
325 | self.books_view_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Books View", None, -1))
326 | self.books_view_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Books", None, -1))
327 | self.high_view_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Highlights View", None, -1))
328 | self.high_view_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Highlights View", None, -1))
329 | self.high_view_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Highlights", None, -1))
330 | self.sync_view_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Sync Groups View", None, -1))
331 | self.sync_view_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Sync Groups View", None, -1))
332 | self.sync_view_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Sync Groups", None, -1))
333 | self.loaded_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Show the loaded files", None, -1))
334 | self.loaded_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Show the loaded files", None, -1))
335 | self.loaded_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Loaded", None, -1))
336 | self.db_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Show the archived files in the database\n"
337 | "(Right click for database actions menu)", None, -1))
338 | self.db_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Show the archived files in the database (Right click for database actions menu)", None, -1))
339 | self.db_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Archived", None, -1))
340 | self.prefs_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "User Preferences (Ctrl+P)", None, -1))
341 | self.prefs_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "User Preferences (Ctrl+P)", None, -1))
342 | self.prefs_btn.setText(QtWidgets.QApplication.translate("ToolBar", "Preferences", None, -1))
343 | self.prefs_btn.setShortcut(QtWidgets.QApplication.translate("ToolBar", "Ctrl+P", None, -1))
344 | self.about_btn.setToolTip(QtWidgets.QApplication.translate("ToolBar", "Info about KoHighlights (Ctrl+I)", None, -1))
345 | self.about_btn.setStatusTip(QtWidgets.QApplication.translate("ToolBar", "Info about KoHighlights (Ctrl+I)", None, -1))
346 | self.about_btn.setText(QtWidgets.QApplication.translate("ToolBar", "About", None, -1))
347 |
348 | from secondary import XToolButton
349 | import images_rc
350 |
--------------------------------------------------------------------------------