Exemplo n.º 1
0
 def resetModes(self):
     self.logger().show()
     try:
         attr = self.getModel()
         schema = self.getSchema()
         print('%s: resetModes(%s)' % (fun.time2str(), attr))
         qm = Qt.QMessageBox(Qt.QMessageBox.Warning, 'Confirmation',
                             '%s archiving will be stopped' % attr,
                             Qt.QMessageBox.Ok | Qt.QMessageBox.Cancel)
         r = qm.exec_()
         if r == Qt.QMessageBox.Ok:
             if not self.api:
                 self.api = pta.api(self.getSchema().lower(),
                                    logger=self.logger())
             self.api.log = self.logger()
             #self.emit(Qt.SIGNAL('archive'),attr,modes)
             Qt.QApplication.instance().setOverrideCursor(
                 Qt.QCursor(Qt.Qt.WaitCursor))
             thr = threading.Thread(target=self.startArchiving,
                                    args=(attr, {}))
             QLoggerDialog._threads = filter(Thread.is_alive,
                                             self.threads()) + [thr]
             thr.start()
         else:
             self.logger().hide()
     except:
         traceback.print_exc()
     print('%s: resetModes(...): running!' % (fun.time2str()))
    def wrapper(instance, f, *args, **kwargs):
        try:
            from taurus.qt.qtgui.plot import TaurusPlot
            obj = ArchivedTrendLogger(trend=instance)
            menu = f(instance)
            before = MenuActionAppender.before \
                or instance._usePollingBufferAction
            menu.insertSeparator(before)

            for t in MenuActionAppender.ACTIONS:
                if len(t) == 4:
                    actname, label, method, args = t
                else:
                    actname, label, method = t
                    args = (instance, )
                action = getattr(instance, actname, None)
                if not action:
                    setattr(instance, actname, Qt.QAction(label, None))
                    action = getattr(instance, actname)
                    instance.connect(
                        action, Qt.SIGNAL("triggered()"),
                        (lambda o=instance, m=method, a=args, l=obj:
                         (l.warning(','.join(map(str, (o, m, a)))),
                          (m(o) if fn.isCallable(m) else getattr(
                              o, m, getattr(l, m, None)))(*a))))

                menu.insertAction(before, action)
            menu.insertSeparator(before)
            return menu

        except:
            traceback.print_exc()
 def __init__(self,parent=None,devices=None):
     #print '~'*80
     #print 'In AttributesPanel()'
     PARENT_KLASS.__init__(self,parent)
     self.setSizePolicy(Qt.QSizePolicy(Qt.QSizePolicy.Ignored,Qt.QSizePolicy.Ignored))
     self.worker = SingletonWorker(parent=self,cursor=True,sleep=50.,start=True)
     #self.worker.log.setLogLevel(self.worker.log.Debug)
     self.filters=('','','') #server/device/attribute
     self.devices=devices or []
     self.setValues(None)
     self.models = []
     self.current_item = None
     #self.connect(self, Qt.SIGNAL('customContextMenuRequested(const QPoint&)'), self.onContextMenu)
     self.popMenu = Qt.QMenu(self)
     self.actions = {
         'TestDevice': self.popMenu.addAction(Qt.QIcon(),"Test Device",self.onTestDevice),
         'ShowDeviceInfo': self.popMenu.addAction(Qt.QIcon(),"Show Device Info",self.onShowInfo),
         #'ShowDevicePanel': self.popMenu.addAction(Qt.QIcon(),"Show Info",self.onShowPanel),
         'ShowArchivingInfo': self.popMenu.addAction(Qt.QIcon(),"Show Archiving Info",self.onShowArchivingModes),
         #'Test Device': self.popMenu.addAction(Qt.QIcon(),"Test Device",self.onTestDevice)
         }
     #if hasattr(self,'setFrameStyle'):
         #self.setFrameStyle(self.Box)
     try:
         import PyTangoArchiving
         self.reader = PyTangoArchiving.Reader('*')
         #self.hreader = self.reader.configs['hdb']
         #self.treader = self.reader.configs.get('tdb',self.hreader)
     except:
         traceback.print_exc()
