source: taskscheduler/trunk/fuentes/scheduler-gui.install/usr/share/taskscheduler/bin/detailDateBox.py @ 6824

Last change on this file since 6824 was 6824, checked in by Juanma, 19 months ago

refactorized

File size: 22.4 KB
Line 
1#!/usr/bin/env python3
2
3# -*- coding: utf-8 -*-
4import gi
5gi.require_version('Gtk', '3.0')
6gi.require_version('PangoCairo', '1.0')
7import json
8import cairo
9import os
10import subprocess
11import shutil
12import threading
13import platform
14import subprocess
15import sys
16import time
17#import commands
18from gi.repository import Gtk, Gdk, GdkPixbuf, GObject, GLib, PangoCairo, Pango
19import time
20from datetime import date
21from taskscheduler.cronParser import cronParser
22
23import gettext
24gettext.textdomain('taskscheduler')
25_ = gettext.gettext
26
27
28WIDGET_MARGIN=6
29DBG=0
30
31class DetailBox:
32       
33        def __init__(self,scheduler,scheduled_task_type=False):
34                self.scheduled_task_type=scheduled_task_type
35                self.scheduler_client=scheduler
36                self.parser=cronParser()
37                self.task={}
38                self.task['serial']="0"
39                self.task['type']="remote"
40                self.btn_apply=Gtk.Button(stock=Gtk.STOCK_APPLY)
41                try:
42                        self.flavour=subprocess.getoutput("lliurex-version -f")
43                except:
44                        self.flavour="client"
45                self.ldm_helper='/usr/sbin/sched-ldm.sh'
46
47        def _debug(self,msg):
48                if DBG:
49                        print("taskDetails: %s"%msg)
50        #def _debug
51
52        def set_mode(self,mode):
53                pass
54
55        def set_task_data(self,task):
56                self.task['name']=''
57                self.task['serial']=''
58                self.task['data']=''
59                self.task['cmd']=''
60                self.task['type']=''
61                self.task['spread']=''
62                self.task.update(task)
63                if 'kind' in task.keys():
64                        self.task['kind']=task['kind'].split(',')
65                else:
66                        self.task['kind']=''
67                if 'data' in task.keys():
68                        self.task.update(task['data'])
69                        del self.task['data']
70
71        def update_task_data(self,task):
72                self.task.update(task)
73
74        def _format_widget_for_grid(self,widget):
75                #common
76                widget.set_hexpand(False)
77                widget.set_halign(Gtk.Align.CENTER)
78                widget.set_valign(Gtk.Align.CENTER)
79                if 'Gtk.Button' in str(type(widget)):
80                        pass
81                elif 'Gtk.Entry' in str(type(widget)):
82                        widget.set_alignment(xalign=0.5)
83                        widget.set_max_length(2)
84                        widget.set_width_chars(2)
85                        widget.set_max_width_chars(3)
86        #def _format_widget_for_grid
87
88        def _load_interval_data(self,widget=None,handler=None):
89#               if handler:
90#                       self.cmb_interval.handler_block(handler)
91                total=999
92#               position=self.cmb_interval.get_active()
93#               self.cmb_interval.remove_all()
94#               date=self.cmb_dates.get_active_text()
95#               total=24
96#               if date==_("minute(s)"):
97#                       total=120
98#               elif date==_("day(s)"):
99#                       total=7
100#               elif date==_("hour(s)"):
101#                       total=24
102#               elif date==_("week(s)"):
103#                       total=4
104#               elif date==_("month(s)"):
105#                       total=12
106                self.spin_interval.set_range(1,total)
107
108                #Set sensitive status
109                self._changed_interval()
110                #If user changes selection try to activate same value on new interval data or max
111#               if position>=total:
112#                       position=total-1
113#               elif position<0:
114#                       position=0
115#               self.cmb_interval.set_active(position)
116                if handler:
117#                       self.cmb_interval.handler_unblock(handler)
118                        self._parse_scheduled(True)
119        #def _load_interval_data
120       
121        def _load_date_data(self):
122                date=[_("minute(s)"),_("hour(s)"),_("day(s)"),_("week(s)"),_("month(s)")]
123                for i in date:
124                        self.cmb_dates.append_text(i)
125                self.cmb_dates.set_active(0)
126        #def _load_date_data
127       
128        def _load_special_date_data(self):
129                date=[_("Last month day"),_("First month day")]
130                for i in date:
131                        self.cmb_special_dates.append_text(i)
132                self.cmb_special_dates.set_active(0)
133        #def _load_special_date_data
134
135        def _load_date_time_data(self,date_type):
136                inc=0
137                jump=0
138                time_units=0
139                months={}
140                if date_type=='hour':
141                        time_units=24
142                        widget=self.cmb_hours
143                elif date_type=='minute':
144                        time_units=60
145                        jump=5
146                        widget=self.cmb_minutes
147                elif date_type=='month':
148                        widget=self.cmb_months
149                        widget.append_text(_("All months"))
150                        inc=1
151                        time_units=12
152                        months={1:'January',2:'February',3:'March',4:'April',5:'May',6:'June',7:'July',8:'August',9:'September',10:'October',11:'November',12:'December'}
153                elif date_type=='day':
154                        widget=self.cmb_days
155                        widget.append_text(_("All days"))
156                        inc=1
157                        time_units=31
158
159                for i in range(time_units):
160                        if jump:
161                                if (not i%jump):
162                                        widget.append_text(str(i+inc))
163                        else:
164                                if months:
165                                        widget.append_text(months[(i+inc)])
166                                else:
167                                        widget.append_text(str(i+inc))
168                widget.set_active(0)
169        #def _load_date_time_data
170
171        def render_form(self,gtkGrid,**kwargs):
172                if 'expert' in kwargs.keys():
173                        expert=kwargs['expert']
174                else:
175                        expert=False
176                if 'task_kind' in kwargs.keys():
177                        task_kind=kwargs['task_kind']
178                else:
179                        task_kind=''
180                if 'edit' in kwargs.keys():
181                        edit=kwargs['edit']
182                else:
183                        edit=False
184                self.notebook=Gtk.Stack()
185                self.chk_daily=Gtk.CheckButton(_("Select days"))
186                self.chk_monday=Gtk.ToggleButton(_("Monday"))
187                self.chk_thursday=Gtk.ToggleButton(_("Tuesday"))
188                self.chk_wednesday=Gtk.ToggleButton(_("Wednesday"))
189                self.chk_tuesday=Gtk.ToggleButton(_("Thursday"))
190                self.chk_friday=Gtk.ToggleButton(_("Friday"))
191                self.chk_saturday=Gtk.ToggleButton(_("Saturday"))
192                self.chk_sunday=Gtk.ToggleButton(_("Sunday"))
193                self.chk_daily=Gtk.CheckButton(_("Daily"))
194                self.chk_hourly=Gtk.CheckButton(_("Hourly"))
195                self.chk_weekly=Gtk.CheckButton(_("Weekly"))
196                self.chk_interval=Gtk.CheckButton(_("Repeat"))
197                self.cmb_interval=Gtk.ComboBoxText()
198                self.spin_interval=Gtk.SpinButton()
199                self.cmb_dates=Gtk.ComboBoxText()
200                self.cmb_dates.set_hexpand(False)
201                self.cmb_dates.set_vexpand(False)
202                self.cmb_dates.set_valign(Gtk.Align.CENTER)
203                self.cmb_dates.set_halign(Gtk.Align.CENTER)
204                self.chk_special_dates=Gtk.CheckButton(_("Last month day"))
205                self.day_box=Gtk.Box()
206                self.day_box.set_homogeneous(True)
207                self.cmb_days=Gtk.ComboBoxText()
208                self.month_box=Gtk.Box()
209                self.month_box.set_homogeneous(True)
210                self.calendar=Gtk.Calendar()
211                self.day_box.add(self.calendar)
212                self.cmb_months=Gtk.ComboBoxText()
213                self.hour_box=Gtk.Box(spacing=WIDGET_MARGIN)
214                self.hour_box.set_homogeneous(False)
215                self.cmb_hours=Gtk.ComboBoxText()
216                ####REM
217                self.spin_hour=Gtk.SpinButton()
218                self.spin_hour.set_range(0,23)
219                self.spin_hour.set_increments(1,1)
220                self.spin_hour.set_wrap(True)
221                self.spin_hour.set_orientation(Gtk.Orientation.VERTICAL)
222                self.spin_hour.set_valign(Gtk.Align.CENTER)
223                self.spin_hour.set_halign(Gtk.Align.CENTER)
224                self.spin_hour.set_vexpand(False)
225                self.spin_min=Gtk.SpinButton()
226                self.spin_min.set_range(0,59)
227                self.spin_min.set_increments(1,1)
228                self.spin_min.set_wrap(True)
229                self.spin_min.set_orientation(Gtk.Orientation.VERTICAL)
230                self.spin_min.set_valign(Gtk.Align.CENTER)
231                self.spin_min.set_halign(Gtk.Align.CENTER)
232                self.spin_min.set_vexpand(False)
233                self.hour_box.add(self.spin_hour)
234                self.hour_box.add(Gtk.Label(":"))
235                self.minute_box=Gtk.Box()
236                self.minute_box.add(self.spin_min)
237                self.time_box=Gtk.Box(spacing=WIDGET_MARGIN)
238                self.time_box.add(self.hour_box)
239                self.time_box.add(self.minute_box)
240                self.cmb_minutes=Gtk.ComboBoxText()
241
242                self._load_interval_data()
243                self._load_date_data()
244
245                self.lbl_info=Gtk.Label("")
246                self.lbl_info.set_line_wrap(True)
247                self.lbl_info.set_max_width_chars(20)
248                self.lbl_info.set_width_chars(20)
249                self.lbl_info.set_opacity(0.6)
250                gtkGrid.attach(self.lbl_info,0,0,7,1)
251                self.lbl_info.set_margin_bottom(24)
252                dow_frame=Gtk.Frame()
253                dow_frame.set_shadow_type(Gtk.ShadowType.OUT)
254                frame_box=Gtk.Box(orientation=Gtk.Orientation.VERTICAL,spacing=WIDGET_MARGIN)
255                dow_frame.add(frame_box)
256                frame_box.set_margin_bottom(6)
257                frame_box.set_margin_top(6)
258                frame_box.set_margin_left(6)
259                frame_box.set_margin_right(6)
260                dow_box=Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
261                work_days_box=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
262                work_days_box.add(self.chk_monday)
263                work_days_box.add(self.chk_tuesday)
264                work_days_box.add(self.chk_wednesday)
265                work_days_box.add(self.chk_thursday)
266                work_days_box.add(self.chk_friday)
267                work_days_box.set_focus_chain([self.chk_monday,self.chk_tuesday,self.chk_wednesday,self.chk_thursday,self.chk_friday])
268                dow_box.add(work_days_box)
269                weekend_days_box=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
270                dow_box.add(weekend_days_box)
271                weekend_days_box.add(self.chk_saturday)
272                weekend_days_box.add(self.chk_sunday)
273                weekend_days_box.set_focus_chain([self.chk_saturday,self.chk_sunday])
274                dow_box.set_focus_chain([work_days_box,weekend_days_box])
275#REM NOTEBOOK
276                self.notebook_sw=Gtk.StackSwitcher()
277                self.notebook.add_titled(dow_box,_("By day"),_("By day"))
278                self.notebook.add_titled(self.day_box,_("By date"),_("By date"))
279                self.notebook_sw.set_stack(self.notebook)
280                self.notebook_sw.set_margin_bottom(6)
281#REM
282                self.interval_box=Gtk.Box()
283                minBoxPos=Gtk.PositionType.BOTTOM
284                labelCol=1
285                dowCol=0
286                gtkGrid.set_column_spacing(WIDGET_MARGIN*5)
287                self.time_box.set_valign(Gtk.Align.CENTER)
288                self.time_box.set_halign(Gtk.Align.CENTER)
289                self.time_box.set_margin_bottom(WIDGET_MARGIN)
290                label=Gtk.Label(_("Each"))
291                label.set_margin_right(WIDGET_MARGIN)
292                #               self.interval_box.add(Gtk.Label(_("Each")))
293                self.interval_box.add(label)
294                self.spin_interval=Gtk.SpinButton()
295                self.spin_interval.set_range(0,999)
296                self.spin_interval.set_increments(1,1)
297                self.spin_interval.set_wrap(True)
298                self.spin_interval.set_orientation(Gtk.Orientation.VERTICAL)
299                self.spin_interval.set_valign(Gtk.Align.CENTER)
300                self.spin_interval.set_halign(Gtk.Align.CENTER)
301                self.spin_interval.set_vexpand(False)
302                self.interval_box.add(self.spin_interval)
303                self.interval_box.add(self.cmb_dates)
304                lbl_hour=Gtk.Label(_("Time"))
305
306                if edit:
307                        self.btn_apply.set_halign(Gtk.Align.END)
308                        self.btn_apply.set_valign(Gtk.Align.END)
309                        gtkGrid.attach(self.btn_apply,6,7,2,1)
310                self.chk_spread=Gtk.CheckButton(_("Send task to clients"))
311                gtkGrid.attach(self.chk_spread,0,7,1,1)
312                self.chk_node=Gtk.CheckButton()
313                self.chk_node.set_margin_top(12)
314                self.chk_node.set_halign(Gtk.Align.START)
315                self.chk_node.set_valign(Gtk.Align.START)
316                self.chk_node.set_label("Advanced")
317                self.chk_node.set_active(self.scheduled_task_type)
318
319                gtkGrid.attach(self.notebook_sw,3,1,1,1)
320                gtkGrid.attach(self.notebook,3,2,1,7)
321                dow_frame.set_visible(False)
322                dow_frame.set_no_show_all(True)
323                #Grid attach by task kind
324                if 'daily' in task_kind or expert:
325                        self.chk_daily.set_active(True)
326
327                gtkGrid.attach(lbl_hour,0,1,1,1)
328                gtkGrid.attach_next_to(self.time_box,lbl_hour,Gtk.PositionType.BOTTOM,1,3)
329                gtkGrid.attach(self.chk_interval,4,1,2,1)
330                gtkGrid.attach_next_to(self.interval_box,self.chk_interval,Gtk.PositionType.BOTTOM,1,1)
331                self.lbl_disclaim=Gtk.Label("")
332                self.lbl_disclaim.set_line_wrap(True)
333                self.lbl_disclaim.set_max_width_chars(25)
334                self.lbl_disclaim.set_width_chars(25)
335                self.lbl_disclaim.set_lines(-1)
336                self.lbl_disclaim.set_opacity(0.6)
337                gtkGrid.attach_next_to(self.lbl_disclaim,self.interval_box,Gtk.PositionType.BOTTOM,1,3)
338                self.interval_box.set_sensitive(False)
339                if 'repeat' in task_kind or expert:
340                        self.interval_box.set_sensitive(True)
341                        self.lbl_disclaim.set_text("Tasks will take day 1 of month 1 at 00:00 as reference date/time")
342
343                #Tab order chain
344                widget_array=[dow_frame,self.hour_box,self.minute_box,self.month_box,self.day_box,self.chk_interval,\
345                                                self.interval_box,self.chk_special_dates]
346                if edit:
347                        widget_array.append(self.btn_apply)
348
349                gtkGrid.set_focus_chain(widget_array)
350                #Add data to combos
351                self._load_date_time_data('minute')
352                self._load_date_time_data('hour')
353                self._load_date_time_data('day')
354                self._load_date_time_data('month')
355                #handled signals
356                interval_handler=self.cmb_interval.connect("changed",self._parse_scheduled)
357                #Signals
358                self.chk_daily.connect("toggled",self._set_daily_visibility,dow_frame)
359                self.chk_interval.connect("toggled",self._set_visibility,self.interval_box)
360                self.chk_monday.connect("toggled",self._enable_fixed_dates,interval_handler)
361                self.chk_thursday.connect("toggled",self._enable_fixed_dates,interval_handler)
362                self.chk_wednesday.connect("toggled",self._enable_fixed_dates,interval_handler)
363                self.chk_tuesday.connect("toggled",self._enable_fixed_dates,interval_handler)
364                self.chk_friday.connect("toggled",self._enable_fixed_dates,interval_handler)
365                self.chk_saturday.connect("toggled",self._enable_fixed_dates,interval_handler)
366                self.chk_sunday.connect("toggled",self._enable_fixed_dates,interval_handler)
367                self.chk_interval.connect("toggled",self._chk_interval_status)
368                self.chk_special_dates.connect("toggled",self._chk_special_dates_status)
369                self.cmb_dates.connect("changed",self._load_interval_data,interval_handler)
370                self.cmb_handler={}
371                self.cmb_handler[self.cmb_months]=self.cmb_months.connect("changed",self._parse_scheduled)
372                self.cmb_handler[self.cmb_days]=self.cmb_days.connect("changed",self._parse_scheduled)
373                self.cmb_handler[self.spin_hour]=self.spin_hour.connect("changed",self._parse_scheduled)
374                self.cmb_handler[self.spin_min]=self.spin_min.connect("changed",self._parse_scheduled)
375                gtkGrid.connect("event",self._parse_scheduled)
376                self.chk_node.connect("toggled",self._enable_scheduled_task_type,gtkGrid,edit)
377
378                #Initial control status
379                self.interval_box.set_sensitive(False)
380                #signals
381                gtkGrid.set_valign(Gtk.Align.CENTER)
382                gtkGrid.set_halign(Gtk.Align.CENTER)
383                self.gtkgrid=gtkGrid
384                return (gtkGrid)
385        #def render_form
386
387        def _set_daily_visibility(self,widget_event,widget,*args):
388                self._set_visibility(widget_event,widget,*args)
389                if widget_event.get_active()==False:
390                        widgets=[self.chk_monday,
391                                self.chk_thursday,
392                                self.chk_wednesday,
393                                self.chk_tuesday,
394                                self.chk_friday,
395                                self.chk_saturday,
396                                self.chk_sunday]
397                        for widget in widgets:
398                                widget.set_active(False)
399
400        def _set_visibility(self,widget_event,widget,*args):
401                status=widget_event.get_active()
402                widget.set_sensitive(status)
403                widget.show_all()
404
405        def _enable_scheduled_task_type(self,widget,gtkgrid,edit):
406                expert=self.chk_node.get_active()
407                for grid_widget in gtkgrid.get_children():
408                        gtkgrid.remove(grid_widget)
409                parent=gtkgrid.get_parent()
410                parent.remove(gtkgrid)
411                gtkgrid=self.render_form(gtkgrid,edit=edit,expert=expert)
412                parent.add(gtkgrid)
413                parent.show_all()
414
415        def _render_form(self,task_kind,edit):
416                for grid_widget in self.gtkgrid.get_children():
417                        self.gtkgrid.remove(grid_widget)
418                parent=self.gtkgrid.get_parent()
419                parent.remove(self.gtkgrid)
420                gtkgrid=self.render_form(self.gtkgrid,task_kind=task_kind,edit=edit)
421                parent.add(gtkgrid)
422                parent.show_all()
423
424        def load_task_details(self,*args,**kwargs):
425                if 'edit' in kwargs.keys():
426                        edit=True
427                else:
428                        edit=False
429                self._render_form(self.task['kind'],edit=edit)
430                for widget,handler in self.cmb_handler.items():
431                        widget.handler_block(handler)
432                self.lbl_info.set_text('')
433                if self.task['m'].isdigit():
434                        self.spin_min.set_value(int(self.task['m']))
435                else:
436                        self.spin_min.set_value(0)
437                        self._parse_date_details(self.task['m'],None,'min')
438
439                if self.task['h'].isdigit():
440                        self.spin_hour.set_value(int(self.task['h']))
441                else:
442                        self.spin_hour.set_value(0)
443                        self._parse_date_details(self.task['h'],None,'hour')
444
445                self._parse_date_details(self.task['dom'],self.cmb_days,'dom')
446                self._parse_date_details(self.task['mon'],self.cmb_months,'mon')
447                #Load calendar
448                if self.task['dom'].isdigit() and self.task['mon'].isdigit():
449                                self.notebook.set_visible_child_name(_("By date"))
450                                self.calendar.select_month(int(self.task['mon']),date.today().year)
451                                self.calendar.select_day(int(self.task['dom']))
452                widget_dict={'0':self.chk_sunday,'1':self.chk_monday,'2':self.chk_tuesday,\
453                                        '3':self.chk_wednesday,'4':self.chk_thursday,'5':self.chk_friday,\
454                                        '6':self.chk_saturday,'7':self.chk_sunday}
455                if self.task['dow']=='*' and self.task['dom']=='*':
456                        self.task['dow']="1,2,3,4,5,6,7"
457                self._parse_date_details(self.task['dow'],None,'dow',widget_dict)
458                if 'spread' in self.task.keys():
459                        if self.task['spread']==True:
460                                self.chk_spread.set_active(True)
461                if 'lmd' in self.task.keys():
462                        self.chk_special_dates.set_active(True)
463                for widget,handler in self.cmb_handler.items():
464                        widget.handler_unblock(handler)
465        #def load_task_details
466
467        def _parse_date_details(self,date,widget=None,date_type=None,widget_dict=None):
468                if date.isdigit() and widget:
469                        widget.set_active(int(date))
470                elif '/' in date:
471                        pos=date.split('/')
472                        self.chk_interval.set_active(True)
473                        self.cmb_interval.set_active(int(pos[1])-1)
474                        self.spin_interval.set_value(int(pos[1]))
475                        if date_type=='hour' or date_type=='min':
476                                self.spin_hour.set_value(0)
477                                self.hour_box.set_sensitive(False)
478                                self.minute_box.set_sensitive(False)
479                        elif date_type=='dom':
480                                self.cmb_dates.set_active(1)
481                                self.hour_box.set_sensitive(True)
482                                self.minute_box.set_sensitive(True)
483                        elif date_type=='mon':
484                                self.cmb_interval.set_active(int(pos[1])-1)
485                                self.cmb_dates.set_active(3)
486                                self.month_box.set_sensitive(False)
487                                self.hour_box.set_sensitive(True)
488                                self.minute_box.set_sensitive(True)
489                elif widget_dict:
490                        array_date=[]
491                        if ',' in date:
492                                array_date=date.split(',')
493                        else:
494                                array_date.append(date)
495
496                        for selected_date in array_date:
497                                if selected_date.isdigit():
498                                        widget_dict[selected_date].set_active(True)
499        #def _parse_date_details
500
501        def clear_screen(self):
502                widgets=[self.chk_monday,self.chk_thursday,self.chk_wednesday,self.chk_tuesday,\
503                                self.chk_friday,self.chk_saturday,self.chk_sunday]
504                for widget in widgets:
505                        widget.set_active(False)
506                self.spin_hour.set_value(0)
507                self.spin_min.set_value(0)
508                self.cmb_days.set_active(0)
509                self.cmb_months.set_active(0)
510                self.cmb_interval.set_active(0)
511                self.cmb_dates.set_active(0)
512                self.chk_special_dates.set_active(False)
513                self.chk_interval.set_active(False)
514        #def clear_screen
515       
516        def _set_sensitive_widget(self,widget_dic):
517                for widget,status in widget_dic.items():
518                        widget.set_sensitive(status)
519        #def _set_sensitive_widget
520       
521        def _changed_interval(self):
522                if self.chk_interval.get_active():
523                        interval=self.cmb_dates.get_active_text()
524                        if interval==_('hour(s)') or interval==_('minute(s)'):
525                                self._set_sensitive_widget({self.hour_box:False,self.minute_box:False})
526                                self._set_days_sensitive(True)
527                        elif interval==_('day(s)') or interval==_('week(s)'):
528                                self._set_sensitive_widget({self.month_box:True,self.hour_box:True,self.minute_box:True})
529                                self._set_days_sensitive(False)
530                        elif interval==_('month(s)'):
531                                self._set_sensitive_widget({self.hour_box:True,self.minute_box:True})
532                                self._set_days_sensitive(True)
533                self._chk_special_dates_status()
534        #def _changed_interval
535
536
537        def _chk_interval_status(self,widget):
538                if self.chk_interval.get_active():
539                        self._set_sensitive_widget({self.interval_box:True,\
540                                self.hour_box:False,self.minute_box:False,self.month_box:True})
541                        self._changed_interval()
542                        if not self.spin_interval.get_value_as_int():
543                                self.spin_interval.set_value(1)
544                        self.lbl_disclaim.set_text("Tasks will take day 1 of month 1 at 00:00 as reference date/time")
545
546                else:
547                        self._set_sensitive_widget({self.interval_box:False,\
548                                self.hour_box:True,self.minute_box:True,self.month_box:True})
549                        self.lbl_disclaim.set_text("")
550                self._chk_special_dates_status()
551        #def _chk_interval_status
552                       
553        def _chk_special_dates_status(self,widget=None):
554                return
555                if self.chk_special_dates.get_active():
556                        self._set_sensitive_widget({self.hour_box:True,self.minute_box:True,self.month_box:True,self.day_box:False})
557                        self._set_days_sensitive(False)
558                else:
559                        self._set_sensitive_widget({self.day_box:not self._get_days_active()})
560                        self._set_days_sensitive(True)
561        #def _chk_special_dates_status
562
563        def _get_days_active(self):
564                sw_active=False
565                widgets=[self.chk_monday,
566                                self.chk_thursday,
567                                self.chk_wednesday,
568                                self.chk_tuesday,
569                                self.chk_friday,
570                                self.chk_saturday,
571                                self.chk_sunday]
572                for widget in widgets:
573                        if widget.get_active():
574                                sw_active=True
575                                break
576                return sw_active
577        #def _get_days_active
578
579        def _enable_fixed_dates(self,widget,handler=None):
580                sw_enable=True
581                sw_enable=self._get_days_active()
582                if sw_enable:
583                        if self.chk_interval.get_active():
584                                self._load_interval_data(True,handler)
585                        else:
586                                self.month_box.set_sensitive(True)
587                else:
588                        if self.chk_interval.get_active():
589                                self._load_interval_data(True,handler)
590                        else:
591                                self.month_box.set_sensitive(True)
592        #def _enable_fixed_dates
593
594        def _set_days_sensitive(self,state):
595                if self.chk_special_dates.get_active():
596                        state=False
597                widgets=[self.chk_monday,
598                                self.chk_thursday,
599                                self.chk_wednesday,
600                                self.chk_tuesday,
601                                self.chk_friday,
602                                self.chk_saturday,
603                                self.chk_sunday]
604                for widget in widgets:
605                        widget.set_sensitive(state)
606        #def _set_days_sensitive
607
608        def _parse_screen(self):
609                details={}
610                dow=''
611                #Init date data
612                for i in ["h","m","mon","dom"]:
613                        details[i]="*"
614                #load data
615                if self.spin_hour.is_sensitive():
616                        details["h"]=str(self.spin_hour.get_value_as_int())
617                if self.spin_min.is_sensitive():
618                        details["m"]=str(self.spin_min.get_value_as_int())
619                else:
620                        details['m']="0"
621                if self.notebook.get_visible_child_name()==_("By date"):
622                        details['dow']='*'
623                        date=self.calendar.get_date()
624                        details["mon"]=str(date.month+1)
625                        details["dom"]=str(date.day)
626                else:
627                        widgets=[self.chk_monday,self.chk_thursday,     self.chk_wednesday,     self.chk_tuesday,\
628                                self.chk_friday,self.chk_saturday,self.chk_sunday]
629                        cont=1
630                        for widget in widgets:
631                                if widget.get_active() and widget.get_sensitive():
632                                        dow+=str(cont)+','
633                                cont+=1
634                        if dow!='':
635                                dow=dow.rstrip(',')
636                        else:
637                                dow='*'
638                        details['dow']=dow
639
640                if self.cmb_dates.is_sensitive():
641                        if self.cmb_dates.get_active_text()==_('minute(s)'):
642                                details['m']="0/"+str(self.spin_interval.get_value_as_int())
643                        if self.cmb_dates.get_active_text()==_('hour(s)'):
644                                details['h']="0/"+str(self.spin_interval.get_value_as_int())
645                        if self.cmb_dates.get_active_text()==_('day(s)'):
646                                details['dom']="1/"+str(self.spin_interval.get_value_as_int())
647                        if self.cmb_dates.get_active_text()==_('week(s)'):
648                                week=self.spin_interval.get_value_as_int()*7
649                                details['dom']="1/"+str(week)
650                        if self.cmb_dates.get_active_text()==_('month(s)'):
651                                details['mon']="1/"+str(self.spin_interval.get_value_as_int())
652                details['hidden']=0
653                if self.chk_special_dates.get_active():
654                        details['lmd']=1
655                        details['dom']='*'
656                        details['dow']='*'
657
658                if self.chk_spread.get_active():
659                        details['spread']=True
660                else:
661                        details['spread']=False
662
663                return details
664        #def _parse_screen
665
666        def _parse_scheduled(self,container=None,widget=None):
667                details=self._parse_screen()
668                self.lbl_info.set_text(self.parser.parse_taskData(details))
669        #def _parse_scheduled
670
671        def update_task_details(self,widget=None):
672                if self.task['name'] and self.task['serial']:
673                        task_data=self.get_task_details()
674                        return self.scheduler_client.write_tasks(task_data,self.task['type'])
675        #def update_task_details
676
677        def get_task_details(self,*args):
678                details=self._parse_screen()
679                details['cmd']=self.scheduler_client.get_task_command(self.task['cmd'])
680                #Search for a "last day month" cmd
681                if 'lmd' in details.keys():
682                        details['cmd']=self.ldm_helper+' '+details['cmd']
683                task={}
684                task[self.task['name']]={self.task['serial']:details}
685                self._debug("Saving %s"%task)
686                return task
687        #def get_task_details
Note: See TracBrowser for help on using the repository browser.