Exemplo n.º 1
0
    def __init__(self, opc, parent=None, currentItems=None):
        super(TagSelectorDialog, self).__init__(parent)
        self.ui = Ui_tagsSelectorDialog()
        self.ui.setupUi(self)

        self.opc = opc

        QtCore.QObject.connect(self.ui.avblItemsTreeView,
                               QtCore.SIGNAL("clicked(QModelIndex)"),
                               self.onAvblItemsClicked)
        QtCore.QObject.connect(self.ui.avblTagsListView,
                               QtCore.SIGNAL("activated(QModelIndex)"),
                               self.onAvblTagsActivated)
        QtCore.QObject.connect(self.ui.tagsToReadListWidget,
                               QtCore.SIGNAL("customContextMenuRequested(const QPoint &)"),
                               self.displayContextMenu)

        for tag in currentItems:
            self.ui.tagsToReadListWidget.addItem(tag)
        self.populateAvblItemsTreeview()
Exemplo n.º 2
0
class TagSelectorDialog(QtGui.QDialog):
    def __init__(self, opc, parent=None, currentItems=None):
        super(TagSelectorDialog, self).__init__(parent)
        self.ui = Ui_tagsSelectorDialog()
        self.ui.setupUi(self)

        self.opc = opc

        QtCore.QObject.connect(self.ui.avblItemsTreeView,
                               QtCore.SIGNAL("clicked(QModelIndex)"),
                               self.onAvblItemsClicked)
        QtCore.QObject.connect(self.ui.avblTagsListView,
                               QtCore.SIGNAL("activated(QModelIndex)"),
                               self.onAvblTagsActivated)
        QtCore.QObject.connect(self.ui.tagsToReadListWidget,
                               QtCore.SIGNAL("customContextMenuRequested(const QPoint &)"),
                               self.displayContextMenu)

        for tag in currentItems:
            self.ui.tagsToReadListWidget.addItem(tag)
        self.populateAvblItemsTreeview()

    def getItems(self, parent=None):
        itemsList = []
        i = -1
        for i, item in enumerate(self.opc.client.list("*" if not parent else parent)):
            itemsList.append(item)
        return i + 1, itemsList

    def hasChildItems(self, parent):
        """
        Check if item has children
        :param parent: OPC tag
        :return: True if item has children else False
        """
        return True if len(self.opc.client.list(parent)) > 0 else False

    def getTags(self, item, parent):
        return [tag for tag in self.opc.client.list(u"%s.%s.*" % (parent, item))]

    def populateAvblItemsTreeview(self):
        model = QtGui.QStandardItemModel()
        self.ui.avblItemsTreeView.setModel(model)
        itemsNb, itemsList = self.getItems()
        for parent in itemsList:
            parentItem = QtGui.QStandardItem(parent)
            self.appendChildItems(parent, parentItem)
            model.appendRow(parentItem)

    def appendChildItems(self, parentPath, parentItem, itemsList=None):
        """

        :param parentPath: String
        :param parentItem: QStandardItem
        :param itemsList: List
        :return:
        """
        if itemsList is None:
            itemsNb, itemsList = self.getItems(parentPath)
        for child in itemsList:
            childPath = "%s.%s" % (parentPath, child)
            childItemsNb, childItemsList = self.getItems(childPath)
            # Check if item has children
            # If current item doesn't have any child, it's a tag and we skip it
            if childItemsNb > 0:
                childItem = QtGui.QStandardItem(child)
                childItem.setData(parentPath, QtCore.Qt.UserRole)
                parentItem.appendRow(childItem)
                self.appendChildItems(childPath, childItem, childItemsList)

    def onAvblItemsClicked(self, activatedItemIndex):
        model = QtGui.QStandardItemModel()
        self.ui.avblTagsListView.setModel(model)

        avblItemsModelIdx = self.ui.avblItemsTreeView.model().itemFromIndex(activatedItemIndex)
        item = avblItemsModelIdx.data(QtCore.Qt.DisplayRole).toString()
        itemPath = avblItemsModelIdx.data(QtCore.Qt.UserRole).toString()
        if itemPath != "":
            for tag in self.getTags(item, itemPath):
                path = "%s.%s." % (itemPath, item)
                tagWoPath = tag[len(path):]
                if len(tagWoPath) > 0:
                    tagItem = QtGui.QStandardItem(tagWoPath)
                    tagItem.setData(tag, QtCore.Qt.UserRole)
                    model.appendRow(tagItem)

    def onAvblTagsActivated(self, activatedTagIndex):
        avblTagsModelIdx = self.ui.avblTagsListView.model().itemFromIndex(activatedTagIndex)
        self.appendTagToList(avblTagsModelIdx.data(QtCore.Qt.UserRole).toString())

    def appendTagToList(self, tag):
        listWidget = self.ui.tagsToReadListWidget
        if len(listWidget.findItems(tag, QtCore.Qt.MatchExactly)) == 0:
            item = QtGui.QListWidgetItem(tag)
            item.setBackgroundColor(QtGui.QColor(255, 255, 127))
            listWidget.addItem(item)

    def displayContextMenu(self, position):
        selectedItems = self.ui.tagsToReadListWidget.selectedItems()
        if len(selectedItems) == 1:
            tag = selectedItems[0].text()
            menu = QtGui.QMenu()
            menu.addAction("&Change plot color", lambda: self.pickPlotColor(selectedItems[0], tag))
            menu.exec_(self.ui.tagsToReadListWidget.viewport().mapToGlobal(position))

    def pickPlotColor(self, listItem, tag):
        color = QtGui.QColorDialog.getColor()
        listItem.setBackground(color)