Exemplo n.º 4
0
 def initStyle(self, show=False):
     tag, formula = self.tag, self.formula
     #tag = getattr(tag,'tag',tag) or self.tag
     #formula = formula or getattr(obj,'formula','') or self.formula
     self.org_formula = formula
     print 'In AlarmPreview.updateStyle(%s,%s)' % (tag, formula)
     try:
         self.setLayout(Qt.QVBoxLayout())
         self.setMinimumSize(500, 500)
         self.frame = Qt.QSplitter()
         self.frame.setOrientation(Qt.Qt.Vertical)
         self.layout().addWidget(self.frame)
         self.upperPanel = AlarmFormula(self.tag or formula)
         self.lowerPanel = AttributesPreview(
             source=self.upperPanel.updateFormula)
         self.lowerPanel.setMinimumHeight(250)
         self.frame.insertWidget(0, self.upperPanel)
         self.frame.insertWidget(1, self.lowerPanel)
         self.setWindowTitle("%s Alarm Formula Preview" % (tag or ''))
         #Refresh from formula:
         #upperPanel.updateFormula(formula)
         if self.upperPanel.formula: self.lowerPanel.updateAttributes()
         if show: self.show()
         print 'AlarmGUI.showAlarmPreview(%s) finished.' % tag
         print self.frame.sizes()
     except:
         print traceback.format_exc()
         print 'Unable to showAlarmPreview(%s)' % tag
Exemplo n.º 5
0
 def setTable(self, multirow=None):
     if multirow is not None:
         self.multirow = multirow
     self.table = Qt.QTableWidget()
     self.header = self.table.horizontalHeader()
     try:
         self.table.verticalHeader().setResizeMode(self.header.Stretch)
         self.header.setResizeMode(self.header.Stretch)
     except:
         pass
     if self.multirow:
         self.table.setColumnCount(3)
         self.table.setRowCount(3)
         self.table.setHorizontalHeaderLabels(
             ['Period', 'Range-', 'Range+'])
         self.table.setVerticalHeaderLabels(
             ['Periodic', 'Relative', 'Absolute'])
     else:
         self.table.setMaximumHeight(60)
         self.table.setColumnCount(6)
         self.table.setRowCount(1)
         self.table.verticalHeader().hide()
         self.table.setHorizontalHeaderLabels([
             'Periodic', 'Abs/Rel', 'Polling', 'Range-', 'Range+', 'Select'
         ])
         self.qb = Qt.QCheckBox()
         self.table.setCellWidget(0, 5, self.qb)
Exemplo n.º 6
0
def addOkCancelButtons(widget, cancel=True):
    qb = Qt.QDialogButtonBox(widget)
    qb.addButton(qb.Ok)
    if cancel: qb.addButton(qb.Cancel)
    widget.layout().addWidget(qb)
    widget.connect(qb, Qt.SIGNAL("accepted()"), widget.accept)
    if cancel: widget.connect(qb, Qt.SIGNAL("rejected()"), widget.reject)
    return
Exemplo n.º 7
0
 def __init__(self, parent=None):
     Qt.QScrollArea.__init__(self, parent)
     #Qt.QWidget.__init__(self,parent)
     self.main = Qt.QWidget(self)
     self.main.setLayout(Qt.QVBoxLayout())
     #self.setWidget(self.main)
     self.resize(500, 600)
     self.setWindowTitle('TaurusSingleValue')
     self.models = []
     self.widgets = []
Exemplo n.º 8
0
 def onEdit(self,checked=True):
     print 'In AlarmFormula.onEdit(%s)'%checked
     self.tf.setReadOnly(not checked)
     self.tf.setEnabled(checked)
     self.editcb.setChecked(checked) #Order is not trivial, to avoid recursion
     if self.updateFormula()!=self.org_formula and not checked:
         self.undoEdit()
     self.savebt.setEnabled(self.updateFormula()!=self.org_formula)
     if checked: self.emit(Qt.SIGNAL("onEdit()"))
     else: self.emit(Qt.SIGNAL("onReadOnly()"))
 def setModel(self, model, refresh=5000):
     model = getattr(model, 'view', model)
     self.model = model
     if not hasattr(self, '_timer'):
         self._timer = Qt.QTimer()
         self.connect(self._timer, Qt.SIGNAL("timeout()"),
                      self.valueChanged)
         self._timer.start(refresh)
         print('AlarmForm._timer(%s)' % refresh)
     self.show()
