Skip to content

Commit f9ea20e

Browse files
authored
Refactor: Deduplication in pagination.py's "Set Elipses Sizes" section (#141)
1 parent b6ccb88 commit f9ea20e

File tree

1 file changed

+22
-195
lines changed

1 file changed

+22
-195
lines changed

tagstudio/src/qt/pagination.py

Lines changed: 22 additions & 195 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,19 @@ def __init__(self, parent=None) -> None:
133133
# self.update_buttons(page_count=9, index=0)
134134

135135
def update_buttons(self, page_count: int, index: int, emit: bool = True):
136+
# Guard
137+
if index < 0:
138+
raise ValueError("Negative index detected")
139+
136140
# Screw it
137141
for i in range(0, 10):
138142
if self.start_buffer_layout.itemAt(i):
139143
self.start_buffer_layout.itemAt(i).widget().setHidden(True)
140144
if self.end_buffer_layout.itemAt(i):
141145
self.end_buffer_layout.itemAt(i).widget().setHidden(True)
142146

147+
end_page = page_count - 1
148+
143149
if page_count <= 1:
144150
# Hide everything if there are only one or less pages.
145151
# [-------------- HIDDEN --------------]
@@ -172,7 +178,7 @@ def update_buttons(self, page_count: int, index: int, emit: bool = True):
172178
# self.start_buffer_layout.setContentsMargins(3,0,3,0)
173179
self._assign_click(self.prev_button, index - 1)
174180
self.prev_button.setDisabled(False)
175-
if index == page_count - 1:
181+
if index == end_page:
176182
self.next_button.setDisabled(True)
177183
# self.end_buffer_layout.setContentsMargins(0,0,0,0)
178184
else:
@@ -181,201 +187,22 @@ def update_buttons(self, page_count: int, index: int, emit: bool = True):
181187
self.next_button.setDisabled(False)
182188

