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()