gnome-schedule r1120 - in branches/x-output-support: . src



Author: gauteh
Date: Sun Dec 14 00:00:45 2008
New Revision: 1120
URL: http://svn.gnome.org/viewvc/gnome-schedule?rev=1120&view=rev

Log:
x-support for at

Modified:
   branches/x-output-support/ChangeLog
   branches/x-output-support/src/at.py
   branches/x-output-support/src/atEditor.py
   branches/x-output-support/src/gnome-schedule.glade
   branches/x-output-support/src/template.py
   branches/x-output-support/src/template_chooser.py
   branches/x-output-support/src/template_manager.py

Modified: branches/x-output-support/src/at.py
==============================================================================
--- branches/x-output-support/src/at.py	(original)
+++ branches/x-output-support/src/at.py	Sun Dec 14 00:00:45 2008
@@ -54,15 +54,16 @@
 		self.atRecordRegexAdd = re.compile('^job\s([0-9]+)\sat')
 		
 		self.atRecordRegexAdded = re.compile('[^\s]+\s([0-9]+)\sat')
-		self.nooutput = 0
 		self.SCRIPT_DELIMITER = "###### ---- GNOME_SCHEDULE_SCRIPT_DELIMITER #####"
 		
+		self.DISPLAY = "DISPLAY=%s; export DISPLAY\n"
+
 		# If normally this variable is unset the user would not expect it 
 		# to be set, which it will be because Gnome Schedule needs it.
 		# Therefore we unset it in the script.
 		self.POSIXLY_CORRECT_UNSET = "unset POSIXLY_CORRECT\n"
 		
-		self.atdatafileversion = 4
+		self.atdatafileversion = 5
 		self.atdata = self.user_home_dir + "/.gnome/gnome-schedule/at"
 		if os.path.exists (self.user_home_dir + "/.gnome") != True:
 			os.mkdir (self.user_home_dir + "/.gnome", 0700)
@@ -139,13 +140,13 @@
 					class_id = m.groups ()[6]
 					user = m.groups ()[7]
 						
-					success, title, desc, manual_poscorrect = self.get_job_data (int (job_id))
+					success, title, desc, manual_poscorrect, output, display = self.get_job_data (int (job_id))
 					# manual_poscorrect is only used during preparation of script
 
 					execute = config.getAtbin() + " -c " + job_id
 					# read lines and detect starter
 					script = os.popen(execute).read()
-					script, prelen, dangerous = self.__prepare_script__ (script, manual_poscorrect)
+					script,  dangerous = self.__prepare_script__ (script, manual_poscorrect, output, display)
 										
 					#removing ending newlines, but keep one
 					#if a date in the past is selected the record is removed by at, this creates an error, and generally if the script is of zero length
@@ -162,7 +163,7 @@
 						else:
 							done = 1
 
-					return job_id, date, time, class_id, user, script, title, prelen, dangerous
+					return job_id, date, time, class_id, user, script, title, dangerous, output
 					
 		elif (output == False):
 			if len (line) > 1 and line[0] != '#':
@@ -213,14 +214,29 @@
 				elif manual_poscorrect == "false":
 					manual_poscorrect_b = False
 			
+			if ver >= 5:
+				output_str = d[7:d.find ("\n")]
+				output = int (output_str)
+				d = d[d.find("\n") + 1:]
+			else:
+				output = 0
+
+			if ver >= 5:
+				display = d[8:d.find ("\n")]
+				d = d[d.find ("\n") + 1:]
+				if (len (display) < 1) or (output == 0):
+					display = ""
+			else:
+				display = ""
+
 			fh.close ()
 			
-			return True, title, desc, manual_poscorrect_b
+			return True, title, desc, manual_poscorrect_b, output, display
 			
 		else: 
 			return False, "", "", False, 0, ""
 			
-	def write_job_data (self, job_id, title, desc):
+	def write_job_data (self, job_id, title, desc, output, display):
 		# Create and write data file
 		f = os.path.join (self.atdata, str(job_id))
 		#print f
@@ -236,6 +252,10 @@
 			fh.write ("manual_poscorrect=true\n")
 		else:
 			fh.write ("manual_poscorrect=false\n")
+
+		fh.write ("output=" + str (output) + "\n")
+		fh.write ("display=" + display + "\n")
+
 		fh.close ()
 		os.chown (f, self.uid, self.gid)
 		os.chmod (f, 0600)
@@ -365,13 +385,19 @@
 		return True, "ok"
 
 		
-	def append (self, runat, command, title):
+	def append (self, runat, command, title, output):
 		tmpfile = tempfile.mkstemp ()
 		fd, path = tmpfile
 		tmp = os.fdopen(fd, 'w')
 		tmp.write (self.SCRIPT_DELIMITER + "\n")
 		if self.manual_poscorrect:
 			tmp.write (self.POSIXLY_CORRECT_UNSET)
+
+		display = ""
+		if output > 0:
+			display = os.getenv ('DISPLAY')
+			tmp.write (self.DISPLAY % display)
+			
 		tmp.write (command + "\n")
 		tmp.close ()
 		
@@ -401,12 +427,12 @@
 		#print job_id
 		
 		desc = ""
-		self.write_job_data (job_id, title, desc)
+		self.write_job_data (job_id, title, desc, output, display)
 		
 		os.unlink (path)
 
 
-	def update (self, job_id, runat, command, title):
+	def update (self, job_id, runat, command, title, output):
 		#print "update" + str (job_id) + runat + command + title
 		#remove old
 		f = os.path.join (self.atdata, str (job_id))
@@ -423,6 +449,12 @@
 		tmp.write (self.SCRIPT_DELIMITER + "\n")
 		if self.manual_poscorrect:
 			tmp.write (self.POSIXLY_CORRECT_UNSET)
+
+		display = ""
+		if output > 0:
+			display = os.getenv ('DISPLAY')
+			tmp.write (self.DISPLAY % display)
+
 		tmp.write (command + "\n")
 		tmp.close ()
 
@@ -449,7 +481,7 @@
 		#print job_id
 		
 		desc = ""
-		self.write_job_data (job_id, title, desc)
+		self.write_job_data (job_id, title, desc, output, display)
 		
 		os.unlink (path)
 		
@@ -474,14 +506,13 @@
 			array_or_false = self.parse (line)
 			#print array_or_false
 			if array_or_false != False:
-				(job_id, date, time, class_id, user, lines, title, prelen, dangerous) = array_or_false
+				(job_id, date, time, class_id, user, lines, title, dangerous, output) = array_or_false
 
 			
-				preview = self.__make_preview__ (lines, prelen)
+				preview = self.__make_preview__ (lines)
 				if dangerous == 1:
 						preview = _("DANGEROUS PARSE: %(preview)s") % {'preview':  preview}
 				#chopping of script delimiter
-				lines = lines[prelen:]
 				lines.strip ()
 					
 				timestring = "%s %s" % (date, time)
@@ -491,12 +522,12 @@
 				# TODO: looks like it could be one append
 				if self.root == 1:
 					if self.user == user:
-						data.append([title, timestring_show, preview, lines, int(job_id), timestring, self, None, date, class_id, user, time, _("Once"), "at", self.nooutput, timestring])
+						data.append([title, timestring_show, preview, lines, int(job_id), timestring, self, None, date, class_id, user, time, _("Once"), "at", output, timestring])
 					else: 
 						#print "Record omitted, not current user"
 						pass
 				else:
-					data.append([title, timestring_show, preview, lines, int(job_id), timestring, self, None, date, class_id, user, time, _("Once"), "at", self.nooutput, timestring])
+					data.append([title, timestring_show, preview, lines, int(job_id), timestring, self, None, date, class_id, user, time, _("Once"), "at", output, timestring])
 
 				#print _("added %(id)s") % { "id": job_id	}
 			else:
@@ -504,7 +535,7 @@
 		return data
 
 	
-	def __prepare_script__ (self, script, manual_poscorrect):
+	def __prepare_script__ (self, script, manual_poscorrect, output, display):
 	
 		# It looks like at prepends a bunch of stuff to each script
 		# Luckily it delimits that using two newlines
@@ -517,19 +548,21 @@
 		# If the script is created by Gnome Schedule the script is seperated by a delimiter.
 
 		dangerous = 0
-		prelen = 0
-		string = self.SCRIPT_DELIMITER
-		scriptstart = script.find(string)
+		scriptstart = script.find(self.SCRIPT_DELIMITER)
 
 		if scriptstart != -1:
 			script = script[scriptstart:]
 			if manual_poscorrect == True:
 				scriptstart = script.find (self.POSIXLY_CORRECT_UNSET)
 				if scriptstart != -1:
-					script = script[scriptstart:]
-					prelen = len (self.POSIXLY_CORRECT_UNSET)
+					script = script[scriptstart + len(self.POSIXLY_CORRECT_UNSET):]
 			else:
-				prelen = len(self.SCRIPT_DELIMITER) + 1
+				script = script[len(self.SCRIPT_DELIMITER) + 1:]
+
+			if output > 0:
+				scriptstart = script.find (self.DISPLAY % display)
+				if scriptstart != -1:
+					script = script [scriptstart + len (self.DISPLAY % display):]
 
 		else:
 			dangerous = 1
@@ -560,20 +593,19 @@
 			else:
 				icon = None 
 
-		return script, prelen, dangerous
+			script = script[prelen:]
+
+		return script, dangerous
 
 
-	def __make_preview__ (self, lines, prelen, preview_len = 0):
+	def __make_preview__ (self, lines, preview_len = 0):
 		if preview_len == 0:
 			preview_len = self.preview_len
-		try:
-			if prelen:
-				result = lines[(0 + prelen):(preview_len + prelen)]
-			else:
-				result = lines[0:preview_len]
-		except:
-			#print "short preview"
-			result = lines[prelen:(-1 - prelen)]
+
+		if len (lines) > preview_len:
+			result = lines[0:preview_len]
+		else:
+			result = lines
 
 		result = result.replace("\n",";")
 		result = result.replace ("&", "&amp;")

Modified: branches/x-output-support/src/atEditor.py
==============================================================================
--- branches/x-output-support/src/atEditor.py	(original)
+++ branches/x-output-support/src/atEditor.py	Sun Dec 14 00:00:45 2008
@@ -53,7 +53,8 @@
 		self.text_task_buffer = self.text_task.get_buffer()
 		self.button_add_template = self.xml.get_widget ("at_button_template")
 		self.at_vbox_time = self.xml.get_widget ("at_vbox_time")
-		
+
+		self.cb_xoutput = self.xml.get_widget ("cb_xoutput")
 
 		self.spin_hour = self.xml.get_widget ("at_spin_hour")
 		self.spin_minute = self.xml.get_widget ("at_spin_minute")
@@ -82,6 +83,7 @@
 		self.cal_button.show_all ()
 		
 		self.xml.signal_connect ("on_cal_button_toggled", self.on_cal_button_toggled)