Exemplo n.º 10
0
 def __init__(self, parent=None):
     Qt.QWidget.__init__(self, parent)
     self.setLayout(Qt.QVBoxLayout())
     self.bar = Qt.QWidget()
     self.bar.setLayout(Qt.QHBoxLayout())
     self.bar.setMaximumHeight(50)
     self.modelline = Qt.QLineEdit()
     self.modelbt = Qt.QPushButton('Apply')
     map(self.bar.layout().addWidget, (self.modelline, self.modelbt))
     self.main = QAlarmPanel(self)
     map(self.layout().addWidget, (self.bar, self.main))
Exemplo n.º 11
0
 def init_timers(self):
     #TIMERS (to reload database and refresh alarm list).
     self.reloadTimer = Qt.QTimer()
     self.refreshTimer = Qt.QTimer()
     Qt.QObject.connect(self.refreshTimer, Qt.SIGNAL("timeout()"),
                        self.onRefresh)
     Qt.QObject.connect(self.reloadTimer, Qt.SIGNAL("timeout()"),
                        self.onReload)
     #first fast loading
     self.reloadTimer.start(min((5000, self.REFRESH_TIME / 2.)))
     self.refreshTimer.start(self.REFRESH_TIME)
Exemplo n.º 12
0
 def __init__(self, parent=None, trend=None):
     Qt.QDialog.__init__(self, parent)
     self.setLayout(Qt.QVBoxLayout())
     self.panel = Qt.QTextBrowser()
     self.layout().addWidget(self.panel)
     self.reader = PyTangoArchiving.Reader()
     self.trend = trend
     self.setModel()
     self._bt = Qt.QPushButton('Refresh')
     self._bt.connect(self._bt, Qt.SIGNAL('clicked()'), self.setModel)
     self.layout().addWidget(self._bt)
 def check_values():
     di.exec_()
     if di.result():
         print 'checking result ...'
         start, stop = str(begin.text()), str(end.text())
         if not all(
                 re.match(
                     '[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+',
                     str(s).strip()) for s in (start, stop)):
             print 'dates are wrong ...'
             Qt.QMessageBox.warning(
                 None, 'Show archiving',
                 'Dates seem not in %s format' % (tformat),
                 Qt.QMessageBox.Ok)
             return check_values()
         else:
             print 'getting values ...'
             reader = tdb if str2epoch(start) > (
                 time.time() - 5 * 24 * 3600.
             ) and attribute in tdb.get_attributes() else hdb
             print 'using %s reader' % reader.schema
             values = reader.get_attribute_values(
                 attribute, str2epoch(start), str2epoch(stop))
             if not len(
                     values
             ) and reader is tdb and attribute in hdb.get_attributes(
             ):
                 print 'tdb failed, retrying with hdb'
                 values = hdb.get_attribute_values(
                     attribute, str2epoch(start), str2epoch(stop))
             print 'drawing table from %d values' % len(values)
             tab = Qt.QTableWidget()
             tab.setWindowTitle('%s: %s to %s' %
                                (attribute, start, stop))
             tab.setRowCount(len(values))
             tab.setColumnCount(2)
             tab.setHorizontalHeaderLabels(['TIME', 'VALUE'])
             for i, tup in enumerate(values):
                 date, value = tup
                 tab.setItem(i, 0,
                             Qt.QTableWidgetItem(epoch2str(date)))
                 tab.setItem(i, 1, Qt.QTableWidgetItem(str(value)))
             tab.show()
             tab.resizeColumnsToContents()
             tab.horizontalHeader().setStretchLastSection(True)
             TABS.append(tab)
             tab.connect(tab,
                         Qt.SIGNAL('close()'),
                         lambda o=tab: TABS.remove(o))
             print 'show_history done ...'
             return tab
     else:
         print 'dialog closed'
         return None
