Exemplo n.º 1
0
class AttributesPreview(Qt.QFrame):
    def __init__(self, model='', parent=None, source=None):
        Qt.QWidget.__init__(self, parent)
        self.model = model
        self.source = source
        self.test = panic.current()._eval
        self.test._trace = True
        self.initStyle()
        self.updateAttributes(self.model)

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

    @Catched
    def updateAttributes(self, model=None):
        print('AttributesPreview.updateAttributes(%s)' % model)
        if not model and self.source:
            try:
                if hasattr(self.source, 'formula'): model = self.source.formula
                elif hasattr(self.source, '__call__'): model = self.source()
                else: model = str(self.source or '')
            except:
                print(traceback.format_exc())

        if not fandango.isSequence(model):
            ms, model = self.test.parse_variables(model or ''), set()
            for var in ms:
                dev, attr = var[0], var[1]
                if ':' in dev and not dev.startswith('tango://'):
                    dev = 'tango://' + dev
                model.add(dev + '/' + attr)

        self.model = sorted(model)
        print('In AttributesPreview.updateAttributes(%s)' % model)
        self.taurusForm.setModel(model)
        [
            tvalue.setLabelConfig("<attr_fullname>")
            for tvalue in self.taurusForm.getItems()
        ]