+		self.xml.signal_connect ("on_cb_xoutput_toggled", self.on_cb_xoutput_toggled)
 		
 		self.cal_loaded = False
 		self.x, self.y = self.widget.get_position ()
@@ -126,15 +128,19 @@
 		self.__setup_calendar__ ()
 		self.button_add_template.show ()
 		self.widget.show_all ()
+		self.output = 0
+		self.cb_xoutput.set_active (0)
 		
 		self.__update_textboxes__()
 	
-	def showadd_template (self, transient, title, command):
+	def showadd_template (self, transient, title, command, output):
 		self.button_save.set_label (gtk.STOCK_ADD)
 		self.__reset__ ()
 		self.title = title
 		self.command = command
 		self.mode = 0 # add new task
+		self.output = output 
+		self.cb_xoutput.set_active (output)
 		self.widget.set_title(_("Create a New Scheduled Task"))
 		self.widget.set_transient_for(transient)
 		self.widget.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
@@ -144,14 +150,15 @@
 		
 		self.__update_textboxes__()
 	
-	def showedit_template (self, transient, id, title, command):
+	def showedit_template (self, transient, id, title, command, output):
 		self.button_save.set_label (gtk.STOCK_ADD)
 		self.__reset__ ()
 		self.tid = id
 		self.title = title
 		self.command = command
 		self.mode = 2 # edit template
-		
+		self.output = output	
+		self.cb_xoutput.set_active (output)
 		self.widget.set_title(_("Edit template"))
 		self.widget.set_transient_for(transient)
 		self.widget.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
@@ -172,7 +179,8 @@
 		self.__reset__ ()
 		self.tid = 0
 		self.mode = 2 # edit template
-		
+		self.output = 0	
+		self.cb_xoutput.set_active (0)
 		self.widget.set_title(_("New template"))
 		self.widget.set_transient_for(transient)
 		self.widget.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
@@ -195,9 +203,11 @@
 		self.date = self.ParentClass.treemodel.get_value(iter, 9)
 		self.time = self.ParentClass.treemodel.get_value(iter, 12)
 		self.title = self.ParentClass.treemodel.get_value(iter, 0)
-		self.class_id = self.ParentClass.treemodel.get_value(iter, 9)
-		self.user = self.ParentClass.treemodel.get_value(iter, 10)
+		self.class_id = self.ParentClass.treemodel.get_value(iter, 10)
+		self.user = self.ParentClass.treemodel.get_value(iter, 11)
 		self.command = self.ParentClass.treemodel.get_value(iter, 3)
+		self.output = self.ParentClass.treemodel.get_value (iter, 15)
+		self.cb_xoutput.set_active (self.output)
 		# removing beginning newlines.. wherever they come from..
 		i = self.command.find ('\n', 0)
 		while i == 0:
@@ -235,6 +245,12 @@
 			if ((x != self.x) or (y != self.y) or (height != self.height) or (width != self.width)):
 				self.__hide_calendar__ ()
 				
+	def on_cb_xoutput_toggled (self, *args):
+		if self.cb_xoutput.get_active ():
+			self.output = 1
+		else:
+			self.output = 0
+
 	def on_cal_button_toggled (self, *args):
 		if self.cal_button.get_active ():
 			self.__show_calendar__ ()
@@ -509,6 +525,8 @@
 		day = ctime[2]
 		hour = ctime[3]
 		minute = ctime[4]
+
+		self.output = 0
 		
 		self.runat = str(hour) + str(minute) + " " + str(day) + "." + str(month) + "." + str (year)
 
@@ -556,12 +574,12 @@
 		self.wrongdialog.destroy()
 
 	def on_button_template_clicked (self, *args):
-		self.template.savetemplate_at (0, self.title, self.command)
+		self.template.savetemplate_at (0, self.title, self.command, self.output)
 		self.widget.hide ()
 
 	def on_button_save_clicked (self, *args):
 		if self.mode == 2:
-			self.template.savetemplate_at (self.tid, self.title, self.command)
+			self.template.savetemplate_at (self.tid, self.title, self.command, self.output)
 			self.widget.hide ()
 			return
 			
@@ -587,9 +605,9 @@
 			del dia2
 		
 		if self.mode == 1:
-			self.scheduler.update (self.job_id, self.runat, self.command, self.title)
+			self.scheduler.update (self.job_id, self.runat, self.command, self.title, self.output)
 		else:
-			self.scheduler.append (self.runat, self.command, self.title)
+			self.scheduler.append (self.runat, self.command, self.title, self.output)
 		
 		self.ParentClass.schedule_reload ()
 			

Modified: branches/x-output-support/src/gnome-schedule.glade
==============================================================================
--- branches/x-output-support/src/gnome-schedule.glade	(original)
+++ branches/x-output-support/src/gnome-schedule.glade	Sun Dec 14 00:00:45 2008
@@ -1,124 +1,142 @@
 <?xml version="1.0"?>
 <glade-interface>
   <requires-version lib="gtk+" version="2.12"/>
-  <widget class="GtkWindow" id="mainWindow">
-    <property name="visible">True</property>
-    <property name="title" translatable="yes">Configure Scheduled Tasks</property>
-    <property name="default_width">700</property>
-    <property name="default_height">400</property>
-    <signal name="delete_event" handler="on_mainWindow_delete_event"/>
-    <signal name="window_state_event" handler="on_mainWindow_window_state_event"/>
+  <widget class="GtkWindow" id="template_chooser">
+    <property name="width_request">450</property>
+    <property name="height_request">300</property>
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+    <property name="title" translatable="yes">Choose template</property>
+    <property name="modal">True</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="transient_for">template_manager</property>
     <child>
-      <widget class="GtkVBox" id="main_vbox">
+      <widget class="GtkVBox" id="vbox4">
         <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
         <child>
-          <widget class="GtkToolbar" id="toolbar">
+          <widget class="GtkHBox" id="hbox9">
             <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
             <child>
-              <widget class="GtkToolButton" id="prop_button">
-                <property name="visible">True</property>
-                <property name="tooltip" translatable="yes">Edit a scheduled task</property>
-                <property name="is_important">True</property>
-                <property name="stock_id">gtk-edit</property>
-                <signal name="clicked" handler="on_prop_button_clicked"/>
-              </widget>
-              <packing>
-                <property name="homogeneous">True</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkToolButton" id="del_button">
-                <property name="visible">True</property>
-                <property name="tooltip" translatable="yes">Delete a scheduled task</property>
-                <property name="is_important">True</property>
-                <property name="stock_id">gtk-delete</property>
-                <signal name="clicked" handler="on_del_button_clicked"/>
-              </widget>
-              <packing>
-                <property name="homogeneous">True</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkToolButton" id="run_button">
+              <widget class="GtkScrolledWindow" id="scrolledwindow5">
                 <property name="visible">True</property>
+                <property name="can_focus">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="tooltip_text">Run the selected task</property>
-                <property name="tooltip" translatable="yes">Run selected task</property>
-                <property name="label" translatable="yes">Run task</property>
-                <property name="stock_id">gtk-execute</property>
-                <signal name="clicked" handler="on_run_button_clicked"/>
-              </widget>
-              <packing>
-                <property name="homogeneous">True</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkToolItem" id="toolitem1">
-                <property name="visible">True</property>
+                <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
                 <child>
-                  <widget class="GtkVSeparator" id="vseparator1">
+                  <widget class="GtkTreeView" id="tc_treeview">
                     <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <signal name="button_press_event" handler="on_tc_treeview_button_press_event"/>
                   </widget>
                 </child>
               </widget>
             </child>
+          </widget>
+        </child>
+        <child>
+          <widget class="GtkHButtonBox" id="hbuttonbox5">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="border_width">5</property>
+            <property name="spacing">5</property>
+            <property name="layout_style">GTK_BUTTONBOX_EDGE</property>
             <child>
-              <widget class="GtkToolButton" id="button_m_template">
+              <widget class="GtkButton" id="tc_button_cancel">
                 <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="tooltip_text">Manage templates</property>
-                <property name="tooltip" translatable="yes">Manage templates</property>
-                <property name="label" translatable="yes">Templates</property>
-                <signal name="clicked" handler="on_button_m_template_clicked"/>
+                <property name="label">gtk-close</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+                <signal name="clicked" handler="on_tc_button_cancel_clicked"/>
+                <accelerator key="Escape" signal="clicked"/>
               </widget>
-              <packing>
-                <property name="homogeneous">True</property>
-              </packing>
             </child>
             <child>
-              <widget class="GtkToggleToolButton" id="edit_mode_button">
+              <widget class="GtkButton" id="tc_button_use">
                 <property name="visible">True</property>
-                <property name="tooltip" translatable="yes">Change edit mode</property>
-                <property name="is_important">True</property>
-                <property name="label" translatable="yes">Advanced</property>
-                <property name="use_underline">True</property>
-                <property name="stock_id">gtk-dialog-warning</property>
-                <signal name="clicked" handler="on_edit_mode_button_clicked"/>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="tooltip" translatable="yes">Create a new task from the selected template</property>
+                <property name="response_id">0</property>
+                <signal name="clicked" handler="on_tc_button_use_clicked"/>
+                <child>
+                  <placeholder/>
+                </child>
               </widget>
               <packing>
-                <property name="homogeneous">True</property>
+                <property name="position">1</property>
               </packing>
             </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="padding">5</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="GtkWindow" id="template_manager">
+    <property name="width_request">500</property>
+    <property name="height_request">300</property>
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+    <property name="title" translatable="yes">Manage templates</property>
+    <property name="modal">True</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="transient_for">mainWindow</property>
+    <child>
+      <widget class="GtkVBox" id="vbox2">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <child>
+          <widget class="GtkToolbar" id="toolbar1">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="toolbar_style">GTK_TOOLBAR_BOTH_HORIZ</property>
             <child>
-              <widget class="GtkToolButton" id="btnSetUser">
-                <property name="tooltip" translatable="yes">Choose the user whose tasks you want to modify</property>
+              <widget class="GtkToolButton" id="tm_button_new">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="tooltip" translatable="yes">Create a new template.</property>
                 <property name="is_important">True</property>
-                <property name="label" translatable="yes">Change User</property>
-                <property name="use_underline">True</property>
-                <property name="stock_id">gtk-dialog-authentication</property>
-                <signal name="clicked" handler="on_btnSetUser_clicked"/>
+                <property name="stock_id">gtk-new</property>
+                <signal name="clicked" handler="on_tm_button_new_clicked"/>
               </widget>
               <packing>
                 <property name="homogeneous">True</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="help_button">
+              <widget class="GtkToolButton" id="tm_button_edit">
                 <property name="visible">True</property>
