Index: palm/trunk/SCRIPTS/palmrungui
===================================================================
--- palm/trunk/SCRIPTS/palmrungui	(revision 4469)
+++ palm/trunk/SCRIPTS/palmrungui	(revision 4470)
@@ -25,4 +25,7 @@
 # -----------------
 # $Id$
+# Added file size output, more I/O functionalities, new/removed buttons
+# 
+# 4428 2020-02-27 11:43:53Z maronga
 # Bugfix for update button
 # 
@@ -96,5 +99,6 @@
 import shutil
 
-
+global update_frequency
+update_frequency = 5*60000
 
 # Determine PALM directories
@@ -103,4 +107,5 @@
    palm_dir = os.getcwd()
    palm_bin = palm_dir + '/trunk/SCRIPTS'
+   palm_source = palm_dir + '/trunk/SOURCE'
    job_dir = palm_dir + '/JOBS'
    user_dir = palm_dir + '/USER_CODE'
@@ -113,4 +118,15 @@
 
 
+# returns the human readable file size of filename
+def file_size(filename, suffix='B'):
+   size_raw = os.stat(filename).st_size
+   for unit in [' ',' K',' M',' G',' T']:
+      if abs(size_raw) < 1024.0:
+         return "%i%s%s" % (size_raw, unit, suffix)
+      size_raw /= 1024.0
+   return "%.1f%s%s" % (num, 'Y', suffix)
+
+
+
 palmrunline = ""
 set_list = []
@@ -135,5 +151,13 @@
         self.setupUi(self)
     
-        self.palm_logo.setPixmap(QtGui.QPixmap(palm_dir + "/trunk/SCRIPTS/palmrungui_files/logo.png"))        
+        self.palm_logo.setPixmap(QtGui.QPixmap(palm_bin + "/palmrungui_files/logo.png"))        
+        
+        with open(palm_bin + "/palmrungui") as search:
+           for line in search:
+              line = line.rstrip()
+              if "$Id" in line:
+                 version = "Version: r" + line.split(" ")[3] + " (" + line.split(" ")[4] + ")"
+                 self.groupBox.findChild(QtGui.QLabel,"label_version").setText(version)
+                 break
         
         self.recent_jobs(50)
@@ -176,10 +200,26 @@
 
 
-
-    
         QtGui.QApplication.processEvents()
 
 
-        
+        # Start refresh timer. On timeout perform update
+        self.timer = QtCore.QTimer(self)
+        self.timer.timeout.connect(self.update_all)
+        self.timer.setSingleShot(False)
+        self.timer.start(update_frequency)
+
+        # The timetimer counts the time since last update
+        self.timetimer= QtCore.QElapsedTimer()
+        self.timetimer.start()
+
+        # The labeltimer induces the update of the remaining time in the UI
+        self.labeltimer = QtCore.QTimer(self)
+        self.labeltimer.timeout.connect(self.UpdatePush)
+        self.labeltimer.setSingleShot(False)
+
+        # Update in the UI will be performed at each 1/10 of the update interval
+        self.labeltimer.start(update_frequency/10)
+        self.push_update.setText("Update (" + str(int(update_frequency/1000/60)) + " min)")
+
     # starts xterm with palmrun commandline
     #######################################
@@ -200,31 +240,34 @@
         self.groupBox.findChild(QtGui.QPushButton,"button_start").setText("wait...")      
         self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText("Executing palmrun in xterm...")        
-        
+
         # Wait until all commands have been executed (ugly) ?
         #for i in range(0,21):
         #    qApp->processEvents()       
-        
+
         # Start xterm as QProcess
         palmrun = QProcess()
         palmrun.setProcessChannelMode(QProcess.MergedChannels) # mergedChannels
         palmrun.setWorkingDirectory(palm_dir)
-    
+
         geomet = self.frameGeometry()
-        
+
         posx = geomet.x()+geomet.width()
         posy = geomet.y()
-      
-        s = " -title \"Executing palmrun...\" -fa \"Monospace\" -fs 11 -geometry \"80x38+%d+%d\" -e \"" % (posx,posy)
-        palmrunline = "%s%s;echo -n '--> Press enter to continue...';read yesno\"</dev/stdin" % (s, palmrunline.replace("\"","\'"))
-        
+
+        if ( os.path.isfile("palmrungui.log") ):
+           os.remove("palmrungui.log")
+
+        s = " -title \"Executing palmrun...\" -fa \"Monospace\" -l -lf \"palmrungui.log\" -fs 11 -geometry \"80x38+%d+%d\" -e \"" % (posx,posy)
+        palmrunline = "%s%s ;echo -n '--> Press enter to continue...';read yesno\"</dev/stdin" % (s, palmrunline.replace("\"","\'"))
+
         mString = "xterm %s" % (palmrunline)
         palmrun.start(mString)
-    
+
         if( palmrun.waitForStarted() is False ):
             return
-        
+
         # Wait until palmrun has finished or wait for 200 minutes
         palmrun.waitForFinished(3600000)        
-        
+
         # Jobs has been submitted or aborted. Continuing...
         # Save the palmrun command to history file
