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 UploadsTab(QWidget):
def __init__(self, stationName, parent, id=-1):
super(UploadsTab, self).__init__(parent)
Collin A. Schmitz
committed
self.parent = parent
self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi()
Collin A. Schmitz
committed
self.uploadTabLayout()
Collin A. Schmitz
committed
def uploadTabLayout(self):
grid = QGridLayout()
Collin A. Schmitz
committed
labelFont = QFont('Arial', 18, QFont.Bold)
lbl = QLabel(self.stationName + ' Uploads List', self)
lbl.setAlignment(Qt.AlignCenter)
lbl.setFont(labelFont)
Collin A. Schmitz
committed
grid.addWidget(lbl, 0, 0, 1, 5)
Collin A. Schmitz
committed
# lambda allows the passing of variables
backBtn = QPushButton('Back', self)
backBtn.clicked.connect(lambda: self.setTab(0))
backBtn.setMaximumWidth(100)
Collin A. Schmitz
committed
grid.addWidget(backBtn, 1, 4)
Collin A. Schmitz
committed
Collin A. Schmitz
committed
grid.addItem(QSpacerItem(20, 30, QSizePolicy.Expanding), 2, 0)
Collin A. Schmitz
committed
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('Start New', self)
addBtn.clicked.connect(lambda: self.setTab(0))
Collin A. Schmitz
committed
addBtn.setMinimumWidth(150)
grid.addWidget(addBtn, 4, 1)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 2)
Collin A. Schmitz
committed
modBtn = QPushButton('Stop Selected', self)
modBtn.clicked.connect(lambda: self.setTab(0))
Collin A. Schmitz
committed
modBtn.setMinimumWidth(150)
grid.addWidget(modBtn, 4, 3)
grid.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding), 4, 4)
Collin A. Schmitz
committed
Collin A. Schmitz
committed
grid.addItem(QSpacerItem(20, 40, QSizePolicy.Expanding), 5, 0)
Collin A. Schmitz
committed
self.uploadsTabWidget = QWidget()
self.uploadsTabWidget.setLayout(grid)
def updateList(self):
self.uploadList = self.experimentDaqApi.listUploads()
Collin A. Schmitz
committed
self.tableWidget.setRowCount(len(self.uploadList))
self.tableWidget.setColumnCount(3)
Collin A. Schmitz
committed
self.colWidths = (130, 450, 200)
for i, size in enumerate(self.colWidths):
self.tableWidget.horizontalHeader().resizeSection(i, size)
Collin A. Schmitz
committed
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)
Collin A. Schmitz
committed
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)
Collin A. Schmitz
committed
rowID.setBackground(QColor.fromRgb(230, 241, 245))
rowDataDir.setBackground(QColor.fromRgb(230, 241, 245))
rowNumFiles.setBackground(QColor.fromRgb(230, 241, 245))
Collin A. Schmitz
committed
def setTab(self, tab):
self.parent.stackedLayout.setCurrentIndex(tab)
Collin A. Schmitz
committed
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 - 19) / totalWidths for column in self.colWidths]
# for i, column in enumerate(newSize):
# self.tableWidget.horizontalHeader().resizeSection(i, column)