-                <property name="tooltip" translatable="yes">Show help</property>
-                <property name="stock_id">gtk-help</property>
-                <signal name="clicked" handler="on_help_button_clicked"/>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="tooltip" translatable="yes">Edit the selected template</property>
+                <property name="is_important">True</property>
+                <property name="stock_id">gtk-edit</property>
+                <signal name="clicked" handler="on_tm_button_edit_clicked"/>
               </widget>
               <packing>
                 <property name="homogeneous">True</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="about_button">
+              <widget class="GtkToolButton" id="tm_button_delete">
                 <property name="visible">True</property>
-                <property name="tooltip" translatable="yes">About Gnome-schedule</property>
-                <property name="stock_id">gtk-about</property>
-                <signal name="clicked" handler="on_about_menu_activate"/>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="tooltip" translatable="yes">Delete the selected template</property>
+                <property name="is_important">True</property>
+                <property name="stock_id">gtk-delete</property>
+                <signal name="clicked" handler="on_tm_button_delete_clicked"/>
               </widget>
               <packing>
                 <property name="homogeneous">True</property>
@@ -130,18 +148,18 @@
           </packing>
         </child>
         <child>
-          <widget class="GtkScrolledWindow" id="main_scrolledwindow">
+          <widget class="GtkScrolledWindow" id="scrolledwindow3">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
             <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
             <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
             <child>
-              <widget class="GtkTreeView" id="treeview">
+              <widget class="GtkTreeView" id="tm_treeview">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="tooltip" translatable="yes">Scheduled and active tasks</property>
-                <signal name="button_press_event" handler="on_treeview_button_press_event"/>
-                <signal name="key_press_event" handler="on_treeview_key_press_event"/>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <signal name="button_press_event" handler="on_tm_treeview_button_press_event"/>
               </widget>
             </child>
           </widget>
@@ -150,198 +168,88 @@
           </packing>
         </child>
         <child>
-          <widget class="GtkStatusbar" id="statusbar">
+          <widget class="GtkHButtonBox" id="tm_hbuttonbox">
             <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="border_width">5</property>
+            <property name="spacing">5</property>
+            <property name="layout_style">GTK_BUTTONBOX_EDGE</property>
+            <child>
+              <widget class="GtkButton" id="tm_button_cancel">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="label">gtk-close</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+                <signal name="clicked" handler="on_tm_button_cancel_clicked"/>
+                <accelerator key="Escape" signal="clicked"/>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkButton" id="tm_button_use">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="tooltip" translatable="yes">Create a new task from the selected template</property>
+                <property name="response_id">0</property>
+                <signal name="clicked" handler="on_tm_button_use_clicked"/>
+                <child>
+                  <placeholder/>
+                </child>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
           </widget>
           <packing>
             <property name="expand">False</property>
             <property name="fill">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-            <property name="position">4</property>
+            <property name="padding">5</property>
+            <property name="position">2</property>
           </packing>
         </child>
       </widget>
     </child>
   </widget>
-  <widget class="GtkWindow" id="crontabEditorHelper">
+  <widget class="GtkDialog" id="at_editor">
+    <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
     <property name="border_width">12</property>
-    <property name="title" translatable="yes">Time expression help</property>
-    <property name="resizable">False</property>
-    <property name="modal">True</property>
+    <property name="title">Edit a one-time task</property>
     <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
-    <property name="skip_taskbar_hint">True</property>
-    <property name="skip_pager_hint">True</property>
-    <child>
-      <widget class="GtkVBox" id="vbox5">
+    <property name="default_width">430</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <signal name="event" handler="on_at_editor_size_changed"/>
+    <signal name="delete_event" handler="on_at_editor_delete"/>
+    <signal name="set_focus" handler="on_cal_lost_focus"/>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="at_dialog_vbox">
         <property name="visible">True</property>
         <property name="spacing">12</property>
         <child>
-          <widget class="GtkTable" id="table4">
+          <widget class="GtkVBox" id="vbox8">
             <property name="visible">True</property>
-            <property name="n_rows">9</property>
-            <property name="column_spacing">5</property>
-            <property name="row_spacing">1</property>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
+            <property name="spacing">6</property>
             <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <widget class="GtkRadioButton" id="radEvery">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip" translatable="yes">Execution at a step width. For example every five minutes, hours, days, weekdays or months.</property>
-                <property name="label" translatable="yes">In a step width</property>
-                <property name="use_underline">True</property>
-                <property name="response_id">0</property>
-                <property name="draw_indicator">True</property>
-                <property name="group">radOth</property>
-                <signal name="toggled" handler="on_radEvery_toggled"/>
-              </widget>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkRadioButton" id="radAll">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip" translatable="yes">Execution at every minute, hour, day, weekday or month.</property>
-                <property name="label" translatable="yes">Every minute</property>
-                <property name="use_underline">True</property>
-                <property name="response_id">0</property>
-                <property name="active">True</property>
-                <property name="draw_indicator">True</property>
-                <property name="group">radOth</property>
-                <signal name="toggled" handler="on_radAll_toggled"/>
-              </widget>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkRadioButton" id="radRange">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip" translatable="yes">Execution in a range.</property>
-                <property name="label" translatable="yes">In a range</property>
-                <property name="use_underline">True</property>
-                <property name="response_id">0</property>
-                <property name="draw_indicator">True</property>
-                <property name="group">radOth</property>
-                <signal name="toggled" handler="on_radRange_toggled"/>
-              </widget>
-              <packing>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkRadioButton" id="radFix">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip" translatable="yes">Execution at a specific minute, hour, day, weekday or month.</property>
-                <property name="label" translatable="yes">At an exact minute</property>
-                <property name="use_underline">True</property>
-                <property name="response_id">0</property>
-                <property name="draw_indicator">True</property>
-                <property name="group">radOth</property>
-                <signal name="toggled" handler="on_radFix_toggled"/>
-              </widget>
-              <packing>
-                <property name="top_attach">5</property>
-                <property name="bottom_attach">6</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkRadioButton" id="radOth">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip" translatable="yes">See "man 5 crontab" for information about the crontab format.</property>
-                <property name="label" translatable="yes">Other</property>
-                <property name="use_underline">True</property>
-                <property name="response_id">0</property>
-                <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="on_radFix_toggled"/>
-              </widget>
-              <packing>
-                <property name="top_attach">7</property>
-                <property name="bottom_attach">8</property>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkAlignment" id="alignment1">
+              <widget class="GtkHBox" id="title_box">
                 <property name="visible">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="left_padding">36</property>
+                <property name="spacing">6</property>
                 <child>
-                  <widget class="GtkHBox" id="hbox2">
+                  <placeholder/>
+                </child>
+                <child>
+                  <widget class="GtkVBox" id="vbox14">
                     <property name="visible">True</property>
                     <property name="spacing">6</property>
                     <child>
-                      <widget class="GtkLabel" id="lblEveryEntity">
+                      <widget class="GtkLabel" id="label1">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">Minutes:</property>
+                        <property name="label" translatable="yes">Task description:</property>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -349,68 +257,108 @@
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkEntry" id="entEvery">
-                        <property name="width_request">40</property>
+                      <widget class="GtkEntry" id="at_entry_title">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="width_chars">3</property>
-                        <signal name="changed" handler="on_entEvery_changed"/>
+                        <signal name="changed" handler="on_at_entry_title_changed"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">False</property>
-                        <property name="pack_type">GTK_PACK_END</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
+                    <child>
+                      <widget class="GtkCheckButton" id="cb_xoutput">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="label" translatable="yes">X application</property>
+                        <property name="response_id">0</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="on_cb_xoutput_toggled"/>
+                      </widget>
+                      <packing>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
                   </widget>
+                  <packing>
+                    <property name="padding">5</property>
+                    <property name="position">1</property>
+                  </packing>
                 </child>
               </widget>
               <packing>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
+                <property name="expand">False</property>
+                <property name="padding">5</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkAlignment" id="alignment2">
+              <widget class="GtkVBox" id="at_vbox_time">
                 <property name="visible">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="left_padding">36</property>
                 <child>
-                  <widget class="GtkTable" id="table1">
+                  <widget class="GtkLabel" id="label2">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Execute at:</property>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="GtkTable" id="table3">
                     <property name="visible">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="n_rows">2</property>
-                    <property name="n_columns">2</property>
-                    <property name="column_spacing">6</property>
-                    <property name="row_spacing">6</property>
+                    <property name="n_columns">7</property>
+                    <property name="column_spacing">5</property>
+                    <property name="row_spacing">5</property>
                     <child>
-                      <widget class="GtkEntry" id="entRangeStart">
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <widget class="GtkAlignment" id="align_cal">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="width_chars">3</property>
-                        <signal name="changed" handler="on_entRangeStart_changed"/>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <child>
+                          <widget class="GtkToggleButton" id="cal_button">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="response_id">0</property>
+                            <signal name="toggled" handler="on_cal_button_toggled"/>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </widget>
+                        </child>
                       </widget>
                       <packing>
-                        <property name="left_attach">1</property>
-                        <property name="right_attach">2</property>
-                        <property name="x_options">GTK_EXPAND</property>
+                        <property name="left_attach">6</property>
+                        <property name="right_attach">7</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="lblRangeStart">
+                      <widget class="GtkLabel" id="label3">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">From:</property>
-                        <property name="justify">GTK_JUSTIFY_RIGHT</property>
+                        <property name="xpad">15</property>
+                        <property name="label" translatable="yes">Date:</property>
                       </widget>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="lblRangeEnd">
+                      <widget class="GtkLabel" id="label4">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">To:</property>
-                        <property name="justify">GTK_JUSTIFY_RIGHT</property>
+                        <property name="xpad">15</property>
+                        <property name="label" translatable="yes">Time:</property>
                       </widget>
                       <packing>
                         <property name="top_attach">1</property>
@@ -418,442 +366,251 @@
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkEntry" id="entRangeEnd">
+                      <widget class="GtkSpinButton" id="at_spin_year">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="width_chars">3</property>
-                        <signal name="changed" handler="on_entRangeEnd_changed"/>
+                        <property name="adjustment">2007 2007 4000 1 10 10</property>
+                        <property name="climb_rate">1</property>
+                        <signal name="value_changed" handler="on_at_spin_year_changed"/>
                       </widget>
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
-                        <property name="x_options">GTK_EXPAND</property>
                       </packing>
                     </child>
-                  </widget>
-                </child>
-              </widget>
-              <packing>
-                <property name="top_attach">4</property>
-                <property name="bottom_attach">5</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkAlignment" id="alignment3">
-                <property name="visible">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="left_padding">36</property>
-                <child>
-                  <widget class="GtkHBox" id="hbox5">
-                    <property name="visible">True</property>
-                    <property name="spacing">6</property>
                     <child>
-                      <widget class="GtkLabel" id="lblFixEntity">
+                      <widget class="GtkLabel" id="label8">
                         <property name="visible">True</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes">Minute:</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label">-</property>
+                        <property name="width_chars">0</property>
                       </widget>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                        <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkEntry" id="entFix">