Exemplo n.º 14
0
def AlarmsSelector(alarms,text='Choose alarms to modify',):
    qw = Qt.QDialog()
    qw.setModal(True)
    qw.setLayout(Qt.QVBoxLayout())
    qw.layout().addWidget(Qt.QLabel(text))
    qw.layout().addWidget(Qt.QLabel())
    [qw.layout().addWidget(Qt.QCheckBox(a,qw)) for a in alarms]
    addOkCancelButtons(qw)
    if qw.exec_():
        alarms = [str(c.text()) for c in qw.children() if isinstance(c,Qt.QCheckBox) and c.isChecked()]
    else: 
        alarms = []
    return alarms
Exemplo n.º 15
0
 def __init__(self, parent=None):
     Qt.QWidget.__init__(self, parent)
     self.setLayout(Qt.QHBoxLayout())
     self.model = ''
     self.device = ''
     self.label = Qt.QLabel()
     self.label.setFixedWidth(250)
     self.value = Qt.QLabel()
     self.value.setFixedWidth(200)
     self.units = Qt.QLabel()
     self.units.setFixedWidth(50)
     self.setWindowTitle('TaurusSingleValue')
     map(self.layout().addWidget, (self.label, self.value, self.units))
Exemplo n.º 16
0
def setCloserTimer(dialog, parent=None, period=3000):
    if not parent: parent = getObjectParent(dialog)
    dialog._timer = Qt.QTimer()
    dialog._timer.setInterval(period)

    def closer(s=dialog, p=parent):
        try:
            if not p.isVisible():
                s.close()
        except:
            pass

    dialog._timer.connect(dialog._timer, Qt.SIGNAL('timeout()'), closer)
    dialog._timer.start()
Exemplo n.º 17
0
    def connectAll(self):
        trace('connecting')

        #Qt.QObject.connect(self.refreshTimer, Qt.SIGNAL("timeout()"), self.onRefresh)
        if self.USE_EVENT_REFRESH:
            Qt.QObject.connect(self, Qt.SIGNAL("valueChanged"), self.hurry)
        #Qt.QObject.connect(self,
        #Qt.SIGNAL('setfontsandcolors'),AlarmRow.setFontsAndColors)
        Qt.QObject.connect(self._ui.listWidget,
                           Qt.SIGNAL("itemSelectionChanged()"),
                           self.onItemSelected)
        Qt.QObject.connect(self._ui.listWidget,
                           Qt.SIGNAL("itemDoubleClicked(QListWidgetItem *)"),
                           self.onView)  #self.onEdit)
        #Qt.QObject.connect(self._ui.listWidget, Qt.SIGNAL("currentRowChanged(int)"), self.setAlarmData)

        self.connectContextMenu(self._ui.listWidget)

        #Qt.QObject.connect(self._ui.actionExpert,
        #Qt.SIGNAL("changed()"),self.setExpertView)
        Qt.QObject.connect(self._ui.newButton, Qt.SIGNAL("clicked()"),
                           self.onNew)  # "New"
        Qt.QObject.connect(self._ui.deleteButton, Qt.SIGNAL("clicked(bool)"),
                           self.onDelete)  # Delete
        Qt.QObject.connect(self._ui.refreshButton, Qt.SIGNAL("clicked()"),
                           self.onReload)  # "Refresh"
        Qt.QObject.connect(self._ui.buttonClose, Qt.SIGNAL("clicked()"),
                           self.close)

        Qt.QObject.connect(fandango.qt.getApplication(),
                           Qt.SIGNAL("aboutToQuit()"), self.exitThreads)

        trace('all connected')
Exemplo n.º 18
0
 def showCurrentAlarmPreview(gui,tag=None,formula=None):
     """It gets current Alarm from GUI and tries to show it up"""
     form = AlarmPreview(tag=tag or gui.getCurrentAlarm(),formula=formula or None,parent=gui.parent())
     #form.exec_()
     form.show()
     gui.connect(gui,Qt.SIGNAL('closed()'),form.close)
     return form
Exemplo n.º 19
0
 def initStyle(self):
     print 'In AttributesPreview.initStyle()'
     try:
         self.setLayout(Qt.QGridLayout())
         self.redobt = Qt.QPushButton()
         self.redobt.setIcon(getThemeIcon('view-refresh'))
         self.redobt.setToolTip('Update result')
         self.taurusForm=TaurusForm()
         self.taurusForm.setWithButtons(False)
         self.taurusForm.setWindowTitle('Preview')
         self.layout().addWidget(self.redobt,0,6,1,1)
         self.layout().addWidget(Qt.QLabel('Values of attributes used in the Alarm formula:'),0,0,1,1)
         self.layout().addWidget(self.taurusForm,1,0,1,7)
         self.connect(self.redobt,Qt.SIGNAL('pressed()'),self.updateAttributes)
     except:
         print traceback.format_exc()
