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

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

WIP

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