-                        <property name="width_request">40</property>
+                      <widget class="GtkSpinButton" id="at_spin_month">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="width_chars">3</property>
-                        <signal name="changed" handler="on_entFix_changed"/>
+                        <property name="adjustment">1 1 12 1 10 10</property>
+                        <property name="climb_rate">1</property>
+                        <signal name="value_changed" handler="on_at_spin_month_changed"/>
                       </widget>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="pack_type">GTK_PACK_END</property>
-                        <property name="position">1</property>
+                        <property name="left_attach">3</property>
+                        <property name="right_attach">4</property>
                       </packing>
                     </child>
-                  </widget>
-                </child>
-              </widget>
-              <packing>
-                <property name="top_attach">6</property>
-                <property name="bottom_attach">7</property>
-              </packing>
-            </child>
-            <child>
-              <widget class="GtkAlignment" id="alignment4">
-                <property name="visible">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="left_padding">36</property>
-                <child>
-                  <widget class="GtkHBox" id="hbox6">
-                    <property name="visible">True</property>
-                    <property name="spacing">6</property>
                     <child>
-                      <widget class="GtkLabel" id="lblExpression">
+                      <widget class="GtkLabel" id="label10">
                         <property name="visible">True</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes">Expression:</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label">-</property>
+                        <property name="width_chars">0</property>
                       </widget>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
+                        <property name="left_attach">4</property>
+                        <property name="right_attach">5</property>
+                        <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkEntry" id="entExpression">
-                        <property name="width_request">70</property>
+                      <widget class="GtkSpinButton" id="at_spin_day">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="width_chars">8</property>
-                        <signal name="changed" handler="on_entExpression_changed"/>
+                        <property name="adjustment">1 1 31 1 10 10</property>
+                        <property name="climb_rate">1</property>
+                        <signal name="value_changed" handler="on_at_spin_day_changed"/>
                       </widget>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="pack_type">GTK_PACK_END</property>
-                        <property name="position">1</property>
+                        <property name="left_attach">5</property>
+                        <property name="right_attach">6</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="at_spin_hour">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="adjustment">0 0 24 1 10 10</property>
+                        <property name="climb_rate">1</property>
+                        <signal name="value_changed" handler="on_at_spin_hour_changed"/>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="right_attach">2</property>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkLabel" id="label5">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">:</property>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">2</property>
+                        <property name="right_attach">3</property>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="at_spin_minute">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="adjustment">1 0 60 1 10 10</property>
+                        <property name="climb_rate">1</property>
+                        <signal name="value_changed" handler="on_at_spin_minute_changed"/>
+                      </widget>
+                      <packing>
+                        <property name="left_attach">3</property>
+                        <property name="right_attach">4</property>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
                       </packing>
                     </child>
                   </widget>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
                 </child>
               </widget>
               <packing>
-                <property name="top_attach">8</property>
-                <property name="bottom_attach">9</property>
-              </packing>
-            </child>
-          </widget>
-        </child>
-        <child>
-          <widget class="GtkHButtonBox" id="hbuttonbox3">
-            <property name="visible">True</property>
-            <property name="spacing">6</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
-            <child>
-              <widget class="GtkButton" id="btnCancel">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">0</property>
-                <signal name="clicked" handler="on_btnCancel_clicked"/>
-                <accelerator key="Escape" signal="clicked"/>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkButton" id="btnOk">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-ok</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">0</property>
-                <signal name="clicked" handler="on_btnOk_clicked"/>
-              </widget>
-              <packing>
                 <property name="position">1</property>
               </packing>
             </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="GtkDialog" id="addWindow">
-    <property name="border_width">12</property>
-    <property name="title" translatable="yes">Add a Scheduled Task</property>
-    <property name="resizable">False</property>
-    <property name="modal">True</property>
-    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="select_dialog_vbox">
-        <property name="visible">True</property>
-        <property name="spacing">12</property>
-        <child>
-          <widget class="GtkHBox" id="select_hbox">
-            <property name="visible">True</property>
-            <property name="border_width">12</property>
-            <property name="spacing">12</property>
             <child>
-              <widget class="GtkImage" id="select_image">
+              <widget class="GtkLabel" id="label6">
                 <property name="visible">True</property>
-                <property name="yalign">0</property>
-                <property name="stock">gtk-dialog-question</property>
-                <property name="icon_size">6</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Task:</property>
               </widget>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
+                <property name="position">2</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkVBox" id="select_vbox">
+              <widget class="GtkScrolledWindow" id="scrolledwindow2">
                 <property name="visible">True</property>
-                <property name="spacing">12</property>
-                <child>
-                  <widget class="GtkLabel" id="select_label">
-                    <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="ypad">5</property>
-                    <property name="label" translatable="yes">&lt;b&gt;Select the type of the scheduled task:&lt;/b&gt;</property>
-                    <property name="use_markup">True</property>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                  </packing>
-                </child>
+                <property name="can_focus">True</property>
+                <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                <property name="shadow_type">GTK_SHADOW_IN</property>
                 <child>
-                  <widget class="GtkAlignment" id="select_radio_alignment">
+                  <widget class="GtkTextView" id="at_text_task">
+                    <property name="height_request">244</property>
                     <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <child>
-                      <widget class="GtkVBox" id="select_vbox">
-                        <property name="visible">True</property>
-                        <property name="spacing">6</property>
-                        <child>
-                          <widget class="GtkButton" id="button_crontab">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="response_id">0</property>
-                            <signal name="clicked" handler="on_button_crontab_clicked"/>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </widget>
-                        </child>
-                        <child>
-                          <widget class="GtkButton" id="button_at">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="response_id">0</property>
-                            <signal name="clicked" handler="on_button_at_clicked"/>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="GtkButton" id="button_templates">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="response_id">0</property>
-                            <signal name="clicked" handler="on_button_templates_clicked"/>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="position">2</property>
-                          </packing>
-                        </child>
-                      </widget>
-                    </child>
+                    <property name="can_focus">True</property>
+                    <property name="left_margin">5</property>
+                    <property name="right_margin">2</property>
+                    <signal name="popup_menu" handler="on_at_text_task_popup_menu"/>
+                    <signal name="key_release_event" handler="on_at_text_task_key_release_event"/>
                   </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </widget>
               <packing>
-                <property name="position">1</property>
+                <property name="position">3</property>
               </packing>
             </child>
           </widget>
           <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">2</property>
+            <property name="position">1</property>
           </packing>
         </child>
         <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="select_dialog_action_area">
+          <widget class="GtkHButtonBox" id="at_dialog_action_area">
             <property name="visible">True</property>
             <property name="layout_style">GTK_BUTTONBOX_END</property>
             <child>
-              <placeholder/>
-            </child>
-            <child>
-              <widget class="GtkButton" id="select_cancel_button">
+              <widget class="GtkButton" id="at_button_template">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
-                <property name="label">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-6</property>
-                <signal name="clicked" handler="on_select_cancel_button_clicked"/>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="GtkDialog" id="setuserWindow">
-    <property name="title" translatable="yes">Change User</property>
-    <property name="resizable">False</property>
-    <property name="modal">True</property>
-    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="setuser_dialog_vbox">
-        <property name="visible">True</property>
-        <property name="spacing">12</property>
-        <child>
-          <widget class="GtkHBox" id="setuser_hbox">
-            <property name="visible">True</property>
-            <property name="border_width">12</property>
-            <property name="spacing">12</property>
-            <child>
-              <widget class="GtkImage" id="setuser_image">
-                <property name="visible">True</property>
-                <property name="yalign">0</property>
-                <property name="stock">gtk-dialog-authentication</property>
-                <property name="icon_size">6</property>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkVBox" id="setuser_vbox">
-                <property name="visible">True</property>
-                <property name="spacing">12</property>
-                <child>
-                  <widget class="GtkLabel" id="setuser_label">
-                    <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">&lt;b&gt;Choose the user whose tasks you want to modify&lt;/b&gt;</property>
-                    <property name="use_markup">True</property>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                  </packing>
-                </child>
-                <child>
-                  <widget class="GtkAlignment" id="alignment5">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="left_padding">12</property>
-                    <child>
-                      <widget class="GtkHBox" id="setuser_combobox_hbox">
-                        <property name="visible">True</property>
-                        <property name="spacing">6</property>
-                        <child>
-                          <widget class="GtkLabel" id="setuser_combobox_label">
-                            <property name="visible">True</property>
-                            <property name="label" translatable="yes">_User:</property>
-                            <property name="use_underline">True</property>
-                          </widget>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="GtkVBox" id="setuser_combobox_vbox">
-                            <property name="visible">True</property>
-                            <property name="homogeneous">True</property>
-                            <child>
-                              <widget class="GtkComboBoxEntry" id="entUser">
-                                <property name="visible">True</property>
-                                <child internal-child="entry">
-                                  <widget class="GtkEntry" id="comboboxentry-entry1"/>
-                                </child>
-                              </widget>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                              </packing>
-                            </child>
-                          </widget>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </widget>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
+                <property name="label" translatable="yes">Add as template</property>
+                <property name="use_underline">True</property>
+                <property name="response_id">0</property>
+                <signal name="clicked" handler="on_at_button_template_clicked"/>
               </widget>
               <packing>
-                <property name="position">1</property>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
               </packing>
             </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="setuser_dialog_action_area">
-            <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
             <child>
-              <widget class="GtkButton" id="setuser_cancel_button">
+              <widget class="GtkButton" id="at_button_cancel">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
                 <property name="label">gtk-cancel</property>
                 <property name="use_stock">True</property>
                 <property name="response_id">-6</property>
-                <signal name="clicked" handler="on_setuser_cancel_button_clicked"/>
+                <signal name="clicked" handler="on_at_button_cancel_clicked"/>
               </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
             </child>
             <child>
-              <widget class="GtkButton" id="setuser_ok_button">
+              <widget class="GtkButton" id="at_button_save">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
-                <property name="label">gtk-ok</property>
+                <property name="label">gtk-add</property>
                 <property name="use_stock">True</property>
-                <property name="response_id">-5</property>
-                <signal name="clicked" handler="on_setuser_ok_button_clicked"/>
+                <property name="response_id">0</property>
+                <signal name="clicked" handler="on_at_button_save_clicked"/>
               </widget>
               <packing>
-                <property name="position">1</property>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
               </packing>
             </child>
           </widget>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">False</property>
             <property name="pack_type">GTK_PACK_END</property>
           </packing>
         </child>
       </widget>
     </child>
   </widget>
