00001 #!/usr/bin/env python 00002 # 00003 # Copyright 2002 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__ = "RunControl Global Panel Implementation" 00012 __author__ = "S. Tuvi <stuvi@SLAC.Stanford.edu> SLAC - GLAST LAT I&T/Online" 00013 __date__ = "10/11/2002" 00014 __version__ = "$Revision: 2.20 $" 00015 __release__ = "$Name: R04-12-00 $" 00016 __credits__ = "SLAC" 00017 00018 import LATTE.copyright_SLAC 00019 00020 00021 from qt import SIGNAL, QCursor, Qt, QAction, QKeySequence, QPixmap 00022 import os 00023 import sys 00024 00025 import GlobalPanel 00026 from EnvMonImpl import EnvMonImpl 00027 from LATTE.browser.BrowserImpl import BrowserImpl 00028 from LATTE.power.PorcinePanel import PorcineWindow 00029 from LATTE.power.GpibPwrCtrlImpl import GpibPwrCtrlImpl 00030 from LATTE.browser.userAppBrowser import userAppBrowser 00031 from LATTE.browser.trgDisplayImpl import trgDisplayImpl 00032 00033 class GlobalPanelImpl(GlobalPanel.GlobalPanel): 00034 00035 def __init__(self, rc, common, parent = None, name = None, fl = 0): 00036 GlobalPanel.GlobalPanel.__init__(self, parent, name, fl) 00037 self.__rc = rc 00038 self.__common = common 00039 self.__parent = parent 00040 self.__userapp = None 00041 self.__operator = None 00042 self.__gpib = None 00043 self.__power = None 00044 00045 self.connect(self.MSGLoggerButton,SIGNAL("clicked()"),self.loadMSGLogger) 00046 self.connect(self.cmdEnvMon,SIGNAL("clicked()"),self.startEnvMon) 00047 self.connect(self.cmdBrowser,SIGNAL("clicked()"),self.startBrowser) 00048 self.connect(self.cmdBrowseExport,SIGNAL("clicked()"),self.browseExportedFiles) 00049 self.connect(self.cmdFabricPower,SIGNAL("clicked()"),self.fabricPowerControl) 00050 self.connect(self.cmdGPIBCtrl,SIGNAL("clicked()"),self.gpibPowerSupplyControl) 00051 self.connect(self.triggerdisplay,SIGNAL("clicked()"),self.startTriggerDisplay) 00052 self.toolsMessage_LoggerAction = QAction(self.__rc,"toolsMessage_LoggerAction") 00053 self.toolsEnvironmental_MonitoringAction = QAction(self.__rc,"toolsEnvironmental_MonitoringAction") 00054 self.toolsRegister_BrowserAction = QAction(self.__rc,"toolsRegister_BrowserAction") 00055 self.toolsBrowse_Exported_FilesAction = QAction(self.__rc,"toolsBrowse_Exported_FilesAction") 00056 self.toolsFabric_PowerAction = QAction(self.__rc,"toolsFabric_PowerAction") 00057 self.toolsGPIB_CtrlAction = QAction(self.__rc,"toolsGPIB_CtrlAction") 00058 self.toolsTrigger_DisplayAction = QAction(self.__rc,"toolstrigger_DisplayAction") 00059 self.toolsMessage_LoggerAction.setText("Message Logger") 00060 self.toolsMessage_LoggerAction.setMenuText("&Message Logger") 00061 self.toolsMessage_LoggerAction.setAccel(QKeySequence("Ctrl+Shift+M")) 00062 self.toolsEnvironmental_MonitoringAction.setText("Environmental Monitoring") 00063 self.toolsEnvironmental_MonitoringAction.setMenuText("&Environmental Monitoring") 00064 self.toolsEnvironmental_MonitoringAction.setAccel(QKeySequence("Ctrl+Shift+E")) 00065 self.toolsRegister_BrowserAction.setText("Register Browser") 00066 self.toolsRegister_BrowserAction.setMenuText("&Register Browser") 00067 self.toolsRegister_BrowserAction.setToolTip("Register Browser") 00068 self.toolsRegister_BrowserAction.setAccel(QKeySequence("Ctrl+Shift+R")) 00069 self.toolsBrowse_Exported_FilesAction.setText("Browse Exported Files") 00070 self.toolsBrowse_Exported_FilesAction.setMenuText("&Browse Exported Files") 00071 self.toolsBrowse_Exported_FilesAction.setToolTip("Browse Exported Files") 00072 self.toolsBrowse_Exported_FilesAction.setAccel(QKeySequence("Ctrl+Shift+B")) 00073 self.toolsFabric_PowerAction.setText("Fabric/Power Control") 00074 self.toolsFabric_PowerAction.setMenuText("&Fabric/Power Control") 00075 self.toolsFabric_PowerAction.setToolTip("Fabric/Power Control") 00076 self.toolsFabric_PowerAction.setAccel(QKeySequence("Ctrl+Shift+F")) 00077 self.toolsGPIB_CtrlAction.setText("GPIB Power Supply Control") 00078 self.toolsGPIB_CtrlAction.setMenuText("&GPIB Power Supply Control") 00079 self.toolsGPIB_CtrlAction.setToolTip("GPIB Power Supply Control") 00080 self.toolsGPIB_CtrlAction.setAccel(QKeySequence("Ctrl+Shift+G")) 00081 self.toolsTrigger_DisplayAction.setText("Trigger Display") 00082 self.toolsTrigger_DisplayAction.setMenuText("&Trigger Display") 00083 self.toolsTrigger_DisplayAction.setToolTip("Trigger Display") 00084 self.toolsTrigger_DisplayAction.setAccel(QKeySequence("Ctrl+Shift+T")) 00085 self.toolsMessage_LoggerAction.addTo(self.__rc.Tools) 00086 self.toolsEnvironmental_MonitoringAction.addTo(self.__rc.Tools) 00087 self.toolsRegister_BrowserAction.addTo(self.__rc.Tools) 00088 self.toolsBrowse_Exported_FilesAction.addTo(self.__rc.Tools) 00089 self.toolsFabric_PowerAction.addTo(self.__rc.Tools) 00090 self.toolsGPIB_CtrlAction.addTo(self.__rc.Tools) 00091 self.toolsTrigger_DisplayAction.addTo(self.__rc.Tools) 00092 00093 self.connect(self.toolsMessage_LoggerAction,SIGNAL("activated()"),self.loadMSGLogger) 00094 self.connect(self.toolsEnvironmental_MonitoringAction,SIGNAL("activated()"),self.startEnvMon) 00095 self.connect(self.toolsRegister_BrowserAction,SIGNAL("activated()"),self.startBrowser) 00096 self.connect(self.toolsBrowse_Exported_FilesAction,SIGNAL("activated()"),self.browseExportedFiles) 00097 self.connect(self.toolsFabric_PowerAction,SIGNAL("activated()"),self.fabricPowerControl) 00098 self.connect(self.toolsGPIB_CtrlAction,SIGNAL("activated()"),self.gpibPowerSupplyControl) 00099 self.connect(self.toolsTrigger_DisplayAction,SIGNAL("activated()"),self.startTriggerDisplay) 00100 if self.__common.options().securedir is not None: 00101 if os.path.splitext(os.path.split(sys.executable)[1])[0] == 'pythonw': 00102 self.loadMSGLogger() 00103 00104 if not self.isrealfile(sys.__stdout__): 00105 sys.stdout = NullStream() 00106 00107 if not self.isrealfile(sys.__stderr__): 00108 sys.stderr = NullStream() 00109 00110 if self.__common.options().appdir is not None: 00111 self.userAppAction = QAction(self.__rc, "userAppAction") 00112 self.userAppAction.setText("User Applications Browser") 00113 self.userAppAction.setMenuText("&User Applications Browser") 00114 self.userAppAction.setToolTip("User Applications Browser") 00115 self.userAppAction.setAccel(QKeySequence("Ctrl+Shift+U")) 00116 self.userAppAction.addTo(self.__rc.Tools) 00117 self.connect(self.userAppAction,SIGNAL("activated()"),self.startUserApp) 00118 00119 def isrealfile(self, file): 00120 """ 00121 Test if file is on the os filesystem 00122 """ 00123 if not hasattr(file, 'fileno'): return False 00124 00125 try: tmp = os.dup(file.fileno()) 00126 except: return False 00127 else: os.close(tmp); return True 00128 00129 def checkFabricEnable(self, fabricEnable): 00130 if fabricEnable: 00131 self.toolsFabric_PowerAction.setEnabled(1) 00132 self.cmdFabricPower.setEnabled(1) 00133 if self.__operator is not None: 00134 self.applyPermissions(self.__operator) 00135 else: 00136 self.toolsFabric_PowerAction.setEnabled(0) 00137 self.cmdFabricPower.setEnabled(0) 00138 00139 def applyPermissions(self, operator): 00140 self.__operator = operator 00141 adminOverride = operator.isAdministrator() 00142 if 'start_message_logger' in operator.getPermissions() or adminOverride: 00143 self.toolsMessage_LoggerAction.setEnabled(1) 00144 self.MSGLoggerButton.setEnabled(1) 00145 else: 00146 self.toolsMessage_LoggerAction.setEnabled(0) 00147 self.MSGLoggerButton.setEnabled(0) 00148 00149 if 'start_env_monitor' in operator.getPermissions() or adminOverride: 00150 self.toolsEnvironmental_MonitoringAction.setEnabled(1) 00151 self.cmdEnvMon.setEnabled(1) 00152 else: 00153 self.toolsEnvironmental_MonitoringAction.setEnabled(0) 00154 self.cmdEnvMon.setEnabled(0) 00155 00156 if 'start_reg_browser' in operator.getPermissions() or adminOverride: 00157 self.toolsRegister_BrowserAction.setEnabled(1) 00158 self.cmdBrowser.setEnabled(1) 00159 else: 00160 self.toolsRegister_BrowserAction.setEnabled(0) 00161 self.cmdBrowser.setEnabled(0) 00162 00163 if 'browse_exported_files' in operator.getPermissions() or adminOverride: 00164 self.toolsBrowse_Exported_FilesAction.setEnabled(1) 00165 self.cmdBrowseExport.setEnabled(1) 00166 else: 00167 self.toolsBrowse_Exported_FilesAction.setEnabled(0) 00168 self.cmdBrowseExport.setEnabled(0) 00169 00170 if 'fabric_power_control' in operator.getPermissions() or adminOverride: 00171 self.toolsFabric_PowerAction.setEnabled(1) 00172 self.cmdFabricPower.setEnabled(1) 00173 else: 00174 self.toolsFabric_PowerAction.setEnabled(0) 00175 self.cmdFabricPower.setEnabled(0) 00176 00177 if 'trigger_display' in operator.getPermissions() or adminOverride: 00178 self.toolsTrigger_DisplayAction.setEnabled(1) 00179 self.triggerdisplay.setEnabled(1) 00180 else: 00181 self.toolsTrigger_DisplayAction.setEnabled(0) 00182 self.triggerdisplay.setEnabled(0) 00183 00184 if 'gpib_control' in operator.getPermissions() or adminOverride: 00185 self.toolsGPIB_CtrlAction.setEnabled(1) 00186 self.cmdGPIBCtrl.setEnabled(1) 00187 else: 00188 self.toolsGPIB_CtrlAction.setEnabled(0) 00189 self.cmdGPIBCtrl.setEnabled(0) 00190 00191 def loadMSGLogger(self): 00192 if self.__common.getMSGLogger() is not None: 00193 self.__common.getMSGLogger().show() 00194 00195 def startEnvMon(self): 00196 env = EnvMonImpl(self.__common, None, None) 00197 env.resize(698,438) 00198 env.show() 00199 00200 def startBrowser(self): 00201 lat = self.__common.getLAT() 00202 xbrd = self.__common.getXBRD() 00203 ocs = self.__common.getOCS() 00204 self.__browser = BrowserImpl(lat, xbrd, ocs, None, None, Qt.WDestructiveClose) 00205 self.__browser.resize(698,438) 00206 self.__browser.show() 00207 00208 def startTriggerDisplay(self): 00209 lat = self.__common.getLAT() 00210 ocs = self.__common.getOCS() 00211 server = self.__common.prefMan().preferences()["server"].strip() 00212 self.__triggerDisplay=trgDisplayImpl(lat,ocs,server,None,None,None,0,Qt.WDestructiveClose) 00213 self.__triggerDisplay.show() 00214 00215 00216 def browseExportedFiles(self): 00217 dbn = self.__common.getDBN() 00218 if '_LastExportPath' in dbn: 00219 import webbrowser 00220 webbrowser.open(url=self.__common.getDBN()['_LastExportPath'], new=1) 00221 00222 def fabricPowerControl(self): 00223 if self.__power is None: 00224 self.__power=PorcineWindow(self.__common, self.__rc, None, None) 00225 self.__power.setCaption("Fabric/Power Control") 00226 self.__power.show() 00227 00228 def gpibPowerSupplyControl(self): 00229 import gpibCtrl 00230 if self.__gpib is None: 00231 self.__gpib=GpibPwrCtrlImpl(gpibCtrl, self.__rc) 00232 self.__gpib.setCaption("GPIB Power Supply Control") 00233 self.__gpib.show() 00234 00235 def startUserApp(self): 00236 if self.__userapp is None: 00237 if self.__common.options().appdir is not None: 00238 appdir = self.__common.options().appdir 00239 self.__userapp = userAppBrowser(self.__rc, appdir) 00240 self.__userapp.updateSchema() 00241 self.__userapp.updateSuites() 00242 self.__userapp.show() 00243 elif self.__userapp.isVisible(): 00244 self.__userapp.hide() 00245 else: 00246 self.__userapp.updateSchema() 00247 self.__userapp.show() 00248 00249 def getUserApp(self, appname=None): 00250 if appname is not None: 00251 return self.__userapp.getGui(appname) 00252 else: 00253 return self.__userapp 00254 00255 def getUserAppTree(self): 00256 return self.__userapp.getTree() 00257 00258 class NullStream: 00259 """ 00260 A file like class that writes nothing 00261 """ 00262 def close(self): pass 00263 def flush(self): pass 00264 def write(self, str): pass 00265 def writelines(self, sequence): pass 00266 00267