propertiesViewModel.py
210 lines
| 5.8 KiB
| text/x-python
|
PythonLexer
|
r589 | # -*- coding: utf-8 -*- | |
""" | |||
This module contains every model class to create, modify and show a property tree on a GUI. | |||
""" | |||
from PyQt4 import QtCore | |||
import itertools | |||
HORIZONTAL_HEADERS = ("Property","Value " ) | |||
HORIZONTAL = ("RAMA :",) | |||
class PropertyBuffer(): | |||
def __init__(self): | |||
self.clear() | |||
def clear(self): | |||
self.headerList = [] | |||
self.parmList = [] | |||
self.valueList = [] | |||
def append(self, header, parm, value): | |||
self.headerList.append(header) | |||
self.parmList.append(parm) | |||
self.valueList.append(value) | |||
return | |||
def get(self): | |||
return self.headerList, self.parmList, self.valueList | |||
def getPropertyModel(self): | |||
propertiesModel = TreeModel() | |||
propertiesModel.showProperties(self.headerList, self.parmList, self.valueList) | |||
return propertiesModel | |||
class TreeModel(QtCore.QAbstractItemModel): | |||
''' | |||
a model to display a few names, ordered by encabezado | |||
''' | |||
def __init__(self ,parent=None): | |||
super(TreeModel, self).__init__(parent) | |||
self.people = [] | |||
def initProjectView(self): | |||
""" | |||
Reemplazo del método showtree | |||
""" | |||
HORIZONTAL_HEADERS = ("Property","Value " ) | |||
HORIZONTAL = ("RAMA :",) | |||
self.rootItem = TreeItem(None, "ALL", None) | |||
self.parents = {0 : self.rootItem} | |||
self.__setupModelData() | |||
def initPUVoltageView(self): | |||
HORIZONTAL_HEADERS = ("Operation"," Parameter Value " ) | |||
HORIZONTAL = ("RAMA :",) | |||
self.rootItem = TreeItem(None, "ALL", None) | |||
self.parents = {0 : self.rootItem} | |||
self.__setupModelData() | |||
def showProperties(self,headerList, parmList, valueList): | |||
""" | |||
set2Obje | |||
""" | |||
for header, parameter, value in itertools.izip(headerList, parmList, valueList): | |||
person = person_class(header, parameter, value) | |||
self.people.append(person) | |||
self.rootItem = TreeItem(None, "ALL", None) | |||
self.parents = {0 : self.rootItem} | |||
self.__setupModelData() | |||
def columnCount(self, parent=None): | |||
if parent and parent.isValid(): | |||
return parent.internalPointer().columnCount() | |||
else: | |||
return len(HORIZONTAL_HEADERS) | |||
def data(self, index, role): | |||
if not index.isValid(): | |||
return QtCore.QVariant() | |||
item = index.internalPointer() | |||
if role == QtCore.Qt.DisplayRole: | |||
return item.data(index.column()) | |||
if role == QtCore.Qt.UserRole: | |||
if item: | |||
return item.person | |||
return QtCore.QVariant() | |||
def index(self, row, column, parent): | |||
if not self.hasIndex(row, column, parent): | |||
return QtCore.QModelIndex() | |||
if not parent.isValid(): | |||
parentItem = self.rootItem | |||
else: | |||
parentItem = parent.internalPointer() | |||
childItem = parentItem.child(row) | |||
if childItem: | |||
return self.createIndex(row, column, childItem) | |||
else: | |||
return QtCore.QModelIndex() | |||
def parent(self, index): | |||
if not index.isValid(): | |||
return QtCore.QModelIndex() | |||
childItem = index.internalPointer() | |||
if not childItem: | |||
return QtCore.QModelIndex() | |||
parentItem = childItem.parent() | |||
if parentItem == self.rootItem: | |||
return QtCore.QModelIndex() | |||
return self.createIndex(parentItem.row(), 0, parentItem) | |||
def rowCount(self, parent=QtCore.QModelIndex()): | |||
if parent.column() > 0: | |||
return 0 | |||
if not parent.isValid(): | |||
p_Item = self.rootItem | |||
else: | |||
p_Item = parent.internalPointer() | |||
return p_Item.childCount() | |||
def __setupModelData(self): | |||
for person in self.people: | |||
if person.value: | |||
encabezado = person.header | |||
if not self.parents.has_key(encabezado): | |||
newparent = TreeItem(None, encabezado, self.rootItem) | |||
self.rootItem.appendChild(newparent) | |||
self.parents[encabezado] = newparent | |||
parentItem = self.parents[encabezado] | |||
newItem = TreeItem(person, "", parentItem) | |||
parentItem.appendChild(newItem) | |||
class person_class(object): | |||
''' | |||
a trivial custom data object | |||
''' | |||
def __init__(self, header, parameter, value): | |||
self.header = header | |||
self.parameter = parameter | |||
self.value = value | |||
def __repr__(self): | |||
return "PERSON - %s %s"% (self.parameter, self.header) | |||
class TreeItem(object): | |||
''' | |||
a python object used to return row/column data, and keep note of | |||
it's parents and/or children | |||
''' | |||
def __init__(self, person, header, parentItem): | |||
self.person = person | |||
self.parentItem = parentItem | |||
self.header = header | |||
self.childItems = [] | |||
def appendChild(self, item): | |||
self.childItems.append(item) | |||
def child(self, row): | |||
return self.childItems[row] | |||
def childCount(self): | |||
return len(self.childItems) | |||
def columnCount(self): | |||
return 2 | |||
def data(self, column): | |||
if self.person == None: | |||
if column == 0: | |||
return QtCore.QVariant(self.header) | |||
if column == 1: | |||
return QtCore.QVariant("") | |||
else: | |||
if column == 0: | |||
return QtCore.QVariant(self.person.parameter) | |||
if column == 1: | |||
return QtCore.QVariant(self.person.value) | |||
return QtCore.QVariant() | |||
def parent(self): | |||
return self.parentItem | |||
def row(self): | |||
if self.parentItem: | |||
return self.parentItem.childItems.index(self) | |||
return 0 | |||