summaryrefslogtreecommitdiff
path: root/src/main/python/utils/streamTable.py
diff options
context:
space:
mode:
authorBlaine2020-06-20 14:43:57 +0530
committerBlaine2020-06-20 14:43:57 +0530
commitf8519766d7f7fc70180411f912ed8ca15abb6a95 (patch)
tree97eb7e5570b43f3fc10628d37360351330e16bf3 /src/main/python/utils/streamTable.py
parent7ff2d30a1c16216f3bfaebc8f71924d6a6f8ec8d (diff)
downloadChemical-PFD-f8519766d7f7fc70180411f912ed8ca15abb6a95.tar.gz
Chemical-PFD-f8519766d7f7fc70180411f912ed8ca15abb6a95.tar.bz2
Chemical-PFD-f8519766d7f7fc70180411f912ed8ca15abb6a95.zip
refactor and comment code
Diffstat (limited to 'src/main/python/utils/streamTable.py')
-rw-r--r--src/main/python/utils/streamTable.py78
1 files changed, 55 insertions, 23 deletions
diff --git a/src/main/python/utils/streamTable.py b/src/main/python/utils/streamTable.py
index c8e682c..8b3b220 100644
--- a/src/main/python/utils/streamTable.py
+++ b/src/main/python/utils/streamTable.py
@@ -5,13 +5,17 @@ from PyQt5.QtWidgets import QTableView, QMenu, QGraphicsRectItem, QInputDialog,
from collections import defaultdict
class streamTableModel(QAbstractTableModel):
+ """
+ Defines the table model for the table view
+ """
updateEvent = pyqtSignal()
def __init__(self, parent, list, header, *args):
super(streamTableModel, self).__init__(parent, *args)
self.list = list
self.header = header
-
+
+ # column count, row count, data and setdata are important methods to be overloaded
def columnCount(self, parent=None):
return len(self.list)
@@ -19,31 +23,41 @@ class streamTableModel(QAbstractTableModel):
return len(self.header)
def data(self, index, role):
+ # retunrs data at index
if role == Qt.TextAlignmentRole:
return Qt.AlignHCenter
+
if role == Qt.BackgroundColorRole:
return Qt.white
+
if not index.isValid():
return None
+
elif role != Qt.DisplayRole:
return None
+
if index.row() == 0:
- return self.list[index.column()].toPlainText()
+ return self.list[index.column()].toPlainText() # return label name
else:
- return self.list[index.column()].values[self.header[index.row()]]
+ return self.list[index.column()].values[self.header[index.row()]] # retunr label values
def setData(self, index, value, role):
+ # defines how to manipulate data at a given index with value returns sucess value
if not index.isValid():
return False
+
elif role != Qt.EditRole:
return False
+
if index.row() == 0:
- self.list[index.column()].setPlainText(value)
+ self.list[index.column()].setPlainText(value) # change label text
else:
- self.list[index.column()].values[self.header[index.row()]] = value
+ self.list[index.column()].values[self.header[index.row()]] = value #change label values
+
return True
def insertColumn(self, int=None, item=None):
+ # inserting a label item
int = int if int else self.rowCount()+1
self.beginInsertColumns(QModelIndex(), int, int)
self.list.insert(int, item)
@@ -52,54 +66,65 @@ class streamTableModel(QAbstractTableModel):
self.updateEvent.emit()
def insertRow(self, int=None, name="newVal"):
+ # inserting a header property
self.beginInsertRows(QModelIndex(), int, int)
self.header.insert(int, name)
self.endInsertRows()
self.updateEvent.emit()
def deleteRow(self, row):
+ # removing a property
self.beginRemoveRows(QModelIndex(), row, row)
- valName = self.header.pop(row)
+ valName = self.header.pop(row) # remove from header
self.endRemoveRows()
+
for i in self.list:
- i.values.pop(valName)
- self.updateEvent.emit()
+ i.values.pop(valName) #clear dictionary
+
+ self.updateEvent.emit() # update request
def headerData(self, col, orientation, role):
+ # definds how to fetch header data
if orientation == Qt.Vertical and role == Qt.DisplayRole:
return self.header[col]
return None
def flags(self, index):
+ # defines item editable flag
return (super(streamTableModel, self).flags(index) | Qt.ItemIsEditable)
class streamTable(QTableView):
-
+ """
+ subclasses stream table to display data properly
+ """
def __init__(self, itemLabels=[], canvas=None, parent=None):
super(streamTable, self).__init__(parent=parent)
self.canvas = canvas
+
for i in itemLabels:
- i.nameChanged.connect(self.repaint)
- header = ["name", "val1", "val2", "val3", "val4", "val5"]
+ i.nameChanged.connect(self.repaint) # connect repaint requests on name change
+
+ header = ["name", "val1", "val2", "val3", "val4", "val5"] # prepare header names
self.model = streamTableModel(self, itemLabels, header)
- self.setShowGrid(False)
+ self.setShowGrid(False) # disable table grid
- self.horizontalHeader().hide()
- header = verticalHeader(Qt.Vertical, self)
+ self.horizontalHeader().hide() # remove horizontal header
+
+ header = verticalHeader(Qt.Vertical, self) #create custom vertical header
self.setVerticalHeader(header)
header.labelChangeRequested.connect(self.labelChange)
- self.setModel(self.model)
- self.borderThickness = defaultdict(lambda: False)
+ self.setModel(self.model) #declare model
+ self.borderThickness = defaultdict(lambda: False) #thickness bool dict
self.model.updateEvent.connect(self.resizeHandler)
self.setItemDelegateForRow(0, drawBorderDelegate(self))
- self.borderThickness[0] = True
+ self.borderThickness[0] = True # set border true for name row
def mousePressEvent(self, event):
+ # handle context menu request
if event.button() == Qt.RightButton:
point = event.pos()
- # col = self.getCol(point.x())
index = self.indexAt(point)
menu = QMenu("Context Menu", self)
menu.addAction("Toggle bottom border thickness", lambda x=index.row(): self.changeRowBorder(x))
@@ -110,6 +135,7 @@ class streamTable(QTableView):
return super(streamTable, self).mousePressEvent(event)
def changeRowBorder(self, row):
+ # toggle column border thicnkess
if self.borderThickness[row]:
self.borderThickness.pop(row)
self.setItemDelegateForRow(row, QStyledItemDelegate(self))
@@ -119,6 +145,7 @@ class streamTable(QTableView):
self.verticalHeader().repaint()
def labelChange(self, index):
+ # label name change
newName, bool = QInputDialog.getText(self, "Change Property Name", "Enter new name",
text = self.model.header[index])
if bool:
@@ -128,6 +155,7 @@ class streamTable(QTableView):
self.repaint()
def insertRowBottom(self, row):
+ # dialog box for new property
name, bool = QInputDialog.getText(self, "New Property", "Enter name",
text = "newVal")
if bool:
@@ -162,10 +190,9 @@ class streamTable(QTableView):
self.repaint()
class drawBorderDelegate(QStyledItemDelegate):
-
- # def __init__(self, parent):
- # super(drawBorderDelegate, self).__init__(parent)
-
+ """
+ class for drawing border line
+ """
def paint(self, painter, option, index):
rect = option.rect
painter.drawLine(rect.bottomLeft(), rect.bottomRight())
@@ -173,7 +200,9 @@ class drawBorderDelegate(QStyledItemDelegate):
super(drawBorderDelegate, self).paint(painter, option, index)
class moveRect(QGraphicsRectItem):
-
+ """
+ use to move the table on the scene
+ """
def __init__(self, sideLength = 15, *args):
super(moveRect, self).__init__(-sideLength, -sideLength, sideLength, sideLength)
self.setBrush(Qt.transparent)
@@ -190,6 +219,9 @@ class moveRect(QGraphicsRectItem):
return super(moveRect, self).hoverLeaveEvent(event)
class verticalHeader(QHeaderView):
+ """
+ Custom Vertical header for the table, with line border against corresponding rows
+ """
labelChangeRequested = pyqtSignal(int)
def mouseDoubleClickEvent(self, event):