00001 #!/usr/local/bin/python 00002 # 00003 # Copyright 2004 00004 # by 00005 # The Board of Trustees of the 00006 # Leland Stanford Junior University. 00007 # All rights reserved. 00008 # 00009 00010 00011 __facility__ = "Trigger" 00012 __abstract__ = "Multibar with scale for trigger display" 00013 __author__ = "Martin Kocian, SLAC" 00014 __date__ = ("$Date: 2005/06/15 23:42:30 $").split(' ')[1] 00015 __version__ = "$Revision: 2.5 $" 00016 __release__ = "$Name: R04-12-00 $" 00017 __credits__ = "SLAC" 00018 00019 00020 from qt import * 00021 from bar import bar 00022 from math import * 00023 00024 00025 class multibar(QWidget): 00026 def __init__(self,parent = None,name = None,fl = 0): 00027 QWidget.__init__(self,parent,name,fl) 00028 if not name: 00029 self.setName("multibar") 00030 def setup(self,nbars,lw=0): 00031 00032 self.__minscale=1 00033 self.__fullscale=1 00034 self.lwid=lw 00035 self.line2 = QFrame(self,"line2") 00036 self.line2.setFrameShape(QFrame.HLine) 00037 self.line2.setFrameShadow(QFrame.Plain) 00038 self.line2.setLineWidth(3) 00039 self.line2.setFrameShape(QFrame.HLine) 00040 00041 self.line1 = QFrame(self,"line1") 00042 self.line1.setFrameShape(QFrame.VLine) 00043 self.line1.setFrameShadow(QFrame.Plain) 00044 self.line1.setLineWidth(3) 00045 self.line1.setFrameShape(QFrame.VLine) 00046 00047 self.line2_2 = QFrame(self,"line2_2") 00048 self.line2_2.setFrameShape(QFrame.HLine) 00049 self.line2_2.setFrameShadow(QFrame.Plain) 00050 self.line2_2.setLineWidth(3) 00051 self.line2_2.setFrameShape(QFrame.HLine) 00052 00053 self.low = QLabel(self,"low") 00054 self.low.setAlignment(QLabel.AlignVCenter | QLabel.AlignRight) 00055 self.low.setScaledContents(1) 00056 00057 self.font=QFont("Times") 00058 self.titlefont=QFont("Times") 00059 00060 self.nbars=nbars 00061 self.bars=[] 00062 self.labels=[] 00063 self.__values=[] 00064 for i in range (nbars): 00065 self.bars.append( bar(self,"bar_%d"%i)) 00066 self.labels.append(QLabel(self,"label_%d"%i)) 00067 self.labels[i].setAlignment(QLabel.AlignVCenter | QLabel.AlignCenter) 00068 self.labels[i].setScaledContents(1) 00069 self.__values.append(0) 00070 00071 self.line5_2 = QFrame(self,"line5_2") 00072 self.line5_2.setFrameShape(QFrame.HLine) 00073 self.line5_2.setFrameShadow(QFrame.Plain) 00074 self.line5_2.setLineWidth(2) 00075 self.line5_2.setFrameShape(QFrame.HLine) 00076 00077 self.line2_3 = QFrame(self,"line2_3") 00078 self.line2_3.setFrameShape(QFrame.HLine) 00079 self.line2_3.setFrameShadow(QFrame.Plain) 00080 self.line2_3.setLineWidth(3) 00081 self.line2_3.setFrameShape(QFrame.HLine) 00082 00083 self.line5_2_2 = QFrame(self,"line5_2_2") 00084 self.line5_2_2.setFrameShape(QFrame.HLine) 00085 self.line5_2_2.setFrameShadow(QFrame.Plain) 00086 self.line5_2_2.setLineWidth(2) 00087 self.line5_2_2.setFrameShape(QFrame.HLine) 00088 00089 00090 self.high = QLabel(self,"high") 00091 self.high.setAlignment(QLabel.AlignVCenter | QLabel.AlignRight) 00092 self.high.setScaledContents(1) 00093 00094 self.title=QLabel(self,"title") 00095 self.title.setAlignment(QLabel.AlignVCenter| QLabel.AlignCenter) 00096 self.title.setScaledContents(1) 00097 00098 self.languageChange() 00099 00100 #self.resize(QSize(124,168).expandedTo(self.minimumSizeHint())) 00101 self.clearWState(Qt.WState_Polished) 00102 00103 00104 def languageChange(self): 00105 self.setCaption(self.__tr("Form1")) 00106 self.low.setText(self.__tr("low")) 00107 self.title.setText(self.__tr("Title")) 00108 for i in range(self.nbars): 00109 self.labels[i].setText(self.__tr("level")) 00110 self.high.setText(self.__tr("high")) 00111 00112 00113 def __tr(self,s,c = None): 00114 return qApp.translate("multibar",s,c) 00115 00116 def resizeEvent(self,rev): 00117 xel=float(rev.size().width())/(8.+self.lwid+self.nbars*6) 00118 yel=float(rev.size().height())/17. 00119 self.line2.setGeometry(QRect(xel*(5.+self.lwid),yel*2+yel*12-3,xel*2,3)) 00120 self.line1.setGeometry(QRect(xel*(5+self.lwid),yel*2,3,yel*12)) 00121 self.line2_2.setGeometry(QRect(xel*(5+self.lwid),yel*2+yel*6-1,xel*2,3)) 00122 self.low.setGeometry(QRect(0,yel*2+yel*11,xel*(5+self.lwid),yel*1.)) 00123 self.line5_2.setGeometry(QRect(xel*(5+self.lwid),yel*2+yel*3-2,xel*1.5,2)) 00124 self.line2_3.setGeometry(QRect(xel*(5+self.lwid),yel*2,xel*2,3)) 00125 self.line5_2_2.setGeometry(QRect(xel*(5+self.lwid),yel*2+yel*9-2,xel*1.5,2)) 00126 self.high.setGeometry(QRect(0,yel*2,xel*(5+self.lwid),yel*1.)) 00127 self.title.setGeometry(xel*(7+self.lwid),0,xel*self.nbars*6,yel*2) 00128 self.titlefont.setPointSizeFloat(yel*1.4) 00129 self.title.setFont(self.titlefont) 00130 self.font.setPointSizeFloat(yel*.7) 00131 self.low.setFont(self.font) 00132 self.high.setFont(self.font) 00133 for i in range (self.nbars): 00134 self.bars[i].setGeometry(QRect(xel*(8+self.lwid)+i*6*xel,yel*2,xel*4,yel*12)) 00135 self.labels[i].setGeometry(QRect(i*6*xel+(7+self.lwid)*xel,yel*2+yel*12,xel*6,yel*3.)) 00136 self.labels[i].setFont(self.font) 00137 00138 00139 def setHigh(self,high): 00140 self.high.setText(self.__tr(high)) 00141 00142 def setLow(self,low): 00143 self.low.setText(self.__tr(low)) 00144 00145 def setBarTitle(self,i,title): 00146 if i<self.nbars: 00147 self.labels[i].setText(self.__tr(title)) 00148 00149 def setTitle(self,title): 00150 self.title.setText(self.__tr(title)) 00151 00152 def setScale(self,scale): 00153 for i in range(self.nbars): 00154 self.bars[i].setScale(scale) 00155 00156 def setMinScale(self,min): 00157 self.__minscale=min 00158 00159 def setSlidingScale(self,scale): 00160 self.__fullscale=scale 00161 self.setScale(scale) 00162 self.setHigh("%d"%scale) 00163 self.setLow("0") 00164 00165 def displaySlidingScaleValue(self,i,val): 00166 self.__values[i]=val 00167 maxval=max(self.__values) 00168 if maxval>0 and (maxval>self.__fullscale or maxval<self.__fullscale*.2): 00169 l=pow(10,floor(log10(maxval))) 00170 if maxval/l>5:newscale=10*l 00171 elif maxval/l>2:newscale=5*l 00172 else:newscale=2*l 00173 if newscale<self.__minscale: 00174 newscale=self.__minscale 00175 self.setSlidingScale(newscale) 00176 self.bars[i].displayValue(val)