Skip to content
Snippets Groups Projects
experimentsTab.py 4.31 KiB
Newer Older
#!/usr/bin/env python

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:
    def __init__(self, stationName, parent, id=-1):
        super(ExperimentsTab, self).__init__(parent)
        self.stationName = stationName
        self.experimentDsApi = DmApiFactory.getInstance().getExperimentDsApi()
    # Sets up the tab's layout, each block is a row
    def experimentsTabLayout(self):
        grid = QGridLayout()
        labelFont = QFont('Arial', 18, QFont.Bold)
        lbl = QLabel(self.stationName + ' DM Experiment List', self)
        lbl.setAlignment(Qt.AlignCenter)
        lbl.setFont(labelFont)
        backBtn = QPushButton('Back', self)
        backBtn.clicked.connect(lambda: self.setTab(0))
        backBtn.setMinimumWidth(100)
        grid.addWidget(backBtn, 1, 4, Qt.AlignCenter)

        grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 2, 0)

        self.tableWidget = QTableWidget()
        self.updateList()
        grid.addWidget(self.tableWidget, 3, 0, 1, 5)
        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 0)
        addBtn = QPushButton('Add Experiment', self)
        addBtn.clicked.connect(lambda: self.setTab(4))
        addBtn.setMinimumWidth(150)
        grid.addWidget(addBtn, 4, 1)
        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 2)
        modBtn = QPushButton('Modify Selected', self)
        modBtn.clicked.connect(lambda: self.setTab(5))
        modBtn.setMinimumWidth(150)
        grid.addWidget(modBtn, 4, 3)
        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 4)
        grid.addItem(QSpacerItem(20, 10, QSizePolicy.Expanding), 5, 0)

        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)
        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:
            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)
            if (i % 2) == 0:
                rowName.setBackground(QColor.fromRgb(230, 241, 245))
                rowDescription.setBackground(QColor.fromRgb(230, 241, 245))
                rowStartDate.setBackground(QColor.fromRgb(230, 241, 245))
    # 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)
    # 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)