Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

rcPreferencesGUIImpl.py

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

Generated on Fri Jul 21 13:26:31 2006 for LATTE R04-12-00 by doxygen 1.4.3