+  <widget class="GtkWindow" id="cal_window">
+    <property name="can_focus">True</property>
+    <property name="can_default">True</property>
+    <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
+    <property name="type">GTK_WINDOW_POPUP</property>
+    <property name="skip_taskbar_hint">True</property>
+    <property name="skip_pager_hint">True</property>
+    <property name="decorated">False</property>
+    <property name="deletable">False</property>
+    <signal name="focus_out_event" handler="on_cal_lost_focus"/>
+    <signal name="delete_event" handler="on_cal_window_destroy"/>
+    <child>
+      <widget class="GtkCalendar" id="calendar">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="year">2007</property>
+        <property name="month">10</property>
+        <property name="day">21</property>
+        <signal name="month_changed" handler="on_cal_day_selected"/>
+        <signal name="day_selected_double_click" handler="on_cal_day_selected_dc"/>
+        <signal name="day_selected" handler="on_cal_day_selected"/>
+        <signal name="prev_year" handler="on_cal_day_selected"/>
+        <signal name="next_year" handler="on_cal_day_selected"/>
+      </widget>
+    </child>
+  </widget>
   <widget class="GtkWindow" id="crontab_editor">
     <property name="extension_events">GDK_EXTENSION_EVENTS_ALL</property>
     <property name="border_width">12</property>
@@ -882,28 +639,34 @@
                 <property name="column_spacing">6</property>
                 <property name="row_spacing">6</property>
                 <child>
-                  <widget class="GtkComboBox" id="combo_output">
+                  <placeholder/>
+                </child>
+                <child>
+                  <widget class="GtkEntry" id="entry_task">
                     <property name="visible">True</property>
-                    <signal name="changed" handler="on_combo_output_changed"/>
+                    <property name="can_focus">True</property>
+                    <property name="text" translatable="yes">ls -l</property>
+                    <signal name="changed" handler="on_anybasic_entry_changed"/>
                   </widget>
                   <packing>
                     <property name="left_attach">1</property>
                     <property name="right_attach">2</property>
-                    <property name="top_attach">2</property>
-                    <property name="bottom_attach">3</property>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                    <property name="y_options"></property>
                   </packing>
                 </child>
                 <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <widget class="GtkLabel" id="label7">
+                  <widget class="GtkLabel" id="label27">
                     <property name="visible">True</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Description:</property>
+                    <property name="label" translatable="yes">Command:</property>
                   </widget>
                   <packing>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
                     <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
                   </packing>
                 </child>
                 <child>
@@ -918,31 +681,25 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkLabel" id="label27">
+                  <widget class="GtkLabel" id="label7">
                     <property name="visible">True</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Command:</property>
+                    <property name="label" translatable="yes">Description:</property>
                   </widget>
                   <packing>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
                     <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkEntry" id="entry_task">
+                  <widget class="GtkComboBox" id="combo_output">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="text" translatable="yes">ls -l</property>
-                    <signal name="changed" handler="on_anybasic_entry_changed"/>
+                    <signal name="changed" handler="on_combo_output_changed"/>
                   </widget>
                   <packing>
                     <property name="left_attach">1</property>
                     <property name="right_attach">2</property>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
-                    <property name="y_options"></property>
+                    <property name="top_attach">2</property>
+                    <property name="bottom_attach">3</property>
                   </packing>
                 </child>
               </widget>
@@ -981,18 +738,15 @@
               <placeholder/>
             </child>
             <child>
-              <widget class="GtkRadioButton" id="rb_basic">
+              <widget class="GtkComboBox" id="frequency_combobox">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="label" translatable="yes">Basic</property>
-                <property name="use_underline">True</property>
-                <property name="response_id">0</property>
-                <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="on_rb_basic_toggled"/>
+                <property name="items" translatable="yes">Every hour</property>
+                <signal name="changed" handler="on_frequency_combobox_changed"/>
               </widget>
               <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="y_options">GTK_FILL</property>
               </packing>
             </child>
             <child>
@@ -1014,15 +768,18 @@
               </packing>
             </child>
             <child>
-              <widget class="GtkComboBox" id="frequency_combobox">
+              <widget class="GtkRadioButton" id="rb_basic">
                 <property name="visible">True</property>
-                <property name="items" translatable="yes">Every hour</property>
-                <signal name="changed" handler="on_frequency_combobox_changed"/>
+                <property name="can_focus">True</property>
+                <property name="label" translatable="yes">Basic</property>
+                <property name="use_underline">True</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_rb_basic_toggled"/>
               </widget>
               <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="y_options">GTK_FILL</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"></property>
               </packing>
             </child>
           </widget>
@@ -1044,75 +801,75 @@
                 <property name="column_spacing">6</property>
                 <property name="row_spacing">3</property>
                 <child>
-                  <widget class="GtkLabel" id="label26">
+                  <widget class="GtkEntry" id="minute_entry">
                     <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Weekday:</property>
+                    <property name="can_focus">True</property>
+                    <property name="text" translatable="yes">0</property>
+                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
                   </widget>
                   <packing>
-                    <property name="top_attach">4</property>
-                    <property name="bottom_attach">5</property>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                    <property name="x_padding">5</property>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkLabel" id="label25">
+                  <widget class="GtkEntry" id="hour_entry">
                     <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Month:</property>
+                    <property name="can_focus">True</property>
+                    <property name="text" translatable="yes">*</property>
+                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
                   </widget>
                   <packing>
-                    <property name="top_attach">3</property>
-                    <property name="bottom_attach">4</property>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                    <property name="x_padding">5</property>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkLabel" id="label18">
+                  <widget class="GtkEntry" id="day_entry">
                     <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Minute:</property>
+                    <property name="can_focus">True</property>
+                    <property name="text" translatable="yes">*</property>
+                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
                   </widget>
                   <packing>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                    <property name="x_padding">5</property>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">2</property>
+                    <property name="bottom_attach">3</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkLabel" id="label19">
+                  <widget class="GtkEntry" id="month_entry">
                     <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Hour:</property>
+                    <property name="can_focus">True</property>
+                    <property name="text" translatable="yes">*</property>
+                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
                   </widget>
                   <packing>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                    <property name="x_padding">5</property>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">3</property>
+                    <property name="bottom_attach">4</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkLabel" id="label20">
+                  <widget class="GtkEntry" id="weekday_entry">
                     <property name="visible">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Day:</property>
+                    <property name="can_focus">True</property>
+                    <property name="text" translatable="yes">*</property>
+                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
                   </widget>
                   <packing>
-                    <property name="top_attach">2</property>
-                    <property name="bottom_attach">3</property>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                    <property name="x_padding">5</property>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">4</property>
+                    <property name="bottom_attach">5</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkButton" id="help_minute">
+                  <widget class="GtkButton" id="help_weekday">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="label">gtk-edit</property>
@@ -1123,12 +880,14 @@
                   <packing>
                     <property name="left_attach">2</property>
                     <property name="right_attach">3</property>
+                    <property name="top_attach">4</property>
+                    <property name="bottom_attach">5</property>
                     <property name="x_options"></property>
                     <property name="y_options"></property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkButton" id="help_hour">
+                  <widget class="GtkButton" id="help_month">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="label">gtk-edit</property>
@@ -1139,8 +898,8 @@
                   <packing>
                     <property name="left_attach">2</property>
                     <property name="right_attach">3</property>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
+                    <property name="top_attach">3</property>
+                    <property name="bottom_attach">4</property>
                     <property name="x_options"></property>
                     <property name="y_options"></property>
                   </packing>
@@ -1164,7 +923,7 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkButton" id="help_month">
+                  <widget class="GtkButton" id="help_hour">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="label">gtk-edit</property>
@@ -1175,14 +934,14 @@
                   <packing>
                     <property name="left_attach">2</property>
                     <property name="right_attach">3</property>
-                    <property name="top_attach">3</property>
-                    <property name="bottom_attach">4</property>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
                     <property name="x_options"></property>
                     <property name="y_options"></property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkButton" id="help_weekday">
+                  <widget class="GtkButton" id="help_minute">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="label">gtk-edit</property>
@@ -1193,78 +952,76 @@
                   <packing>
                     <property name="left_attach">2</property>
                     <property name="right_attach">3</property>
-                    <property name="top_attach">4</property>
-                    <property name="bottom_attach">5</property>
                     <property name="x_options"></property>
                     <property name="y_options"></property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkEntry" id="weekday_entry">
+                  <widget class="GtkLabel" id="label20">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="text" translatable="yes">*</property>
-                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Day:</property>
                   </widget>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="right_attach">2</property>
-                    <property name="top_attach">4</property>
-                    <property name="bottom_attach">5</property>
+                    <property name="top_attach">2</property>
+                    <property name="bottom_attach">3</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                    <property name="x_padding">5</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkEntry" id="month_entry">
+                  <widget class="GtkLabel" id="label19">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="text" translatable="yes">*</property>
-                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Hour:</property>
                   </widget>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="right_attach">2</property>
-                    <property name="top_attach">3</property>
-                    <property name="bottom_attach">4</property>
+                    <property name="top_attach">1</property>
+                    <property name="bottom_attach">2</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                    <property name="x_padding">5</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkEntry" id="day_entry">
+                  <widget class="GtkLabel" id="label18">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="text" translatable="yes">*</property>
-                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Minute:</property>
                   </widget>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="right_attach">2</property>
-                    <property name="top_attach">2</property>
-                    <property name="bottom_attach">3</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                    <property name="x_padding">5</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkEntry" id="hour_entry">
+                  <widget class="GtkLabel" id="label25">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="text" translatable="yes">*</property>
-                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Month:</property>
                   </widget>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="right_attach">2</property>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
+                    <property name="top_attach">3</property>
+                    <property name="bottom_attach">4</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                    <property name="x_padding">5</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkEntry" id="minute_entry">
+                  <widget class="GtkLabel" id="label26">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="text" translatable="yes">0</property>
-                    <signal name="changed" handler="on_anyadvanced_entry_changed"/>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Weekday:</property>
                   </widget>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="right_attach">2</property>
+                    <property name="top_attach">4</property>
+                    <property name="bottom_attach">5</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                    <property name="x_padding">5</property>
                   </packing>
                 </child>
               </widget>