183189
# Set Ellipses Sizes
184-
if page_count == 8:
185-
if index == 0:
186-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 2 + 3)
187-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 2 + 3)
188-
else:
189-
self.end_ellipses.setMinimumWidth(self.button_size.width())
190-
self.end_ellipses.setMaximumWidth(self.button_size.width())
191-
if index == page_count - 1:
192-
self.start_ellipses.setMinimumWidth(
193-
self.button_size.width() * 2 + 3
194-
)
195-
self.start_ellipses.setMaximumWidth(
196-
self.button_size.width() * 2 + 3
197-
)
198-
else:
199-
self.start_ellipses.setMinimumWidth(self.button_size.width())
200-
self.start_ellipses.setMaximumWidth(self.button_size.width())
201-
elif page_count == 9:
202-
if index == 0:
203-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 3 + 6)
204-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 3 + 6)
205-
elif index == 1:
206-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 2 + 3)
207-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 2 + 3)
208-
else:
209-
self.end_ellipses.setMinimumWidth(self.button_size.width())
210-
self.end_ellipses.setMaximumWidth(self.button_size.width())
211-
if index == page_count - 1:
212-
self.start_ellipses.setMinimumWidth(
213-
self.button_size.width() * 3 + 6
214-
)
215-
self.start_ellipses.setMaximumWidth(
216-
self.button_size.width() * 3 + 6
217-
)
218-
elif index == page_count - 2:
219-
self.start_ellipses.setMinimumWidth(
220-
self.button_size.width() * 2 + 3
221-
)
222-
self.start_ellipses.setMaximumWidth(
223-
self.button_size.width() * 2 + 3
224-
)
225-
else:
226-
self.start_ellipses.setMinimumWidth(self.button_size.width())
227-
self.start_ellipses.setMaximumWidth(self.button_size.width())
228-
elif page_count == 10:
229-
if index == 0:
230-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 4 + 9)
231-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 4 + 9)
232-
elif index == 1:
233-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 3 + 6)
234-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 3 + 6)
235-
elif index == 2:
236-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 2 + 3)
237-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 2 + 3)
238-
else:
239-
self.end_ellipses.setMinimumWidth(self.button_size.width())
240-
self.end_ellipses.setMaximumWidth(self.button_size.width())
241-
if index == page_count - 1:
242-
self.start_ellipses.setMinimumWidth(
243-
self.button_size.width() * 4 + 9
244-
)
245-
self.start_ellipses.setMaximumWidth(
246-
self.button_size.width() * 4 + 9
247-
)
248-
elif index == page_count - 2:
249-
self.start_ellipses.setMinimumWidth(
250-
self.button_size.width() * 3 + 6
251-
)
252-
self.start_ellipses.setMaximumWidth(
253-
self.button_size.width() * 3 + 6
254-
)
255-
elif index == page_count - 3:
256-
self.start_ellipses.setMinimumWidth(
257-
self.button_size.width() * 2 + 3
258-
)
259-
self.start_ellipses.setMaximumWidth(
260-
self.button_size.width() * 2 + 3
261-
)
262-
else:
263-
self.start_ellipses.setMinimumWidth(self.button_size.width())
264-
self.start_ellipses.setMaximumWidth(self.button_size.width())
265-
elif page_count == 11:
266-
if index == 0:
267-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 5 + 12)
268-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 5 + 12)
269-
elif index == 1:
270-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 4 + 9)
271-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 4 + 9)
272-
elif index == 2:
273-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 3 + 6)
274-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 3 + 6)
275-
elif index == 3:
276-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 2 + 3)
277-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 2 + 3)
278-
else:
279-
self.end_ellipses.setMinimumWidth(self.button_size.width())
280-
self.end_ellipses.setMaximumWidth(self.button_size.width())
281-
if index == page_count - 1:
282-
self.start_ellipses.setMinimumWidth(
283-
self.button_size.width() * 5 + 12
284-
)
285-
self.start_ellipses.setMaximumWidth(
286-
self.button_size.width() * 5 + 12
287-
)
288-
elif index == page_count - 2:
289-
self.start_ellipses.setMinimumWidth(
290-
self.button_size.width() * 4 + 9
291-
)
292-
self.start_ellipses.setMaximumWidth(
293-
self.button_size.width() * 4 + 9
294-
)
295-
elif index == page_count - 3:
296-
self.start_ellipses.setMinimumWidth(
297-
self.button_size.width() * 3 + 6
298-
)
299-
self.start_ellipses.setMaximumWidth(
300-
self.button_size.width() * 3 + 6
301-
)
302-
elif index == page_count - 4:
303-
self.start_ellipses.setMinimumWidth(
304-
self.button_size.width() * 2 + 3
305-
)
306-
self.start_ellipses.setMaximumWidth(
307-
self.button_size.width() * 2 + 3
308-
)
309-
else:
310-
self.start_ellipses.setMinimumWidth(self.button_size.width())
311-
self.start_ellipses.setMaximumWidth(self.button_size.width())
190+
# I do not know where these magic values were derived from, but
191+
# this is better than the chain elif's that were here before
192+
if 8 <= page_count <= 11:
193+
end_scale = max(1, page_count - index - 6)
194+
srt_scale = max(1, index - 5)
312195
elif page_count > 11:
313-
if index == 0:
314-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 7 + 18)
315-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 7 + 18)
316-
elif index == 1:
317-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 6 + 15)
318-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 6 + 15)
319-
elif index == 2:
320-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 5 + 12)
321-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 5 + 12)
322-
elif index == 3:
323-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 4 + 9)
324-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 4 + 9)
325-
elif index == 4:
326-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 3 + 6)
327-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 3 + 6)
328-
elif index == 5:
329-
self.end_ellipses.setMinimumWidth(self.button_size.width() * 2 + 3)
330-
self.end_ellipses.setMaximumWidth(self.button_size.width() * 2 + 3)
331-
else:
332-
self.end_ellipses.setMinimumWidth(self.button_size.width())
333-
self.end_ellipses.setMaximumWidth(self.button_size.width())
334-
if index == page_count - 1:
335-
self.start_ellipses.setMinimumWidth(
336-
self.button_size.width() * 7 + 18
337-
)
338-
self.start_ellipses.setMaximumWidth(
339-
self.button_size.width() * 7 + 18
340-
)
341-
elif index == page_count - 2:
342-
self.start_ellipses.setMinimumWidth(
343-
self.button_size.width() * 6 + 15
344-
)
345-
self.start_ellipses.setMaximumWidth(
346-
self.button_size.width() * 6 + 15
347-
)
348-
elif index == page_count - 3:
349-
self.start_ellipses.setMinimumWidth(
350-
self.button_size.width() * 5 + 12
351-
)
352-
self.start_ellipses.setMaximumWidth(
353-
self.button_size.width() * 5 + 12
354-
)
355-
elif index == page_count - 4:
356-
self.start_ellipses.setMinimumWidth(
357-
self.button_size.width() * 4 + 9
358-
)
359-
self.start_ellipses.setMaximumWidth(
360-
self.button_size.width() * 4 + 9
361-
)
362-
elif index == page_count - 5:
363-
self.start_ellipses.setMinimumWidth(
364-
self.button_size.width() * 3 + 6
365-
)
366-
self.start_ellipses.setMaximumWidth(
367-
self.button_size.width() * 3 + 6
368-
)
369-
elif index == page_count - 6:
370-
self.start_ellipses.setMinimumWidth(
371-
self.button_size.width() * 2 + 3
372-
)
373-
self.start_ellipses.setMaximumWidth(
374-
self.button_size.width() * 2 + 3
375-
)
376-
else:
377-
self.start_ellipses.setMinimumWidth(self.button_size.width())
378-
self.start_ellipses.setMaximumWidth(self.button_size.width())
196+
end_scale = max(1, 7 - index)
197+
srt_scale = max(1, (7 - (end_page - index)))
198+
199+
if page_count >= 8:
200+
end_size = self.button_size.width() * end_scale + (3 * (end_scale - 1))
201+
srt_size = self.button_size.width() * srt_scale + (3 * (srt_scale - 1))
202+
self.end_ellipses.setMinimumWidth(end_size)
203+
self.end_ellipses.setMaximumWidth(end_size)
204+
self.start_ellipses.setMinimumWidth(srt_size)
205+
self.start_ellipses.setMaximumWidth(srt_size)
379206

380207
# Enable/Disable Ellipses
381208
# if index <= max(self.buffer_page_count, 5)+1:

0 commit comments

Comments
 (0)