Exemplo n.º 20
0
    def log(self, severity, msg, remote=None):
        """
    The remote flag should allow operations done outside of QMainThread to be logged
    """
        remote = remote if remote is not None else self.remote
        if remote:
            self.emit(Qt.SIGNAL('logging'), severity, msg, False)
            return
        if msg == self.last_msg:
            msg = '+1'
        else:
            self.last_msg = msg
            if self.logger:
                try:
                    if severity not in self.log_objs:                        self.log_objs[severity] = \
getattr(self.logger,severity,(lambda m,s=severity:'%s:%s: %s'%(s.upper(),F.time2str(),m)))
                    self.log_objs[severity](msg)
                except:
                    pass
        if self.dialog():
            if msg != '+1':
                msg = '%s:%s: %s' % (severity.upper(), F.time2str(), msg)
            if self.filters:
                msg = (F.filtersmart(msg, self.filters) or [''])[0]
            if msg:
                self.dialog().append(msg)
def main(args=None):
    import sys
    #from taurus.qt.qtgui.container import TaurusMainWindow
    tmw = Qt.QMainWindow() #TaurusMainWindow()
    tmw.setWindowTitle('Tango Attribute Search (%s)'%(os.getenv('TANGO_HOST')))
    table = ArchivingBrowser(domains=args,USE_SCROLL=True,USE_TREND=True)
    tmw.setCentralWidget(table)
    
    use_toolbar = True
    if use_toolbar:
        toolbar = QDictToolBar(tmw)
        toolbar.set_toolbar([
            ##('PDFs','icon-all.gif',[
                #('Pdf Q1','icon-all.gif',lambda:launch('%s %s'%('kpdf','TC_Q1.pdf'))),
                #('Pdf Q2','icon-all.gif',lambda:launch('%s %s'%('kpdf','TC_Q2.pdf'))),
                #('Pdf Q3','icon-all.gif',lambda:launch('%s %s'%('kpdf','TC_Q3.pdf'))),
                #('Pdf Q4','icon-all.gif',lambda:launch('%s %s'%('kpdf','TC_Q4.pdf'))),
            ##    ]),
            #('Archiving Viewer','Mambo-icon.ico', lambda:launch('mambo')),
            ('Show New Trend','qwtplot.png',table.open_new_trend),
            ])
        toolbar.add_to_main_window(tmw,where=Qt.Qt.BottomToolBarArea)
    tmw.show()
    opts = dict(a.split('=',1) for a in args if a.startswith('-'))
    args = [a for a in args if not a.startswith('-')]
    if args: 
        table.updateSearch(*args)
    if '--range' in opts:
        print('Setting trend range to %s' % opts['--range'])
        table.trend.applyNewDates(opts['--range'].split(','))
    return tmw
Exemplo n.º 22
0
def get_archive_trend(models=None, length=4 * 3600, show=False):
    # This method is to be added to
    # PyTangoArchiving.widgets.trend in next releases

    #class PressureTrend(TaurusTrend):
    #def showEvent(self,event):
    #if not getattr(self,'_tuned',False):
    #setup_pressure_trend(self)
    #setattr(self,'_tuned',True)
    #TaurusTrend.showEvent(self,event)

    from taurus.external.qt import Qwt5
    tt = TaurusTrend()
    try:
        tt.setXDynScale(True)
        tt.setUseArchiving(True)
        tt.setModelInConfig(False)
        tt.disconnect(tt.axisWidget(tt.xBottom),
                      Qt.SIGNAL("scaleDivChanged ()"), tt._scaleChangeWarning)
        xMax = time.time()  #tt.axisScaleDiv(Qwt5.QwtPlot.xBottom).upperBound()
        rg = length  #abs(self.str2deltatime(str(self.ui.xRangeCB.currentText())))
        xMin = xMax - rg
        tt.setAxisScale(Qwt5.QwtPlot.xBottom, xMin, xMax)
        if models: tt.setModel(models)
        if show: tt.show()
        tt.setWindowTitle('Trend')
    except:
        print 'Exception in set_pressure_trend(%s)' % tt
        print traceback.format_exc()
    return tt