@@ -1365,83 +1122,392 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">False</property>
-                    <property name="position">2</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">6</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="GtkDialog" id="setuserWindow">
+    <property name="title" translatable="yes">Change User</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="setuser_dialog_vbox">
+        <property name="visible">True</property>
+        <property name="spacing">12</property>
+        <child>
+          <widget class="GtkHBox" id="setuser_hbox">
+            <property name="visible">True</property>
+            <property name="border_width">12</property>
+            <property name="spacing">12</property>
+            <child>
+              <widget class="GtkImage" id="setuser_image">
+                <property name="visible">True</property>
+                <property name="yalign">0</property>
+                <property name="stock">gtk-dialog-authentication</property>
+                <property name="icon_size">6</property>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkVBox" id="setuser_vbox">
+                <property name="visible">True</property>
+                <property name="spacing">12</property>
+                <child>
+                  <widget class="GtkLabel" id="setuser_label">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Choose the user whose tasks you want to modify&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkAlignment" id="alignment5">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="left_padding">12</property>
+                    <child>
+                      <widget class="GtkHBox" id="setuser_combobox_hbox">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <widget class="GtkLabel" id="setuser_combobox_label">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">_User:</property>
+                            <property name="use_underline">True</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkVBox" id="setuser_combobox_vbox">
+                            <property name="visible">True</property>
+                            <property name="homogeneous">True</property>
+                            <child>
+                              <widget class="GtkComboBoxEntry" id="entUser">
+                                <property name="visible">True</property>
+                                <child internal-child="entry">
+                                  <widget class="GtkEntry" id="comboboxentry-entry1"/>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                              </packing>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="setuser_dialog_action_area">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="setuser_cancel_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-6</property>
+                <signal name="clicked" handler="on_setuser_cancel_button_clicked"/>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkButton" id="setuser_ok_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-ok</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-5</property>
+                <signal name="clicked" handler="on_setuser_ok_button_clicked"/>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+  <widget class="GtkDialog" id="addWindow">
+    <property name="border_width">12</property>
+    <property name="title" translatable="yes">Add a Scheduled Task</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="select_dialog_vbox">
+        <property name="visible">True</property>
+        <property name="spacing">12</property>
+        <child>
+          <widget class="GtkHBox" id="select_hbox">
+            <property name="visible">True</property>
+            <property name="border_width">12</property>
+            <property name="spacing">12</property>
+            <child>
+              <widget class="GtkImage" id="select_image">
+                <property name="visible">True</property>
+                <property name="yalign">0</property>
+                <property name="stock">gtk-dialog-question</property>
+                <property name="icon_size">6</property>
+              </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkVBox" id="select_vbox">
+                <property name="visible">True</property>
+                <property name="spacing">12</property>
+                <child>
+                  <widget class="GtkLabel" id="select_label">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="ypad">5</property>
+                    <property name="label" translatable="yes">&lt;b&gt;Select the type of the scheduled task:&lt;/b&gt;</property>
+                    <property name="use_markup">True</property>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkAlignment" id="select_radio_alignment">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <child>
+                      <widget class="GtkVBox" id="select_vbox">
+                        <property name="visible">True</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <widget class="GtkButton" id="button_crontab">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="response_id">0</property>
+                            <signal name="clicked" handler="on_button_crontab_clicked"/>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </widget>
+                        </child>
+                        <child>
+                          <widget class="GtkButton" id="button_at">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="response_id">0</property>
+                            <signal name="clicked" handler="on_button_at_clicked"/>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkButton" id="button_templates">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="response_id">0</property>
+                            <signal name="clicked" handler="on_button_templates_clicked"/>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
                   </packing>
                 </child>
               </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
             </child>
           </widget>
           <packing>
             <property name="expand">False</property>
             <property name="fill">False</property>
-            <property name="position">6</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="select_dialog_action_area">
+            <property name="visible">True</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <widget class="GtkButton" id="select_cancel_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">-6</property>
+                <signal name="clicked" handler="on_select_cancel_button_clicked"/>
+              </widget>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
           </packing>
         </child>
       </widget>
     </child>
   </widget>
-  <widget class="GtkWindow" id="cal_window">
-    <property name="can_focus">True</property>
-    <property name="can_default">True</property>
-    <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
-    <property name="type">GTK_WINDOW_POPUP</property>
+  <widget class="GtkWindow" id="crontabEditorHelper">
+    <property name="border_width">12</property>
+    <property name="title" translatable="yes">Time expression help</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
     <property name="skip_taskbar_hint">True</property>
     <property name="skip_pager_hint">True</property>
-    <property name="decorated">False</property>
-    <property name="deletable">False</property>
-    <signal name="focus_out_event" handler="on_cal_lost_focus"/>
-    <signal name="delete_event" handler="on_cal_window_destroy"/>
     <child>
-      <widget class="GtkCalendar" id="calendar">
-        <property name="visible">True</property>
-        <property name="can_focus">True</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-        <property name="year">2007</property>
-        <property name="month">10</property>
-        <property name="day">21</property>
-        <signal name="month_changed" handler="on_cal_day_selected"/>
-        <signal name="day_selected_double_click" handler="on_cal_day_selected_dc"/>
-        <signal name="day_selected" handler="on_cal_day_selected"/>
-        <signal name="prev_year" handler="on_cal_day_selected"/>
-        <signal name="next_year" handler="on_cal_day_selected"/>
-      </widget>
-    </child>
-  </widget>
-  <widget class="GtkDialog" id="at_editor">
-    <property name="events">GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_FOCUS_CHANGE_MASK | GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_PROXIMITY_IN_MASK | GDK_PROXIMITY_OUT_MASK | GDK_SUBSTRUCTURE_MASK | GDK_SCROLL_MASK</property>
-    <property name="border_width">12</property>
-    <property name="title">Edit a one-time task</property>
-    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
-    <property name="default_width">430</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <property name="has_separator">False</property>
-    <signal name="event" handler="on_at_editor_size_changed"/>
-    <signal name="delete_event" handler="on_at_editor_delete"/>
-    <signal name="set_focus" handler="on_cal_lost_focus"/>
-    <child internal-child="vbox">
-      <widget class="GtkVBox" id="at_dialog_vbox">
+      <widget class="GtkVBox" id="vbox5">
         <property name="visible">True</property>
         <property name="spacing">12</property>
         <child>
-          <widget class="GtkVBox" id="vbox8">
+          <widget class="GtkTable" id="table4">
             <property name="visible">True</property>
-            <property name="spacing">6</property>
+            <property name="n_rows">9</property>
+            <property name="column_spacing">5</property>
+            <property name="row_spacing">1</property>
             <child>
-              <widget class="GtkHBox" id="title_box">
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <widget class="GtkAlignment" id="alignment4">
                 <property name="visible">True</property>
-                <property name="spacing">6</property>
-                <child>
-                  <placeholder/>
-                </child>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="left_padding">36</property>
                 <child>
-                  <widget class="GtkVBox" id="vbox14">
+                  <widget class="GtkHBox" id="hbox6">
                     <property name="visible">True</property>
                     <property name="spacing">6</property>
                     <child>
-                      <widget class="GtkLabel" id="label1">
+                      <widget class="GtkLabel" id="lblExpression">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">Task description:</property>
+                        <property name="label" translatable="yes">Expression:</property>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
@@ -1449,529 +1515,476 @@
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkEntry" id="at_entry_title">
+                      <widget class="GtkEntry" id="entExpression">
+                        <property name="width_request">70</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <signal name="changed" handler="on_at_entry_title_changed"/>
+                        <property name="width_chars">8</property>
+                        <signal name="changed" handler="on_entExpression_changed"/>
                       </widget>
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">False</property>
+                        <property name="pack_type">GTK_PACK_END</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
                   </widget>
-                  <packing>
-                    <property name="padding">5</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </widget>
               <packing>
-                <property name="expand">False</property>
-                <property name="padding">5</property>
+                <property name="top_attach">8</property>
+                <property name="bottom_attach">9</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkVBox" id="at_vbox_time">
+              <widget class="GtkAlignment" id="alignment3">
                 <property name="visible">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="left_padding">36</property>
                 <child>
-                  <widget class="GtkLabel" id="label2">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Execute at:</property>
-                  </widget>
-                </child>
-                <child>
-                  <widget class="GtkTable" id="table3">
+                  <widget class="GtkHBox" id="hbox5">
                     <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="n_rows">2</property>
-                    <property name="n_columns">7</property>
-                    <property name="column_spacing">5</property>
-                    <property name="row_spacing">5</property>
-                    <child>
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
+                    <property name="spacing">6</property>
                     <child>
-                      <widget class="GtkSpinButton" id="at_spin_minute">
+                      <widget class="GtkLabel" id="lblFixEntity">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="adjustment">1 0 60 1 10 10</property>
-                        <property name="climb_rate">1</property>
-                        <signal name="value_changed" handler="on_at_spin_minute_changed"/>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">Minute:</property>
                       </widget>
                       <packing>
-                        <property name="left_attach">3</property>
-                        <property name="right_attach">4</property>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label5">
+                      <widget class="GtkEntry" id="entFix">
+                        <property name="width_request">40</property>
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">:</property>
+                        <property name="can_focus">True</property>
+                        <property name="width_chars">3</property>
+                        <signal name="changed" handler="on_entFix_changed"/>
                       </widget>
                       <packing>
-                        <property name="left_attach">2</property>
-                        <property name="right_attach">3</property>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
-                        <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="pack_type">GTK_PACK_END</property>
+                        <property name="position">1</property>
                       </packing>
                     </child>
+                  </widget>
+                </child>
+              </widget>
+              <packing>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkAlignment" id="alignment2">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="left_padding">36</property>
+                <child>
+                  <widget class="GtkTable" id="table1">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="n_rows">2</property>
+                    <property name="n_columns">2</property>
+                    <property name="column_spacing">6</property>
+                    <property name="row_spacing">6</property>
                     <child>
-                      <widget class="GtkSpinButton" id="at_spin_hour">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="adjustment">0 0 24 1 10 10</property>
-                        <property name="climb_rate">1</property>
-                        <signal name="value_changed" handler="on_at_spin_hour_changed"/>
+                      <widget class="GtkEntry" id="entRangeEnd">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="width_chars">3</property>
+                        <signal name="changed" handler="on_entRangeEnd_changed"/>
                       </widget>
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
                         <property name="top_attach">1</property>
                         <property name="bottom_attach">2</property>
+                        <property name="x_options">GTK_EXPAND</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkSpinButton" id="at_spin_day">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="adjustment">1 1 31 1 10 10</property>
-                        <property name="climb_rate">1</property>
-                        <signal name="value_changed" handler="on_at_spin_day_changed"/>
-                      </widget>
-                      <packing>
-                        <property name="left_attach">5</property>
-                        <property name="right_attach">6</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkLabel" id="label10">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="label">-</property>
-                        <property name="width_chars">0</property>
-                      </widget>
-                      <packing>
-                        <property name="left_attach">4</property>
-                        <property name="right_attach">5</property>
-                        <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkSpinButton" id="at_spin_month">
+                      <widget class="GtkLabel" id="lblRangeEnd">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="adjustment">1 1 12 1 10 10</property>
-                        <property name="climb_rate">1</property>
-                        <signal name="value_changed" handler="on_at_spin_month_changed"/>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">To:</property>
+                        <property name="justify">GTK_JUSTIFY_RIGHT</property>
                       </widget>
                       <packing>
-                        <property name="left_attach">3</property>
-                        <property name="right_attach">4</property>
+                        <property name="top_attach">1</property>
+                        <property name="bottom_attach">2</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label8">
+                      <widget class="GtkLabel" id="lblRangeStart">
                         <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="label">-</property>
-                        <property name="width_chars">0</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">From:</property>
+                        <property name="justify">GTK_JUSTIFY_RIGHT</property>
                       </widget>
-                      <packing>
-                        <property name="left_attach">2</property>
-                        <property name="right_attach">3</property>
-                        <property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
-                      </packing>
                     </child>
                     <child>
