Newer
Older
Collin A. Schmitz
committed
from PyQt4.QtGui import QGridLayout, QSpacerItem, QSizePolicy, QPushButton, QWidget, \
QFont, QLabel, QTableWidget, QTableWidgetItem, QColor, QAbstractItemView
from PyQt4.QtCore import Qt
from dmApiFactory import DmApiFactory
# Define the experiments tab content:
Collin A. Schmitz
committed
class ExperimentsTab(QWidget):
def __init__(self, stationName, parent, id=-1):
super(ExperimentsTab, self).__init__(parent)
Collin A. Schmitz
committed
self.parent = parent
self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
Collin A. Schmitz
committed
self.experimentsTabLayout()
Collin A. Schmitz
committed
# Sets up the tab's layout, each block is a row
def experimentsTabLayout(self):
grid = QGridLayout()
Collin A. Schmitz
committed
labelFont = QFont('Arial', 18, QFont.Bold)
lbl = QLabel(self.stationName + ' DM Experiment List', self)
lbl.setAlignment(Qt.AlignCenter)
lbl.setFont(labelFont)
Collin A. Schmitz
committed
grid.addWidget(lbl, 0, 0, 1, 5)
Collin A. Schmitz
committed
backBtn = QPushButton('Back', self)
backBtn.clicked.connect(lambda: self.setTab(0))
Collin A. Schmitz
committed
backBtn.setMinimumWidth(100)
grid.addWidget(backBtn, 1, 4, Qt.AlignCenter)
Collin A. Schmitz
committed
grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 2, 0)
self.tableWidget = QTableWidget()
Collin A. Schmitz
committed
grid.addWidget(self.tableWidget, 3, 0, 1, 5)
Collin A. Schmitz
committed
Collin A. Schmitz
committed
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 0)
Collin A. Schmitz
committed
addBtn = QPushButton('Add Experiment', self)
Collin A. Schmitz
committed
addBtn.clicked.connect(lambda: self.setTab(4))
addBtn.setMinimumWidth(150)
addBtn.setFixedHeight(40)
Collin A. Schmitz
committed
grid.addWidget(addBtn, 4, 1)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 2)
Collin A. Schmitz
committed
modBtn = QPushButton('Modify Selected', self)
Collin A. Schmitz
committed
modBtn.clicked.connect(lambda: self.setTab(5))
modBtn.setMinimumWidth(150)
modBtn.setFixedHeight(40)
Collin A. Schmitz
committed
grid.addWidget(modBtn, 4, 3)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 4)
Collin A. Schmitz
committed
grid.addItem(QSpacerItem(20, 10, QSizePolicy.Expanding), 5, 0)
Collin A. Schmitz
committed
self.experimentsTabWidget = QWidget()
self.experimentsTabWidget.setLayout(grid)
# Sets up the table structure and fills it with data
def updateList(self):
self.experimentList = self.experimentDsApi.getExperimentsByStation(self.stationName)
Collin A. Schmitz
committed
self.tableWidget.setRowCount(len(self.experimentList))
self.tableWidget.setColumnCount(3)
self.colWidths = (130, 400, 209)
for i, size in enumerate(self.colWidths):
self.tableWidget.horizontalHeader().resizeSection(i, size)
self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tableWidget.setHorizontalHeaderLabels('Name;Description;Start Date;'.split(';'))
self.tableWidget.cellDoubleClicked.connect(self.expandRow)
self.tableWidget.horizontalHeader().setStretchLastSection(True)
i = 0
for experiment in self.experimentList:
Collin A. Schmitz
committed
rowName = QTableWidgetItem(experiment.get('name'))
rowDescription = QTableWidgetItem(experiment.get('description', ''))
rowStartDate = QTableWidgetItem(str(experiment.get('startDate', '')))
self.tableWidget.setItem(i, 0, rowName)
self.tableWidget.setItem(i, 1, rowDescription)
self.tableWidget.setItem(i, 2, rowStartDate)
Collin A. Schmitz
committed
rowName.setBackground(QColor.fromRgb(230, 241, 245))
rowDescription.setBackground(QColor.fromRgb(230, 241, 245))
rowStartDate.setBackground(QColor.fromRgb(230, 241, 245))
Collin A. Schmitz
committed
# Used to change between tabs
def setTab(self, tab):
self.parent.stackedLayout.setCurrentIndex(tab)
# Expands the given row to fit the size of its contents
def expandRow(self, row, column):
self.tableWidget.resizeRowToContents(row)
Collin A. Schmitz
committed
# Resizes the horizontal headers to fit the screen
#def resizeTable(self, width):
# totalWidths = sum(self.colWidths)
# if self.tableWidget.verticalScrollBar().isVisible():
# newSize = [column * (width - 60) / totalWidths for column in self.colWidths]
# else:
# newSize = [column * (width - 60) / totalWidths for column in self.colWidths]
# for i, column in enumerate(newSize):
# self.tableWidget.horizontalHeader().resizeSection(i, column)