2
2
import sys
3
3
import json
4
4
import os
5
+ from datetime import timedelta
5
6
sys .path .append ('/app' )
6
7
from timer import *
7
8
import gi
10
11
gi .require_version ("Adw" , "1" )
11
12
from gi .repository import Gtk , GLib , Adw , Gio
12
13
14
+ def strfdelta (tdelta , fmt ):
15
+ d = {"days" : tdelta .days }
16
+ d ["hours" ], rem = divmod (tdelta .seconds , 3600 )
17
+ d ["minutes" ], d ["seconds" ] = divmod (rem , 60 )
18
+ return fmt .format (** d )
19
+
13
20
class Dialog_settings (Gtk .Dialog ):
14
21
def __init__ (self , parent , ** kwargs ):
15
22
super ().__init__ (use_header_bar = True )
@@ -163,9 +170,7 @@ def __init__(self, *args, **kwargs):
163
170
self .mainBox .append (self .label )
164
171
165
172
# Entry
166
- self .entry = Gtk .Entry ()
167
- self .entry .set_text ("10" )
168
- self .mainBox .append (self .entry )
173
+ self .make_timer_box ()
169
174
170
175
# Start timer button
171
176
self .buttonStart = Gtk .Button (label = run_timer )
@@ -181,6 +186,41 @@ def __init__(self, *args, **kwargs):
181
186
self .timeout_id = None
182
187
self .connect ("destroy" , self .on_SpinnerWindow_destroy )
183
188
189
+ def make_timer_box (self ):
190
+ self .timerBox = Gtk .Box (orientation = Gtk .Orientation .HORIZONTAL , spacing = 3 )
191
+ self .timerBox .set_margin_start (50 )
192
+ self .timerBox .set_margin_end (50 )
193
+
194
+ self .hour_entry = Gtk .Entry ()
195
+ self .hour_entry .set_text ("0" )
196
+ self .hour_entry .set_alignment (xalign = 1 )
197
+ self .timerBox .append (self .hour_entry )
198
+
199
+ label = Gtk .Label (label = "h" )
200
+ label .set_hexpand (False )
201
+ self .timerBox .append (label )
202
+
203
+ self .minute_entry = Gtk .Entry ()
204
+ self .minute_entry .set_text ("1" )
205
+ self .minute_entry .set_alignment (xalign = 1 )
206
+ self .timerBox .append (self .minute_entry )
207
+
208
+ label = Gtk .Label (label = "m" )
209
+ label .set_hexpand (False )
210
+ self .timerBox .append (label )
211
+
212
+ self .secs_entry = Gtk .Entry ()
213
+ self .secs_entry .set_text ("0" )
214
+ self .secs_entry .set_alignment (xalign = 1 )
215
+ self .timerBox .append (self .secs_entry )
216
+
217
+ label = Gtk .Label (label = "s" )
218
+ label .set_hexpand (False )
219
+ self .timerBox .append (label )
220
+
221
+ self .mainBox .append (self .timerBox )
222
+
223
+ # Resizable of Window
184
224
def resizable (self ):
185
225
if os .path .exists (os .path .expanduser ('~' ) + '/.var/app/com.github.vikdevelop.timer/data/window.json' ):
186
226
with open (os .path .expanduser ('~' ) + '/.var/app/com.github.vikdevelop.timer/data/window.json' ) as jr :
@@ -281,24 +321,33 @@ def on_SpinnerWindow_destroy(self, widget, *args):
281
321
self .timeout_id = None
282
322
Gtk .main_quit ()
283
323
324
+ tick_counter = timedelta (milliseconds = 250 ) # static object so we don't recreate the object every time
325
+ zero_counter = timedelta ()
284
326
def on_timeout (self , * args , ** kwargs ):
285
- self .counter -= 1
286
- if self .counter <= 0 :
327
+ self .counter -= self . tick_counter
328
+ if self .counter <= self . zero_counter :
287
329
self .stop_timer (timing_finished )
288
330
self .label .set_markup ("<b>" + timing_finished + "</b>" )
289
331
subprocess .call (['notify-send' ,timer_title ,timing_finished ,'-i' ,'com.github.vikdevelop.timer' ])
290
332
print (timing_finished )
291
333
return False
292
- self .label .set_label ("%s\n <big><b>" % time_text + str (int (self .counter / 4 )) + " s</b></big>" )
334
+ self .label .set_markup ("{}\n <big><b>{}</b></big>" .format (
335
+ time_text ,
336
+ strfdelta (self .counter , "{hours} h {minutes} m {seconds} s" )
337
+ ))
293
338
return True
294
339
295
340
def start_timer (self ):
296
341
""" Run Timer. """
297
342
self .buttonStart .set_sensitive (False )
298
343
self .buttonStop .set_sensitive (True )
299
- self .counter = 4 * int (self .entry .get_text ())
344
+ # self.counter = 4 * int(self.entry.get_text())
345
+ self .counter = timedelta (hours = int (self .hour_entry .get_text ()), minutes = int (self .minute_entry .get_text ()), seconds = int (self .secs_entry .get_text ()))
300
346
print ('\a ' )
301
- self .label .set_markup ("%s\n <big><b>" % time_text + str (int (self .counter / 4 )) + " s</b></big>" )
347
+ self .label .set_markup ("{}\n <big><b>{}</b></big>" .format (
348
+ time_text ,
349
+ strfdelta (self .counter , "{hours} h {minutes} m {seconds} s" )
350
+ ))
302
351
self .spinner .start ()
303
352
self .timeout_id = GLib .timeout_add (250 , self .on_timeout , None )
304
353
0 commit comments