# This maneges the interface of and provides functionality for the # "Start/End Time" tab. ''' Fixing this file... redundecy needs to be eleminated readablility needs to be improved Ideas: 1. use a class that start and end implament 2. use a class for start and end that stores the widgets 3. create a class that does everything start and end time need to do and take the start/end out of it ''' import interface import datetime import gobject TAB_NAME = "Start/End Time" WIDGET_NAME = "start_end_time" class Tab(interface.NewTab): def make(self): self.start_calendar = self.get_widget('start_cal') self.end_calendar = self.get_widget('end_cal') self.start_hour = self.get_widget('start_hour') self.end_hour = self.get_widget('end_hour') self.start_min = self.get_widget('start_min') self.end_min = self.get_widget('end_min') self.start_sec = self.get_widget('start_sec') self.end_sec = self.get_widget('end_sec') self.start_adjustment_frame = self.get_widget('start_time_adjustment') self.end_adjustment_frame = self.get_widget('end_time_adjustment') self.no_start_time_text = self.get_widget('no_start_label') self.no_end_time_text = self.get_widget('no_end_label') self.start_time_toggle = self.get_widget('start_time_toggle') self.end_time_toggle = self.get_widget('end_time_toggle') self.start_adjuster_toggle = self.get_widget('start_adjustment_toggle') self.end_adjuster_toggle = self.get_widget('end_adjustment_toggle') time = datetime.datetime.now() if time.hour == 23: hour = 0 # I know, day could be pushed over to 32, causing this program to # not function in the last hour of the last day of every month. # I need to fix this. day = time.day + 1 else: day = time.day hour = time.hour + 1 self.end_calendar.select_month(time.month - 1, time.year) self.end_calendar.select_day(day + 1) self.end_hour.set_value(hour) self.start_hour.set_value(hour) self.start_calendar.select_month(time.month - 1, time.year) self.start_calendar.select_day(day) self.set_start_time() self.set_end_time() gobject.timeout_add(1000, self.update_time) def update_time(self): self.current_time = datetime.datetime.now().ctime() self.get_widget('time').set_text(self.current_time) return True def set_time(self, calendar, hour, minute, second, adjuster_toggle, time_toggle): print 'setting end time' date = calendar.get_date() time = datetime.datetime(date[0], date[1] + 1, date[2], int(hour.get_value()), int(minute.get_value()), int(second.get_value())) adjuster_toggle.set_label(time.ctime()) if not time_toggle.get_active(): time = None return time def set_start_time(self): self.start = self.set_time(self.start_calendar, self.start_hour, self.start_min, self.start_sec, self.start_adjuster_toggle, self.start_time_toggle) def set_end_time(self): self.end = self.set_time(self.end_calendar, self.end_hour, self.end_min, self.end_sec, self.end_adjuster_toggle, self.end_time_toggle) def time_toggled(self, widget, adjuster_toggle, no_time_text): if widget.get_active(): adjuster_toggle.show() no_time_text.hide() else: adjuster_toggle.hide() no_time_text.show() adjuster_toggle.set_active(False) def change_time_toggled(self, widget, adjustment_frame): if widget.get_active(): adjustment_frame.show() else: adjustment_frame.hide() def on_start_time_changed(self, widget): self.set_start_time() def on_end_time_changed(self, widget): self.set_end_time() def on_start_toggled(self, widget): self.time_toggled(widget, self.start_adjuster_toggle, self.no_start_time_text) def on_end_toggled(self, widget): self.time_toggled(widget, self.end_adjuster_toggle, self.no_end_time_text) def on_change_start_toggled(self, widget): self.change_time_toggled(widget, self.start_adjustment_frame) def on_change_end_toggled(self, widget): self.change_time_toggled(widget, self.end_adjustment_frame) tab = Tab(interface.GLADE_TABS, WIDGET_NAME, TAB_NAME)