Skip to content

Commit 1ee8fa5

Browse files
committed
0.1.3.4
1 parent b69e2f4 commit 1ee8fa5

File tree

17 files changed

+593
-267
lines changed

17 files changed

+593
-267
lines changed

CentralBlockTable.py

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,10 @@ def central_block_table_define_slots(self):
9393
self.central_block_table.horizontalHeader().sectionResized.connect(self.central_block_table_get_column_width)
9494

9595
sizes = []
96-
print('header_size_policy')
9796
try:
9897
self.header_policy = self.BDD.get_param('library/headers_size_policy')
9998
if self.header_policy is None or self.header_policy == '':
10099
self.header_policy = self.vars['library']['headers_size_policy']
101-
print(self.header_policy)
102100
if self.header_policy in ['ResizeToContents', 'ResizeToContentsAndInteractive']:
103101
self.central_block_table.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
104102
if self.header_policy == 'Stretch':
@@ -110,7 +108,6 @@ def central_block_table_define_slots(self):
110108
sizes = json.loads(self.vars['library']['headers_size'])
111109
else:
112110
sizes = json.loads(tx)
113-
print(sizes)
114111
self.central_block_table.setColumnWidth(0, sizes[0])
115112
self.central_block_table.setColumnWidth(1, sizes[1])
116113
self.central_block_table.setColumnWidth(2, sizes[2])
@@ -133,7 +130,6 @@ def central_block_table_get_column_width(self):
133130
sizes.append(self.central_block_table.columnWidth(i))
134131
i += 1
135132
new_size = json.dumps(sizes)
136-
print(new_size)
137133
self.BDD.set_param('library/headers_size', new_size)
138134
self.BDD.set_param('library/headers_size_policy', self.header_policy)
139135

