diff -urNb pyatcron/src/lib/gui.py pyatcron-devel/src/lib/gui.py --- pyatcron/src/lib/gui.py 2004-04-29 10:59:47.732559661 +0100 +++ pyatcron-devel/src/lib/gui.py 2004-04-29 10:00:15.000000000 +0100 @@ -45,6 +45,9 @@ 2,syntactic.getNextRunString(), 3,color) + def delScheduler (self,iter): + self.remove (iter) + def saveSchedulers(self): print "ScheduleListStore::saveSchedulers: NOT IMPLEMENTED" return diff -urNb pyatcron/src/lib/mainwin.py pyatcron-devel/src/lib/mainwin.py --- pyatcron/src/lib/mainwin.py 2004-04-29 10:59:47.734559373 +0100 +++ pyatcron-devel/src/lib/mainwin.py 2004-04-29 10:02:33.000000000 +0100 @@ -15,10 +15,6 @@ # The main window's class. class MainWin: def __init__ (self): - # The index of the task currently highlighted (if any). - self.taskIndex = None - - # The GtkTreePath of the last highlighted inactive task. # It's used to switch between the inactive/highlighted colors # in the task list. @@ -33,6 +29,7 @@ # Get normal and insensitive state color from Gtk theme self.normalColor = self.getThemeColor(gtk.STATE_NORMAL) self.insensitiveColor = self.getThemeColor(gtk.STATE_INSENSITIVE) + self.selectedColor = self.getThemeColor(gtk.STATE_SELECTED) # Initialize a ScheduleListStore object self.listStore=ScheduleListStore(self.normalColor, @@ -85,6 +82,7 @@ def on_tasklist_selection_changed(self,obj): self.updateItemsSensitivity() + self.updateCurrentTask () def on_mainmenu_save_activate (self, obj): self.save () @@ -137,6 +135,9 @@ def on_toolbar_delete_clicked (self, obj): self.deleteScheduler() + def on_tasklist_row_activated (self, obj, path, column): + self.editTask () + def on_confirm_delete_response (self, obj, response): # If deletion is confirmed, delete the task. if (response == -8): @@ -170,7 +171,8 @@ def deleteScheduler (self,confirm = False): if (confirm): # deletion is confirmed, delete Scheduler - print "MainWin::deleteScheduler: NOT IMPLEMENTED" + model,iter = self.taskList.get_selection().get_selected() + self.listStore.delScheduler (iter) else: # Load a delete confirmation dialog window xml = gtk.glade.XML (GLADE_FILE_PATH + "/confirm_delete.glade") @@ -255,6 +257,7 @@ model.set_value(iter,3,self.insensitiveColor) # update sensitivity of menu items self.updateItemsSensitivity() + self.updateCurrentTask() # Writes the current configuration. def save (self): @@ -277,47 +280,27 @@ # Gets the current highlighted task's index. def updateCurrentTask (self): - taskList = self.widgetTree.get_widget ("tasklist") - iter = taskList.get_selection ().get_selected () [1] - model = taskList.get_model () + # get iter of selected row + model,iter = self.taskList.get_selection().get_selected() # If we were on an inactive task, restore its color to "insensitive". - if (self.lastPath != None): - model.set_value (model.get_iter (self.lastPath), 4, self.insensitiveColor) - self.lastPath = None + if (self.lastPath): + lastIter = model.get_iter (self.lastPath) - # If no row is selected, the "properties", "activate", "deactivate" and "delete" toolbar icons/mainmenu entries are insensitive, else they are sensitive. - if (iter == None): - self.widgetTree.get_widget ("toolbar_properties").set_sensitive (0) - self.widgetTree.get_widget ("toolbar_activate").set_sensitive (0) - self.widgetTree.get_widget ("toolbar_deactivate").set_sensitive (0) - self.widgetTree.get_widget ("toolbar_delete").set_sensitive (0) - self.widgetTree.get_widget ("mainmenu_properties").set_sensitive (0) - self.widgetTree.get_widget ("mainmenu_activate").set_sensitive (0) - self.widgetTree.get_widget ("mainmenu_deactivate").set_sensitive (0) - self.widgetTree.get_widget ("mainmenu_delete").set_sensitive (0) + if (model.get_value (lastIter, 0).isActive ()): + model.set_value (model.get_iter (self.lastPath), 3, self.normalColor) else: - # If the task is inactive, the "deactivate" icon toolbar is insensitive, the "activate" icon is sensitive and vice-versa. - activable = model.get_value (iter, 1) - - self.widgetTree.get_widget ("toolbar_properties").set_sensitive (1) - self.widgetTree.get_widget ("toolbar_activate").set_sensitive (activable) - self.widgetTree.get_widget ("toolbar_deactivate").set_sensitive (1 - activable) - self.widgetTree.get_widget ("toolbar_delete").set_sensitive (1) - self.widgetTree.get_widget ("mainmenu_properties").set_sensitive (1) - self.widgetTree.get_widget ("mainmenu_activate").set_sensitive (activable) - self.widgetTree.get_widget ("mainmenu_deactivate").set_sensitive (1 - activable) - self.widgetTree.get_widget ("mainmenu_delete").set_sensitive (1) + model.set_value (model.get_iter (self.lastPath), 3, self.insensitiveColor) - # Here, we get the task's index. - self.taskIndex = model.get_value (iter, 0) + self.lastPath = None - if (activable == 1): + if (iter): # We save the task's path for next time. - path = taskList.get_cursor () [0] - self.lastPath = taskList.get_cursor () [0] - # We set the inactive task's color to "highlighted". - model.set_value (model.get_iter (path), 4, self.highlightedColor) + path = self.taskList.get_cursor () [0] + self.lastPath = self.taskList.get_cursor () [0] + + # We set the task's color to "selected". + model.set_value (model.get_iter (path), 3, self.selectedColor) # Launches the new task assistant and refreshes the task list # if a new task was created. @@ -327,69 +310,43 @@ def on_editor_changed(self, *args): print "Updating list (only the task, not the scheduler)" self.updateTaskList (True, True, False) - # Launches the properties dialog and refreshes the task list if - # changes were made. + # Launches the properties dialog def editTask (self): - print "edit task #" + str (self.taskIndex) - self.editor = SchedulerEditor(self.scheduleList[self.taskIndex]) + print "edit task" + model,iter = self.taskList.get_selection().get_selected() + currentTask = model.get_value (iter, 0) + self.editor = SchedulerEditor(currentTask) self.editor.show(self.win) - self.scheduleList[self.taskIndex].task.connect('changed', self.on_editor_changed) - #self.updateTaskList () + currentTask.task.connect('changed', self.on_editor_changed) - # Builds or refreshes the task list. + # Refreshes the task list. def updateTaskList (self, onlyCurrentTask = False, updateTask = True, updateScheduler = True): + model = self.taskList.get_model () - taskList = self.widgetTree.get_widget ("tasklist") - - # If the task list has not already been built, ceate it. Else, get its current model, get the position of the cursor from it and clear the current model. - if (taskList.get_model () == None): - model = gtk.ListStore (gobject.TYPE_INT, gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) - else: - model = taskList.get_model () - cursor = taskList.get_cursor () - if (not onlyCurrentTask): - model.clear () - - # Add each task, or update the current one - curIndex = 0 - if (onlyCurrentTask): - self.updateCurrentTask () iter = model.get_iter_first () + while (iter): + selectedModel,selectedIter = self.taskList.get_selection().get_selected() + selectedTask = selectedModel.get_value (selectedIter, 0) + currentTask = model.get_value (iter, 0) - for entry in self.scheduleList: - if (curIndex == self.taskIndex or not onlyCurrentTask): - if (not onlyCurrentTask): - iter = model.append () + if (selectedTask == currentTask or not onlyCurrentTask): + model.set (iter, 0, currentTask) - model.set (iter, 0, curIndex) - model.set (iter, 1, entry.isActive () == False) if (updateTask): - model.set (iter, 2, entry) + model.set (iter, 1, str (currentTask)) if (updateScheduler): # Determine when the task will occur next - syntactic = SyntacticEngine(entry) - model.set (iter, 3, syntactic.getNextRunString()) + syntactic = SyntacticEngine(currentTask) + model.set (iter, 2, syntactic.getNextRunString()) - model.set (iter, 4, self.insensitiveColor) + if (currentTask.isActive ()): + model.set (iter, 3, self.normalColor) + else: + model.set (iter, 3, self.insensitiveColor) - if (onlyCurrentTask): iter = model.iter_next (iter) - curIndex = curIndex + 1 - # If we are building the task list, associate the model to the task list and create the headers. Else, restore the cursor's position. - if (taskList.get_model () == None): - taskList.set_model (model) - - textRenderer = gtk.CellRendererText () - textColumn = gtk.TreeViewColumn ("Description", textRenderer, text=2, foreground_set=1, foreground=4) - taskList.append_column (textColumn) - - textRenderer = gtk.CellRendererText () - textColumn = gtk.TreeViewColumn ("Next run time", textRenderer, text=3, foreground_set=1, foreground=4) - taskList.append_column (textColumn) - else: - if (cursor [0] != None): - taskList.set_cursor (cursor [0]) + self.updateCurrentTask () diff -urNb pyatcron/src/lib/newtask.py pyatcron-devel/src/lib/newtask.py --- pyatcron/src/lib/newtask.py 2004-04-28 09:09:02.000000000 +0100 +++ pyatcron-devel/src/lib/newtask.py 2004-04-29 09:51:23.000000000 +0100 @@ -51,8 +51,8 @@ self.win.set_position (gtk.WIN_POS_CENTER_ON_PARENT) # Sets the color of the bars. - frameBackground = gtk.gdk.color_parse (self.parent.backgroundColor) - mainBackground = gtk.gdk.color_parse (self.parent.highlightedColor) + frameBackground = gtk.gdk.color_parse (self.parent.normalColor) + mainBackground = gtk.gdk.color_parse (self.parent.selectedColor) self.widgetTree.get_widget ("titlebar").modify_bg (gtk.STATE_NORMAL, frameBackground) self.widgetTree.get_widget ("topbar").modify_bg (gtk.STATE_NORMAL, frameBackground) @@ -165,8 +165,7 @@ self.updatePage () else: scheduler = Scheduler ([[1],[1],[1],[1],[1],[1]], self.task) - self.parent.scheduleList.addSchedule (scheduler) - self.parent.updateTaskList () + self.parent.listStore.addScheduler (scheduler) self.quit () def updatePage (self): @@ -186,7 +185,7 @@ self.widgetTree.get_widget ("widgetbar").remove (self.oldPage) # Set the assistant's title. - title = '' + self.pages [self.currentPage]["title"] + '' + title = '' + self.pages [self.currentPage]["title"] + '' self.widgetTree.get_widget ("title").set_markup (title) # Add the current page to the dialog (with a 4 pixels padding), and display it.