diff options
Diffstat (limited to 'src/kicadtoNgspice/Sample.py')
-rw-r--r-- | src/kicadtoNgspice/Sample.py | 320 |
1 files changed, 320 insertions, 0 deletions
diff --git a/src/kicadtoNgspice/Sample.py b/src/kicadtoNgspice/Sample.py new file mode 100644 index 00000000..5f562724 --- /dev/null +++ b/src/kicadtoNgspice/Sample.py @@ -0,0 +1,320 @@ +from PyQt4 import QtGui,QtCore + +import sys +import re +import datetime +################################################################ +def main(): + app = QtGui.QApplication(sys.argv) + mw = MainWindow() + sys.exit(app.exec_()) + +################################################################ +class MainWindow(QtGui.QMainWindow): + def __init__(self): + QtGui.QMainWindow.__init__(self) + + # create stuff + self.rw = ReportWidget() + self.setCentralWidget(self.rw) + self.sw = StartWindow() + self.createActions() + self.createMenus() + self.createStatusBar() + + # create progress bar + self.pb = QtGui.QProgressBar(self.statusBar()) + self.statusBar().addPermanentWidget(self.pb) + + # connections + self.connect(self.sw, QtCore.Qt.SIGNAL("okClicked"), + self.rw.create) + self.connect(self.rw.table, QtCore.Qt.SIGNAL("progressChanged"), + self.update_progress) + self.connect(self.rw.table, QtCore.Qt.SIGNAL("displayFinished"), + self.hide_progress_bar) + + # format the main window + self.setGeometry(100,100,750,550) + + # show windows + self.show() + self.sw.show() + + def update_progress(self, n, nrows): + self.pb.show() + self.pb.setRange(0, nrows) + self.pb.setValue(n) + self.statusBar().showMessage(self.tr("Parsing eventlog data...")) + + def hide_progress_bar(self): + self.pb.hide() + self.statusBar().showMessage(self.tr("Finished")) + + def about(self): + QtGui.QMessageBox.about(self, self.tr("About AIS Audit Tool"), + self.tr("AIS Audit Tool\n\n" + "%s\n" + "%s\n" + "%s" % (__author__, __version__, __date__))) + + def createActions(self): + self.exitAct = QtGui.QAction(self.tr("E&xit;"), self) + self.exitAct.setShortcut(self.tr("Ctrl+Q")) + self.exitAct.setStatusTip(self.tr("Exit the application")) + self.connect(self.exitAct, QtCore.Qt.SIGNAL("triggered()"), self, QtCore.Qt.SLOT("close()")) + + self.aboutAct = QtGui.QAction(self.tr("&About;"), self) + self.aboutAct.setStatusTip(self.tr("Show the application's About box")) + self.connect(self.aboutAct, QtCore.Qt.SIGNAL("triggered()"), self.about) + + self.aboutQtAct = QtGui.QAction(self.tr("About &Qt;"), self) + self.aboutQtAct.setStatusTip(self.tr("Show the Qt library's About box")) + self.connect(self.aboutQtAct, QtCore.Qt.SIGNAL("triggered()"), qApp, QtCore.Qt.SLOT("aboutQt()")) + + def createMenus(self): + self.fileMenu = self.menuBar().addMenu(self.tr("&File;")) + self.fileMenu.addAction(self.exitAct) + + self.helpMenu = self.menuBar().addMenu(self.tr("&Help;")) + self.helpMenu.addAction(self.aboutAct) + self.helpMenu.addAction(self.aboutQtAct) + + def createStatusBar(self): + sb = QtGui.QStatusBar() + sb.setFixedHeight(18) + self.setStatusBar(sb) + self.statusBar().showMessage(self.tr("Ready")) + +################################################################ +class StartWindow(QtGui.QWidget): + def __init__(self, *args): + QtGui.QWidget.__init__(self, *args) + + # date box + self.label_date = QtGui.QLabel() + self.label_date.setText("Set date of last audit:") + default = datetime.date.today() - datetime.timedelta(DEFAULT_DAYS_FROM_LAST_AUDIT) + self.datebox = QtGui.QDateEdit(QtCore.Qt.QDate(default.year, default.month, default.day)) + + # buttons + spacer = QtGui.QSpacerItem(20,40,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding) + self.button_ok = QtGui.QPushButton() + self.button_ok.setText("OK") + self.button_ok.setDefault(True) + button_cancel = QtGui.QPushButton() + button_cancel.setText("Cancel") + + # layout + layout_right = QtGui.QVBoxLayout(self) + layout_right.addWidget(self.label_date) + layout_right.addWidget(self.datebox) + layout_right.addItem(spacer) + layout_right.addWidget(self.button_ok) + layout_right.addWidget(button_cancel) + + # connections + self.connect(button_cancel, QtCore.Qt.SIGNAL("clicked(bool)"), + self.close) + self.connect(self.button_ok, QtCore.Qt.SIGNAL("clicked(bool)"), + self.ok_clicked) + + def ok_clicked(self): + self.close() + year = self.datebox.date().year() + month = self.datebox.date().month() + day = self.datebox.date().day() + dateobj = datetime.date(int(year),int(month),int(day)) + self.emit(QtCore.Qt.SIGNAL("okClicked"), dateobj) + +################################################################ +class ReportWidget(QtGui.QWidget): + def __init__(self, *args): + QtGui.QWidget.__init__(self, *args) + self.cbUsers = QtGui.QCheckBox("Hide SYSTEM users") + self.cbSorting = QtGui.QCheckBox("Sorting enabled") + self.table = MyTable() + self.textbrowser = QtGui.QTextBrowser() + self.textbrowser.setFontFamily("Courier") + self.textbrowser.setFontPointSize(10) + hlayout = QtGui.QHBoxLayout() + hlayout.addWidget(self.cbUsers) + hlayout.addWidget(self.cbSorting) + vlayout = QtGui.QVBoxLayout() + vlayout.setMargin(2) + vlayout.addLayout(hlayout) + vlayout.addWidget(self.table) + self.setLayout(vlayout) + self.setGeometry(100,100,750,550) + + # connections + self.connect(self.cbUsers, QtCore.Qt.SIGNAL("stateChanged(int)"), + self.cbUsersChanged) + self.connect(self.cbSorting, QtCore.Qt.SIGNAL("stateChanged(int)"), + self.cbSortingChanged) + + def create(self, dateobj): + """ Parses the eventlog data, displays it in a table, and + displays the user login/logout also """ + self.table.display_data(dateobj) + + def cbUsersChanged(self): + state = self.cbUsers.checkState() + if state == 0: + self.table.show_system_users() + elif state == 2: + self.table.hide_system_users() + + def cbSortingChanged(self): + state = self.cbSorting.checkState() + if state == 0: + self.table.setSortingEnabled(False) + elif state == 2: + self.table.setSortingEnabled(True) + +################################################################ +class MyTable(QtGui.QTableWidget): + """ Creates a custom table widget """ + def __init__(self, *args): + QtGui.QTableWidget.__init__(self, *args) + self.setSelectionMode(self.ContiguousSelection) + self.setGeometry(0,0,700,400) + self.setShowGrid(False) + self.other_users_list = [] + + def hide_system_users(self): + for n in self.other_users_list: + self.setRowHidden(n, True) + + def show_system_users(self): + for n in self.other_users_list: + self.setRowHidden(n, False) + + def display_data(self, dateobj): + """ Reads in data as a 2D list and formats and displays it in + the table """ + + print "Fetching data..." + ep = EventlogParser() + data = ep.parse_log(dateobj) + print "Done." + + if len(data)==0: + data = ["No data for this date range."] + + nrows = len(data) + ncols = len(data[0]) + self.setRowCount(nrows) + self.setColumnCount(ncols) + self.setHorizontalHeaderLabels(['No.', 'Date','Time','Type','Event','User','Computer']) + + for i in xrange(len(data)): + # update progress dialog + if (i%20) == 0: + self.emit(QtCore.Qt.SIGNAL("progressChanged"), i, nrows) + qApp.processEvents() + + # set each cell to be a QTableWidgetItem from the _process_row method + items = self._process_row(data[i]) + for j in range(len(items)): + self.setItem(i, j, items[j]) + self.setRowHeight(i, 16) + + # set column width first time through + if i == 0: + self.resizeColumnsToContents() + self.setColumnWidth(4, 250) + + # format column width + self.resizeColumnsToContents() + self.setColumnWidth(4, 250) + + # emit signal for finished processing + self.emit(QtCore.Qt.SIGNAL("displayFinished")) + + def _process_row(self, row): + """ Formats items in the row of the 2-D list data + Input: the row of data from the EventlogParser in a list + Returns a list of QTableWidgetItems to be one row in the table + """ + + icon = [] + for i in xrange(len(row)): + # general formatting for all cells (may be overwritten) + icon.append(QtGui.QIcon()) + computer = row[6] + + # time processing + if i == 2: + try: + hour = int(re.split(r":", row[i])[0]) + except: + raise + if hour <= EARLY_HOUR or hour >= LATE_HOUR: + backcolor_time = QtGui.QColor(0,0,102) + else: + backcolor_time = QtGui.QColor("white") + + # success or failure processing + elif i == 3: + if row[i] == "8": + row[i] = "Success" + icon[i] = QtGui.QIcon("success.png") + elif row[i] == "16": + row[i] = "Failure" + icon[i] = QtGui.QIcon("failure.png") + else: + row[i] = "Unknown" + icon[i] = QtGui.QIcon("unknown.png") + + # event processing + elif i == 4: + backcolor = QtGui.QColor("white") + if row[i] in RED_EVENTIDS: + backcolor = QtGui.QColor("red") + elif row[i] in ORANGE_EVENTIDS: + backcolor = QtGui.QColor("orange") + elif row[i] in YELLOW_EVENTIDS: + backcolor = QtGui.QColor("yellow") + elif row[i] in GREEN_EVENTIDS: + pass + elif row[i] in OTHER_EVENTIDS: + backcolor = QtGui.QColor("blue") + try: + row[i] = row[i] + ": " + EVENT_DESC[row[i]] + except: + pass + + # user processing + elif i == 5: + if row[i] in (computer, "", "SYSTEM", "NETWORK SERVICE", "LOCAL SERVICE", "ANONYMOUS LOGON"): + font = QtGui.QFont("Arial", 8) + font.setBold(False) + textcolor = QtGui.QColor("gray") + user = 'other' + else: + font = QtGui. QFont("Arial", 8) + font.setBold(True) + textcolor = QtGui.QColor("black") + user = 'user' + + # create table widget item + tableitem_list = [] + for i in xrange(len(row)): + tableitem = QtGui.QTableWidgetItem(row[i]) + if i == 2: + tableitem.setBackgroundColor(backcolor_time) + else: + tableitem.setBackgroundColor(backcolor) + tableitem.setTextColor(textcolor) + tableitem.setFont(font) + tableitem.setTextAlignment(QtCore.Qt.AlignTop) + tableitem.setToolTip(row[i]) + tableitem.setIcon(icon[i]) + tableitem_list.append(tableitem) + + return tableitem_list + +################################################################ +if __name__ == "__main__": + main() |