-                      <widget class="GtkSpinButton" id="at_spin_year">
+                      <widget class="GtkEntry" id="entRangeStart">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="adjustment">2007 2007 4000 1 10 10</property>
-                        <property name="climb_rate">1</property>
-                        <signal name="value_changed" handler="on_at_spin_year_changed"/>
+                        <property name="width_chars">3</property>
+                        <signal name="changed" handler="on_entRangeStart_changed"/>
                       </widget>
                       <packing>
                         <property name="left_attach">1</property>
                         <property name="right_attach">2</property>
+                        <property name="x_options">GTK_EXPAND</property>
                       </packing>
                     </child>
+                  </widget>
+                </child>
+              </widget>
+              <packing>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkAlignment" id="alignment1">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="left_padding">36</property>
+                <child>
+                  <widget class="GtkHBox" id="hbox2">
+                    <property name="visible">True</property>
+                    <property name="spacing">6</property>
                     <child>
-                      <widget class="GtkLabel" id="label4">
+                      <widget class="GtkLabel" id="lblEveryEntity">
                         <property name="visible">True</property>
                         <property name="xalign">0</property>
-                        <property name="xpad">15</property>
-                        <property name="label" translatable="yes">Time:</property>
+                        <property name="label" translatable="yes">Minutes:</property>
                       </widget>
                       <packing>
-                        <property name="top_attach">1</property>
-                        <property name="bottom_attach">2</property>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkLabel" id="label3">
-                        <property name="visible">True</property>
-                        <property name="xalign">0</property>
-                        <property name="xpad">15</property>
-                        <property name="label" translatable="yes">Date:</property>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="GtkAlignment" id="align_cal">
+                      <widget class="GtkEntry" id="entEvery">
+                        <property name="width_request">40</property>
                         <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <child>
-                          <widget class="GtkToggleButton" id="cal_button">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="response_id">0</property>
-                            <signal name="toggled" handler="on_cal_button_toggled"/>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </widget>
-                        </child>
+                        <property name="can_focus">True</property>
+                        <property name="width_chars">3</property>
+                        <signal name="changed" handler="on_entEvery_changed"/>
                       </widget>
                       <packing>
-                        <property name="left_attach">6</property>
-                        <property name="right_attach">7</property>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="pack_type">GTK_PACK_END</property>
+                        <property name="position">1</property>
                       </packing>
                     </child>
                   </widget>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
               </widget>
               <packing>
-                <property name="position">1</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkLabel" id="label6">
+              <widget class="GtkRadioButton" id="radOth">
                 <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Task:</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip" translatable="yes">See "man 5 crontab" for information about the crontab format.</property>
+                <property name="label" translatable="yes">Other</property>
+                <property name="use_underline">True</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_radFix_toggled"/>
               </widget>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">2</property>
+                <property name="top_attach">7</property>
+                <property name="bottom_attach">8</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"></property>
               </packing>
             </child>
             <child>
-              <widget class="GtkScrolledWindow" id="scrolledwindow2">
+              <widget class="GtkRadioButton" id="radFix">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
-                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <property name="shadow_type">GTK_SHADOW_IN</property>
-                <child>
-                  <widget class="GtkTextView" id="at_text_task">
-                    <property name="height_request">244</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="left_margin">5</property>
-                    <property name="right_margin">2</property>
-                    <signal name="popup_menu" handler="on_at_text_task_popup_menu"/>
-                    <signal name="key_release_event" handler="on_at_text_task_key_release_event"/>
-                  </widget>
-                </child>
+                <property name="tooltip" translatable="yes">Execution at a specific minute, hour, day, weekday or month.</property>
+                <property name="label" translatable="yes">At an exact minute</property>
+                <property name="use_underline">True</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+                <property name="group">radOth</property>
+                <signal name="toggled" handler="on_radFix_toggled"/>
               </widget>
               <packing>
-                <property name="position">3</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"></property>
               </packing>
             </child>
-          </widget>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <widget class="GtkHButtonBox" id="at_dialog_action_area">
-            <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
             <child>
-              <widget class="GtkButton" id="at_button_template">
+              <widget class="GtkRadioButton" id="radRange">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label" translatable="yes">Add as template</property>
+                <property name="tooltip" translatable="yes">Execution in a range.</property>
+                <property name="label" translatable="yes">In a range</property>
                 <property name="use_underline">True</property>
                 <property name="response_id">0</property>
-                <signal name="clicked" handler="on_at_button_template_clicked"/>
+                <property name="draw_indicator">True</property>
+                <property name="group">radOth</property>
+                <signal name="toggled" handler="on_radRange_toggled"/>
               </widget>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"></property>
               </packing>
             </child>
             <child>
-              <widget class="GtkButton" id="at_button_cancel">
+              <widget class="GtkRadioButton" id="radAll">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="label">gtk-cancel</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">-6</property>
-                <signal name="clicked" handler="on_at_button_cancel_clicked"/>
+                <property name="tooltip" translatable="yes">Execution at every minute, hour, day, weekday or month.</property>
+                <property name="label" translatable="yes">Every minute</property>
+                <property name="use_underline">True</property>
+                <property name="response_id">0</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+                <property name="group">radOth</property>
+                <signal name="toggled" handler="on_radAll_toggled"/>
               </widget>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"></property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkRadioButton" id="radEvery">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip" translatable="yes">Execution at a step width. For example every five minutes, hours, days, weekdays or months.</property>
+                <property name="label" translatable="yes">In a step width</property>
+                <property name="use_underline">True</property>
+                <property name="response_id">0</property>
+                <property name="draw_indicator">True</property>
+                <property name="group">radOth</property>
+                <signal name="toggled" handler="on_radEvery_toggled"/>
+              </widget>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+                <property name="x_options">GTK_FILL</property>
+                <property name="y_options"></property>
               </packing>
             </child>
+          </widget>
+        </child>
+        <child>
+          <widget class="GtkHButtonBox" id="hbuttonbox3">
+            <property name="visible">True</property>
+            <property name="spacing">6</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <widget class="GtkButton" id="btnCancel">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="label">gtk-cancel</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+                <signal name="clicked" handler="on_btnCancel_clicked"/>
+                <accelerator key="Escape" signal="clicked"/>
+              </widget>
+            </child>
             <child>
-              <widget class="GtkButton" id="at_button_save">
+              <widget class="GtkButton" id="btnOk">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="can_default">True</property>
-                <property name="label">gtk-add</property>
+                <property name="label">gtk-ok</property>
                 <property name="use_stock">True</property>
                 <property name="response_id">0</property>
-                <signal name="clicked" handler="on_at_button_save_clicked"/>
+                <signal name="clicked" handler="on_btnOk_clicked"/>
               </widget>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">2</property>
+                <property name="position">1</property>
               </packing>
             </child>
           </widget>
           <packing>
             <property name="expand">False</property>
             <property name="fill">False</property>
-            <property name="pack_type">GTK_PACK_END</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </widget>
     </child>
   </widget>
-  <widget class="GtkWindow" id="template_manager">
-    <property name="width_request">500</property>
-    <property name="height_request">300</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-    <property name="title" translatable="yes">Manage templates</property>
-    <property name="modal">True</property>
-    <property name="skip_taskbar_hint">True</property>
-    <property name="skip_pager_hint">True</property>
-    <property name="transient_for">mainWindow</property>
+  <widget class="GtkWindow" id="mainWindow">
+    <property name="visible">True</property>
+    <property name="title" translatable="yes">Configure Scheduled Tasks</property>
+    <property name="default_width">700</property>
+    <property name="default_height">400</property>
+    <signal name="delete_event" handler="on_mainWindow_delete_event"/>
+    <signal name="window_state_event" handler="on_mainWindow_window_state_event"/>
     <child>
-      <widget class="GtkVBox" id="vbox2">
+      <widget class="GtkVBox" id="main_vbox">
         <property name="visible">True</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
         <child>
-          <widget class="GtkToolbar" id="toolbar1">
+          <widget class="GtkToolbar" id="toolbar">
             <property name="visible">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <property name="toolbar_style">GTK_TOOLBAR_BOTH_HORIZ</property>
             <child>
-              <widget class="GtkToolButton" id="tm_button_new">
+              <widget class="GtkToolButton" id="prop_button">
                 <property name="visible">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="tooltip" translatable="yes">Create a new template.</property>
+                <property name="tooltip" translatable="yes">Edit a scheduled task</property>
                 <property name="is_important">True</property>
-                <property name="stock_id">gtk-new</property>
-                <signal name="clicked" handler="on_tm_button_new_clicked"/>
+                <property name="stock_id">gtk-edit</property>
+                <signal name="clicked" handler="on_prop_button_clicked"/>
               </widget>
               <packing>
                 <property name="homogeneous">True</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="tm_button_edit">
+              <widget class="GtkToolButton" id="del_button">
                 <property name="visible">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="tooltip" translatable="yes">Edit the selected template</property>
+                <property name="tooltip" translatable="yes">Delete a scheduled task</property>
                 <property name="is_important">True</property>
-                <property name="stock_id">gtk-edit</property>
-                <signal name="clicked" handler="on_tm_button_edit_clicked"/>
+                <property name="stock_id">gtk-delete</property>
+                <signal name="clicked" handler="on_del_button_clicked"/>
               </widget>
               <packing>
                 <property name="homogeneous">True</property>
               </packing>
             </child>
             <child>
-              <widget class="GtkToolButton" id="tm_button_delete">
+              <widget class="GtkToolButton" id="run_button">
                 <property name="visible">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="tooltip" translatable="yes">Delete the selected template</property>
-                <property name="is_important">True</property>
-                <property name="stock_id">gtk-delete</property>
-                <signal name="clicked" handler="on_tm_button_delete_clicked"/>
+                <property name="tooltip_text">Run the selected task</property>
+                <property name="tooltip" translatable="yes">Run selected task</property>
+                <property name="label" translatable="yes">Run task</property>
+                <property name="stock_id">gtk-execute</property>
+                <signal name="clicked" handler="on_run_button_clicked"/>
               </widget>
               <packing>
                 <property name="homogeneous">True</property>
               </packing>
             </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="GtkScrolledWindow" id="scrolledwindow3">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
             <child>
-              <widget class="GtkTreeView" id="tm_treeview">
+              <widget class="GtkToolItem" id="toolitem1">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <signal name="button_press_event" handler="on_tm_treeview_button_press_event"/>
+                <child>
+                  <widget class="GtkVSeparator" id="vseparator1">
+                    <property name="visible">True</property>
+                  </widget>
+                </child>
               </widget>
             </child>
-          </widget>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="GtkHButtonBox" id="tm_hbuttonbox">
-            <property name="visible">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <property name="border_width">5</property>
-            <property name="spacing">5</property>
-            <property name="layout_style">GTK_BUTTONBOX_EDGE</property>
             <child>
