#!/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: class UploadsTab(QWidget): def __init__(self, stationName, parent, id=-1): super(UploadsTab, self).__init__(parent) self.stationName = stationName self.parent = parent self.experimentDaqApi = DmApiFactory.getInstance().getExperimentDaqApi() self.uploadTabLayout() 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) grid.addWidget(lbl, 0, 0, 1, 5) # lambda allows the passing of variables backBtn = QPushButton('Back', self) backBtn.clicked.connect(lambda: self.setTab(0)) backBtn.setMaximumWidth(100) grid.addWidget(backBtn, 1, 4) 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('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)