Exemplo n.º 23
0
 def forceReadings(self, filters='', emit=True):
     for n, ts in self.trend.trendSets.iteritems():
         model = ts.getModel()
         if not filters or fn.clmatch(filters, model):
             self.warning('forceReadings(%s)' % model)
             ts.forceReading()
     if emit:
         self.trend.emit(Qt.SIGNAL('refreshData'))
Exemplo n.º 24
0
def showArchivingModes(model, parent=None, schemas=('HDB', 'TDB')):
    print('onShowArchivingModes(%s)' % model)
    #DIALOG MUST BE ALWAYS SHOWN, EVEN FOR NON-ARCHIVED ATTRIBUTES!
    #w = Qt.QWidget()
    w = Qt.QDialog()
    w.setModal(False)
    w.setLayout(Qt.QVBoxLayout())
    w.setWindowTitle(model)
    ws = {}
    for s in schemas:
        ws[s] = QArchivingMode(w)
        ws[s].setSchema(s)
        ws[s].setModel(model)
        w.layout().addWidget(ws[s])
    w.exec_()
    #w.show()
    return w
Exemplo n.º 25
0
    def onNew(self):
        w = Qt.QDialog(self.Form)
        w.setWindowTitle('Add New PyAlarm Device')
        w.setLayout(Qt.QGridLayout())
        server, device = Qt.QLineEdit(w), Qt.QLineEdit(w)
        server.setText('TEST')
        device.setText('test/pyalarm/1')
        w.layout().addWidget(Qt.QLabel('Server Instance'), 0, 0, 1, 1)
        w.layout().addWidget(server, 0, 1, 1, 1)
        w.layout().addWidget(Qt.QLabel('Device Name'), 1, 0, 1, 1)
        w.layout().addWidget(device, 1, 1, 1, 1)
        doit = Qt.QPushButton('Apply')
        w.layout().addWidget(doit, 2, 0, 2, 2)

        def create(s=server, d=device, p=w):
            try:
                s, d = str(s.text()), str(d.text())
                if '/' not in s: s = 'PyAlarm/%s' % s
                import fandango.tango as ft
                ft.add_new_device(s, 'PyAlarm', d)
                print('%s - %s: created!' % (s, d))
            except:
                traceback.print_exc()
            self.api.load()
            p.close()

        QtCore.QObject.connect(doit, QtCore.SIGNAL("clicked()"), create)
        w.exec_()
        self.setDevCombo()
Exemplo n.º 26
0
 def onClose(self):
     print 'In AlarmFormula.onClose()'
     if self.obj and self.toPlainText()!=self.org_formula:
         v = QtGui.QMessageBox.warning(None,'Pending Changes', \
             '%s Formula has been modified, do you want to save your changes?'%self.obj.tag, \
             QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel);
         if v == QtGui.QMessageBox.Cancel: return
         self.onSave()
     self.emit(Qt.SIGNAL("onClose()"))
Exemplo n.º 27
0
 def onItemSelected(self):
     try:
         items = self.getSelectedItems(extend=False)
         if len(items) == 1:
             a = self.view.get_alarm_from_text(items[0])
             tags = a.tag.split('_')
             self.emit(Qt.SIGNAL('alarmSelected'), a.tag)
             models = self.api.parse_attributes(a.formula)
             devices = sorted(
                 set(
                     fn.tango.parse_tango_model(m)['device']
                     for m in models))
             print('onItemSelected(%s) devices: %s' %
                   (a, shortstr(devices)))
             self.emit(Qt.SIGNAL('devicesSelected'),
                       '|'.join(devices + tags))
     except:
         traceback.print_exc()
Exemplo n.º 28
0
 def __init__(self, parent=None):
     TaurusWidget.__init__(self, parent)
     self.setLayout(Qt.QHBoxLayout())
     form = LoadForm(self)
     form.setModel([
         "simumotor/zreszela/1/position", "simumotor/zreszela/2/position",
         "simumotor/zreszela/3/position", "simumotor/zreszela/4/position"
     ])
     self.layout().addWidget(form)