-              <widget class="GtkButton" id="tm_button_cancel">
+              <widget class="GtkToolButton" id="button_m_template">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="label">gtk-close</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">0</property>
-                <signal name="clicked" handler="on_tm_button_cancel_clicked"/>
-                <accelerator key="Escape" signal="clicked"/>
+                <property name="tooltip_text">Manage templates</property>
+                <property name="tooltip" translatable="yes">Manage templates</property>
+                <property name="label" translatable="yes">Templates</property>
+                <signal name="clicked" handler="on_button_m_template_clicked"/>
               </widget>
+              <packing>
+                <property name="homogeneous">True</property>
+              </packing>
             </child>
             <child>
-              <widget class="GtkButton" id="tm_button_use">
+              <widget class="GtkToggleToolButton" id="edit_mode_button">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="tooltip" translatable="yes">Create a new task from the selected template</property>
-                <property name="response_id">0</property>
-                <signal name="clicked" handler="on_tm_button_use_clicked"/>
-                <child>
-                  <placeholder/>
-                </child>
+                <property name="tooltip" translatable="yes">Change edit mode</property>
+                <property name="is_important">True</property>
+                <property name="label" translatable="yes">Advanced</property>
+                <property name="use_underline">True</property>
+                <property name="stock_id">gtk-dialog-warning</property>
+                <signal name="clicked" handler="on_edit_mode_button_clicked"/>
               </widget>
               <packing>
-                <property name="position">1</property>
+                <property name="homogeneous">True</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkToolButton" id="btnSetUser">
+                <property name="tooltip" translatable="yes">Choose the user whose tasks you want to modify</property>
+                <property name="is_important">True</property>
+                <property name="label" translatable="yes">Change User</property>
+                <property name="use_underline">True</property>
+                <property name="stock_id">gtk-dialog-authentication</property>
+                <signal name="clicked" handler="on_btnSetUser_clicked"/>
+              </widget>
+              <packing>
+                <property name="homogeneous">True</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkToolButton" id="help_button">
+                <property name="visible">True</property>
+                <property name="tooltip" translatable="yes">Show help</property>
+                <property name="stock_id">gtk-help</property>
+                <signal name="clicked" handler="on_help_button_clicked"/>
+              </widget>
+              <packing>
+                <property name="homogeneous">True</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkToolButton" id="about_button">
+                <property name="visible">True</property>
+                <property name="tooltip" translatable="yes">About Gnome-schedule</property>
+                <property name="stock_id">gtk-about</property>
+                <signal name="clicked" handler="on_about_menu_activate"/>
+              </widget>
+              <packing>
+                <property name="homogeneous">True</property>
               </packing>
             </child>
           </widget>
           <packing>
             <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="padding">5</property>
-            <property name="position">2</property>
           </packing>
         </child>
-      </widget>
-    </child>
-  </widget>
-  <widget class="GtkWindow" id="template_chooser">
-    <property name="width_request">450</property>
-    <property name="height_request">300</property>
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-    <property name="title" translatable="yes">Choose template</property>
-    <property name="modal">True</property>
-    <property name="skip_taskbar_hint">True</property>
-    <property name="skip_pager_hint">True</property>
-    <property name="transient_for">template_manager</property>
-    <child>
-      <widget class="GtkVBox" id="vbox4">
-        <property name="visible">True</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
         <child>
-          <widget class="GtkHBox" id="hbox9">
+          <widget class="GtkScrolledWindow" id="main_scrolledwindow">
             <property name="visible">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+            <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
             <child>
-              <widget class="GtkScrolledWindow" id="scrolledwindow5">
+              <widget class="GtkTreeView" id="treeview">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <child>
-                  <widget class="GtkTreeView" id="tc_treeview">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <signal name="button_press_event" handler="on_tc_treeview_button_press_event"/>
-                  </widget>
-                </child>
+                <property name="tooltip" translatable="yes">Scheduled and active tasks</property>
+                <signal name="button_press_event" handler="on_treeview_button_press_event"/>
+                <signal name="key_press_event" handler="on_treeview_key_press_event"/>
               </widget>
             </child>
           </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
         </child>
         <child>
-          <widget class="GtkHButtonBox" id="hbuttonbox5">
+          <widget class="GtkStatusbar" id="statusbar">
             <property name="visible">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <property name="border_width">5</property>
-            <property name="spacing">5</property>
-            <property name="layout_style">GTK_BUTTONBOX_EDGE</property>
-            <child>
-              <widget class="GtkButton" id="tc_button_cancel">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="label">gtk-close</property>
-                <property name="use_stock">True</property>
-                <property name="response_id">0</property>
-                <signal name="clicked" handler="on_tc_button_cancel_clicked"/>
-                <accelerator key="Escape" signal="clicked"/>
-              </widget>
-            </child>
-            <child>
-              <widget class="GtkButton" id="tc_button_use">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="tooltip" translatable="yes">Create a new task from the selected template</property>
-                <property name="response_id">0</property>
-                <signal name="clicked" handler="on_tc_button_use_clicked"/>
-                <child>
-                  <placeholder/>
-                </child>
-              </widget>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
           </widget>
           <packing>
             <property name="expand">False</property>
             <property name="fill">False</property>
-            <property name="padding">5</property>
-            <property name="position">1</property>
+            <property name="pack_type">GTK_PACK_END</property>
+            <property name="position">4</property>
           </packing>
         </child>
       </widget>

Modified: branches/x-output-support/src/template.py
==============================================================================
--- branches/x-output-support/src/template.py	(original)
+++ branches/x-output-support/src/template.py	Sun Dec 14 00:00:45 2008
@@ -48,6 +48,7 @@
 		
 		self.gconf_client.unset("/apps/gnome-schedule/templates/at/%s/title" % (str (template_id)))
 		self.gconf_client.unset("/apps/gnome-schedule/templates/at/%s/command" % (str (template_id)))
+		self.gconf_client.unset ("/apps/gnome-schedule/templates/at/%s/output" % (str (template_id)))
 			
 		if newstring == "   ":
 			self.gconf_client.unset ("/apps/gnome-schedule/templates/at/installed")
@@ -145,7 +146,8 @@
 			try:
 				command = self.gconf_client.get_string("/apps/gnome-schedule/templates/at/%s/command" % (str (template_id)))
 				title = self.gconf_client.get_string("/apps/gnome-schedule/templates/at/%s/title" % (str (template_id)))
-				return template_id, title, command
+				output = self.gconf_client.get_int ("/apps/gnome-schedule/templates/at/%s/output" % (str (template_id)))
+				return template_id, title, command, output
 	
 			except Exception, ex:
 				return False
@@ -160,13 +162,16 @@
 			self.gconf_client.set_int ("/apps/gnome-schedule/templates/at/last_id", i)
 			return i	
 
-	def savetemplate_at (self, template_id, title, command):
+	def savetemplate_at (self, template_id, title, command, output):
+		print "savetemplate"
 
 		if (template_id == 0):
 			template_id = self.create_new_id_at ()
+			print "got new id"
 			
 		self.gconf_client.set_string("/apps/gnome-schedule/templates/at/%s/title" % (str (template_id)), title)
 		self.gconf_client.set_string("/apps/gnome-schedule/templates/at/%s/command" % (str (template_id)), command)
+		self.gconf_client.set_int ("/apps/gnome-schedule/templates/at/%s/output" % ( str(template_id)), output)
 
 		
 		installed = self.gconf_client.get_string("/apps/gnome-schedule/templates/at/installed")
@@ -187,9 +192,13 @@
 		self.parent.template_manager.reload_tv ()
 		self.parent.template_chooser.reload_tv ()
 		
-	def format_at (self, title, command):
+	# TODO: output
+	def format_at (self, title, command, output):
 		command = self.parent.at.__make_preview__ (command, 0)
 		s = "<b>" + _("Title:") + "</b> " + title + "\n<b>" + _("Command:") + "</b> " + command
+		if output > 0:
+			s = (s + " <i>(%s)</i>") % (str (self.parent.output_strings [2]))
+
 		return s
 		
 	def format_crontab (self, title, command, output, timeexpression):
@@ -202,7 +211,7 @@
 
 		s = "<b>" + _("Title:") + "</b> " + title + "\n<b>" + _("Run:") + "</b> " + timeexpression + "\n<b>" + _("Command:") + "</b> " + command
 
-		if output:
-			s = (s + " <i>(" + "%s"  + ")</i>") % (str (self.parent.output_strings[output]))
+		if output > 0:
+			s = (s + " <i>(%s)</i>") % (str (self.parent.output_strings[output]))
 		
 		return s

Modified: branches/x-output-support/src/template_chooser.py
==============================================================================
--- branches/x-output-support/src/template_chooser.py	(original)
+++ branches/x-output-support/src/template_chooser.py	Sun Dec 14 00:00:45 2008
@@ -92,8 +92,8 @@
 			for id in at:
 				t = self.template.gettemplate ("at", int (id))
 				if t != False:
-					id2, title, command = t
-					formatted = self.template.format_at (title, command)
+					id2, title, command, output = t
+					formatted = self.template.format_at (title, command, output)
 					iter = self.treemodel.append ([int (id), "at", _("One-time"), formatted, self.parent.bigiconat])
 
 		crontab = self.template.gettemplateids ("crontab")
@@ -126,8 +126,8 @@
 			if type == "at":
 				t = self.template.gettemplate ("at", int (id))	
 				if t != False:
-					id2, title, command = t
-					self.parent.at_editor.showadd_template (self.transient, title, command)
+					id2, title, command, output = t
+					self.parent.at_editor.showadd_template (self.transient, title, command, output)
 			elif type == "crontab":
 				t = self.template.gettemplate ("crontab", int (id))
 				if t != False:

Modified: branches/x-output-support/src/template_manager.py
==============================================================================
--- branches/x-output-support/src/template_manager.py	(original)
+++ branches/x-output-support/src/template_manager.py	Sun Dec 14 00:00:45 2008
@@ -97,8 +97,8 @@
 			for id in at:
 				t = self.template.gettemplate ("at", int (id))
 				if t != False:
-					id2, title, command = t
-					formatted = self.template.format_at (title, command)
+					id2, title, command, output = t
+					formatted = self.template.format_at (title, command, output)
 					iter = self.treemodel.append ([int (id), "at", _("One-time"), formatted, self.parent.bigiconat])
 
 		crontab = self.template.gettemplateids ("crontab")
@@ -165,8 +165,8 @@
 			if type == "at":
 				t = self.template.gettemplate ("at", int (id))	
 				if t != False:
-					id2, title, command = t
-					self.parent.at_editor.showadd_template (self.widget, title, command)
+					id2, title, command, output = t
+					self.parent.at_editor.showadd_template (self.widget, title, command, output)
 			elif type == "crontab":
 				t = self.template.gettemplate ("crontab", int (id)	)
 				if t != False:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]