00001
00002
00003
00004
00005
00006
00007
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
00339
00340
00341
00342
00343
00344
00345
00346
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
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
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
00528 self.listviewUsers.setSorting(0, 1)
00529
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()