summaryrefslogtreecommitdiff
path: root/src/kicadtoNgspice/Sample.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/kicadtoNgspice/Sample.py')
-rw-r--r--src/kicadtoNgspice/Sample.py320
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()