7
7
from gi .repository import GObject , GLib , Gtk , Gdk , GdkPixbuf
8
8
from datetime import date , timedelta
9
9
from hijrical import *
10
+ from options import *
10
11
import datetime
11
12
import os
12
13
@@ -27,7 +28,9 @@ def __init__(self):
27
28
gtitlelabel = Gtk .Label (label = (now_wd + ", " + g_date ))
28
29
gtitlelabel .props .halign = Gtk .Align .START
29
30
30
- calc = HijriCal ()
31
+ self .options = Options ()
32
+
33
+ calc = HijriCal (self .options .hijrical_adjustment )
31
34
h_months = ['Muharram' , 'Safar' , 'Rabi al Awwal' , 'Rabi al Akhira' , 'Jumada al Ula' , 'Jumada al Akhira' , 'Rajab' , "Sha'ban" , 'Ramadan' , 'Shawwal' , "Dhu al Qa'da" , 'Dhu al Hijja' ]
32
35
h_year , h_month , h_day , h_week_day = calc .today
33
36
h_date = '%i %s %i' % ( h_day , h_months [int (h_month - 1 )], h_year )
@@ -52,7 +55,7 @@ def __init__(self):
52
55
topbox .pack_end (box , False , False , 0 )
53
56
54
57
# Set up the date switcher
55
- self .cal = Cal ()
58
+ self .cal = Cal (self )
56
59
57
60
#bottombox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, halign=Gtk.Align.FILL, margin=24)
58
61
#opmaya = Gtk.Button(label="Open Maya")
@@ -80,13 +83,15 @@ def on_entered_hijri(self, widget, event):
80
83
self .cal .caltable .get_child_at (column ,row ).state = CalendarState .Gregorian
81
84
82
85
class Cal (Gtk .Box ):
83
- def __init__ (self ):
86
+ def __init__ (self , parent ):
84
87
Gtk .Box .__init__ (self , orientation = Gtk .Orientation .VERTICAL , spacing = 12 )
85
88
self .dateswitcher = Gtk .Grid (row_homogeneous = True )
86
89
self .dateswitcher .set_halign (Gtk .Align .CENTER )
87
90
91
+ self .parent = parent
92
+
88
93
self ._refdate = datetime .datetime .today ()
89
- self .hijcal = HijriCal ()
94
+ self .hijrical = HijriCal (self . parent . options . hijrical_adjustment )
90
95
self .weekdays = ["Sunday" , "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" ]
91
96
self .gmonths = ["January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" ]
92
97
self .hmonths = ['Muharram' , 'Safar' , 'Rabi al Awwal' , 'Rabi al Akhira' , 'Jumada al Ula' , 'Jumada al Akhira' , 'Rajab' , "Sha'ban" , 'Ramadhan' , 'Shawwal' , "Dhu al Qa'da" , 'Dhu al Hijja' ]
@@ -195,7 +200,7 @@ def __init__(self):
195
200
gday = (self .refdate ).strftime ("%d" )
196
201
gmonth = (self .refdate ).strftime ("%B" )
197
202
gyear = (self .refdate ).strftime ("%Y" )
198
- hyear , hmonth , hday = self .hijcal .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
203
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
199
204
200
205
self .gmonthstack .set_visible_child_name (self .refdate .strftime ("%B" ))
201
206
self .hmonthstack .set_visible_child_name (self .hmonths [int (hmonth - 1 )])
@@ -258,9 +263,7 @@ def __init__(self):
258
263
self .gmtoday = self .gmonths .index (_gmonth )
259
264
self .gytoday = int (_gyear )
260
265
261
- hijrical = HijriCal ()
262
-
263
- self .hytoday , self .hmtoday , self .hdtoday = hijrical .goto_gregorian_day (self .gytoday , (self .gmtoday + 1 ), self .gdtoday )
266
+ self .hytoday , self .hmtoday , self .hdtoday = self .hijrical .goto_gregorian_day (self .gytoday , (self .gmtoday + 1 ), self .gdtoday )
264
267
265
268
calendarindex = - (wtoday + (((6 - wtoday )+ self .gdtoday )// 7 )* 7 )
266
269
@@ -277,7 +280,7 @@ def __init__(self):
277
280
cgmday = self .gmonths .index ((datetime .datetime .now () + timedelta (days = calendarindex )).strftime ("%B" ))
278
281
cgyday = int ((datetime .datetime .now () + timedelta (days = calendarindex )).strftime ("%Y" ))
279
282
280
- chyday , chmday , chdday = hijrical .goto_gregorian_day (cgyday , (cgmday + 1 ), cgdday )
283
+ chyday , chmday , chdday = self . hijrical .goto_gregorian_day (cgyday , (cgmday + 1 ), cgdday )
281
284
282
285
if (cgmday != self .gmtoday ):
283
286
gcolor = CalendarColor .DGrey
@@ -327,20 +330,20 @@ def left_arrow_pressed(self, widget, event):
327
330
gday = self .refdate .strftime ("%d" )
328
331
gmonth = self .refdate .strftime ("%B" )
329
332
gyear = self .refdate .strftime ("%Y" )
330
- hyear , hmonth , hday = self .hijcal .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
333
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
331
334
refwd = self .weekdays .index (self .refdate .strftime ("%A" ))
332
335
calendarindex = - (refwd + (((6 - refwd )+ int (self .refdate .strftime ("%d" )))// 7 )* 7 )
333
336
else :
334
337
gday = self .refdate .strftime ("%d" )
335
338
gmonth = self .refdate .strftime ("%B" )
336
339
gyear = self .refdate .strftime ("%Y" )
337
- hyear , hmonth , hday = self .hijcal .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
340
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
338
341
ndays = hijri_month_days (hyear , hmonth - 2 )
339
342
self .refdate = self .refdate - timedelta (days = ndays )
340
343
gday = self .refdate .strftime ("%d" )
341
344
gmonth = self .refdate .strftime ("%B" )
342
345
gyear = self .refdate .strftime ("%Y" )
343
- hyear , hmonth , hday = self .hijcal .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
346
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
344
347
refwd = self .weekdays .index (self .refdate .strftime ("%A" ))
345
348
calendarindex = - (refwd + (((6 - refwd )+ hday )// 7 )* 7 )
346
349
self .shift_days_of_table (gday , gmonth , gyear , hday , hmonth , hyear , calendarindex , CalendarDirection .RIGHT )
@@ -356,20 +359,20 @@ def right_arrow_pressed(self, widget, event):
356
359
gday = (self .refdate ).strftime ("%d" )
357
360
gmonth = (self .refdate ).strftime ("%B" )
358
361
gyear = (self .refdate ).strftime ("%Y" )
359
- hyear , hmonth , hday = self .hijcal .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
362
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
360
363
refwd = self .weekdays .index (self .refdate .strftime ("%A" ))
361
364
calendarindex = - (refwd + (((6 - refwd )+ int (self .refdate .strftime ("%d" )))// 7 )* 7 )
362
365
else :
363
366
gday = (self .refdate ).strftime ("%d" )
364
367
gmonth = (self .refdate ).strftime ("%B" )
365
368
gyear = (self .refdate ).strftime ("%Y" )
366
- hyear , hmonth , hday = self .hijcal .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
369
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
367
370
ndays = timedelta (days = hijri_month_days (hyear , hmonth ))
368
371
self .refdate = self .refdate + ndays
369
372
gday = self .refdate .strftime ("%d" )
370
373
gmonth = self .refdate .strftime ("%B" )
371
374
gyear = self .refdate .strftime ("%Y" )
372
- hyear , hmonth , hday = self .hijcal .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
375
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
373
376
refwd = self .weekdays .index (self .refdate .strftime ("%A" ))
374
377
calendarindex = - (refwd + (((6 - refwd )+ hday )// 7 )* 7 )
375
378
self .shift_days_of_table (gday , gmonth , gyear , hday , hmonth , hyear , calendarindex , CalendarDirection .LEFT )
@@ -384,13 +387,72 @@ def set_image_from_file(self, iconpath):
384
387
icon = Gtk .Image .new_from_stock (Gtk .STOCK_MISSING_IMAGE , 22 )
385
388
return icon
386
389
390
+ def refresh (self ):
391
+ # update hijri date
392
+ self .hytoday , self .hmtoday , self .hdtoday = self .hijrical .goto_gregorian_day (self .gytoday , (self .gmtoday + 1 ), self .gdtoday )
393
+ # update hijri title label
394
+ now_wd = datetime .datetime .now ().strftime ("%A" )
395
+ h_date = '%i %s %i' % ( self .hdtoday , self .hmonths [int (self .hmtoday - 1 )], self .hytoday )
396
+ self .parent .titlestack .get_child_by_name ("Hijri" ).set_label (now_wd + ", " + h_date )
397
+ # update calendar
398
+ gday = (self .refdate ).strftime ("%d" )
399
+ gmonth = (self .refdate ).strftime ("%B" )
400
+ gyear = (self .refdate ).strftime ("%Y" )
401
+ if self .state == CalendarState .Gregorian :
402
+ # Get the size of this month
403
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
404
+ refwd = self .weekdays .index (self .refdate .strftime ("%A" ))
405
+ calendarindex = - (refwd + (((6 - refwd )+ int (self .refdate .strftime ("%d" )))// 7 )* 7 )
406
+ else :
407
+ hyear , hmonth , hday = self .hijrical .goto_gregorian_day (int (gyear ), (self .gmonths .index (gmonth )+ 1 ), int (gday ))
408
+ refwd = self .weekdays .index (self .refdate .strftime ("%A" ))
409
+ calendarindex = - (refwd + (((6 - refwd )+ hday )// 7 )* 7 )
410
+ for row in range (0 , 6 ):
411
+ for column in range (0 , 7 ):
412
+ newgday = int ((self .refdate + timedelta (days = (calendarindex ))).strftime ("%d" ))
413
+ newgmonth = self .gmonths .index ((self .refdate + timedelta (days = (calendarindex ))).strftime ("%B" ))
414
+ newgyear = int ((self .refdate + timedelta (days = (calendarindex ))).strftime ("%Y" ))
415
+ newhyear , newhmonth , newhday = self .hijrical .goto_gregorian_day (newgyear , newgmonth + 1 , newgday )
416
+
417
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day_next = newgday
418
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day_next = newhday
419
+
420
+ if (column == 0 ) or (column == 6 ):
421
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day_next_background = CalendarColor .LGrey
422
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day_next_background = CalendarColor .LGrey
423
+ else :
424
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day_next_background = CalendarColor .White
425
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day_next_background = CalendarColor .White
426
+
427
+ if newgmonth != self .gmonths .index (self .refdate .strftime ("%B" )):
428
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day_next_background = CalendarColor .DGrey
429
+
430
+ if newhmonth != hmonth :
431
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day_next_background = CalendarColor .DGrey
432
+
433
+ if (newgday == self .gdtoday and newgmonth == self .gmtoday and newgyear == self .gytoday ):
434
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day_next_background = CalendarColor .Blue
435
+
436
+ if (newhday == self .hdtoday and newhmonth == self .hmtoday and newhyear == self .hytoday ):
437
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day_next_background = CalendarColor .Blue
438
+
439
+ newgbackground = self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day_next_background
440
+ newhbackground = self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day_next_background
441
+
442
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day = newgday
443
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day_background = newgbackground
444
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day = newhday
445
+ self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day_background = newhbackground
446
+
447
+ calendarindex += 1
448
+
387
449
def shift_days_of_table (self , gday , gmonth , gyear , hday , hmonth , hyear , calendarindex , direction ):
388
450
for row in range (0 , 6 ):
389
451
for column in range (0 , 7 ):
390
452
newgday = int ((self .refdate + timedelta (days = (calendarindex ))).strftime ("%d" ))
391
453
newgmonth = self .gmonths .index ((self .refdate + timedelta (days = (calendarindex ))).strftime ("%B" ))
392
454
newgyear = int ((self .refdate + timedelta (days = (calendarindex ))).strftime ("%Y" ))
393
- newhyear , newhmonth , newhday = self .hijcal .goto_gregorian_day (newgyear , newgmonth + 1 , newgday )
455
+ newhyear , newhmonth , newhday = self .hijrical .goto_gregorian_day (newgyear , newgmonth + 1 , newgday )
394
456
395
457
self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Gregorian' ).day_next = newgday
396
458
self .caltable .get_child_at (column ,row ).labelstack .get_child_by_name ('Hijri' ).day_next = newhday
0 commit comments