rcPreferencesGUIImpl.py

Go to the documentation of this file.
00001 #!/usr/local/bin/python
00002 #
00003 #                               Copyright 2005
00004 #                                     by
00005 #                        The Board of Trustees of the
00006 #                     Leland Stanford Junior University.
00007 #                            All rights reserved.
00008 #
00009 
00010 __facility__ = "Online"
00011 __abstract__ = "GUI for setting preferences for the Online Script Engine system"
00012 __author__   = """J. Cohen-Tanugi <Cohen@SLAC.Stanford.edu>
00013                                   INFN/Pisa - GLAST LAT TKR"""
00014 __date__     = "2003/02/05 00:00:00"
00015 __updated__  = "$Date: 2006/04/11 20:10:07 $"
00016 __version__  = "$Revision: 1.7 $"
00017 __credits__  = "SLAC"
00018 
00019 import LICOS.copyright_SLAC
00020 
00021 
00022 import os
00023 import sys
00024 import string
00025 from qt               import *
00026 from rcPreferencesGUI import rcPreferencesGUI
00027 from rcUsers          import rcUser
00028 
00029 class rcPreferencesGUIImpl(rcPreferencesGUI):
00030   """!\brief Preferences GUI implementation class
00031 
00032   """
00033   def __init__(self, common, parent=None, name="rcPreferencesGUIImpl", fl=0):
00034     """!\brief rcPreferencesGUIImpl constructor
00035 
00036     \param common ScriptEngineCommon instance
00037     \param parent Parent GUI
00038     \param name   GUI name
00039     \param fl     GUI flag
00040     """
00041     rcPreferencesGUI.__init__(self,parent,name,fl)
00042 
00043     self.__prefMan = common.prefMan()
00044     self.__prefs = common.prefMan().preferences()
00045     self.__common = common
00046 
00047     self.connect(self.CANCEL,SIGNAL("clicked()"),self.cancel)
00048     self.connect(self.OK,SIGNAL("clicked()"),self.loadAndExit)
00049     self.connect(self.DEFAULT,SIGNAL("clicked()"),self.default)
00050     self.connect(self.SAVE,SIGNAL("clicked()"),self.writeConfig)
00051     self.connect(self.logButton,SIGNAL("clicked()"),self.logBrowser)
00052     self.connect(self.dataButton,SIGNAL("clicked()"),self.dataBrowser)
00053     self.connect(self.scriptButton,SIGNAL("clicked()"),self.appBrowser)
00054     self.connect(self.reposButton,SIGNAL("clicked()"),self.reposBrowser)
00055     self.connect(self.repButton,SIGNAL("clicked()"),self.repBrowser)
00056     self.connect(self.exportButton,SIGNAL("clicked()"),self.exportBrowser)
00057     self.connect(self.runIdButton,SIGNAL("clicked()"),self.runIdBrowser)
00058     self.connect(self.comboStyle, SIGNAL("activated(const QString&)"), self.selectStyle)
00059     self.connect(self.buttonSelectFont,SIGNAL("clicked()"),self.selectFont)
00060     self.connect(self.buttonSaveUser,SIGNAL("clicked()"),self.saveUser)
00061     self.connect(self.buttonAddPassword,SIGNAL("clicked()"),self.addChangePassword)
00062     self.connect(self.buttonDeleteUser,SIGNAL("clicked()"),self.deleteUser)
00063     self.connect(self.txtUserID,SIGNAL("lostFocus()"),self.updateUserIDText)
00064     self.connect(self.txtUserName,SIGNAL("returnPressed()"),self.saveUser)
00065     self.connect(self.chkServerDisable,SIGNAL("clicked()"),self.handleServerText)
00066     self.connect(self.listviewUsers, SIGNAL("doubleClicked(QListViewItem*)"), self.listUsersDblClick)
00067 
00068     for style in QStyleFactory.keys():
00069       self.comboStyle.insertItem(style)
00070 
00071     secMan = common.getSecurityMan()
00072     if secMan is None:
00073       self.txtPassword.setEnabled(0)
00074       self.txtPasswordAgain.setEnabled(0)
00075       self.txtOldPassword.setEnabled(0)
00076       self.buttonAddPassword.setEnabled(0)
00077 
00078 
00079   def applyPermissions(self, operator):
00080     """!\brief Apply the permissions based on the \a operator's privileges.
00081 
00082     \param operator Operator's rcUser instance
00083     """
00084     adminOverride = operator.isAdministrator()
00085     for i in range(self.rcPrefsTab.count()):
00086       tabPage = self.rcPrefsTab.page(i)
00087       pageName = tabPage.name()
00088       if 'edit_' + pageName in operator.getPermissions() or adminOverride:
00089         tabPage.setEnabled(1)
00090       else:
00091         tabPage.setEnabled(0)
00092 
00093     if 'edit_repository_dir' in operator.getPermissions() or adminOverride:
00094       self.reposEdit.setEnabled(1)
00095       self.reposButton.setEnabled(1)
00096     else:
00097       self.reposEdit.setEnabled(0)
00098       self.reposButton.setEnabled(0)
00099 
00100     if 'edit_script_dir' in operator.getPermissions() or adminOverride:
00101       self.scriptEdit.setEnabled(1)
00102       self.scriptButton.setEnabled(1)
00103     else:
00104       self.scriptEdit.setEnabled(0)
00105       self.scriptButton.setEnabled(0)
00106 
00107     if 'edit_data_dir' in operator.getPermissions() or adminOverride:
00108       self.dataEdit.setEnabled(1)
00109       self.dataButton.setEnabled(1)
00110     else:
00111       self.dataEdit.setEnabled(0)
00112       self.dataButton.setEnabled(0)
00113 
00114     if 'edit_log_dir' in operator.getPermissions() or adminOverride:
00115       self.logEdit.setEnabled(1)
00116       self.logButton.setEnabled(1)
00117     else:
00118       self.logEdit.setEnabled(0)
00119       self.logButton.setEnabled(0)
00120 
00121     if 'edit_report_dir' in operator.getPermissions() or adminOverride:
00122       self.repEdit.setEnabled(1)
00123       self.repButton.setEnabled(1)
00124     else:
00125       self.repEdit.setEnabled(0)
00126       self.repButton.setEnabled(0)
00127 
00128     if 'edit_export_dir' in operator.getPermissions() or adminOverride:
00129       self.exportEdit.setEnabled(1)
00130       self.exportButton.setEnabled(1)
00131     else:
00132       self.exportEdit.setEnabled(0)
00133       self.exportButton.setEnabled(0)
00134 
00135     if 'edit_runid_dir' in operator.getPermissions() or adminOverride:
00136       self.runIdEdit.setEnabled(1)
00137       self.runIdButton.setEnabled(1)
00138     else:
00139       self.runIdEdit.setEnabled(0)
00140       self.runIdButton.setEnabled(0)
00141 
00142     if 'set_data_archiving_option' in operator.getPermissions() or adminOverride:
00143       self.archiveDataBox.setEnabled(1)
00144     else:
00145       self.archiveDataBox.setEnabled(0)
00146 
00147     if 'set_message_logging_option' in operator.getPermissions() or adminOverride:
00148       self.logMsgBox.setEnabled(1)
00149     else:
00150       self.logMsgBox.setEnabled(0)
00151 
00152     if 'set_message_logging_filter' in operator.getPermissions() or adminOverride:
00153       self.verbosityLevel.setEnabled(1)
00154     else:
00155       self.verbosityLevel.setEnabled(0)
00156 
00157     if 'set_data_export_option' in operator.getPermissions() or adminOverride:
00158       self.exportDataBox.setEnabled(1)
00159     else:
00160       self.exportDataBox.setEnabled(0)
00161 
00162     if 'set_version_info_option' in operator.getPermissions() or adminOverride:
00163       self.chkVersions.setEnabled(1)
00164     else:
00165       self.chkVersions.setEnabled(0)
00166 
00167     if 'set_elog_integration_option' in operator.getPermissions() or adminOverride:
00168       self.chkElogIntegration.setEnabled(1)
00169     else:
00170       self.chkElogIntegration.setEnabled(0)
00171 
00172     if 'set_site_run_condition' in operator.getPermissions() or adminOverride:
00173       self.comboSite.setEnabled(1)
00174     else:
00175       self.comboSite.setEnabled(0)
00176 
00177     if 'set_instrument_type_run_condition' in operator.getPermissions() or adminOverride:
00178       self.comboInstrumentType.setEnabled(1)
00179     else:
00180       self.comboInstrumentType.setEnabled(0)
00181 
00182     if 'set_phase_run_condition' in operator.getPermissions() or adminOverride:
00183       self.comboPhase.setEnabled(1)
00184     else:
00185       self.comboPhase.setEnabled(0)
00186 
00187     if 'enable_delete_user' in operator.getPermissions() or adminOverride:
00188       self.buttonDeleteUser.setEnabled(1)
00189     else:
00190       self.buttonDeleteUser.setEnabled(0)
00191 
00192     if 'set_python_path_system_pref' in operator.getPermissions() or adminOverride:
00193       self.txtPythonPath.setEnabled(1)
00194     else:
00195       self.txtPythonPath.setEnabled(0)
00196 
00197     if 'set_elog_url_system_pref' in operator.getPermissions() or adminOverride:
00198       self.txtElogBookURL.setEnabled(1)
00199     else:
00200       self.txtElogBookURL.setEnabled(0)
00201 
00202     if 'set_dds_system_pref' in operator.getPermissions() or adminOverride:
00203       self.txtServer.setEnabled(1)
00204       self.chkServerDisable.setEnabled(1)
00205     else:
00206       self.txtServer.setEnabled(0)
00207       self.chkServerDisable.setEnabled(0)
00208 
00209     if 'set_visual_system_pref' in operator.getPermissions() or adminOverride:
00210       self.buttonSelectFont.setEnabled(1)
00211       self.comboStyle.setEnabled(1)
00212     else:
00213       self.buttonSelectFont.setEnabled(0)
00214       self.comboStyle.setEnabled(0)
00215 
00216   def selectStyle(self, style):
00217     """!\brief Initialize the visual style based on \a style.
00218 
00219     \param style Visual style
00220     """
00221     font = QApplication.font()
00222     if self.__prefs.has_key('fontfamily'):
00223       font.setFamily(self.__prefs['fontfamily'])
00224     if self.__prefs.has_key('fontsize'):
00225       font.setPointSize(int(self.__prefs['fontsize']))
00226     if self.__prefs.has_key('fontweight'):
00227       font.setWeight(int(self.__prefs['fontweight']))
00228     if self.__prefs.has_key('fontitalic'):
00229       font.setItalic(int(self.__prefs['fontitalic']))
00230     QApplication.setFont(font, 1)
00231     QApplication.setStyle(QStyleFactory.create(style))
00232     self.__prefs["style"] = str(style)
00233 
00234 
00235   def selectFont(self):
00236     """!\brief Select the font
00237 
00238     """
00239     ok = 0
00240     oldfont = QApplication.font()
00241     newfont, ok = QFontDialog.getFont(oldfont, self)
00242     if ok:
00243       try:
00244         QApplication.setFont(newfont, 1)
00245         self.__prefs["fontfamily"] = str(newfont.family())
00246         self.__prefs["fontsize"] = newfont.pointSize()
00247         self.__prefs["fontweight"] = newfont.weight()
00248         if newfont.italic():
00249           fontitalic = 1
00250         else:
00251           fontitalic = 0
00252         self.__prefs["fontitalic"] = fontitalic
00253       except:
00254         pass
00255 
00256   def updateUserIDText(self):
00257     """!\brief Update the user id field in User maintenance tab.
00258 
00259     """
00260     userId = str(self.txtUserID.text()).strip()
00261     try:
00262       userId = "%03d" % int(userId)
00263       self.txtUserID.setText(userId)
00264       user = self.__prefs["users"].getUser(userId)
00265       if user is not None:
00266         self.showUser(user)
00267       else:
00268         self.txtUserName.setText("")
00269         self.txtLoginId.setText("")
00270     except:
00271       pass
00272 
00273   def listUsersDblClick(self, item):
00274     """!\brief Fill the user info on double click.
00275 
00276     \param item Listview item
00277     """
00278     userId = str(item.text(0))
00279     user = self.__prefs["users"].getUser(userId)
00280     self.showUser(user)
00281 
00282   def showUser(self, user):
00283     """!\brief Show the user info.
00284 
00285     \param user rcUser instance
00286     """
00287     userId = user.getId()
00288     userName = user.getName()
00289     userLoginId = user.getLoginId()
00290     self.txtUserID.setText(userId)
00291     self.txtUserName.setText(userName)
00292     self.txtLoginId.setText(userLoginId)
00293     secMan = self.__common.getSecurityMan()
00294     if secMan is not None:
00295       if secMan.checkPassword(userLoginId) == 0:
00296         self.txtPassword.setText("**********")
00297         self.txtPasswordAgain.setText("**********")
00298         self.buttonAddPassword.setText("Change Password")
00299       else:
00300         self.txtPassword.setText("")
00301         self.txtPasswordAgain.setText("")
00302         self.buttonAddPassword.setText("Add Password")
00303       self.txtOldPassword.setText("")
00304 
00305   def checkModifyUserPermission(self, userId):
00306     """!\brief Check if the current user can modify other user's info.
00307 
00308     \param userId The id of the user that needs changing
00309 
00310     \return -1: Not enough permissions
00311              0: Current user is allowed to change this user's info
00312     """
00313     secMan = self.__common.getSecurityMan()
00314     if secMan is not None:
00315       operator = self.__prefs["operatorobj"]
00316       adminOverride = operator.isAdministrator()
00317       if 'enable_other_user_entry' not in operator.getPermissions() and not adminOverride:
00318         if operator.getId() != userId:
00319           QMessageBox.critical( None, "User Entry Error",
00320                                       "Not enough permissions to modify a user other than self",
00321                                       QMessageBox.Ok + QMessageBox.Default )
00322           return -1
00323     return 0
00324 
00325   def saveUser(self):
00326     """!\brief Save the user.
00327 
00328     """
00329     userId = str(self.txtUserID.text()).strip()
00330     if self.checkModifyUserPermission(userId) != 0: return
00331     try:
00332       userId = "%03d" % int(userId)
00333     except:
00334       QMessageBox.critical( None, "User Entry Error",
00335                                   "Invalid user id. Please enter as three digits",
00336                                   QMessageBox.Ok + QMessageBox.Default )
00337       return
00338     #if userId in self.__prefs["users"].values():
00339     #  QMessageBox.critical( None, "User Entry Error",
00340     #                              "User ID %s already exists" % userId,
00341     #                              QMessageBox.Ok + QMessageBox.Default )
00342     #elif self.__prefs["users"].has_key(user):
00343     #  QMessageBox.critical( None, "User Entry Error",
00344     #                              "User %s already exists" % user,
00345     #                              QMessageBox.Ok + QMessageBox.Default )
00346     #else:
00347     secMan = self.__common.getSecurityMan()
00348     oldLoginId = None
00349     oldUser = self.__prefs["users"].getUser(userId)
00350     if oldUser is not None:
00351       oldLoginId = oldUser.getLoginId()
00352     userLoginId = str(self.txtLoginId.text()).strip()
00353     userName = str(self.txtUserName.text()).strip()
00354     if userLoginId == '':
00355       self.txtLoginId.setText(userName)
00356       userLoginId = userName
00357     user = self.__prefs["users"].getUserByLoginId(userLoginId)
00358     if user is not None and user.getId() != userId:
00359       QMessageBox.critical( None, "User Entry Error",
00360                                   "Duplicate login id, please choose another",
00361                                   QMessageBox.Ok + QMessageBox.Default )
00362       return
00363     user = rcUser(userId, userLoginId, userName)
00364     secMan = self.__common.getSecurityMan()
00365     self.__prefs["users"].addUser(user)
00366     if oldLoginId is not None:
00367       if secMan is not None:
00368         if secMan.checkPassword(oldLoginId) == 0:
00369             secMan.deleteUser(oldLoginId)
00370     if self.__prefs["operatorobj"].getId() == userId:
00371       self.__prefs["operatorobj"] = user
00372       self.__prefs["operator"]= user.getName()
00373     existingItem = self.listviewUsers.findItem(userId, 0)
00374     if existingItem is not None:
00375       self.listviewUsers.takeItem(existingItem)
00376     QListViewItem(self.listviewUsers, userId, user.getName(), user.getLoginId())
00377     self.showUser(user)
00378 
00379   def addChangePassword(self):
00380     """!\brief Add new user or change the selected user's info.
00381 
00382     """
00383     secMan = self.__common.getSecurityMan()
00384     if secMan is None:
00385       QMessageBox.critical( None, "Security not enabled",
00386                                   "Can not add or change passwords when security is not enabled.",
00387                                   QMessageBox.Ok + QMessageBox.Default )
00388     else:
00389       userId = str(self.txtUserID.text()).strip()
00390       if self.checkModifyUserPermission(userId) != 0: return
00391       loginId = str(self.txtLoginId.text()).strip()
00392       userName = str(self.txtUserName.text()).strip()
00393       password1 = str(self.txtPassword.text()).strip()
00394       password2 = str(self.txtPasswordAgain.text()).strip()
00395       oldPassword = str(self.txtOldPassword.text()).strip()
00396       user = self.__prefs["users"].getUser(userId)
00397       if user.getLoginId() != loginId or user.getName() != userName:
00398         QMessageBox.critical( None, "Entry Error",
00399                                     "Please 'Save User' before adding/changing password.",
00400                                     QMessageBox.Ok + QMessageBox.Default )
00401         return
00402       if password1 == "**********":
00403         QMessageBox.critical( None, "Entry Error",
00404                                     "Please enter a valid new password.",
00405                                     QMessageBox.Ok + QMessageBox.Default )
00406         return
00407       if password1 != password2:
00408         QMessageBox.critical( None, "Entry Error",
00409                                     "Passwords don't match.",
00410                                     QMessageBox.Ok + QMessageBox.Default )
00411         return
00412       if len(password1) < 6:
00413         QMessageBox.critical( None, "Entry Error",
00414                                     "Passwords need to be at least 6 characters in length.",
00415                                     QMessageBox.Ok + QMessageBox.Default )
00416         return
00417       if secMan.checkPassword(loginId) == 0:
00418         # Change password
00419         if oldPassword == "":
00420           QMessageBox.critical( None, "Entry Error",
00421                                       "Please enter the old password.",
00422                                       QMessageBox.Ok + QMessageBox.Default )
00423         else:
00424           changePass = secMan.changePassword(loginId, password1, userName, oldPassword)
00425           if changePass == 0:
00426             QMessageBox.information( None, "Change Password",
00427                                         "User password changed successfully.",
00428                                         QMessageBox.Ok + QMessageBox.Default )
00429             self.showUser(user)
00430           elif changePass == -1:
00431             QMessageBox.critical( None, "Change Password",
00432                                         "Invalid user id or password.",
00433                                         QMessageBox.Ok + QMessageBox.Default )
00434           elif changePass == -2:
00435             QMessageBox.critical( None, "Change Password",
00436                                         "Can not access the password database.",
00437                                         QMessageBox.Ok + QMessageBox.Default )
00438           else:
00439             QMessageBox.critical( None, "Change Password",
00440                                         "Unknown error. Please check the message log.",
00441                                         QMessageBox.Ok + QMessageBox.Default )
00442 
00443       else:
00444         # Add password
00445         addPass = secMan.addPassword(loginId, password1, userName)
00446         if addPass == 0:
00447           QMessageBox.information( None, "Add Password",
00448                                       "User password added successfully.",
00449                                       QMessageBox.Ok + QMessageBox.Default )
00450           user = self.__prefs["users"].getUser(userId)
00451           self.showUser(user)
00452         elif addPass == -1:
00453           QMessageBox.critical( None, "Add Password",
00454                                       "Invalid user id or password.",
00455                                       QMessageBox.Ok + QMessageBox.Default )
00456 
00457         elif addPass == -2:
00458           QMessageBox.critical( None, "Add Password",
00459                                       "User already exists in the password database.",
00460                                       QMessageBox.Ok + QMessageBox.Default )
00461         elif addPass == -3:
00462           QMessageBox.critical( None, "Add Password",
00463                                       "Error accessing the database. Please check the message log",
00464                                       QMessageBox.Ok + QMessageBox.Default )
00465         else:
00466           QMessageBox.critical( None, "Add Password",
00467                                       "Unknown error. Please check the message log.",
00468                                       QMessageBox.Ok + QMessageBox.Default )
00469 
00470   def deleteUser(self):
00471     """!\brief Delete the user.
00472 
00473     """
00474     selItem = self.listviewUsers.selectedItem()
00475     userId = str(selItem.text(0))
00476     secMan = self.__common.getSecurityMan()
00477     user = self.__prefs["users"].getUser(userId)
00478     secMan.deleteUser(user.getLoginId())
00479     self.__prefs["users"].deleteUser(userId)
00480     self.listviewUsers.takeItem(selItem)
00481 
00482   def handleServerText(self):
00483     """!\brief Gray out the server textbox if the disable checkbox is checked.
00484 
00485     """
00486     self.txtServer.setEnabled(not self.chkServerDisable.isChecked())
00487 
00488   def loadConfig(self):
00489     """!\brief Update the GUI based on the configuration.
00490 
00491     \return Preferences instance
00492     """
00493     self.reposEdit.setText(self.__prefs.get("reposdir"))
00494     self.scriptEdit.setText(self.__prefs.get("appdir"))
00495     self.dataEdit.setText(self.__prefs.get("datadir"))
00496     self.logEdit.setText(self.__prefs.get("logdir"))
00497     self.repEdit.setText(self.__prefs.get("reportdir"))
00498     self.exportEdit.setText(self.__prefs.get("exportdir"))
00499     self.runIdEdit.setText(self.__prefs.get("runiddir"))
00500     self.archiveDataBox.setChecked(int(self.__prefs["datasave"]))
00501     self.exportDataBox.setChecked(int(self.__prefs["dataexport"]))
00502     self.logMsgBox.setChecked(int(self.__prefs["lognbl"]))
00503     self.verbosityLevel.setCurrentText(self.__prefs["loglevel"])
00504     self.logHostEdit.setText(self.__prefs["loghost"])
00505     self.logPortEdit.setText(str(self.__prefs["logport"]))
00506     self.chkVersions.setChecked(int(self.__prefs["versionnbl"]))
00507     self.chkElogIntegration.setChecked(int(self.__prefs["elognbl"]))
00508     self.txtPythonPath.setText(self.__prefs["pythonpath"])
00509     self.txtElogBookURL.setText(self.__prefs["elogurl"])
00510     self.txtServer.setText(self.__prefs["server"])
00511     self.chkServerDisable.setChecked(not int(self.__prefs["servernbl"]))
00512     self.handleServerText()
00513 
00514     self.setupCombo(self.comboSite, 'site', 'lastsite')
00515     self.setupCombo(self.comboInstrumentType, 'instrument type', 'lastinstrumenttype')
00516     self.setupCombo(self.comboPhase, 'phase', 'lastphase')
00517 
00518     if self.__prefs.has_key('style'):
00519       style = self.__prefs['style']
00520       if QString(style) in QStyleFactory.keys():
00521         self.comboStyle.setCurrentText(style)
00522 
00523     self.listviewUsers.clear()
00524     for (userId, user) in self.__prefs['users'].getUsers().items():
00525       QListViewItem(self.listviewUsers, userId, user.getName(), user.getLoginId())
00526     self.listviewUsers.setAllColumnsShowFocus(1)
00527     #self.listviewUsers.setSortOrder(Qt.Ascending)
00528     self.listviewUsers.setSorting(0, 1)
00529     #self.listviewUsers.setShowSortIndicator(1)
00530     return self.__prefs
00531 
00532   def setupCombo(self, combo, group, last):
00533     """!\brief Generic method for setting comboboxes.
00534 
00535     \param combo Combobox widget
00536     \param group Name of the group containing the list of items
00537     \param last  Last item set for the \a group
00538     """
00539     combo.clear()
00540     undef = 'NOT-DEFINED'
00541     if self.__prefs.has_key(group):
00542       dictPref = self.__prefs[group]
00543       keyList = dictPref.keys()
00544       keyList.sort()
00545       for item in keyList:
00546         if item != "Don't Use":
00547           combo.insertItem(item)
00548       if self.__common.options().securedir is None:
00549         combo.insertItem(undef)
00550 
00551       if self.__prefs.has_key(last):
00552         combo.setCurrentText(self.__prefs[last])
00553       else:
00554         self.__prefs[last] = str(combo.currentText())
00555 
00556 
00557   def loadAndExit(self):
00558     """!\brief Update the preferences from the GUI and exit the dialog.
00559 
00560     """
00561     prefs = self.screenToPrefs()
00562     if not self.sanityCheck(prefs): return
00563     self.__prefMan.refreshPrefs(prefs)
00564     QDialog.done(self, QDialog.Accepted)
00565 
00566   def writeConfig(self):
00567     """!\brief Update and write the preferences from the GUI and exit the dialog.
00568 
00569     """
00570     prefs = self.screenToPrefs()
00571     if not self.sanityCheck(prefs): return
00572     self.__prefMan.refreshPrefs(prefs)
00573     self.__prefMan.writeConfig()
00574     QDialog.done(self, QDialog.Accepted)
00575 
00576   def sanityCheck(self, prefs):
00577     """!\brief Perform a sanity check for the preferences.
00578 
00579     \param prefs Preferences instance.
00580 
00581     \return False if sanity check failed.
00582             True if sanity check passed.
00583     """
00584     if prefs['exportdir'] == prefs['datadir']:
00585       QMessageBox.critical( None, "Error",
00586                                   "Data Export path should be different than the Data File path",
00587                                   QMessageBox.Ok + QMessageBox.Default )
00588       return False
00589     return True
00590 
00591   def screenToPrefs(self):
00592     """!\brief Update the preferences from the GUI.
00593 
00594     \return Preferences instance
00595     """
00596     reposDir       = str(self.reposEdit.text())
00597     appDir         = str(self.scriptEdit.text())
00598     dataDir        = str(self.dataEdit.text())
00599     logDir         = str(self.logEdit.text())
00600     reportDir      = str(self.repEdit.text())
00601     exportDir      = str(self.exportEdit.text())
00602     runIdDir       = str(self.runIdEdit.text())
00603     if self.archiveDataBox.isChecked():
00604       dataSave     = 1
00605     else:
00606       dataSave     = 0
00607     if self.exportDataBox.isChecked():
00608       dataExport   = 1
00609     else:
00610       dataExport   = 0
00611     if self.logMsgBox.isChecked():
00612       lognbl       = 1
00613     else:
00614       lognbl       = 0
00615     loglevel       = str(self.verbosityLevel.currentText())
00616     loghost        = str(self.logHostEdit.text())
00617     logport        = int(str(self.logPortEdit.text()))
00618     if self.chkVersions.isChecked():
00619       versionnbl      = 1
00620     else:
00621       versionnbl      = 0
00622     if self.chkElogIntegration.isChecked():
00623       elognbl      = 1
00624     else:
00625       elognbl      = 0
00626     site           = str(self.comboSite.currentText())
00627     instrumentType = str(self.comboInstrumentType.currentText())
00628     phase          = str(self.comboPhase.currentText())
00629     pythonpath     = str(self.txtPythonPath.text())
00630     if pythonpath.strip() != '':
00631       sys.path =  map(string.strip, os.path.expandvars(pythonpath).split(';'))
00632       sys.path += self.__prefMan._rcPreferencesManager__pythonPath
00633     elogurl        = str(self.txtElogBookURL.text())
00634     server         = str(self.txtServer.text())
00635     if self.chkServerDisable.isChecked():
00636       servernbl    = 0
00637     else:
00638       servernbl    = 1
00639     prefs = {}
00640     prefs['reposdir'] = reposDir
00641     prefs['appdir']   = appDir
00642     prefs['datadir'] = dataDir
00643     prefs['logdir'] = logDir
00644     prefs['reportdir'] = reportDir
00645     prefs['exportdir'] = exportDir
00646     prefs['runiddir'] = runIdDir
00647     prefs['datasave'] = dataSave
00648     prefs['dataexport'] = dataExport
00649     prefs['versionnbl'] = versionnbl
00650     prefs['elognbl'] = elognbl
00651     prefs['lognbl'] = lognbl
00652     prefs['loglevel'] = loglevel
00653     prefs['loghost'] = loghost
00654     prefs['logport'] = logport
00655     prefs['pythonpath'] = pythonpath
00656     prefs['elogurl'] = elogurl
00657     prefs['server'] = server
00658     prefs['servernbl'] = servernbl
00659     prefs['lastinstrumenttype'] = instrumentType
00660     prefs['lastphase'] = phase
00661     prefs['lastsite'] = site
00662     return prefs
00663 
00664   def cancel(self):
00665     """!\brief cancel Cancel out of the dialog.
00666     """
00667     QDialog.done(self,QDialog.Rejected)
00668 
00669   def default(self):
00670     """!\brief Update the GUI from the default preferences.
00671 
00672     """
00673     self.reposEdit.setText(self.__prefMan.defPrefs()["reposdir"])
00674     self.scriptEdit.setText(self.__prefMan.defPrefs()["appdir"])
00675     self.dataEdit.setText(self.__prefMan.defPrefs()["datadir"])
00676     self.logEdit.setText(self.__prefMan.defPrefs()["logdir"])
00677     self.repEdit.setText(self.__prefMan.defPrefs()["reportdir"])
00678     self.exportEdit.setText(self.__prefMan.defPrefs()["exportdir"])
00679     self.runIdEdit.setText(self.__prefMan.defPrefs()["runiddir"])
00680     self.archiveDataBox.setChecked(int(self.__prefMan.defPrefs()["datasave"]))
00681     self.exportDataBox.setChecked(int(self.__prefMan.defPrefs()["dataexport"]))
00682     self.logMsgBox.setChecked(int(self.__prefMan.defPrefs()["lognbl"]))
00683     self.verbosityLevel.setCurrentText(self.__prefMan.defPrefs()["loglevel"])
00684     self.logHostEdit.setText(self.__prefMan.defPrefs()["loghost"])
00685     self.logPortEdit.setText(str(self.__prefMan.defPrefs()["logport"]))
00686     self.chkVersions.setChecked(int(self.__prefMan.defPrefs()["versionnbl"]))
00687     self.chkElogIntegration.setChecked(int(self.__prefMan.defPrefs()["elognbl"]))
00688 
00689   def choosePath(self, lineEdit, caption):
00690     """!\brief Path chooser for the items under the Paths tab.
00691 
00692     \param lineEdit Lineedit widget for the path entry
00693     \param caption  Caption for the path selection dialog
00694     """
00695     folder = QFileDialog.getExistingDirectory(self.__prefs.expandVars(str(lineEdit.text())), self, None, caption)
00696     folder = str(folder)
00697     if folder != '':
00698       lineEdit.setText(self.__prefs.composePath(folder))
00699 
00700   def reposBrowser(self):
00701     """!\brief Path chooser for the repository.
00702 
00703     """
00704     self.choosePath(self.reposEdit, "Select repository path")
00705 
00706   def appBrowser(self):
00707     """!\brief Path chooser for the application.
00708 
00709     """
00710     self.choosePath(self.scriptEdit, "Select application path")
00711 
00712   def dataBrowser(self):
00713     """!\brief Path chooser for the archive data file.
00714 
00715     """
00716     self.choosePath(self.dataEdit, "Select archive data file path")
00717 
00718   def logBrowser(self):
00719     """!\brief Path chooser for the log file.
00720 
00721     """
00722     self.choosePath(self.logEdit, "Select log file path")
00723 
00724   def repBrowser(self):
00725     """!\brief Path chooser for the run report.
00726 
00727     """
00728     self.choosePath(self.repEdit, "Select run report path")
00729 
00730   def exportBrowser(self):
00731     """!\brief Path chooser for the export folder.
00732 
00733     """
00734     self.choosePath(self.exportEdit, "Select export folder path")
00735 
00736   def runIdBrowser(self):
00737     """!\brief Path chooser for the runId.cfg file.
00738 
00739     """
00740     self.choosePath(self.runIdEdit, "Select the runId.cfg path")
00741 
00742 
00743 if __name__ == "__main__":
00744   from ScriptEngineCommon     import ScriptEngineCommon
00745 
00746   rcCommon = ScriptEngineCommon()
00747   rcCommon.initialize()
00748   rcCommon.setLoggingLevel("INFO")
00749 
00750   QObject.connect(qApp,SIGNAL("lastWindowClosed()"),qApp,SLOT("quit()"))
00751 
00752   m = rcCommon.prefMan()
00753   m.loadConfig()
00754   prefs = m.preferences()
00755   font = qApp.font()
00756   if prefs.has_key('fontfamily'):
00757     font.setFamily(prefs['fontfamily'])
00758   if prefs.has_key('fontsize'):
00759     font.setPointSize(int(prefs['fontsize']))
00760   if prefs.has_key('fontweight'):
00761     font.setWeight(int(prefs['fontweight']))
00762   if prefs.has_key('fontitalic'):
00763     font.setItalic(int(prefs['fontitalic']))
00764   qApp.setFont(font)
00765 
00766   if prefs.has_key('style'):
00767     style = prefs['style']
00768     if style in QStyleFactory.keys():
00769       qApp.setStyle(QStyleFactory.create(style))
00770 
00771   prefGUI = rcCommon.prefGUI()
00772   qApp.setMainWidget(prefGUI)
00773   prefGUI.show()
00774   prefGUI.loadConfig()
00775   prefGUI.exec_loop()

Generated on Thu Apr 27 20:52:43 2006 for LICOS L02-01-00 by doxygen 1.4.6-NO