@@ -281,7 +277,6 @@ def central_block_table_context_menu(self, point: PyQt5.QtCore.QPoint):
281277
# self.central_block_table = QtWidgets.QTableWidget()
282278
selection = self.central_block_table.selectedRanges()[0]
283279
selection = [selection.topRow(), selection.bottomRow()]
284-
print(selection)
285280
current_row = self.central_block_table.currentRow()
286281
current_column = self.central_block_table.currentColumn()
287282
guid_book = self.central_block_table.item(current_row, current_column).data(99)
@@ -371,7 +366,8 @@ def central_block_table_load_metadata_window(self):
371366
col += 1
372367
if self.central_block_table.item(id, col) is not None:
373368
print("error item at position line:{}, col:{}".format(id, col))
374-
self.central_block_table.item(id, col).setData(99, data[cpt]['guid'])
369+
self.central_block_table.item(id, col)\
370+
.setData(99, data[cpt]['guid'])
375371
if case in list_items_locked:
376372
bdate = unixtime_to_string(
377373
float(data[cpt][case]),
@@ -420,21 +416,24 @@ def new_book_table_item(guid: str, book_type: str, value: str, editable: bool =
420416
:return: QTableWidgetItem
421417
"""
422418
item = QtWidgets.QTableWidgetItem()
423-
if alt is not None:
424-
item = QTableAltItem()
425-
item.setValue(alt)
426-
item.setType(alt_type)
427-
item.lock(locked)
428-
if editable is True:
429-
item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsEnabled)
430-
else:
431-
item.setFlags(QtCore.Qt.ItemIsSelectable|QtCore.Qt.ItemIsEnabled)
432-
item.setTextAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignVCenter)
433-
item.setData(98, uid())
434-
item.setData(99, guid)
435-
item.setData(100, book_type)
436-
item.setText(value)
437-
item.setToolTip(value)
419+
try:
420+
if alt is not None:
421+
item = QTableAltItem()
422+
item.setValue(alt)
423+
item.setType(alt_type)
424+
item.lock(locked)
425+
if editable is True and alt is None:
426+
item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled)
427+
else:
428+
item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
429+
item.setTextAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignVCenter)
430+
item.setData(98, uid())
431+
item.setData(99, guid)
432+
item.setData(100, book_type)
433+
item.setText(value)
434+
item.setToolTip(value)
435+
except Exception as err:
436+
traceback.print_exc()
438437
return item
439438

440439
def load_books(self, books: list) -> None:
@@ -447,8 +446,10 @@ def load_books(self, books: list) -> None:
447446
self.central_block_table_cases_uid_list.clear()
448447
try:
449448
self.central_block_table_lock = True
449+
# self.central_block_table = QtWidgets.QTableWidget()
450450
self.central_block_table.clearSelection()
451451
self.central_block_table.clearContents()
452+
self.central_block_table.setSortingEnabled(False)
452453
except Exception:
453454
traceback.print_exc()
454455
self.central_block_table_lock = False
@@ -505,9 +506,11 @@ def load_books(self, books: list) -> None:
505506
self.set_info_panel(books[0])
506507
else:
507508
self.set_info_panel(None)
509+
self.central_block_table.setSortingEnabled(True)
508510
self.central_block_table_sort_reset()
509511
self.central_block_table.setCurrentCell(0, 0)
510512

513+
511514
class QTableAltItem(QtWidgets.QTableWidgetItem):
512515
value = 0.0
513516
var_type = 'float'

DockWidget.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import traceback
2+
3+
import PyQt5.QtCore
4+
import PyQt5.QtGui
5+
from PyQt5.QtWidgets import QDockWidget
6+
7+
from common import bdd
8+
9+
10+
class DockWidget(QDockWidget):
11+
BDD = None
12+
13+
def __init__(self, name):
14+
super().__init__()
15+
16+
def setBDD(self, database: bdd.BDD):
17+
self.BDD = database
18+
self.dockLocationChanged.connect(self.LocationChanged)
19+
20+
def resizeEvent(self, event: PyQt5.QtGui.QResizeEvent):
21+
try:
22+
# print("docked item resized")
23+
self.update()
24+
self.BDD.set_param('library/BlockSize_'+self.objectName(), '[{},{}]'.format(event.size().width(), event.size().height()))
25+
except Exception as err:
26+
traceback.print_exc()
27+
28+
def LocationChanged(self, area: PyQt5.QtCore.Qt.DockWidgetArea):
29+
try:
30+
print("dockLocationChanged")
31+
self.update()
32+
self.BDD.set_param('library/BlockArea_'+self.objectName(), area)
33+
except Exception as err:
34+
traceback.print_exc()

InfoPanel.py

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,32 @@ def set_info_panel(self, book: dict = None):
6464

6565
# info_block_synopsis
6666
self.metadata_window_clear_layout(self.info_block_synopsis.layout())
67-
la0 = QtWidgets.QLabel('Synopsis')
68-
la0.setProperty('bold', True)
69-
self.info_block_synopsis.layout().addWidget(la0)
7067

71-
spacer1 = QtWidgets.QSpacerItem(10, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum)
72-
self.info_block_synopsis.layout().addItem(spacer1)
68+
if book['synopsis'] is not None and book['synopsis'].strip() != "":
69+
la0 = QtWidgets.QLabel('Synopsis')
70+
la0.setProperty('bold', True)
71+
self.info_block_synopsis.layout().addWidget(la0)
7372

74-
la1 = QtWidgets.QLabel(book['synopsis'])
75-
la1.setWordWrap(True)
76-
self.info_block_synopsis.layout().addWidget(la1)
73+
spacer1 = QtWidgets.QSpacerItem(10, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
74+
self.info_block_synopsis.layout().addItem(spacer1)
75+
76+
la1 = QtWidgets.QLabel(book['synopsis'])
77+
la1.setWordWrap(True)
78+
la1.setMargin(5)
79+
80+
scl = QtWidgets.QScrollArea()
81+
scl.setLayout(QtWidgets.QVBoxLayout())
82+
scl.setVerticalScrollBar(QtWidgets.QScrollBar(PyQt5.QtCore.Qt.Vertical))
83+
# scl.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
84+
scl.setVerticalScrollBarPolicy(PyQt5.QtCore.Qt.ScrollBarAsNeeded)
85+
scl.setHorizontalScrollBarPolicy(PyQt5.QtCore.Qt.ScrollBarAlwaysOff)
86+
scl.setWidgetResizable(True)
87+
scl.setWidget(la1)
88+
89+
self.info_block_synopsis.layout().addWidget(scl)
90+
else:
91+
spacer1 = QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
92+
self.info_block_synopsis.layout().addItem(spacer1)
7793

7894
formats = ''
7995
sizes = ''
@@ -101,7 +117,7 @@ def set_info_panel(self, book: dict = None):
101117
traceback.print_exc()
102118
try:
103119
icon = PyQt5.QtGui.QIcon()
104-
tbimg = book['cover'].split(',')
120+
tbimg = book['cover'].split(',', 1)
105121
by = PyQt5.QtCore.QByteArray()
106122
by.fromBase64(tbimg[1].encode('utf-8'))
107123
image = PyQt5.QtGui.QPixmap()
@@ -116,8 +132,8 @@ def set_info_panel(self, book: dict = None):
116132
self.info_block_cover.setIcon(icon)
117133
self.info_block_cover.setIconSize(PyQt5.QtCore.QSize(160, 160))
118134
self.info_block_cover.setToolTip("<img src='{}'/>".format(book['cover']))
119-
except Exception:
120-
traceback.print_exc()
135+
except Exception as err:
136+
# traceback.print_exc()
121137
icon = PyQt5.QtGui.QIcon()
122138
icon.addPixmap(PyQt5.QtGui.QPixmap(self.app_directory + '/ressources/icons/white/book.png'), PyQt5.QtGui.QIcon.Normal, PyQt5.QtGui.QIcon.Off)
123139
self.info_block_cover.setIcon(icon)

SortingBlockTree.py

Lines changed: 88 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,34 @@ def sorting_block_tree_init(self) -> None:
3030
self.sorting_block_search_edit.returnPressed.connect(self.sorting_block_tree_research)
3131

3232
def sorting_block_tree_load_data(self):
33-
# Clean sub-tree Authors ans Series
34-
while self.sorting_block_tree.topLevelItem(1).childCount() > 0:
35-
self.sorting_block_tree.topLevelItem(1).removeChild(self.sorting_block_tree.topLevelItem(1).child(0))
36-
while self.sorting_block_tree.topLevelItem(2).childCount() > 0:
37-
self.sorting_block_tree.topLevelItem(2).removeChild(self.sorting_block_tree.topLevelItem(2).child(0))
38-
authors = self.BDD.get_authors()
39-
series = self.BDD.get_series()
40-
for author in authors:
41-
item = QtWidgets.QTreeWidgetItem(self.sorting_block_tree.topLevelItem(1))
42-
item.setText(0, author)
43-
item.setText(1, 'authors:{}'.format(author))
44-
for serie in series:
45-
item = QtWidgets.QTreeWidgetItem(self.sorting_block_tree.topLevelItem(2))
46-
item.setText(0, serie)
47-
item.setText(1, 'series:{}'.format(serie))
33+
try:
34+
# Clean sub-tree Authors ans Series
35+
while self.sorting_block_tree.topLevelItem(1).childCount() > 0:
36+
self.sorting_block_tree.topLevelItem(1).removeChild(self.sorting_block_tree.topLevelItem(1).child(0))
37+
while self.sorting_block_tree.topLevelItem(2).childCount() > 0:
38+
self.sorting_block_tree.topLevelItem(2).removeChild(self.sorting_block_tree.topLevelItem(2).child(0))
39+
while self.sorting_block_tree.topLevelItem(3).childCount() > 0:
40+
self.sorting_block_tree.topLevelItem(3).removeChild(self.sorting_block_tree.topLevelItem(3).child(0))
41+
authors = self.BDD.get_authors()
42+
series = self.BDD.get_series()
43+
tags = self.BDD.get_tags()
44+
for author in authors:
45+
item = QtWidgets.QTreeWidgetItem(self.sorting_block_tree.topLevelItem(1))
46+
item.setText(0, author)
47+
item.setText(1, 'authors:{}'.format(author))
48+
item.setToolTip(0, author)
49+
for serie in series:
50+
item = QtWidgets.QTreeWidgetItem(self.sorting_block_tree.topLevelItem(2))
51+
item.setText(0, serie)
52+
item.setText(1, 'series:{}'.format(serie))
53+
item.setToolTip(0, serie)
54+
for tag in tags:
55+
item = QtWidgets.QTreeWidgetItem(self.sorting_block_tree.topLevelItem(3))
56+
item.setText(0, tag)
57+
item.setText(1, 'tags:{}'.format(tag))
58+
item.setToolTip(0, tag)
59+
except Exception:
60+
traceback.print_exc()
4861

4962
def sorting_block_tree_item_activated(self, item, column):
5063
try:
@@ -53,23 +66,26 @@ def sorting_block_tree_item_activated(self, item, column):
5366
traceback.print_exc()
5467

5568
def sorting_block_tree_set_filter(self, filter: str = None) -> None:
56-
if filter is None or filter.strip() == '':
57-
return
58-
filter_tab = [filter]
59-
if filter == 'all' or filter == '*':
60-
self.sorting_block_tree_actual_filters.clear()
61-
self.sorting_block_tree_actual_filters.append(LibrarySortingFilter('*', None))
62-
else:
63-
self.sorting_block_tree_del_filter('*', False)
64-
filter_tab = filter.split(':')
65-
found = False
66-
for index in range(0, len(self.sorting_block_tree_actual_filters)):
67-
if self.sorting_block_tree_actual_filters[index].type == filter_tab[0]:
68-
self.sorting_block_tree_actual_filters[index].data = filter_tab[1]
69-
found = True
70-
if found is False:
71-
self.sorting_block_tree_actual_filters.append(LibrarySortingFilter(filter_tab[0], filter_tab[1]))
72-
self.sorting_block_tree_parse_filters()
69+
try:
70+
if filter is None or filter.strip() == '':
71+
return
72+
filter_tab = [filter]
73+
if filter == 'all' or filter == '*':
74+
self.sorting_block_tree_actual_filters.clear()
75+
self.sorting_block_tree_actual_filters.append(LibrarySortingFilter('*', None))
76+
else:
77+
self.sorting_block_tree_del_filter('*', False)
78+
filter_tab = filter.split(':', 1)
79+
found = False
80+
for index in range(0, len(self.sorting_block_tree_actual_filters)):
81+
if self.sorting_block_tree_actual_filters[index].type == filter_tab[0]:
82+
self.sorting_block_tree_actual_filters[index].data = filter_tab[1]
83+
found = True
84+
if found is False:
85+
self.sorting_block_tree_actual_filters.append(LibrarySortingFilter(filter_tab[0], filter_tab[1]))
86+
self.sorting_block_tree_parse_filters()
87+
except Exception:
88+
traceback.print_exc()
7389

7490
def sorting_block_tree_del_filter(self, filter: str = None, filter_print: bool = True) -> bool:
7591
if filter is None or filter.strip() == '':
@@ -110,12 +126,16 @@ def sorting_block_tree_parse_filters(self) -> None:
110126
alabel.setMaximumHeight(20)
111127
alayout.addWidget(alabel)
112128
self.sorting_block_search_zone.addLayout(alayout)
129+
self.sorting_block_search_scroll_area.hide()
113130
else:
131+
self.sorting_block_search_scroll_area.show()
114132
for filter in self.sorting_block_tree_actual_filters:
115133
alayout = QtWidgets.QHBoxLayout()
116134
alabel = QtWidgets.QLabel()
117-
alabel.setText(filter.type + ':' + filter.data)
118-
alabel.setMaximumHeight(20)
135+
alabel.setText(filter.type + ' : ' + filter.data)
136+
alabel.setToolTip(filter.data)
137+
alabel.setWordWrap(True)
138+
# alabel.setMaximumHeight(20)
119139
alayout.addWidget(alabel)
120140

121141
abutton = QtWidgets.QPushButton()
@@ -129,29 +149,57 @@ def sorting_block_tree_parse_filters(self) -> None:
129149
if len(self.sorting_block_tree_actual_filters) < 2:
130150
if filter.type == '*':
131151
self.load_books(self.BDD.get_books())
132-
elif filter.type in ['authors', 'series', 'search']:
152+
elif filter.type in ['authors', 'series', 'tags', 'search']:
133153
self.load_books(self.BDD.get_books(None, filter.type + ':' + filter.data))
134154
else:
135155
return
136156
else:
137157
books = self.BDD.get_books()
138158
end_books = []
139159
for book in books:
160+
cptYes = 0
161+
cptNo = 0
140162
ok = True
141163
for filter in self.sorting_block_tree_actual_filters:
142164
if filter.type == 'authors':
143-
if book['authors'] != filter.data: ok = False
144-
if filter.type == 'series':
145-
if book['series'] != filter.data: ok = False
146-
if filter.type == 'search':
165+
if book['authors'] != filter.data:
166+
ok = False
167+
cptNo += 1
168+
else:
169+
cptYes += 1
170+
elif filter.type == 'series':
171+
if book['series'] != filter.data:
172+
ok = False
173+
cptNo += 1
174+
else:
175+
cptYes += 1
176+
elif filter.type == 'tags':
177+
filter.data = filter.data.lower()
178+
tags = book['tags'].lower()
179+
if tags == filter.data:
180+
cptYes += 1
181+
elif ';'+filter.data+';' in tags:
182+
cptYes += 1
183+
elif tags.startswith(filter.data+';'):
184+
cptYes += 1
185+
elif tags.endswith(';'+filter.data):
186+
cptYes += 1
187+
else:
188+
cptNo += 1
189+
elif filter.type == 'search':
147190
fd = filter.data.lower()
148191
i = book['title'].lower()
149192
s = book['series'].lower()
150193
a = book['authors'].lower()
151194
t = book['tags'].lower()
152195
if fd not in i and fd not in s and fd not in a and fd not in t:
153196
ok = False
154-
if ok is True:
197+
cptNo += 1
198+
else:
199+
cptYes += 1
200+
else:
201+
cptNo += 1
202+
if cptYes > cptNo:
155203
end_books.append(book)
156204
self.load_books(end_books)
157205
except Exception:

0 commit comments

Comments
 (0)