@@ -249,12 +292,24 @@
         
         
-        
+       
+    # Update the label
+    def UpdatePush(self):
+        remaining_time = (update_frequency - self.timetimer.elapsed()) / 1000 / 60
+        self.push_update.setText("Update (" + str(remaining_time) + " min)")
+
+
     # starts xterm with palmbuild commandline
     #######################################
     def startpalmbuild(self):
         palmbuildline = 'palmbuild -c ' + str(self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").currentText())
-        
+
+        full_build = self.group_execution.findChild(QtGui.QCheckBox,"check_rebuild").checkState()
+
+        if ( full_build == 2 ):
+           for filename in os.listdir(palm_source):
+              os.utime(palm_source + "/" + filename, None)
+
         palmrunline_save = str(self.groupBox.findChild(QtGui.QLineEdit,"commandline").text())
-        
+
         # Disable the main window
         palmbuildline_save = palmbuildline
@@ -312,5 +367,5 @@
         else:
             return
-        
+
         file = open(fileDir,"r")
         history = file.readlines()
@@ -330,12 +385,20 @@
             listitem = history[i][17:len(history[i])-1]
             tagitem = listitem
+            configitem = listitem
             matchitems = list_jobname.findItems(listitem, QtCore.Qt.MatchExactly)
 
             if ( len(matchitems) == 0 ):
                 listitem = filter(None,listitem.split(" -r"))[1]
-                listitem = filter(None,listitem.split(" -"))[0]
-                listitem = listitem.replace(" ","") 
+                listitem = listitem.strip()
+                listitem = filter(None,listitem.split(" "))[0]
+                listitem = listitem.replace("\"","") 
                 list_jobname.addItem(listitem)
-                s = "%s: %s" % (timestamp,listitem)
+                
+                configitem = filter(None,configitem.split(" -c"))[1]
+                configitem = configitem.strip()
+                configitem = filter(None,configitem.split(" "))[0]
+                configitem = configitem.replace("\"","") 
+
+                s = "%s: %s (%s)" % (timestamp,listitem,configitem)
                 tmphistory.append(s)
                 
@@ -384,8 +447,8 @@
         list_jobname = self.group_history.findChild(QtGui.QListWidget,"list_jobname")
         filename = str(list_jobname.currentItem().text())
-            
+
         timestamp = filename[:16]
-        jobname = filename[18:]
-                
+        jobname = filename[18:].split(" ")[0]
+
         itemint = list_jobname.currentRow()
 
@@ -415,6 +478,7 @@
             listitem = history[i-1][17:len(history[i-1])-1]
             listitem = filter(None,listitem.split(" -r"))[1]
-            listitem = filter(None,listitem.split(" -"))[0]
-            listitem = listitem.replace(" ","")  
+            listitem = listitem.strip()
+            listitem = filter(None,listitem.split(" "))[0]
+            listitem = listitem.replace("\"","") 
 
             # Select command line with correct timestamp and jobname
@@ -509,29 +573,4 @@
             else:
 
-                # Check if _p3dr file is available, otherwise notice user
-                drop_job = self.group_execution.findChild(QtGui.QComboBox,"drop_job").currentText()
-                if ( self.group_execution.findChild(QtGui.QCheckBox,"check_restarts").checkState() == 2 or 
-                     drop_job == "Restart run" or drop_job == "Restart run (coupled atmosphere ocean)"     ):
-
-                    jobname = self.group_execution.findChild(QtGui.QLineEdit, "line_jobname").text()
-                    restartfile = "%s/JOBS/%s/INPUT/%s_p3dr" % (palm_dir,jobname,jobname)
-
-                    if (os.path.exists(restartfile) == True):                  
-                        self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("")
-               
-
-                        if ( drop_job == "Restart run (coupled atmosphere ocean)" ):
-		            restartfileo = "%s/JOBS/%s/INPUT/%s_p3dor" % (palm_dir,jobname,jobname)
-                            if (os.path.exists(restartfileo) == True):                  
-                                self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("hooo")
-                  
-                            else:       
-                                self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("<font color='red'>Warning: No p3dor file found!</font>")   
-               
-                    else:       
-                        self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("<font color='red'>Warning: No p3dr file found!</font>")
-         
-               
-                        
                 self.group_execution.setEnabled(True)
                 self.drop_job.setEnabled(True)
@@ -577,17 +616,5 @@
             if (status_restarts == 2):
                 param[0]="%s restart" % (param[0])
-    
-                # Check if _p3dr file is available, otherwise notice user
-                if (status_restarts == 2):
-                    jobname = str(self.group_execution.findChild(QtGui.QLineEdit, "line_jobname").text())
-                    restartfile = "%s/JOBS/%s/INPUT/%s_p3dr" % (palm_dir,jobname,jobname)
-                    if (os.path.exists(restartfile) == True):                   
-                        self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("")
-                   
-                    else:                   
-                        self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("<font color='red'>Warning: No p3dr file found!</font>")
-
-            else:  
-                self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("")
+
 
             status_cycfill = self.group_execution.findChild(QtGui.QCheckBox,"check_cycfill").checkState()
@@ -831,25 +858,5 @@
         self.load_jobs()
         
-    # Safes current commandline and user Parameters to .sav file
-    #################################################################################
-    def save_to_file(self):
-        user_string = self.group_advanced.findChild(QtGui.QLineEdit,"line_user").text()
-        cmd_string = self.groupBox.findChild(QtGui.QLineEdit,"commandline").text()
-        
-        string_to_file = cmd_string
-        if (user_string != ""): 
-            string_to_file = "%s%s" % (string_to_file,user_string)
-            
-        #filename = QtGui.QInputDialog.getText(self, "Save File naming Dialog", "Insert filename", QtGui.QLineEdit.Normal)
-        filename = str(QtGui.QFileDialog.getSaveFileName(self, "Save File","filename.sav"))
-        extension = ".sav"
-        filename = "%s%s" % (filename, "")
-        tmstamp = strftime("%Y/%m/%d %H:%M")
-        
-        file = open(filename,"w")
-        s = "%s %s" % (tmstamp, string_to_file)
-        file.write(s)
-        file.close()
-        
+
     # Safes current commandline and user parameters to default file
     ################################################################################
@@ -932,5 +939,5 @@
                 
             elif ( parameter == "c"):
-                tmpindex = self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").findText(options,QtCore.Qt.MatchExactly)
+                tmpindex = self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").findText(options.strip(),QtCore.Qt.MatchExactly)
                 if tmpindex != -1: 
                    self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").setCurrentIndex(tmpindex)
@@ -1050,13 +1057,5 @@
                     if (options_all == "restart"):
                         self.group_execution.findChild(QtGui.QCheckBox,"check_restarts").setChecked(True) 
-                        # Check if _pdf file is available, otherwise notice user
-                        jobname = str(self.group_execution.findChild(QtGui.QLineEdit,"line_jobname").text()) 
-                        
-                        restartfile = "%sJOBS/%s/INPUT/%s_p3dr" % (palm_dir,jobname,jobname)
-                        if (os.path.exists(restartfile) == True):   
-                            self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("") 
-                       
-                        else:
-                            self.group_execution.findChild(QtGui.QLabel,"label_restart").setText("<font color='red'>Warning: No p3dr file \found!</font>") 
+
                     j = j+1
 
@@ -1100,55 +1099,45 @@
             self.group_advanced.setEnabled(True) 
             self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setEnabled(True)
-         
+
+
         self.tabWidget.setCurrentIndex(0)
-         
-    # open saved commandline
-    ##################################
+
+
+    ## Open from history
+    ###################################
     def open_from_file(self):
-        
-        # Select filename and open it
-        filename = QtGui.QFileDialog.getOpenFileName(self, "Open File","Save files (*.sav)") 
-        
-        if ( filename != ""):
-            file = open(filename, "r")
-          
-            if ( file is not None ):
-                # File opened successfully
-                palmrunline = file.read()
-                file.close() 
-    
-            # In case a palmrunline was found, load it to mainwindow
-            if ( palmrunline != ""):
-                palmrunline = palmrunline[17:] 
-                self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(palmrunline) 
-                self.setup_gui(palmrunline)
-         
-    # open saved commandline   
-    ##################################
-    def open_last(self): 
-        # Select filename and open it
-        filename = "%s/.palmrungui.history" % (palm_dir)
-        
-        if os.path.exists(filename):
-            pass
-        else:
-            return
-        
-        file = open(filename, "r")  
-        if ( file is not None ):
-            # File opened successfully
-            lines = file.readlines()
-            palmrunline = lines[len(lines)-1]
-            palmrunline = palmrunline[:len(palmrunline)-1]
-            file.close() 
-
-        # In case a palmrunline was found, load it to mainwindow
-        if ( palmrunline != ""):
-            palmrunline = palmrunline[17:len(palmrunline)] 
-            self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(palmrunline) 
-            self.setup_gui(palmrunline)        
-
+
+#      Show History
+       opt = OpenHistoryBox()
+       opt.exec_()
+
+       palmrunline = str(history_entry)
+       palmrunline = palmrunline[17:]
+       palmrunline = palmrunline[:len(palmrunline)-1]
+       palmrunline = filter(None,palmrunline.split("("))[0]
+       self.groupBox.findChild(QtGui.QLineEdit,"commandline").setText(palmrunline)
+
+#      Set selected item to jobname in "available jobs" list
+       jobname = str(history_entry[17:])
+       jobname = filter(None,jobname.split(" -r"))[1]
+       jobname = jobname.strip()
+       jobname = filter(None,jobname.split(" "))[0]
+       jobname = jobname.replace("\"","") 
+       item2int = self.list_jobs.findItems(jobname,QtCore.Qt.MatchCaseSensitive)
+
+       if ( item2int != [] ):
+          self.list_jobs.setCurrentItem(item2int[0])
+          self.update_input()
+
+#      Add tooltip tag
+       tag = str(history_entry).split('\n')[0]
+       tag = filter(None,tag.split("("))[1]
+       tag = tag.replace(")","")
+       self.groupBox.findChild(QtGui.QLineEdit,"line_tag").setText(tag)
  
-   
+#      Process palmrungui to set up gui controls
+       self.setup_gui(palmrunline)
+
+
     def update_all(self):
  
@@ -1162,4 +1151,5 @@
        self.update_input()
 
+
     # Load jobs into list
     def load_jobs(self):
@@ -1173,7 +1163,4 @@
 
        self.list_jobs.clear() 
-       self.push_copy.setEnabled(False)
-       self.push_create_set.setEnabled(False)      
-      
        self.line_path.setText(job_dir + "/")
        
@@ -1197,4 +1184,7 @@
     # Update input and user code lists
     def update_input(self):
+
+       self.labeltimer.stop() 
+
       
        self.list_input.clear() 
@@ -1202,6 +1192,4 @@
        self.list_monitoring.clear()
        self.list_output.clear()
-       self.push_copy.setEnabled(True)
-       self.push_create_set.setEnabled(True)
        
        jobitem = self.list_jobs.currentItem()
@@ -1219,5 +1207,5 @@
              
                 if ( os.path.isfile(tmp_file) ):
-                   self.list_input.addItem(str(list_of_files[i]))
+                   self.list_input.addItem(str(list_of_files[i]) + " (" + file_size(tmp_file) + ")")
   
           job_to_show = job_dir + "/" + jobitem.text() + "/USER_CODE"
@@ -1243,26 +1231,31 @@
 
                 if ( os.path.isfile(tmp_file) ):
-                   self.list_monitoring.addItem(str(list_of_files[i]))
+                   self.list_monitoring.addItem(str(list_of_files[i]) + " (" + file_size(tmp_file) + ")")
 
           job_to_show = job_dir + "/" + jobitem.text() + "/OUTPUT"
 
           if ( os.path.isdir(job_to_show) ):
-          
+
              list_of_files = os.listdir(job_to_show)
-          
+
              for i in range(0,len(list_of_files)):
                 tmp_file = job_to_show + "/" + list_of_files[i]
 
                 if ( os.path.isfile(tmp_file) ):
-                   self.list_output.addItem(str(list_of_files[i]))
+                   self.list_output.addItem(str(list_of_files[i]) + " (" + file_size(tmp_file) + ")")
   
           self.group_execution.findChild(QtGui.QLineEdit,"line_jobname").setText(jobitem.text())
        self.group_history.findChild(QtGui.QListWidget,"list_jobname").clearSelection()
 
+       self.timetimer.start()
+       self.timer.start(update_frequency)
+       self.labeltimer.start(update_frequency/10)
+       self.push_update.setText("Update (" + str(int(update_frequency/1000/60)) + " min)")
+       QtGui.QApplication.processEvents()
+
        # Change palmrunline accordingly
        self.change_commandline("r","")
-       self.change_commandline("a","")
-  
-  
+       self.change_commandline("a","")  
+
     # Make a copy of a job
     def copy_job(self):
@@ -1412,5 +1405,29 @@
        self.setEnabled(True) 
        set_list = []
-   
+
+
+ # Add a custom context menu for the job selection list
+    def openmenujob(self, position):
+
+        menu = QtGui.QMenu()
+
+        selection = self.list_jobs.selectedItems()
+
+        if ( len(selection) != 0 ):
+
+           copyAction = QtGui.QAction('Copy job', self)
+           copyAction.triggered.connect(self.copy_job)
+           createAction = QtGui.QAction('Create set from job', self)
+           createAction.triggered.connect(self.create_set)
+           delAction = QtGui.QAction('Delete job', self)
+           delAction.triggered.connect(self.DeleteJob)
+
+           menu.addAction(copyAction)
+           menu.addAction(createAction)
+           menu.addAction(delAction)
+
+           action = menu.exec_(self.list_jobs.mapToGlobal(position))
+       
+       
  # Add a custom context menu
     def openmenuinput(self, position):
@@ -1422,7 +1439,16 @@
         if ( len(selection) != 0 ):
 
-           openAction = menu.addAction('Open selected files')     
+
+           openAction = QtGui.QAction('Open file(s)', self)
            openAction.setStatusTip('Open file(s) in your favorite editor')
            openAction.triggered.connect(self.OpenFilesInput)
+
+
+           delAction = QtGui.QAction('Delete file(s)', self)
+           delAction.triggered.connect(self.DeleteFilesInput)
+
+           menu.addAction(openAction)
+           menu.addAction(delAction)
+
            action = menu.exec_(self.list_input.mapToGlobal(position))
 
@@ -1436,7 +1462,14 @@
         if ( len(selection) != 0 ):
 
-           openAction = menu.addAction('Open selected files')     
+           openAction = QtGui.QAction('Open file(s)', self)
            openAction.setStatusTip('Open file(s) in your favorite editor')
            openAction.triggered.connect(self.OpenFilesUser)
+
+
+           delAction = QtGui.QAction('Delete file(s)', self)
+           delAction.triggered.connect(self.DeleteFilesUser)
+
+           menu.addAction(openAction)
+           menu.addAction(delAction)
            action = menu.exec_(self.list_user.mapToGlobal(position))
 
@@ -1450,7 +1483,14 @@
         if ( len(selection) != 0 ):
 
-           openAction = menu.addAction('Open selected files')     
+           openAction = QtGui.QAction('Open file(s)', self)
            openAction.setStatusTip('Open file(s) in your favorite editor')
            openAction.triggered.connect(self.OpenFilesOutput)
+
+
+           delAction = QtGui.QAction('Delete file(s)', self)
+           delAction.triggered.connect(self.DeleteFilesOutput)
+
+           menu.addAction(openAction)
+           menu.addAction(delAction)
            action = menu.exec_(self.list_output.mapToGlobal(position))
 
@@ -1464,8 +1504,23 @@
         if ( len(selection) != 0 ):
 
-           openAction = menu.addAction('Open selected files')     
+           openAction = QtGui.QAction('Open file(s)', self)
            openAction.setStatusTip('Open file(s) in your favorite editor')
            openAction.triggered.connect(self.OpenFilesMonitoring)
+
+
+           delAction = QtGui.QAction('Delete file(s)', self)
+           delAction.triggered.connect(self.DeleteFilesMonitoring)
+
+           menu.addAction(openAction)
+           menu.addAction(delAction)
            action = menu.exec_(self.list_monitoring.mapToGlobal(position))
+
+    def OpenConfig(self):
+
+       config = str(self.group_execution.findChild(QtGui.QComboBox, "combo_configuration").currentText())
+       if ( config != "" ):
+          filename = ".palm.config." + config
+          open_file = "xdg-open " + filename
+          os.system(str(open_file))
 
     def OpenFilesInput(self):
@@ -1478,5 +1533,5 @@
        open_files = ""
        for i in range(0,len(sel_files)):
-          open_files = open_files + "xdg-open " + input_dir +  sel_files[i].text() + "; "
+          open_files = open_files + "xdg-open " + input_dir +  sel_files[i].text().split("(")[0] + "; "
 
        os.system(str(open_files))
@@ -1505,5 +1560,5 @@
        open_files = ""
        for i in range(0,len(sel_files)):
-          open_files = open_files + "xdg-open " + input_dir +  sel_files[i].text() + "; "
+          open_files = open_files + "xdg-open " + input_dir +  sel_files[i].text().split("(")[0]  + "; "
 
        os.system(str(open_files)) 
@@ -1519,42 +1574,192 @@
        open_files = ""
        for i in range(0,len(sel_files)):
-          open_files = open_files + "xdg-open " + input_dir +  sel_files[i].text() + "; "
+          open_files = open_files + "xdg-open " + input_dir +  sel_files[i].text().split("(")[0] + "; "
 
        os.system(str(open_files)) 
        selection = self.list_jobs.selectedItems()
-  
+
+    def DeleteFilesInput(self):
+
+       status = QtGui.QMessageBox.question(self,'Delete Confirmation', "Are you sure you want to delete these files?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
+
+       if status == QtGui.QMessageBox.Yes:
+
+          sel_job = self.list_jobs.currentItem().text()
+          sel_files = self.list_input.selectedItems()
+
+          input_dir = job_dir + "/" + sel_job + "/INPUT/"
+
+          for i in range(0,len(sel_files)):
+             filename = input_dir +  sel_files[i].text().split("(")[0].trimmed()
+             os.remove(filename)
+
+          self.update_all()
+
+
+    def DeleteFilesUser(self):
+
+       status = QtGui.QMessageBox.question(self,'Delete Confirmation', "Are you sure you want to delete these files?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
+
+       if status == QtGui.QMessageBox.Yes:
+
+          sel_job = self.list_jobs.currentItem().text()
+          sel_files = self.list_user.selectedItems()
+
+          input_dir = job_dir + "/" + sel_job + "/USER/"
+
+          for i in range(0,len(sel_files)):
+             filename = input_dir +  sel_files[i].text().split("(")[0].trimmed()
+             os.remove(filename)
+
+          self.update_all()
+
+
+    def DeleteFilesMonitoring(self):
+
+       status = QtGui.QMessageBox.question(self,'Delete Confirmation', "Are you sure you want to delete these files?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
+
+       if status == QtGui.QMessageBox.Yes:
+
+          sel_job = self.list_jobs.currentItem().text()
+          sel_files = self.list_monitoring.selectedItems()
+
+          input_dir = job_dir + "/" + sel_job + "/MONITORING/"
+
+          for i in range(0,len(sel_files)):
+             filename = input_dir +  sel_files[i].text().split("(")[0].trimmed()
+             os.remove(filename)
+
+          self.update_all()
+
+
+    def DeleteFilesOutput(self):
+
+       status = QtGui.QMessageBox.question(self,'Delete Confirmation', "Are you sure you want to delete these files?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
+
+       if status == QtGui.QMessageBox.Yes:
+
+          sel_job = self.list_jobs.currentItem().text()
+          sel_files = self.list_output.selectedItems()
+
+          input_dir = job_dir + "/" + sel_job + "/OUTPUT/"
+
+          for i in range(0,len(sel_files)):
+             filename = input_dir +  sel_files[i].text().split("(")[0].trimmed()
+             os.remove(filename)
+
+          self.update_all()
+
+    def DeleteJob(self):
+
+       status = QtGui.QMessageBox.question(self,'Delete Confirmation', "Are you sure you want to delete this job?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
+
+       if status == QtGui.QMessageBox.Yes:
+
+          sel_job = self.list_jobs.currentItem().text()
+
+          input_dir = job_dir + "/" + sel_job
+          shutil.rmtree(str(input_dir))
+
+          self.update_all()
+
 # Message box for showing RUN_CONTROL output
 class CreateSetBox(QtGui.QDialog):
     def __init__(self):
-      
+
         super(CreateSetBox, self).__init__()
-        
+
         uic.loadUi(palm_bin + '/palmrungui_files/create_set.ui', self)
-        
+
         self.show()
-        
+
         return
 
 #   Cancel button
     def rejected(self):
-      
+
        self.close()
-     
+
        return
-  
 
 #   OK button
     def accept(self):
-      
+
        global set_list
-       
+
        text = self.list.toPlainText() 
        set_list = text.split('\n')
        self.close()
-     
+
        return
 
-
-        
+# Message box for showing RUN_CONTROL output
+class OpenHistoryBox(QtGui.QDialog):
+    def __init__(self):
+
+        super(OpenHistoryBox, self).__init__()
+
+        uic.loadUi(palm_bin + '/palmrungui_files/history.ui', self)
+
+        if os.path.exists(palm_dir + "/.palmrungui.history"):
+            pass
+        else:
+            return
+
+        filename = open(palm_dir + "/.palmrungui.history","r")
+        history = filename.readlines()
+        filename.close()
+
+
+        list_jobname = self.findChild(QtGui.QListWidget,"list_history")
+
+        # Read history entries and append to recent job list
+        len_history=len(history)-1
+        i = 0
+        while i<=len_history:
+            list_jobname.addItem(history[i])
+            i = i + 1
+
+        self.show()
+
+        return
+
+#   Select item / activate Load button
+    def ItemSelected(self):
+
+       self.push_open.setEnabled(True)
+
+       return
+
+
+#   Load job from history
+    def OpenFromHistory(self):
+
+       global history_entry
+       history_entry = self.list_history.selectedItems()[0].text()
+
+       self.close()
+
+       return
+
+#   Close history window
+    def DiscardHistory(self):
+
+
+       self.close()
+
+       return
+
+#   Clear history
+    def ClearHistory(self):
+
+       status = QtGui.QMessageBox.question(self,'Delete Confirmation', "Are you sure you want to delete your history?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
+
+       if status == QtGui.QMessageBox.Yes:
+
+          if os.path.exists(palm_dir + "/.palmrungui.history"):
+             os.remove(palm_dir + "/.palmrungui.history")
+
+
+       return
 
 if __name__ == "__main__":
Index: palm/trunk/SCRIPTS/palmrungui_files/about.ui
===================================================================
--- palm/trunk/SCRIPTS/palmrungui_files/about.ui	(revision 4469)
+++ palm/trunk/SCRIPTS/palmrungui_files/about.ui	(revision 4470)
@@ -7,6 +7,6 @@
     <x>0</x>
     <y>0</y>
-    <width>349</width>
-    <height>127</height>
+    <width>455</width>
+    <height>147</height>
    </rect>
   </property>
@@ -17,6 +17,6 @@
    <property name="geometry">
     <rect>
-     <x>195</x>
-     <y>95</y>
+     <x>10</x>
+     <y>110</y>
      <width>91</width>
      <height>24</height>
@@ -51,37 +51,23 @@
     <rect>
      <x>10</x>
-     <y>60</y>
-     <width>261</width>
-     <height>36</height>
+     <y>50</y>
+     <width>431</width>
+     <height>51</height>
     </rect>
    </property>
    <property name="text">
-    <string>Visit http://palm-model.org</string>
+    <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;palmrungui is a graphical user interface for the bash script palmrun. &lt;/p&gt;&lt;p&gt;A documentation can be found &lt;a href=&quot;http://palm-model.org/trac/wiki/doc/app/palmrungui&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#2980b9;&quot;&gt;here&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+   </property>
+   <property name="textFormat">
+    <enum>Qt::RichText</enum>
    </property>
    <property name="alignment">
-    <set>Qt::AlignHCenter|Qt::AlignTop</set>
+    <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
    </property>
    <property name="wordWrap">
     <bool>true</bool>
    </property>
-  </widget>
-  <widget class="QLabel" name="label_3">
-   <property name="geometry">
-    <rect>
-     <x>10</x>
-     <y>25</y>
-     <width>291</width>
-     <height>41</height>
-    </rect>
-   </property>
-   <property name="font">
-    <font>
-     <pointsize>12</pointsize>
-     <weight>75</weight>
-     <bold>true</bold>
-    </font>
-   </property>
-   <property name="text">
-    <string>A graphical user interface for palmrun</string>
+   <property name="openExternalLinks">
+    <bool>false</bool>
    </property>
   </widget>
Index: palm/trunk/SCRIPTS/palmrungui_files/history.ui
===================================================================
--- palm/trunk/SCRIPTS/palmrungui_files/history.ui	(revision 4470)
+++ palm/trunk/SCRIPTS/palmrungui_files/history.ui	(revision 4470)
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Dialog</class>
+ <widget class="QDialog" name="Dialog">
+  <property name="enabled">
+   <bool>true</bool>
+  </property>
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>882</width>
+    <height>603</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>History</string>
+  </property>
+  <property name="locale">
+   <locale language="English" country="UnitedStates"/>
+  </property>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>15</x>
+     <y>10</y>
+     <width>261</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>History of palmrun commands:</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="push_discard">
+   <property name="geometry">
+    <rect>
+     <x>130</x>
+     <y>560</y>
+     <width>88</width>
+     <height>34</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Discard</string>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="push_open">
+   <property name="enabled">
+    <bool>false</bool>
+   </property>
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>560</y>
+     <width>111</width>
+     <height>34</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Load selected</string>
+   </property>
+  </widget>
+  <widget class="QListWidget" name="list_history">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>30</y>
+     <width>861</width>
+     <height>521</height>
+    </rect>
+   </property>
+   <property name="showDropIndicator" stdset="0">
+    <bool>false</bool>
+   </property>
+   <property name="alternatingRowColors">
+    <bool>true</bool>
+   </property>
+   <property name="sortingEnabled">
+    <bool>false</bool>
+   </property>
+  </widget>
+  <widget class="QPushButton" name="push_clear">
+   <property name="geometry">
+    <rect>
+     <x>230</x>
+     <y>560</y>
+     <width>88</width>
+     <height>34</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Clear history</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>push_open</sender>
+   <signal>clicked()</signal>
+   <receiver>Dialog</receiver>
+   <slot>OpenFromHistory()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>70</x>
+     <y>562</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>249</x>
+     <y>563</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>push_discard</sender>
+   <signal>clicked()</signal>
+   <receiver>Dialog</receiver>
+   <slot>DiscardHistory()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>204</x>
+     <y>571</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>417</x>
+     <y>564</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>push_clear</sender>
+   <signal>clicked()</signal>
+   <receiver>Dialog</receiver>
+   <slot>ClearHistory()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>290</x>
+     <y>591</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>389</x>
+     <y>589</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>list_history</sender>
+   <signal>itemSelectionChanged()</signal>
+   <receiver>Dialog</receiver>
+   <slot>ItemSelected()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>611</x>
+     <y>152</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>729</x>
+     <y>575</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+ <slots>
+  <slot>OpenFromHistory()</slot>
+  <slot>DiscardHistory()</slot>
+  <slot>ClearHistory()</slot>
+  <slot>ItemSelected()</slot>
+ </slots>
+</ui>
Index: palm/trunk/SCRIPTS/palmrungui_files/mainwindow.ui
===================================================================
--- palm/trunk/SCRIPTS/palmrungui_files/mainwindow.ui	(revision 4469)
+++ palm/trunk/SCRIPTS/palmrungui_files/mainwindow.ui	(revision 4470)
@@ -140,5 +140,5 @@
        <x>10</x>
        <y>50</y>
-       <width>771</width>
+       <width>971</width>
        <height>26</height>
       </rect>
@@ -168,5 +168,5 @@
        <x>470</x>
        <y>20</y>
-       <width>311</width>
+       <width>701</width>
        <height>21</height>
       </rect>
@@ -190,4 +190,17 @@
      <property name="alignment">
       <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
+     </property>
+    </widget>
+    <widget class="QLabel" name="label_version">
+     <property name="geometry">
+      <rect>
+       <x>1000</x>
+       <y>47</y>
+       <width>181</width>
+       <height>31</height>
+      </rect>
+     </property>
+     <property name="text">
+      <string>Version: xxxx (27-02-2002)</string>
      </property>
     </widget>
@@ -233,7 +246,7 @@
        <rect>
         <x>0</x>
-        <y>375</y>
+        <y>350</y>
         <width>441</width>
-        <height>286</height>
+        <height>311</height>
        </rect>
       </property>
@@ -251,5 +264,5 @@
         <rect>
          <x>330</x>
-         <y>55</y>
+         <y>60</y>
          <width>101</width>
          <height>21</height>
@@ -267,7 +280,7 @@
         <rect>
          <x>250</x>
-         <y>55</y>
+         <y>61</y>
          <width>71</width>
-         <height>21</height>
+         <height>20</height>
         </rect>
        </property>
@@ -283,5 +296,5 @@
         <rect>
          <x>130</x>
-         <y>120</y>
+         <y>150</y>
          <width>91</width>
          <height>20</height>
@@ -296,5 +309,79 @@
         <rect>
          <x>10</x>
-         <y>120</y>
+         <y>150</y>
+         <width>111</width>
+         <height>20</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string>Cores:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
+       </property>
+      </widget>
+      <widget class="QLineEdit" name="line_tpn">
+       <property name="geometry">
+        <rect>
+         <x>330</x>
+         <y>150</y>
+         <width>101</width>
+         <height>21</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+      <widget class="QLabel" name="label_4">
+       <property name="geometry">
+        <rect>
+         <x>220</x>
+         <y>140</y>
+         <width>101</width>
+         <height>31</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string>Tasks per node:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
+       </property>
+      </widget>
+      <widget class="QLineEdit" name="line_account">
+       <property name="geometry">
+        <rect>
+         <x>330</x>
+         <y>180</y>
+         <width>101</width>
+         <height>20</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+      </widget>
+      <widget class="QLabel" name="label_5">
+       <property name="geometry">
+        <rect>
+         <x>260</x>
+         <y>180</y>
+         <width>61</width>
+         <height>16</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string>Account:</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
+       </property>
+      </widget>
+      <widget class="QLabel" name="label_6">
+       <property name="geometry">
+        <rect>
+         <x>10</x>
+         <y>180</y>
          <width>111</width>
          <height>16</height>
@@ -302,5 +389,5 @@
        </property>
        <property name="text">
-        <string>Cores:</string>
+        <string>Wallclock time (s):</string>
        </property>
        <property name="alignment">
@@ -308,83 +395,9 @@
        </property>
       </widget>
-      <widget class="QLineEdit" name="line_tpn">
-       <property name="geometry">
-        <rect>
-         <x>330</x>
-         <y>120</y>
-         <width>101</width>
-         <height>21</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string/>
-       </property>
-      </widget>
-      <widget class="QLabel" name="label_4">
-       <property name="geometry">
-        <rect>
-         <x>220</x>
-         <y>115</y>
-         <width>101</width>
-         <height>21</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string>Tasks per node:</string>
-       </property>
-       <property name="alignment">
-        <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
-       </property>
-      </widget>
-      <widget class="QLineEdit" name="line_account">
-       <property name="geometry">
-        <rect>
-         <x>330</x>
-         <y>145</y>
-         <width>101</width>
-         <height>20</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string/>
-       </property>
-      </widget>
-      <widget class="QLabel" name="label_5">
-       <property name="geometry">
-        <rect>
-         <x>260</x>
-         <y>145</y>
-         <width>61</width>
-         <height>16</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string>Account:</string>
-       </property>
-       <property name="alignment">
-        <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
-       </property>
-      </widget>
-      <widget class="QLabel" name="label_6">
-       <property name="geometry">
-        <rect>
-         <x>10</x>
-         <y>145</y>
-         <width>111</width>
-         <height>16</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string>Wallclock time (s):</string>
-       </property>
-       <property name="alignment">
-        <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>
-       </property>
-      </widget>
       <widget class="QLineEdit" name="line_time">
        <property name="geometry">
         <rect>
          <x>130</x>
-         <y>145</y>
+         <y>180</y>
          <width>91</width>
          <height>20</height>
@@ -401,5 +414,5 @@
          <y>90</y>
          <width>91</width>
-         <height>16</height>
+         <height>21</height>
         </rect>
        </property>
@@ -418,5 +431,5 @@
         <rect>
          <x>10</x>
-         <y>165</y>
+         <y>200</y>
          <width>411</width>
          <height>20</height>
@@ -431,5 +444,5 @@
         <rect>
          <x>10</x>
-         <y>180</y>
+         <y>210</y>
          <width>121</width>
          <height>23</height>
@@ -444,5 +457,5 @@
         <rect>
          <x>10</x>
-         <y>200</y>
+         <y>230</y>
          <width>281</width>
          <height>23</height>
@@ -457,5 +470,5 @@
         <rect>
          <x>10</x>
-         <y>220</y>
+         <y>250</y>
          <width>261</width>
          <height>23</height>
@@ -466,31 +479,9 @@
        </property>
       </widget>
-      <widget class="QLabel" name="label_restart">
-       <property name="enabled">
-        <bool>false</bool>
-       </property>
-       <property name="geometry">
-        <rect>
-         <x>130</x>
-         <y>165</y>
-         <width>291</width>
-         <height>20</height>
-        </rect>
-       </property>
-       <property name="font">
-        <font>
-         <weight>75</weight>
-         <bold>true</bold>
-        </font>
-       </property>
-       <property name="text">
-        <string/>
-       </property>
-      </widget>
       <widget class="QCheckBox" name="check_cycfill">
        <property name="geometry">
         <rect>
          <x>10</x>
-         <y>240</y>
+         <y>270</y>
          <width>261</width>
          <height>21</height>
@@ -505,5 +496,5 @@
         <rect>
          <x>10</x>
-         <y>260</y>
+         <y>290</y>
          <width>261</width>
          <height>21</height>
@@ -521,5 +512,5 @@
         <rect>
          <x>60</x>
-         <y>55</y>
+         <y>60</y>
          <width>191</width>
          <height>26</height>
@@ -561,5 +552,5 @@
         <rect>
          <x>110</x>
-         <y>20</y>
+         <y>30</y>
          <width>321</width>
          <height>25</height>
@@ -588,5 +579,5 @@
          <y>60</y>
          <width>41</width>
-         <height>16</height>
+         <height>21</height>
         </rect>
        </property>
@@ -604,8 +595,8 @@
        <property name="geometry">
         <rect>
-         <x>10</x>
-         <y>25</y>
-         <width>91</width>
-         <height>16</height>
+         <x>0</x>
+         <y>30</y>
+         <width>101</width>
+         <height>21</height>
         </rect>
        </property>
@@ -629,22 +620,48 @@
        <property name="geometry">
         <rect>
+         <x>230</x>
+         <y>120</y>
+         <width>91</width>
+         <height>21</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string>(re-)Build</string>
+       </property>
+      </widget>
+      <widget class="QComboBox" name="combo_configuration">
+       <property name="geometry">
+        <rect>
+         <x>130</x>
+         <y>90</y>
+         <width>301</width>
+         <height>26</height>
+        </rect>
+       </property>
+      </widget>
+      <widget class="QCheckBox" name="check_rebuild">
+       <property name="geometry">
+        <rect>
          <x>330</x>
-         <y>85</y>
+         <y>120</y>
          <width>101</width>
-         <height>26</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string>(re-)build</string>
-       </property>
-      </widget>
-      <widget class="QComboBox" name="combo_configuration">
+         <height>22</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string>Full rebuild</string>
+       </property>
+      </widget>
+      <widget class="QPushButton" name="button_editconfig">
        <property name="geometry">
         <rect>
          <x>130</x>
-         <y>85</y>
-         <width>191</width>
-         <height>26</height>
-        </rect>
+         <y>120</y>
+         <width>91</width>
+         <height>21</height>
+        </rect>
+       </property>
+       <property name="text">
+        <string>Edit</string>
        </property>
       </widget>
@@ -698,11 +715,11 @@
         <rect>
          <x>10</x>
-         <y>85</y>
+         <y>90</y>
          <width>231</width>
-         <height>531</height>
+         <height>561</height>
         </rect>
        </property>
        <property name="contextMenuPolicy">
-        <enum>Qt::NoContextMenu</enum>
+        <enum>Qt::CustomContextMenu</enum>
        </property>
        <property name="alternatingRowColors">
@@ -717,5 +734,5 @@
         <rect>
          <x>250</x>
-         <y>85</y>
+         <y>90</y>
          <width>231</width>
          <height>141</height>
@@ -801,10 +818,10 @@
          <x>440</x>
          <y>30</y>
-         <width>121</width>
+         <width>131</width>
          <height>24</height>
         </rect>
        </property>
        <property name="text">
-        <string>Update</string>
+        <string>Update (60 s)</string>
        </property>
       </widget>
@@ -813,7 +830,7 @@
         <rect>
          <x>490</x>
-         <y>85</y>
+         <y>90</y>
          <width>221</width>
-         <height>566</height>
+         <height>561</height>
         </rect>
        </property>
@@ -848,7 +865,7 @@
         <rect>
          <x>250</x>
-         <y>415</y>
+         <y>420</y>
          <width>231</width>
-         <height>236</height>
+         <height>231</height>
         </rect>
        </property>
@@ -879,30 +896,4 @@
        </property>
       </widget>
-      <widget class="QPushButton" name="push_copy">
-       <property name="geometry">
-        <rect>
-         <x>10</x>
-         <y>625</y>
-         <width>91</width>
-         <height>24</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string>Copy job</string>
-       </property>
-      </widget>
-      <widget class="QPushButton" name="push_create_set">
-       <property name="geometry">
-        <rect>
-         <x>110</x>
-         <y>625</y>
-         <width>131</width>
-         <height>24</height>
-        </rect>
-       </property>
-       <property name="text">
-        <string>Create set from job</string>
-       </property>
-      </widget>
       <widget class="QLabel" name="palm_logo">
        <property name="geometry">
@@ -921,19 +912,4 @@
        </property>
       </widget>
-      <zorder>list_jobs</zorder>
-      <zorder>list_input</zorder>
-      <zorder>list_user</zorder>
-      <zorder>label_11</zorder>
-      <zorder>label_10</zorder>
-      <zorder>label_12</zorder>
-      <zorder>push_update</zorder>
-      <zorder>list_output</zorder>
-      <zorder>label_14</zorder>
-      <zorder>list_monitoring</zorder>
-      <zorder>label_15</zorder>
-      <zorder>push_copy</zorder>
-      <zorder>push_create_set</zorder>
-      <zorder>palm_logo</zorder>
-      <zorder>palm_logo</zorder>
      </widget>
      <widget class="QGroupBox" name="group_history">
@@ -943,5 +919,5 @@
         <y>5</y>
         <width>441</width>
-        <height>371</height>
+        <height>341</height>
        </rect>
       </property>
@@ -957,6 +933,6 @@
          <x>10</x>
          <y>50</y>
-         <width>411</width>
-         <height>311</height>
+         <width>421</width>
+         <height>281</height>
         </rect>
        </property>
@@ -1430,8 +1406,8 @@
     <property name="geometry">
      <rect>
-      <x>261</x>
-      <y>103</y>
-      <width>128</width>
-      <height>189</height>
+      <x>267</x>
+      <y>152</y>
+      <width>155</width>
+      <height>137</height>
      </rect>
     </property>
@@ -1444,6 +1420,4 @@
     <addaction name="action_open"/>
     <addaction name="separator"/>
-    <addaction name="action_last"/>
-    <addaction name="action_save"/>
     <addaction name="action_default"/>
     <addaction name="action_quit"/>
@@ -1468,5 +1442,5 @@
   <action name="action_open">
    <property name="text">
-    <string>&amp;Open from File</string>
+    <string>&amp;Select from history</string>
    </property>
   </action>
@@ -1611,6 +1585,6 @@
    <hints>
     <hint type="sourcelabel">
-     <x>206</x>
-     <y>540</y>
+     <x>214</x>
+     <y>500</y>
     </hint>
     <hint type="destinationlabel">
@@ -1627,6 +1601,6 @@
    <hints>
     <hint type="sourcelabel">
-     <x>244</x>
-     <y>540</y>
+     <x>252</x>
+     <y>500</y>
     </hint>
     <hint type="destinationlabel">
@@ -1788,5 +1762,5 @@
     <hint type="sourcelabel">
      <x>170</x>
-     <y>570</y>
+     <y>585</y>
     </hint>
     <hint type="destinationlabel">
@@ -1804,5 +1778,5 @@
     <hint type="sourcelabel">
      <x>193</x>
-     <y>595</y>
+     <y>615</y>
     </hint>
     <hint type="destinationlabel">
@@ -1819,6 +1793,6 @@
    <hints>
     <hint type="sourcelabel">
-     <x>402</x>
-     <y>515</y>
+     <x>406</x>
+     <y>495</y>
     </hint>
     <hint type="destinationlabel">
@@ -1836,5 +1810,5 @@
     <hint type="sourcelabel">
      <x>425</x>
-     <y>595</y>
+     <y>615</y>
     </hint>
     <hint type="destinationlabel">
@@ -1852,5 +1826,5 @@
     <hint type="sourcelabel">
      <x>400</x>
-     <y>570</y>
+     <y>585</y>
     </hint>
     <hint type="destinationlabel">
@@ -1989,8 +1963,8 @@
   </connection>
   <connection>
-   <sender>action_save</sender>
+   <sender>action_open</sender>
    <signal>triggered()</signal>
    <receiver>MainWindow</receiver>
-   <slot>save_to_file()</slot>
+   <slot>open_from_file()</slot>
    <hints>
     <hint type="sourcelabel">
@@ -2005,8 +1979,8 @@
   </connection>
   <connection>
-   <sender>action_last</sender>
+   <sender>action_help</sender>
    <signal>triggered()</signal>
    <receiver>MainWindow</receiver>
-   <slot>open_last()</slot>
+   <slot>help()</slot>
    <hints>
     <hint type="sourcelabel">
@@ -2021,8 +1995,8 @@
   </connection>
   <connection>
-   <sender>action_open</sender>
+   <sender>action_about</sender>
    <signal>triggered()</signal>
    <receiver>MainWindow</receiver>
-   <slot>open_from_file()</slot>
+   <slot>about_gui()</slot>
    <hints>
     <hint type="sourcelabel">
@@ -2037,8 +2011,8 @@
   </connection>
   <connection>
-   <sender>action_help</sender>
+   <sender>action_default</sender>
    <signal>triggered()</signal>
    <receiver>MainWindow</receiver>
-   <slot>help()</slot>
+   <slot>save_default()</slot>
    <hints>
     <hint type="sourcelabel">
@@ -2053,8 +2027,56 @@
   </connection>
   <connection>
-   <sender>action_about</sender>
+   <sender>line_jobname</sender>
+   <signal>textChanged(QString)</signal>
+   <receiver>MainWindow</receiver>
+   <slot>change_lineinput()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>189</x>
+     <y>464</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>4</x>
+     <y>122</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>check_Z</sender>
+   <signal>stateChanged(int)</signal>
+   <receiver>MainWindow</receiver>
+   <slot>check_flags()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>434</x>
+     <y>284</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>458</x>
+     <y>344</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>check_cycfill</sender>
+   <signal>stateChanged(int)</signal>
+   <receiver>MainWindow</receiver>
+   <slot>change_rc_list()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>274</x>
+     <y>705</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>4</x>
+     <y>510</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>action_start_watchdog</sender>
    <signal>triggered()</signal>
    <receiver>MainWindow</receiver>
-   <slot>about_gui()</slot>
+   <slot>start_watchdog()</slot>
    <hints>
     <hint type="sourcelabel">
@@ -2063,52 +2085,4 @@
     </hint>
     <hint type="destinationlabel">
-     <x>479</x>
-     <y>366</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>action_default</sender>
-   <signal>triggered()</signal>
-   <receiver>MainWindow</receiver>
-   <slot>save_default()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>-1</x>
-     <y>-1</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>479</x>
-     <y>366</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>line_jobname</sender>
-   <signal>textChanged(QString)</signal>
-   <receiver>MainWindow</receiver>
-   <slot>change_lineinput()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>185</x>
-     <y>485</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>4</x>
-     <y>122</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>check_Z</sender>
-   <signal>stateChanged(int)</signal>
-   <receiver>MainWindow</receiver>
-   <slot>check_flags()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>434</x>
-     <y>284</y>
-    </hint>
-    <hint type="destinationlabel">
      <x>458</x>
      <y>344</y>
@@ -2117,36 +2091,4 @@
   </connection>
   <connection>
-   <sender>check_cycfill</sender>
-   <signal>stateChanged(int)</signal>
-   <receiver>MainWindow</receiver>
-   <slot>change_rc_list()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>276</x>
-     <y>690</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>4</x>
-     <y>510</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>action_start_watchdog</sender>
-   <signal>triggered()</signal>
-   <receiver>MainWindow</receiver>
-   <slot>start_watchdog()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>-1</x>
-     <y>-1</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>458</x>
-     <y>344</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
    <sender>check_svf</sender>
    <signal>stateChanged(int)</signal>
@@ -2181,36 +2123,4 @@
   </connection>
   <connection>
-   <sender>push_create_set</sender>
-   <signal>clicked()</signal>
-   <receiver>MainWindow</receiver>
-   <slot>create_set()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>692</x>
-     <y>710</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>863</x>
-     <y>634</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>push_copy</sender>
-   <signal>clicked()</signal>
-   <receiver>MainWindow</receiver>
-   <slot>copy_job()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>552</x>
-     <y>710</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>985</x>
-     <y>650</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
    <sender>list_user</sender>
    <signal>customContextMenuRequested(QPoint)</signal>
@@ -2315,6 +2225,6 @@
    <hints>
     <hint type="sourcelabel">
-     <x>342</x>
-     <y>552</y>
+     <x>246</x>
+     <y>560</y>
     </hint>
     <hint type="destinationlabel">
@@ -2331,10 +2241,42 @@
    <hints>
     <hint type="sourcelabel">
-     <x>134</x>
-     <y>547</y>
+     <x>138</x>
+     <y>530</y>
     </hint>
     <hint type="destinationlabel">
      <x>1183</x>
      <y>538</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>button_editconfig</sender>
+   <signal>clicked()</signal>
+   <receiver>MainWindow</receiver>
+   <slot>OpenConfig()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>157</x>
+     <y>555</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>397</x>
+     <y>-4</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>list_jobs</sender>
+   <signal>customContextMenuRequested(QPoint)</signal>
+   <receiver>MainWindow</receiver>
+   <slot>openmenujob()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>571</x>
+     <y>213</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>538</x>
+     <y>-4</y>
     </hint>
    </hints>
@@ -2369,4 +2311,6 @@
   <slot>openmenumonitoring()</slot>
   <slot>startpalmbuild()</slot>
+  <slot>OpenConfig()</slot>
+  <slot>openmenujob()</slot>
  </slots>
 </ui>