Exemplo n.º 29
0
 def applyModes(self):
     self.logger().show()
     #Qt.QApplication.instance().setOverrideCursor(Qt.QCursor(Qt.Qt.WaitCursor))
     try:
         attr = self.getModel()
         v = F.check_attribute(attr, brief=True)
         if isinstance(v, (type(None), Exception)):
             Qt.QMessageBox.warning(
                 self, "Warning",
                 "%s is not readable nor archivable" % attr)
             self.logger().hide()
             return
         if fun.isSequence(v) or fun.isString(v):
             Qt.QMessageBox.warning(self, "Warning",
                                    "%s array type is not supported" % attr)
             self.logger().hide()
             return
         modes = self.getModes() or {'MODE_P': [60000]}
         schema = self.getSchema()
         print('%s: applyModes(%s)' % (fun.time2str(), modes))
         msg = 'Modes to be applied:\n'
         for m, v in modes.items():
             msg += '\t%s.%s: %s\n' % (schema, m, v)
         qm = Qt.QMessageBox(Qt.QMessageBox.Warning, 'Confirmation', msg,
                             Qt.QMessageBox.Ok | Qt.QMessageBox.Cancel)
         r = qm.exec_()
         if r == Qt.QMessageBox.Ok:
             if not self.api:
                 self.api = pta.api(self.getSchema().lower(),
                                    logger=self.logger())
             self.api.log = self.logger()
             #self.emit(Qt.SIGNAL('archive'),attr,modes)
             Qt.QApplication.instance().setOverrideCursor(
                 Qt.QCursor(Qt.Qt.WaitCursor))
             thr = threading.Thread(target=self.startArchiving,
                                    args=(attr, modes))
             QLoggerDialog._threads = filter(Thread.is_alive,
                                             self.threads()) + [thr]
             thr.start()
         else:
             self.logger().hide()
     except:
         self.logger().error(traceback.print_exc())
     print('%s: applyModes(...): running!' % (fun.time2str()))
Exemplo n.º 30
0
    def show_dialog(self, enable=True):
        if not self.dialog():
            try:
                self._dialog = QTextBuffer(title='Archiving Logs', maxlen=1000)

                self._trendinfo = QArchivedTrendInfo(trend=self.trend)
                self._trendinfobt = Qt.QPushButton('Show Models Info')
                self._trendinfobt.connect(self._trendinfobt,
                                          Qt.SIGNAL('clicked()'),
                                          self._trendinfo.show)
                self.dialog().layout().addWidget(self._trendinfobt)

                self._forcedbt = Qt.QPushButton('Force trend update')
                self._forcedbt.connect(
                    self._forcedbt,
                    Qt.SIGNAL('clicked()'),
                    #self.forceReadings)
                    self.trend.setForcedReadingPeriod)
                self.dialog().layout().addWidget(self._forcedbt)

                self._reloader = QReloadWidget(parent=self._dialog,
                                               trend=self.trend,
                                               logger=self)
                self.dialog().layout().addWidget(self._reloader)

                self._showhist = Qt.QPushButton('Show/Save buffers as a Table')
                self._showhist.connect(self._showhist, Qt.SIGNAL('clicked()'),
                                       self.showRawValues)
                self.dialog().layout().addWidget(self._showhist)

                self._clearbutton = Qt.QPushButton('Clear Buffers and Redraw')
                self.dialog().layout().addWidget(self._clearbutton)
                self._clearbutton.connect(
                    self._clearbutton, Qt.SIGNAL('clicked()'),
                    fn.partial(fn.qt.QConfirmAction, self.clearBuffers))

                if hasattr(self.trend, 'closeEvent'):
                    #setDialogCloser(self.dialog(),self.trend)
                    setCloserTimer(self.dialog(), self.trend)

            except:
                self.warning(traceback.format_exc())

        if self.dialog():
            ### @TODO
            self.dialog().toggle(not enable)
            #if not enable:
            #print('show_dialog(False): hiding dialog')
            #self.dialog().hide()
            if enable:
                self.dialog().toggle(True)
                self.dialog().show()