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

Last change on this file since 6813 was 6813, checked in by Juanma, 3 years ago

Refactorized

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