Skip to content
Snippets Groups Projects
uploadsTab.py 3.97 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(UploadsTab, self).__init__(parent)
        self.stationName = stationName
        self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
    def uploadTabLayout(self):
        grid = QGridLayout()
        labelFont = QFont('Arial', 18, QFont.Bold)
        lbl = QLabel(self.stationName + ' Uploads List', self)
        lbl.setAlignment(Qt.AlignCenter)
        lbl.setFont(labelFont)
        # lambda allows the passing of variables
        backBtn = QPushButton('Back', self)
        backBtn.clicked.connect(lambda: self.setTab(0))
        backBtn.setMaximumWidth(100)
        grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 2, 0)
        self.updateList()
        grid.addWidget(self.tableWidget, 3, 0, 1, 5)
        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 0)
        addBtn = QPushButton('Start New', self)
        addBtn.clicked.connect(lambda: self.setTab(0))
        addBtn.setMinimumWidth(150)
        grid.addWidget(addBtn, 4, 1)
        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 2)
        modBtn = QPushButton('Stop Selected', self)
        modBtn.clicked.connect(lambda: self.setTab(0))
        modBtn.setMinimumWidth(150)
        grid.addWidget(modBtn, 4, 3)
        grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 4)
        grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 5, 0)

        self.uploadsTabWidget = QWidget()
        self.uploadsTabWidget.setLayout(grid)

    def updateList(self):
        self.uploadList = self.experimentDaqApi.listUploads()
        self.tableWidget.setRowCount(len(self.uploadList))
        self.tableWidget.setColumnCount(3)
        self.colWidths = (130, 450, 200)
        for i, size in enumerate(self.colWidths):
            self.tableWidget.horizontalHeader().resizeSection(i, size)
        self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.tableWidget.setHorizontalHeaderLabels('ID;Data Directory;Number of Files;'.split(';'))
        self.tableWidget.cellDoubleClicked.connect(self.expandRow)
        self.tableWidget.horizontalHeader().setStretchLastSection(True)

        i = 0
        for upload in self.uploadList:
            rowID = QTableWidgetItem(upload.get('id'))
            rowDataDir = QTableWidgetItem(upload.get('dataDirectory', ''))
            rowNumFiles = QTableWidgetItem(str(upload.get('nFiles', '')))
            self.tableWidget.setItem(i, 0, rowID)
            self.tableWidget.setItem(i, 1, rowDataDir)
            self.tableWidget.setItem(i, 2, rowNumFiles)
            if (i % 2) == 0:
                rowID.setBackground(QColor.fromRgb(230, 241, 245))
                rowDataDir.setBackground(QColor.fromRgb(230, 241, 245))
                rowNumFiles.setBackground(QColor.fromRgb(230, 241, 245))
            i += 1
    def setTab(self, tab):
        self.parent.stackedLayout.setCurrentIndex(tab)
    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 - 19) / totalWidths for column in self.colWidths]
    #    for i, column in enumerate(newSize):
    #        self.tableWidget.horizontalHeader().resizeSection(i, column)