@@ -133,13 +133,19 @@ def __init__(self, parent=None) -> None:
133
133
# self.update_buttons(page_count=9, index=0)
134
134
135
135
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
+
136
140
# Screw it
137
141
for i in range (0 , 10 ):
138
142
if self .start_buffer_layout .itemAt (i ):
139
143
self .start_buffer_layout .itemAt (i ).widget ().setHidden (True )
140
144
if self .end_buffer_layout .itemAt (i ):
141
145
self .end_buffer_layout .itemAt (i ).widget ().setHidden (True )
142
146
147
+ end_page = page_count - 1
148
+
143
149
if page_count <= 1 :
144
150
# Hide everything if there are only one or less pages.
145
151
# [-------------- HIDDEN --------------]
@@ -172,7 +178,7 @@ def update_buttons(self, page_count: int, index: int, emit: bool = True):
172
178
# self.start_buffer_layout.setContentsMargins(3,0,3,0)
173
179
self ._assign_click (self .prev_button , index - 1 )
174
180
self .prev_button .setDisabled (False )
175
- if index == page_count - 1 :
181
+ if index == end_page :
176
182
self .next_button .setDisabled (True )
177
183
# self.end_buffer_layout.setContentsMargins(0,0,0,0)
178
184
else :
@@ -181,201 +187,22 @@ def update_buttons(self, page_count: int, index: int, emit: bool = True):
181
187
self .next_button .setDisabled (False )
182
188
183
189
# 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 )
312
195
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 )
379
206
380
207
# Enable/Disable Ellipses
381
208
# if index <= max(self.buffer_page_count, 5)+1:
0 commit comments