예제 #1
0
    def _print_hits(self,
                    pattern_index,
                    hit_list,
                    humanisation,
                    pattern_length=1):

        #X represents the data points to be plotted on the grid.
        #It also stores velocity data about each hit.
        X = np.zeros((4, 16 * pattern_length))

        #iterator
        j = 0

        for i in hit_list:
            if i[0] == 'k':
                X[3][int(i[1]) -
                     1] = 1. / (self.volume - abs(humanisation[j]) * 300)
            if i[0] == 's':
                X[2][int(i[1]) -
                     1] = 1. / (self.volume - abs(humanisation[j]) * 300)
            if i[0] == 'g':
                X[2][int(i[1]) - 1] = 1. / (40 - abs(humanisation[j]) * 300)
            if i[0] == 'h':
                X[1][int(i[1]) -
                     1] = 1. / (self.volume - abs(humanisation[j]) * 300)
            if i[0] == 'p':
                X[0][int(i[1]) -
                     1] = 1. / (self.volume - abs(humanisation[j]) * 300)
            j += 1

        #Normalise zero values for heat mapping purposes.
        normal_value = np.amax(X) + 0.005
        X[X == 0] = normal_value

        #Plot figure.
        fig, ax = plt.subplots(figsize=(10, 10))
        ax.imshow(X, cmap=plt.get_cmap('gist_gray'))

        y_labels = ['Percussion', 'Hat', 'Snare', 'Kick']
        ax.set_xticks(list(range(0, 16 * pattern_length)))
        ax.set_yticks(list(range(0, 4)))
        ax.set_yticklabels(y_labels)
        ax.set_xticklabels(list(range(1, 16 * pattern_length + 1)))

        minor_xlocator = AutoMinorLocator(2)
        minor_ylocator = FixedLocator(
            [x + 0.5 for x in range(0, 16 * pattern_length)])
        ax.xaxis.set_minor_locator(minor_xlocator)
        ax.yaxis.set_minor_locator(minor_ylocator)
        ax.grid(which='minor', color='0.4', linestyle='dashed')

        fig.patch.set_facecolor("None")

        canvas = FigureCanvas(fig)

        canvas.setStyleSheet("background-color:transparent;")

        canvas.draw()

        return canvas
예제 #2
0
    def _create_plot(self):
        dpi = plt.rcParams['figure.dpi']
        figsize = (self._plot_width / dpi, self._plot_height / dpi)

        figure = plt.figure(frameon=False, figsize=figsize)
        axes = figure.add_subplot(111)

        canvas = FigureCanvas(figure)
        canvas.setFocusPolicy(QtCore.Qt.ClickFocus)
        canvas.setFixedSize(self._plot_width, self._plot_height)
        canvas.setStyleSheet("background: transparent")

        return axes, canvas
예제 #3
0
class Ui_MainWindow(object):
    #======================= center Main ============================
    def center(self, Form):
        frameGm = Form.frameGeometry()
        screen = QtGui.QApplication.desktop().screenNumber(
            QtGui.QApplication.desktop().cursor().pos())
        centerPoint = QtGui.QApplication.desktop().screenGeometry(
            screen).center()
        frameGm.moveCenter(centerPoint)
        Form.move(frameGm.topLeft())


#======================= center  Main ============================

    def Action1(self):
        from resetpassword import Ui_ResetPassword
        self.window = QtGui.QMainWindow()
        self.ui = Ui_ResetPassword()
        self.ui.setupUi(self.window)
        self.window.show()

    def Action2(self):
        from Login import Ui_Form
        self.window = QtGui.QWidget()
        self.ui = Ui_Form()
        self.ui.setupUi(self.window)
        self.window.show()
        self.MainWindow.close()

    #============ Select from table ==============
    def cell_was_clicked(self, row, column):
        global ID
        ID = self.tableWidget.item(row, column)

    #============ Select from table ==============

    #===============GoToNewWindow===================
    def OpenCreate(self):
        from admincreate import Ui_CreateWindow
        self.window = QtGui.QMainWindow()
        self.ui = Ui_CreateWindow()
        self.ui.setupUi(self.window)
        self.window.show()
        self.MainWindow.close()

    #===============GoToNewWindow===================

    #===============GoToEditWindow===================
    def OpenEdit(self):
        msgBox = QtGui.QMessageBox()
        if ID == "N":
            msgBox.setText("Please select one user to edit ")
            msgBox.setStandardButtons(QtGui.QMessageBox.Ok)
            msgBox.exec_()
        else:
            from admincreate import Ui_CreateWindow
            self.window = QtGui.QMainWindow()
            self.ui = Ui_CreateWindow()
            self.ui.setupUi(self.window)
            self.ui.pbsubmit.setText("Update User")
            m, con = DBCon.DBConnect()
            m.execute("SELECT * FROM User WHERE User_ID='%s' " % ID.text())
            rez = m.fetchall()
            for data in rez:
                First_name = data[2]
                Father_name = data[3]
                Gfather_name = data[4]
                Family_name = data[5]
                Email = data[6]
                Phone_number = data[7]
                User_Role = data[8]
                Branch_ID = data[9]

            self.ui.lineEdit_13.setText(ID.text())
            self.ui.lineEdit_13.setReadOnly(True)
            self.ui.lineEdit_9.setText(First_name)
            self.ui.lineEdit_11.setText(Father_name)
            self.ui.lineEdit_12.setText(Gfather_name)
            self.ui.lineEdit_10.setText(Family_name)
            self.ui.leemail.setText(Email)
            self.ui.lephone.setText(Phone_number)
            if User_Role == 'Station Officer':
                indexRole = 1
            elif User_Role == 'Scene Officer':
                indexRole = 2
            self.ui.comboBoxrole_3.setCurrentIndex(indexRole)
            self.ui.comboBoxbranch_3.setCurrentIndex(Branch_ID)

            self.window.show()
            self.MainWindow.close()

    #===============GoToEditWindow===================

    #===============Delete User======================
    def AlertM(self):
        global ID
        msgBox = QtGui.QMessageBox()
        if ID == "N":
            msgBox.setText("Please select one user to delete ")
            msgBox.setStandardButtons(QtGui.QMessageBox.Ok)
            msgBox.exec_()
        else:
            choice = QtGui.QMessageBox.question(
                None, 'Alert',
                "Are you sure you want to delete the user account?",
                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)
            if choice == QtGui.QMessageBox.Yes:
                m, con = DBCon.DBConnect()
                m.execute("DELETE FROM User WHERE User_ID='%s' " % ID.text())
                con.commit()
                con.close()
                msgBox.setText("User has been deleted successfully")
                msgBox.setStandardButtons(QtGui.QMessageBox.Ok)
                msgBox.exec_()
            else:
                pass

    #===============Delete User======================

    def setupUi(self, MainWindow):
        self.MainWindow = MainWindow
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(1340, 804)
        MainWindow.setStyleSheet(
            _fromUtf8("background-color: rgb(251, 251, 251)\n"
                      "#QLineEdit { \n"
                      "background-color: rgb(255, 255, 255)\n"
                      "}"))
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.gridLayout_3 = QtGui.QGridLayout(self.centralwidget)
        self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.logo = QtGui.QLabel(self.centralwidget)
        self.logo.setObjectName(_fromUtf8("logo"))
        self.horizontalLayout.addWidget(self.logo)
        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                       QtGui.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)

        ####################################****************************
        self.pushbutton = QtGui.QPushButton('User Name ')
        self.pushbutton.setStyleSheet(
            _fromUtf8("  border: 0px; font-size=1000px;"))
        menu = QtGui.QMenu()
        menu.addAction('Reset Password', self.Action1)
        menu.addAction('Log out', self.Action2)
        self.pushbutton.setMenu(menu)

        ####################################****************************

        self.horizontalLayout.addWidget(self.pushbutton)
        self.gridLayout_3.addLayout(self.horizontalLayout, 0, 0, 1, 2)
        self.menuframe = QtGui.QFrame(self.centralwidget)
        self.menuframe.setMinimumSize(QtCore.QSize(160, 0))
        self.menuframe.setMaximumSize(QtCore.QSize(160, 16777215))
        self.menuframe.setStyleSheet(
            _fromUtf8("border-color: rgb(22, 65, 74);"))
        self.menuframe.setFrameShape(QtGui.QFrame.StyledPanel)
        self.menuframe.setFrameShadow(QtGui.QFrame.Raised)
        self.menuframe.setObjectName(_fromUtf8("menuframe"))
        self.frame_dates = QtGui.QFrame(self.menuframe)
        self.frame_dates.setGeometry(QtCore.QRect(10, 70, 141, 261))
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.frame_dates.sizePolicy().hasHeightForWidth())
        self.frame_dates.setSizePolicy(sizePolicy)
        self.frame_dates.setMinimumSize(QtCore.QSize(0, 261))
        self.frame_dates.setStyleSheet(
            _fromUtf8("QLabel {\n"
                      "font: 75 13pt \"Verdana\";\n"
                      "}"))
        self.frame_dates.setFrameShape(QtGui.QFrame.NoFrame)
        self.frame_dates.setFrameShadow(QtGui.QFrame.Raised)
        self.frame_dates.setObjectName(_fromUtf8("frame_dates"))
        self.gridLayout_8 = QtGui.QGridLayout(self.frame_dates)
        self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8"))
        self.labeltimespan = QtGui.QLabel(self.frame_dates)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Verdana"))
        font.setPointSize(13)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.labeltimespan.setFont(font)
        self.labeltimespan.setStyleSheet(
            _fromUtf8("color: rgb(22, 65, 74);\n"
                      ""))
        self.labeltimespan.setObjectName(_fromUtf8("labeltimespan"))
        self.gridLayout_8.addWidget(self.labeltimespan, 5, 0, 1, 1)
        self.dateEditfrom = QtGui.QDateEdit(self.frame_dates)
        self.dateEditfrom.setObjectName(_fromUtf8("dateEditfrom"))
        self.gridLayout_8.addWidget(self.dateEditfrom, 2, 0, 1, 1)
        self.labelfromdate = QtGui.QLabel(self.frame_dates)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Verdana"))
        font.setPointSize(13)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.labelfromdate.setFont(font)
        self.labelfromdate.setStyleSheet(
            _fromUtf8("color: rgb(22, 65, 74);\n"
                      ""))
        self.labelfromdate.setObjectName(_fromUtf8("labelfromdate"))
        self.gridLayout_8.addWidget(self.labelfromdate, 1, 0, 1, 1)
        self.labeltodate = QtGui.QLabel(self.frame_dates)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Verdana"))
        font.setPointSize(13)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.labeltodate.setFont(font)
        self.labeltodate.setStyleSheet(_fromUtf8("color: rgb(22, 65, 74);"))
        self.labeltodate.setObjectName(_fromUtf8("labeltodate"))
        self.gridLayout_8.addWidget(self.labeltodate, 3, 0, 1, 1)
        self.timeEdit = QtGui.QTimeEdit(self.frame_dates)
        self.timeEdit.setObjectName(_fromUtf8("timeEdit"))
        self.gridLayout_8.addWidget(self.timeEdit, 6, 0, 1, 1)
        self.dateEditto = QtGui.QDateEdit(self.frame_dates)
        self.dateEditto.setObjectName(_fromUtf8("dateEditto"))
        self.gridLayout_8.addWidget(self.dateEditto, 4, 0, 1, 1)
        self.labeldate = QtGui.QLabel(self.frame_dates)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Verdana"))
        font.setPointSize(13)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.labeldate.setFont(font)
        self.labeldate.setStyleSheet(_fromUtf8("color: rgb(22, 65, 74);"))
        self.labeldate.setObjectName(_fromUtf8("labeldate"))
        self.gridLayout_8.addWidget(self.labeldate, 0, 0, 1, 1)
        self.filtermenutab = QtGui.QLabel(self.menuframe)
        self.filtermenutab.setGeometry(QtCore.QRect(0, 10, 91, 21))
        self.filtermenutab.setStyleSheet(
            _fromUtf8("font: 75 11pt \"Verdana\";"))
        self.filtermenutab.setObjectName(_fromUtf8("filtermenutab"))
        self.burgermenu = QtGui.QLabel(self.menuframe)
        self.burgermenu.setGeometry(QtCore.QRect(130, 10, 21, 21))
        self.burgermenu.setObjectName(_fromUtf8("burgermenu"))
        self.gridLayout_3.addWidget(self.menuframe, 1, 0, 1, 1)
        self.verticalLayout_4 = QtGui.QVBoxLayout()
        self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4"))
        self.line = QtGui.QFrame(self.centralwidget)
        self.line.setFrameShape(QtGui.QFrame.HLine)
        self.line.setFrameShadow(QtGui.QFrame.Sunken)
        self.line.setObjectName(_fromUtf8("line"))
        self.verticalLayout_4.addWidget(self.line)
        self.horizontalLayout_3 = QtGui.QHBoxLayout()
        self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3"))
        self.label_3 = QtGui.QLabel(self.centralwidget)
        self.label_3.setMaximumSize(QtCore.QSize(16777215, 20))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Helvetica"))
        font.setPointSize(12)
        self.label_3.setFont(font)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.horizontalLayout_3.addWidget(self.label_3)
        self.verticalLayout_4.addLayout(self.horizontalLayout_3)
        self.gridLayout_3.addLayout(self.verticalLayout_4, 2, 0, 1, 2)
        self.tabWidget = QtGui.QTabWidget(self.centralwidget)
        self.tabWidget.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
        self.tab = QtGui.QWidget()
        self.tab.setObjectName(_fromUtf8("tab"))
        self.label_5 = QtGui.QLabel(self.tab)
        self.label_5.setGeometry(QtCore.QRect(540, 200, 141, 121))
        self.label_5.setObjectName(_fromUtf8("label_5"))
        self.tabWidget.addTab(self.tab, _fromUtf8(""))
        self.tab_2 = QtGui.QWidget()
        self.tab_2.setObjectName(_fromUtf8("tab_2"))
        self.horizontalLayoutWidget = QtGui.QWidget(self.tab_2)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(15, 0, 1121, 600))
        self.horizontalLayoutWidget.setObjectName(
            _fromUtf8("horizontalLayoutWidget"))
        self.horizontalLayout_2 = QtGui.QHBoxLayout(
            self.horizontalLayoutWidget)
        self.horizontalLayout_2.setMargin(0)
        self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))

        #=============================
        self.figure = plt.figure()
        self.figure.patch.set_facecolor("None")
        self.canvas1 = FigureCanvas(self.figure)
        self.canvas1.setStyleSheet("background-color:transparent;")
        plot(self)
        #=================================

        self.horizontalLayout_2.addWidget(self.canvas1)

        #=============================
        self.figure = plt.figure()
        self.figure.patch.set_facecolor("None")
        self.canvas1 = FigureCanvas(self.figure)
        self.canvas1.setStyleSheet("background-color:transparent;")
        plot2(self)
        #=================================

        self.horizontalLayout_2.addWidget(self.canvas1)

        #=============================
        self.figure = plt.figure()
        self.figure.patch.set_facecolor("None")
        self.canvas1 = FigureCanvas(self.figure)
        self.canvas1.setStyleSheet("background-color:transparent;")
        plot1(self)
        #=================================
        self.horizontalLayout_2.addWidget(self.canvas1)

        self.tabWidget.addTab(self.tab_2, _fromUtf8(""))
        self.tab_3 = QtGui.QWidget()
        self.tab_3.setObjectName(_fromUtf8("tab_3"))
        self.gridLayout_2 = QtGui.QGridLayout(self.tab_3)
        self.gridLayout_2.setMargin(0)
        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
        self.DeleteUserB = QtGui.QPushButton(self.tab_3)
        self.DeleteUserB.setMaximumSize(QtCore.QSize(100, 16777215))
        self.DeleteUserB.setStyleSheet(
            _fromUtf8("color: rgb(22, 65, 74);\n"
                      "background-color: rgb(240, 240, 240);"))
        self.DeleteUserB.setObjectName(_fromUtf8("DeleteUserB"))
        self.gridLayout_2.addWidget(self.DeleteUserB, 2, 2, 1, 1)
        self.EditUserB = QtGui.QPushButton(self.tab_3)
        self.EditUserB.setMaximumSize(QtCore.QSize(100, 16777215))
        self.EditUserB.setStyleSheet(
            _fromUtf8("color: rgb(22, 65, 74);\n"
                      "background-color: rgb(240, 240, 240);\n"
                      ""))
        self.EditUserB.setObjectName(_fromUtf8("EditUserB"))
        self.gridLayout_2.addWidget(self.EditUserB, 2, 1, 1, 1)
        self.tableWidget = QtGui.QTableWidget(self.tab_3)
        self.tableWidget.setStyleSheet(
            _fromUtf8("border-color: rgb(22, 65, 74);\n"
                      ""))
        self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
        #=================
        #selection to be by row instead of cell.
        self.tableWidget.setSelectionBehavior(
            QtGui.QAbstractItemView.SelectRows)
        # enable sorting
        self.tableWidget.setSortingEnabled(True)
        #=================
        self.tableWidget.setColumnCount(9)
        self.tableWidget.setRowCount(0)
        #=======ConnectToDatabase==========
        m, con = DBCon.DBConnect()
        q = "SELECT User_ID,First_name,Father_name,Gfather_name,Family_name,Email,Phone_number,User_Role,Branch_ID FROM User WHERE User_Role = 'Station Officer' or  User_Role = 'Scene Officer'"
        m.execute(q)
        rez = m.fetchall()
        for row_num, row_data in enumerate(rez):
            self.tableWidget.insertRow(row_num)
            for col_num, data in enumerate(row_data):
                self.tableWidget.setItem(row_num, col_num,
                                         QtGui.QTableWidgetItem(str(data)))
        con.close()

        #=======ConnectToDatabase==========
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(6, item)
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(7, item)
        item = QtGui.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(8, item)
        self.gridLayout_2.addWidget(self.tableWidget, 1, 0, 1, 3)
        self.gridLayout = QtGui.QGridLayout()
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding,
                                        QtGui.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 0, 1, 1, 1)
        self.comboBox = QtGui.QComboBox(self.tab_3)
        self.comboBox.setObjectName(_fromUtf8("comboBox"))
        self.comboBox.addItem(_fromUtf8(""))
        self.comboBox.addItem(_fromUtf8(""))
        self.comboBox.addItem(_fromUtf8(""))
        self.gridLayout.addWidget(self.comboBox, 0, 2, 1, 1)
        self.SearchB = QtGui.QPushButton(self.tab_3)
        self.SearchB.setStyleSheet(
            _fromUtf8("color: rgb(22, 65, 74);\n"
                      "background-color: rgb(240, 240, 240);\n"
                      "\n"
                      ""))
        self.SearchB.setObjectName(_fromUtf8("SearchB"))
        self.gridLayout.addWidget(self.SearchB, 0, 4, 1, 1)
        self.CreateUserB = QtGui.QPushButton(self.tab_3)
        self.CreateUserB.setStyleSheet(
            _fromUtf8("color: rgb(22, 65, 74);\n"
                      "background-color: rgb(240, 240, 240);"))
        self.CreateUserB.setObjectName(_fromUtf8("CreateUserB"))
        #=======add a new user==========
        self.CreateUserB.clicked.connect(self.OpenCreate)
        #=======add a new user==========
        self.gridLayout.addWidget(self.CreateUserB, 0, 0, 1, 1)
        self.lesearchbox = QtGui.QLineEdit(self.tab_3)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                       QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.lesearchbox.sizePolicy().hasHeightForWidth())
        self.lesearchbox.setSizePolicy(sizePolicy)
        self.lesearchbox.setObjectName(_fromUtf8("lesearchbox"))
        self.gridLayout.addWidget(self.lesearchbox, 0, 3, 1, 1,
                                  QtCore.Qt.AlignLeft)
        self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 3)
        self.tabWidget.addTab(self.tab_3, _fromUtf8(""))
        self.gridLayout_3.addWidget(self.tabWidget, 1, 1, 1, 1)
        self.tabWidget.raise_()
        self.menuframe.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1440, 22))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

        #=======Edit a new user==========
        self.EditUserB.clicked.connect(self.OpenEdit)
        #=======Edit a new user==========
        #=======Delete user==========
        self.DeleteUserB.clicked.connect(self.AlertM)
        #=======Delete user==========
        #============ Select from table ==============
        self.tableWidget.setSelectionBehavior(
            QtGui.QAbstractItemView.SelectRows)
        self.tableWidget.cellClicked.connect(self.cell_was_clicked)
        #============ Select from table ==============
        #=======Edit a new user==========
        self.CreateUserB.clicked.connect(self.OpenCreate)

        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.lesearchbox, self.CreateUserB)
        MainWindow.setTabOrder(self.CreateUserB, self.dateEditfrom)
        MainWindow.setTabOrder(self.dateEditfrom, self.dateEditto)
        MainWindow.setTabOrder(self.dateEditto, self.timeEdit)
        MainWindow.setTabOrder(self.timeEdit, self.EditUserB)
        MainWindow.setTabOrder(self.EditUserB, self.tableWidget)
        MainWindow.setTabOrder(self.tableWidget, self.DeleteUserB)
        MainWindow.setTabOrder(self.DeleteUserB, self.SearchB)
        MainWindow.setTabOrder(self.SearchB, self.comboBox)
        MainWindow.setTabOrder(self.comboBox, self.tabWidget)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "DARB", None))
        #======================= center ============================
        self.center(MainWindow)
        #======================= center ============================
        self.logo.setText(_translate("MainWindow", "", None))
        self.logo.setPixmap(QtGui.QPixmap("Img/logosmall-min.png"))
        self.labeltimespan.setText(_translate("MainWindow", "Time:", None))
        self.labelfromdate.setText(_translate("MainWindow", "From:", None))
        self.labeltodate.setText(_translate("MainWindow", "To:", None))
        self.labeldate.setText(_translate("MainWindow", "Date:", None))
        self.filtermenutab.setText(
            _translate("MainWindow", "Map\'s Filter", None))
        self.burgermenu.setText(_translate("MainWindow", "", None))
        self.burgermenu.setPixmap(QtGui.QPixmap("Img/menu.png"))
        self.label_3.setText(_translate("MainWindow", "Need Help?", None))
        self.label_5.setText(_translate("MainWindow", "MAP", None))
        # This Map tab
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab),
                                  _translate("MainWindow", "Map", None))
        self.tabWidget.setTabText(
            self.tabWidget.indexOf(self.tab_2),
            _translate("MainWindow", "Statistics ", None))
        self.DeleteUserB.setText(_translate("MainWindow", "Delete User", None))
        self.EditUserB.setText(_translate("MainWindow", "Edit User", None))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "ID", None))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "First Name", None))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "New Column", None))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "Father Name", None))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("MainWindow", "Family Name", None))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("MainWindow", "Email", None))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("MainWindow", "Phone", None))
        item = self.tableWidget.horizontalHeaderItem(7)
        item.setText(_translate("MainWindow", "Role", None))
        item = self.tableWidget.horizontalHeaderItem(8)
        item.setText(_translate("MainWindow", "Branch ID", None))
        #========================================
        # set column width to fit contents
        header = self.tableWidget.horizontalHeader()
        header.setResizeMode(0, QtGui.QHeaderView.Stretch)
        header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(2, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(3, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(4, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(5, QtGui.QHeaderView.Stretch)
        header.setResizeMode(6, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(7, QtGui.QHeaderView.Stretch)
        header.setResizeMode(8, QtGui.QHeaderView.ResizeToContents)
        #========================================

        self.comboBox.setItemText(
            0, _translate("MainWindow", "-Filter by Role-", None))
        self.comboBox.setItemText(
            1, _translate("MainWindow", "Station Officer ", None))
        self.comboBox.setItemText(
            2, _translate("MainWindow", "Scene Officer ", None))
        self.SearchB.setText(_translate("MainWindow", "Search", None))
        self.CreateUserB.setText(_translate("MainWindow", "Create User ",
                                            None))
        self.lesearchbox.setToolTip(
            _translate(
                "MainWindow",
                "<html><head/><body><p>Enter the name or ID of the officer you want to look up.</p></body></html>",
                None))
        self.lesearchbox.setPlaceholderText(
            _translate("MainWindow", "Q search", None))
        self.tabWidget.setTabText(
            self.tabWidget.indexOf(self.tab_3),
            _translate("MainWindow", "Manage Users ", None))
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(1500, 842)        
        MainWindow.setAutoFillBackground(False)
        MainWindow.setStyleSheet(_fromUtf8("background-color: rgb(197, 197, 197)"))

        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.stackedWidget = QtGui.QStackedWidget(self.centralwidget)
        self.stackedWidget.setGeometry(QtCore.QRect(0, 0, 1500, 842))
        self.stackedWidget.setObjectName(_fromUtf8("stackedWidget"))


        self.page1 = QtGui.QWidget()
        self.page1.setObjectName(_fromUtf8("page"))
        self.lineEdit1 = QtGui.QLineEdit(self.page1)
        self.lineEdit1.setGeometry(QtCore.QRect(810, 340, 129, 27))
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lineEdit1.sizePolicy().hasHeightForWidth())
        self.lineEdit1.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("URW Chancery L"))
        font.setPointSize(18)
        #self.lineEdit1.setStyleSheet(_fromUtf8("background-color: rgb(166, 166, 166)"))
        self.lineEdit1.setFont(font)
        self.lineEdit1.setAutoFillBackground(True)
        self.lineEdit1.setInputMethodHints(QtCore.Qt.ImhHiddenText|QtCore.Qt.ImhNoAutoUppercase)
        self.lineEdit1.setObjectName(_fromUtf8("lineEdit1"))
        self.label1 = QtGui.QLabel(self.page1)
        self.label1.setGeometry(QtCore.QRect(600, 320, 191, 71))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("URW Palladio L"))
        font.setPointSize(24)
        self.label1.setFont(font)
        self.label1.setAutoFillBackground(False)
        self.label1.setObjectName(_fromUtf8("label1"))
        self.lineEdit1_2 = QtGui.QLineEdit(self.page1)
        self.lineEdit1_2.setGeometry(QtCore.QRect(810, 420, 129, 27))
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lineEdit1_2.sizePolicy().hasHeightForWidth())
        self.lineEdit1_2.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("URW Chancery L"))
        font.setPointSize(18)
        self.lineEdit1_2.setFont(font)
        #self.lineEdit1_2.setStyleSheet(_fromUtf8("background-color: rgb(166, 166, 166)"))
        self.lineEdit1_2.setInputMethodHints(QtCore.Qt.ImhHiddenText|QtCore.Qt.ImhNoAutoUppercase)
        self.lineEdit1_2.setObjectName(_fromUtf8("lineEdit1_2"))
        self.label1_2 = QtGui.QLabel(self.page1)
        self.label1_2.setGeometry(QtCore.QRect(600, 390, 191, 81))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("URW Palladio L"))
        font.setPointSize(24)
        self.label1_2.setFont(font)
        self.label1_2.setAutoFillBackground(True)
        self.label1_2.setObjectName(_fromUtf8("label1_2"))
        self.label = QtGui.QLabel(self.page1)
        self.pixmap = QPixmap('small_400.jpg')
        self.label.setPixmap(self.pixmap)
        self.label.setGeometry(QtCore.QRect(560, 70, 400, 233))
        self.label.setAutoFillBackground(True)
        self.label.setObjectName(_fromUtf8("label"))

        self.proceed = QtGui.QPushButton(self.page1)
        #self.proceed.setStyleSheet(_fromUtf8("background-color: rgb(166, 166, 166)"))
        self.proceed.setGeometry(QtCore.QRect(730, 490, 121, 31))
        self.proceed.setObjectName(_fromUtf8("proceed"))
        self.proceed.clicked.connect(self.getInterface)

        self.stackedWidget.addWidget(self.page1)





        self.page2 = QtGui.QWidget()
        self.page2.setObjectName(_fromUtf8("page"))
        self.verticalLayout = QtGui.QVBoxLayout(self.page2)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.horizontalLayout_2 = QtGui.QHBoxLayout()
        self.horizontalLayout_2.setSizeConstraint(QtGui.QLayout.SetMaximumSize)
        self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
        self.horizontalLayout_2.setContentsMargins(-1, -1, -1, 10)
        
        self.verticalLayout_4 = QtGui.QVBoxLayout()
        self.verticalLayout_4.setContentsMargins(-1, 0, -1, -1)
        self.verticalLayout_4.setSpacing(30)
        self.verticalLayout_4.setObjectName(_fromUtf8("verticalLayout_4"))

        self.w = QtGui.QWidget()
        self.b = QtGui.QLabel(self.w)
        self.b.setText("Sniffing on interface:")
        self.c = QtGui.QLabel(self.w)
        self.c.setText("Timeout Limit")
        self.d = QtGui.QLabel(self.w)
        self.d.setText("ARP Table is Clean.\t\t")
        self.e = QtGui.QLabel(self.w)
        self.e.setText(".\t\t\t\t")
        self.listViewbtn = QtGui.QPushButton(self.w)
        self.listViewbtn.setGeometry(QtCore.QRect(40, 110, 75, 23))
        self.listViewbtn.setObjectName(_fromUtf8("List_View"))
        self.listViewbtn.clicked.connect(self.switchView)
    
        self.c.move(2,30)
        self.d.move(2,60)
        self.e.move(2,80)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.w.sizePolicy().hasHeightForWidth())
        self.verticalLayout_4.addWidget(self.w)

        self.fig5 = Figure(figsize=(1,1))
        #self.fig5.patch.set_alpha(0.5)
        #self.ax = self.fig5.add_subplot(111)
        #self.ax.patch.set_facecolor('#ababab')
        #self.ax.patch.set_alpha(0.5)
        self.canvas5 = FigureCanvas(self.fig5)
        self.canvas5.setStyleSheet(_fromUtf8("background-color: transparent"))
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.canvas5.sizePolicy().hasHeightForWidth())
        clickable(self.canvas5).connect(lambda: self.swap(5))
        self.canvas5.setSizePolicy(sizePolicy)
        self.verticalLayout_4.addWidget(self.canvas5)
        
        self.horizontalLayout_2.addLayout(self.verticalLayout_4)
        self.fig6 = Figure()
        self.canvas6 = FigureCanvas(self.fig6)
        self.canvas6.setStyleSheet("background-color: transparent;")
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.canvas6.sizePolicy().hasHeightForWidth())
        self.canvas6.setSizePolicy(sizePolicy)
        #self.canvas6.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        #clickable(self.canvas6).connect(lambda: self.swap(5))
        self.horizontalLayout_2.addWidget(self.canvas6)


        self.horizontalLayout_2.setStretch(0, 24)
        self.horizontalLayout_2.setStretch(1, 76)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setSpacing(25)
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.fig1 = Figure(figsize=(1,1))
        self.canvas1 = FigureCanvas(self.fig1)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.canvas1.sizePolicy().hasHeightForWidth())
        self.canvas1.setSizePolicy(sizePolicy)
        self.canvas1.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        clickable(self.canvas1).connect(lambda: self.swap(1))
        self.horizontalLayout.addWidget(self.canvas1)


        self.fig2 = Figure(figsize=(1,1))
        self.canvas2 = FigureCanvas(self.fig2)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.canvas2.sizePolicy().hasHeightForWidth())
        self.canvas2.setSizePolicy(sizePolicy)
        self.canvas2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        clickable(self.canvas2).connect(lambda: self.swap(2))
        self.horizontalLayout.mouseReleaseEvent = print("hey")
        self.horizontalLayout.addWidget(self.canvas2)

        self.fig3 = Figure(figsize=(1,1))
        self.canvas3 = FigureCanvas(self.fig3)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.canvas3.sizePolicy().hasHeightForWidth())
        self.canvas3.setSizePolicy(sizePolicy)
        self.canvas3.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        clickable(self.canvas3).connect(lambda: self.swap(3))
        self.horizontalLayout.addWidget(self.canvas3)

        self.fig4 = Figure(figsize=(1,1))
        self.canvas4 = FigureCanvas(self.fig4)
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.canvas4.sizePolicy().hasHeightForWidth())
        self.canvas4.setSizePolicy(sizePolicy)
        self.canvas4.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        clickable(self.canvas4).connect(lambda: self.swap(4))
        self.horizontalLayout.addWidget(self.canvas4)

        self.verticalLayout.addLayout(self.horizontalLayout)
        self.verticalLayout.setStretch(0, 10)
        self.verticalLayout.setStretch(1, 4)
        self.stackedWidget.addWidget(self.page2)

        #List view:
        self.page3 = QtGui.QWidget()
        self.page3.setObjectName(_fromUtf8("page"))
        self.verticalLayout_List = QtGui.QVBoxLayout(self.page3)
        self.verticalLayout_List.setObjectName(_fromUtf8("verticalLayout_List"))
        self.tableWidget = QtGui.QTableWidget(self.centralwidget)
        self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth())
        
        self.tableWidget.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
        self.tableWidget.setSizePolicy(sizePolicy)
        self.tableWidget.setColumnCount(6)
        self.tableWidget.setAlternatingRowColors(True)
        self.tableWidget.cellClicked.connect(lambda:self.updateListView(self.tableWidget.currentRow()))
        print(dir(self.tableWidget.scroll))
        self.tableWidget.setColumnWidth(0,220)
        self.tableWidget.setColumnWidth(1,220)
        self.tableWidget.setColumnWidth(2,220)
        self.tableWidget.setColumnWidth(3,220)
        self.tableWidget.setColumnWidth(4,220)
        self.tableWidget.setColumnWidth(5,220)
        self.tableWidget.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.tableWidget.scrollToBottom()
        self.tableWidget.setRowCount(0)
        self.verticalLayout_List.addWidget(self.tableWidget)

        self.info = QtGui.QWidget()
        self.b1 = QtGui.QLabel(self.info)
        self.b1.setText("Sniffing on interface:")
        self.b2 = QtGui.QLabel(self.info)
        self.b2.setText("Sniffing on interface:")
        self.b2.move(0,30)
        self.b3 = QtGui.QLabel(self.info)
        self.b3.setText("Sniffing on interface:")
        self.b3.move(0,60)
        self.verticalLayout_List.addWidget(self.info)
        self.verticalLayout_List.setStretch(0, 4)
        self.verticalLayout_List.setStretch(1, 2)


        self.stackedWidget.addWidget(self.page3)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        self.view = QtGui.QMenu(self.menubar)
        self.view.setObjectName(_fromUtf8("view")) 
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)
        self.change_View = QtGui.QAction(MainWindow)
        self.change_View.setObjectName(_fromUtf8("change_view"))
        self.change_View.triggered.connect(self.switchView)
        self.view.addAction(self.change_View)
        
        

        self.menubar.addAction(self.view.menuAction())
        


        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def mousePressEvent(self, QMouseEvent):
        print (QMouseEvent.pos())

    def mouseReleaseEvent(self, QMouseEvent):
        cursor =QtGui.QCursor()
        print (cursor.pos()) 

    def swap(self,a):
        global cur
        cur = a


    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.listViewbtn.setText(_translate("List_View", "List View", None))
        self.change_View.setText(_translate("change_view", "List View", None))
        self.view.setTitle(_translate("MainWindow", "View", None))
        self.label1.setText(_translate("MainWindow", "Interface :", None))
        self.label1_2.setText(_translate("MainWindow", "Timeout :", None))
        self.proceed.setText(_translate("MainWindow", "Proceed", None))

    
    def getInterface(self):
        global sniffingInterface, sniffingTimeOut, t2
        sniffingInterface = self.lineEdit1.text()
        sniffingTimeOut = int(self.lineEdit1_2.text())
        print(sniffingInterface,sniffingTimeOut)
        self.stackedWidget.setCurrentIndex(1)
        self.plot()

    def switchView(self):
        global isListView
        if(isListView):
            self.change_View.setText("List View")
            self.stackedWidget.setCurrentIndex(1)
            isListView = False
        else:
            self.change_View.setText("Graphic View")
            self.stackedWidget.setCurrentIndex(2)
            isListView = True

    def plot(self):
        global cur
        global a
        global color
        global autoScroll
        global lenOfArray
        global x_base
        global arp_attack
        global mac_add
        
        ax1 = self.fig1.add_subplot(111)
        ax1.clear()
        ax1.set_ylim([0,60])
        ax1.fill_between(x_base,0,a[0,-100:],linewidth=1.4,color=color[0])
        
        self.canvas1.draw()

        ax2 = self.fig2.add_subplot(111)
        ax2.clear()
        ax2.set_ylim([0,60])
        ax2.fill_between(x_base,0,a[1,-100:],linewidth=1.4,color=color[1])
        self.canvas2.draw()

        ax3 = self.fig3.add_subplot(111)
        ax3.clear()
        ax3.set_ylim([0,60])
        ax3.fill_between(x_base,0,a[2,-100:],linewidth=1.4,color=color[2])
        self.canvas3.draw()

        ax4 = self.fig4.add_subplot(111)
        ax4.clear()
        ax4.set_ylim([0,60])
        ax4.fill_between(x_base,0,a[3,-100:],linewidth=1.4,color=color[3])
        self.canvas4.draw()

        ax5 = self.fig5.add_subplot(111)
        ax5.clear()
        ax5.set_ylim([0,60])
        ax5.fill_between(x_base,0,a[4,-100:],linewidth=1.4,color=color[4])
        self.canvas5.draw()

        ax6 = self.fig6.add_subplot(111)
        ax6.clear()
        ax6.set_ylim([0,60])
        ax6.fill_between(x_base,0,a[cur-1,-100:],linewidth=3.0,color=color[cur-1])
        self.canvas6.draw()
        if(lenOfArray<a.size):
            self.tableWidget.insertRow(self.tableWidget.rowCount())
            for i in range(6):
                self.x = self.tableWidget.rowCount()
                self.tableWidget.setRowCount(self.x)
                self.tableWidget.setItem(self.x-1,i,QtGui.QTableWidgetItem(str(a[i,int(lenOfArray/6)])))
            if(autoScroll):
                self.tableWidget.scrollToBottom()   
            lenOfArray += 6  
        QtCore.QTimer.singleShot(1, self.plot)
        
        if(arp_attack):
            self.d.setText("ARP spoof detected")
            self.d.setStyleSheet(_fromUtf8("background-color: rgb(255, 10, 10)"))
            self.e.setText("Suspicious mac address: "+mac_add)
            self.e.setStyleSheet(_fromUtf8("background-color: rgb(255, 10, 10)"))
    

    def updateListView(self, x):
        global autoScroll
        autoScroll = False
        
        self.b1.setText("data"+str(a[0,x+100]))
        self.b2.setText("data"+str(a[1,x+100]))
        self.b3.setText("data"+str(a[2,x+100]))
        print(a[:,x+2])
예제 #5
0
class MainWindow(QtGui.QMainWindow):
    """Balloon tracker main window"""
    updatetrigger = QtCore.pyqtSignal()
    def __init__(self):
        """Initialise main window"""
        super(MainWindow, self).__init__()
        # Create data handler (creates also data collector)
        self.datahandler = aprs_daemon.DataHandlerThread(self)
        self.setWindowTitle("Balloon Tracker")
        self.setObjectName("mainwindow")
        self.resize(800, 600)
        centralwidget = QtGui.QWidget(self)
        self.updatetrigger.connect(self._update_all)
        sizepol = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
                                    QtGui.QSizePolicy.Expanding)
        sizepol.setHorizontalStretch(0)
        sizepol.setVerticalStretch(0)
        sizepol.setHeightForWidth(centralwidget.sizePolicy().hasHeightForWidth())
        centralwidget.setSizePolicy(sizepol)
        centralwidget.setObjectName("centralwidget")
        mainlayout = QtGui.QHBoxLayout(centralwidget)
        mainlayout.setMargin(0)
        mainlayout.setObjectName("mainlayout")
        gridlayout = QtGui.QGridLayout()
        gridlayout.setSizeConstraint(QtGui.QLayout.SetNoConstraint)
        gridlayout.setSpacing(0)
        gridlayout.setObjectName("gridlayout")
        # compass area
        self.compass = None
        self.distancelabel = None
        gridlayout.addWidget(self.create_compass(centralwidget), 1, 1, 1, 1)
        # data area
        self.items = []
        gridlayout.addWidget(self.create_dataframe(centralwidget), 0, 1, 1, 1)
        # plot area
        self.canvas = None
        self.plots = []
        self.axes = []
        gridlayout.addWidget(self.create_plot(centralwidget), 1, 0, 1, 1)
        #map area
        self.webview = None
        self.create_map(centralwidget)
        gridlayout.addWidget(self.webview, 0, 0, 1, 1)
        mainlayout.addLayout(gridlayout)
        self.setCentralWidget(centralwidget)
        #menubar
        self.startstop = None
        self.followtoggle = None
        self.followtarget = 0
        self.setMenuBar(self.create_menubar())
        #statusbar
        self.statusbar = QtGui.QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)
        self.runstatus = QtGui.QLabel("Ready")
        self.statusbar.addPermanentWidget(self.runstatus)
        self.followstatus = QtGui.QLabel("Balloon")
        self.statusbar.addPermanentWidget(self.followstatus)
        self.gpsstatus = QtGui.QLabel("GPS")
        self.gpsstatus.setStyleSheet('color: gray')
        self.statusbar.addPermanentWidget(self.gpsstatus)
        self.statusmessage = QtGui.QLabel("")
        self.statusbar.addPermanentWidget(self.statusmessage, 1)
        #toolbar
        #self.toolBar = QtGui.QToolBar(self)
        #self.toolBar.setObjectName("toolBar")
        #self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)


    def create_compass(self, parent):
        """Create compass area"""
        compassframe = QtGui.QFrame(parent)
        compassframe.setAutoFillBackground(False)
        #compassframe.setStyleSheet("background-color: rgb(255, 255, 255);")
        #  compassframe.setFrameShape(QtGui.QFrame.StyledPanel)
        #  compassframe.setFrameShadow(QtGui.QFrame.Raised)
        compassframe.setObjectName("compassframe")
        compasslayout = QtGui.QVBoxLayout(compassframe)
        compasslayout.setMargin(0)
        compasslayout.setObjectName("compasslayout")

        palette = QtGui.QPalette()
        palette.setColor(QtGui.QPalette.Base, QtCore.Qt.darkBlue)
        palette.setColor(QtGui.QPalette.Foreground,
                         QtGui.QColor(QtCore.Qt.darkBlue).dark(120))
        palette.setColor(QtGui.QPalette.Text, QtCore.Qt.white)
        self.compass = Qwt.QwtCompass()
        self.compass.setLineWidth(4)
        self.compass.setScaleTicks(1, 1, 3)
        self.compass.setScale(36, 5, 0)
        self.compass.setReadOnly(True)
        self.compass.setNeedle(Qwt.QwtCompassMagnetNeedle(
                               Qwt.QwtCompassMagnetNeedle.ThinStyle))
        self.compass.setValue(0.0)
        compasslayout.addWidget(self.compass)
        self.distancelabel = QtGui.QLabel("NA")
        self.distancelabel.setAlignment(QtCore.Qt.AlignCenter)
        compasslayout.addWidget(self.distancelabel)
        return compassframe

    def create_dataframe(self, parent):
        """Create data frame"""
        dataframe = QtGui.QFrame(parent)
        sizepol = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,
                                    QtGui.QSizePolicy.Expanding)
        sizepol.setHorizontalStretch(0)
        sizepol.setVerticalStretch(0)
        sizepol.setHeightForWidth(dataframe.sizePolicy().hasHeightForWidth())
        dataframe.setSizePolicy(sizepol)
        dataframe.setMinimumSize(QtCore.QSize(200, 0))
        #  dataframe.setFrameShape(QtGui.QFrame.StyledPanel)
        #  dataframe.setFrameShadow(QtGui.QFrame.Raised)
        dataframe.setObjectName("dataframe")
        datalayout = QtGui.QVBoxLayout(dataframe)
        datalayout.setMargin(0)
        datalayout.setObjectName("datalayout")
        treewidget = QtGui.QTreeWidget()
        treewidget.setColumnCount(2)
        treewidget.setIndentation(0)
        treewidget.setAlternatingRowColors(1)
        treewidget.header().hide()
        for row in range(len(DATA_LABELS)/2):
            self.items.append(QtGui.QTreeWidgetItem(treewidget,
                              [DATA_LABELS[1+2*row], '']))
        treewidget.resizeColumnToContents(0)
        treewidget.resizeColumnToContents(1)
        treewidget.insertTopLevelItems(0, self.items)
        datalayout.addWidget(treewidget)
        return dataframe

    def create_menubar(self):
        """Create menu bar"""
        menubar = QtGui.QMenuBar(self)
        menubar.setObjectName("menubar")
        menu_file = QtGui.QMenu("&File", menubar)
        menu_file.setObjectName("menuFile")
        menu_operation = QtGui.QMenu("&Operation", menubar)
        menu_operation.setObjectName("menuOperation")
        menu_help = QtGui.QMenu("&Help", menubar)
        menu_help.setObjectName("menuHelp")
        menu_settings = QtGui.QMenu("&Settings", menubar)
        menu_settings.setObjectName("menuSettings")
        #actions
        new_session = QtGui.QAction("&New Session", self)
        new_session.setIconVisibleInMenu(False)
        new_session.setObjectName("new_session")
        open_session = QtGui.QAction("&Open Session", self)
        open_session.setObjectName("open_session")
        save_session = QtGui.QAction("&Save Session", self)
        save_session.setObjectName("save_session")
        exit_program = QtGui.QAction("&Exit", self)
        exit_program.setObjectName("exit")
        self.startstop = QtGui.QAction("&Start", self)
        self.startstop.setObjectName("startstop")
        self.followtoggle = QtGui.QAction("&Follow GPS", self)
        self.followtoggle.setObjectName("followtoggle")
        general_settings = QtGui.QAction("&General", self)
        general_settings.setObjectName("general_settings")
        balloon_settings = QtGui.QAction("&Balloon", self)
        balloon_settings.setObjectName("balloon_settings")
        help_window = QtGui.QAction("&Help", self)
        help_window.setObjectName("help")
        about = QtGui.QAction("&About", self)
        about.setObjectName("about")
        #menu content
        menu_file.addAction(new_session)
        menu_file.addAction(open_session)
        menu_file.addAction(save_session)
        menu_file.addSeparator()
        menu_file.addAction(exit_program)
        menu_operation.addAction(self.startstop)
        menu_operation.addAction(self.followtoggle)
        menu_help.addAction(help_window)
        menu_help.addSeparator()
        menu_help.addAction(about)
        menu_settings.addSeparator()
        menu_settings.addAction(general_settings)
        menu_settings.addAction(balloon_settings)
        menubar.addAction(menu_file.menuAction())
        menubar.addAction(menu_operation.menuAction())
        menubar.addAction(menu_settings.menuAction())
        menubar.addAction(menu_help.menuAction())
        #self.toolbar.addSeparator()
        #self.toolbar.addAction(self.startstop)

        QtCore.QObject.connect(new_session,
                QtCore.SIGNAL("triggered()"), self._new_session)
        QtCore.QObject.connect(open_session,
                QtCore.SIGNAL("triggered()"), self._open_session)
        QtCore.QObject.connect(save_session,
                QtCore.SIGNAL("triggered()"), self._save_session)
        QtCore.QObject.connect(exit_program,
                QtCore.SIGNAL("triggered()"), self._exit)
        QtCore.QObject.connect(self.startstop,
                QtCore.SIGNAL("triggered()"), self._startstop)
        QtCore.QObject.connect(self.followtoggle,
                QtCore.SIGNAL("triggered()"), self._followtoggle)
        QtCore.QObject.connect(general_settings,
                QtCore.SIGNAL("triggered()"), self._general_settings)
        QtCore.QObject.connect(balloon_settings,
                QtCore.SIGNAL("triggered()"), self._balloon_settings)
        QtCore.QObject.connect(help_window,
                QtCore.SIGNAL("triggered()"), self._help)
        QtCore.QObject.connect(about,
                QtCore.SIGNAL("triggered()"), self._about)
        QtCore.QMetaObject.connectSlotsByName(self)
        #self.toolBar.setWindowTitle("toolBar")
        return menubar

    def create_plot(self, parent):
        """Create plot area"""
        plotframe = QtGui.QFrame(parent)
        sizepol = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
                                    QtGui.QSizePolicy.Fixed)
        sizepol.setHorizontalStretch(0)
        sizepol.setVerticalStretch(0)
        sizepol.setHeightForWidth(plotframe.sizePolicy().hasHeightForWidth())
        plotframe.setSizePolicy(sizepol)
        plotframe.setMinimumSize(QtCore.QSize(0, 200))
        plotframe.setMaximumSize(QtCore.QSize(1980, 200))
        #  plotframe.setFrameShape(QtGui.QFrame.StyledPanel)
        #  plotframe.setFrameShadow(QtGui.QFrame.Raised)
        plotframe.setObjectName("plotframe")
        plotlayout = QtGui.QVBoxLayout(plotframe)
        plotlayout.setMargin(0)
        plotlayout.setObjectName("plotlayout")
        fig = plt.figure(dpi=100)#, frameon=False figsize=(20, 4), 
        fig.patch.set_facecolor('white')
        rcParams['axes.color_cycle'] = ['k', 'b', 'g', 'r']
        self.canvas = FigureCanvas(fig)
        self.axes.append(host_subplot(111, axes_class=aa.Axes))
        self.axes[0].set_xlabel("Time")
        self.axes[0].set_ylabel(DATA_LABELS[9])
        self.axes[0].set_aspect('auto', 'datalim') 
        self.plots.append(self.axes[0].plot(aprs_daemon.LIVE_DATA['timestamps'],
                           aprs_daemon.LIVE_DATA['altitudes'])[0])
        fig.add_axes(self.axes[0])
        self.axes[0].axis["left"].label.set_color(self.plots[0].get_color())
        self.axes[0].tick_params(axis='y', color=self.plots[0].get_color())
        for row in range(5, len(DATA_LABELS)/2):
            if row % 2 == 0:
                side = "left"
                offset = -1
            else:
                side = "right"
                offset = 1
            self.axes.append(self.axes[0].twinx())
            self.axes[row-4].axis["right"].set_visible(False)
            new_fixed_axis =  self.axes[row-4].get_grid_helper().new_fixed_axis
            self.axes[row-4].axis[side] = new_fixed_axis(loc=side, axes=self.axes[row-4],
                        offset=(offset*(60*((row-5)%2+(row-5)/2)), 0))

            self.axes[row-4].axis[side].label.set_visible(True)
            self.axes[row-4].axis[side].major_ticklabels.set_ha(side)
            self.axes[row-4].axis[side].set_label(DATA_LABELS[2*row+1])
            self.plots.append(self.axes[row-4].plot(aprs_daemon.LIVE_DATA['timestamps'],
                        aprs_daemon.LIVE_DATA[DATA_LABELS[2*row]])[0])

            self.axes[row-4].axis[side].label.set_color(self.plots[row-4].get_color())
            self.axes[row-4].set_aspect('auto', 'datalim') 
            self.axes[row-4].tick_params(axis='y',
                            colors=self.plots[row-4].get_color())
        plt.subplots_adjust(bottom=0.3, left=0.20, right=0.8, top=0.85)
        fig.tight_layout()
        self.canvas.setParent(plotframe)
        self.canvas.setStyleSheet("background-color: rgb(255, 0, 255);")
        self.canvas.draw()
        plotlayout.addWidget(self.canvas)
        return plotframe

    def create_map(self, parent):
        """Create maps widget"""
        self.webview = QtWebKit.QWebView(parent)
        sizepol = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,
                                    QtGui.QSizePolicy.Expanding)
        sizepol.setHorizontalStretch(0)
        sizepol.setVerticalStretch(0)
        sizepol.setHeightForWidth(self.webview.sizePolicy().hasHeightForWidth())
        self.webview.setPage(WebPage(self.webview))
        self.webview.setSizePolicy(sizepol)
        self.webview.setAutoFillBackground(False)
        self.webview.setObjectName("webview")
        self.webview.load(QtCore.QUrl.fromLocalFile(os.path.dirname(os.path.realpath(__file__)) + "/gmap_openlayers.html"))
        self.webview.show()

    def _about(self):
        """Show information about program"""
        QtGui.QMessageBox.about(self, "About Balloon Tracker",
                                "Balloon Tracker is a program.")

    def _help(self):
        """Show help for program"""
        QtGui.QMessageBox.about(self, "About Balloon Tracker",
                                "Balloon Tracker is a program.")

    def _general_settings(self):
        """Show dialog for modifying general program settings"""
        dialog = SettingsDialog(self, "General settings",
                                aprs_daemon.PARAMETERS,
                                PARAMETER_SETTINGS)
        dialog.exec_()

    def _balloon_settings(self):
        """Show dialog for modifying balloon related settings"""
        dialog = SettingsDialog(self, "Balloon settings",
                                aprs_daemon.BALLOON, BALLOON_SETTINGS)
        dialog.exec_()

    def _update_current_data(self):
        """Update current data and compass"""
        for row in range(len(DATA_LABELS)/2):
            if len(aprs_daemon.LIVE_DATA[DATA_LABELS[2*row]]) > 0:
                self.items[row].setText(1,
                    str(round(aprs_daemon.LIVE_DATA[DATA_LABELS[2*row]][-1], 2)))
        lat0 = self.datahandler.loc['lat']
        lon0 = self.datahandler.loc['lon']
        lat1 = aprs_daemon.LIVE_DATA['lats'][-1]
        lon1 = aprs_daemon.LIVE_DATA['lons'][-1]
        self.compass.setValue(aprs_daemon.direction(lat0, lon0, lat1, lon1))
        self.distancelabel.setText(''.join([str(int(aprs_daemon.distance(lat0, lon0, lat1, lon1))), ' m']))

    def _update_dataplot(self):
        """Update data plot"""
        for row in range(4, len(DATA_LABELS)/2):
            self.plots[row-4].set_data(aprs_daemon.LIVE_DATA['timestamps'],
                    aprs_daemon.LIVE_DATA[DATA_LABELS[2*row]])
            
            self.axes[row-4].relim()
            self.axes[row-4].autoscale_view()
        self.canvas.draw()

    def _update_map(self):
        """Update map"""
        #FIXME follow current location or balloon?
        string = ""
        if self.followtarget == 0:
          string = "setCenter(%s, %s);" % \
                   (str(aprs_daemon.LIVE_DATA['lats'][-1]),
                   str(aprs_daemon.LIVE_DATA['lons'][-1]))
        else:
          string = "setCenter(%s, %s);" % \
                   (str(self.datahandler.loc['lat']),
                   str(self.datahandler.loc['lon']))
        self.webview.page().mainFrame().evaluateJavaScript(string)
        string = "addPosition(%s, %s);" % \
                 (str(self.datahandler.loc['lat']),
                 str(self.datahandler.loc['lon']))
        self.webview.page().mainFrame().evaluateJavaScript(string)
        #update tracks
        string = "addNode(%s, %s);" % (str(aprs_daemon.LIVE_DATA['lats'][-1]),
                 str(aprs_daemon.LIVE_DATA['lons'][-1]))
        self.webview.page().mainFrame().evaluateJavaScript(string)

    def _update_all(self):
        """Update all data in window"""
        self._update_current_data()
        self._update_dataplot()
        self._update_map()

    def update_data(self):
        """Trigger data update"""
        self.updatetrigger.emit()

    def _startstop(self):
        """Start collecting and processing data"""
        if self.datahandler.is_active():
            self.startstop.setText("&Start")
            self.runstatus.setText("Ready")
            self.datahandler.exit()
            self.datahandler.join()
        else:
            self.startstop.setText("&Stop")
            self.runstatus.setText("Running")
            string = "cleanUpMarkers(0);\naddKML(\"%s\");\n\
                     setCenter(%s, %s);\naddPosition(%s, %s);\n\
                     addPosition(%s, %s);" % \
                     (aprs_daemon.PARAMETERS['kml_file'],
                     str(aprs_daemon.BALLOON['lat0']),
                     str(aprs_daemon.BALLOON['lon0']),
                     str(aprs_daemon.BALLOON['lat0']),
                     str(aprs_daemon.BALLOON['lon0']),
                     str(self.datahandler.loc['lat']),
                     str(self.datahandler.loc['lon']))
            self.webview.page().mainFrame().evaluateJavaScript(string)
            if not self.datahandler.is_alive():
                self.datahandler = aprs_daemon.DataHandlerThread(self)
            self.datahandler.start()

    def _followtoggle(self):
        """Toggle followed target"""
        if self.followtarget == 0:
            self.followtoggle.setText("&Follow Balloon")
            self.followstatus.setText("GPS")
            self.followtarget = 1
        else:
            self.followtoggle.setText("&Follow GPS")
            self.followstatus.setText("Balloon")
            self.followtarget = 0

    def closeEvent(self, event):
        """Handle window close event"""
        self._exit()

    def _exit(self):
        """Verify exiting program"""
        if QtGui.QMessageBox.question(self, 'Quit',
           "Do you really want to quit?", QtGui.QMessageBox.Yes,
           QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes:
            if self.datahandler.is_active():
                self.datahandler.exit()
                self.datahandler.join()
            QtCore.QCoreApplication.instance().quit()

    def _new_session(self):
        """Load default session settings"""
        self._open_session('default.ucl')

    def _open_session(self, fname=''):
        """Load stored session settings"""
        if fname == '':
            fname = QtGui.QFileDialog.getOpenFileName(self, 'Open session',
                        '/home', 'Session files (*.ucl)')
        if fname:
            try:
                filep = open(fname, 'r')
                for line in filep:
                    line = line.strip('\n')
                    if line == "##GENERAL##":
                        params = aprs_daemon.PARAMETERS
                        param_conf = PARAMETER_SETTINGS
                    elif line == "##BALLOON##":
                        params = aprs_daemon.BALLOON
                        param_conf = BALLOON_SETTINGS
                    elif line != "":
                        content = line.split('\t')
                        if param_conf[content[0]][1] == "double":
                            params[content[0]] =  float(content[1])
                        elif param_conf[content[0]][1] == "int" or \
                             param_conf[content[0]][1] == "selectint":
                            if param_conf[content[0]][1] == "int" and \
                               content[1] == '-1':
                                params[content[0]] = None
                            else:
                                params[content[0]] = int(content[1])
                        elif param_conf[content[0]][1] == "bool":
                            params[content[0]] = bool(int(content[1]))
                        elif param_conf[content[0]][1] == "doublelist":
                            values = content[1].split(",")
                            if content[0] == "parachute_areas":
                                values = np.pi * np.array([float(values[0]), float(values[1])])**2
                            params[content[0]] = values
                        else:
                            params[content[0]] = str(content[1])
                filep.close()
            except IOError:
                print "IOError"
            except ValueError:
                print "ValueError"
            except TypeError:
                print "TypeError"

    def _save_session(self):
        """Save current session settings"""
        fname = QtGui.QFileDialog.getSaveFileName(self,
                "Save session", "/home", "Session files (*.ucl)")
        if fname:
            try:
                filep = open(fname, 'w')
                filep.write('##GENERAL##\n')
                for key in PARAMETER_SETTINGS.keys():
                    if PARAMETER_SETTINGS[key][1] == "bool":
                        filep.write(''.join([key, '\t',
                                str(int(aprs_daemon.PARAMETERS[key])), '\n']))
                    elif PARAMETER_SETTINGS[key][1] == "int" and \
                         aprs_daemon.PARAMETERS[key] is None:
                        filep.write(''.join([key, '\t-1\n']))
                    else:
                        filep.write(''.join([key, '\t',
                                    str(aprs_daemon.PARAMETERS[key]), '\n']))
                filep.write('##BALLOON##\n')
                for key in BALLOON_SETTINGS.keys():
                    if BALLOON_SETTINGS[key][1] == "bool":
                        filep.write(''.join([key, '\t',
                                    str(int(aprs_daemon.BALLOON[key])), '\n']))
                    elif BALLOON_SETTINGS[key][1] == "int" and \
                         aprs_daemon.BALLOON[key] is None:
                        filep.write(''.join([key, '\t-1\n']))
                    elif BALLOON_SETTINGS[key][1] == "doublelist":
                        values = aprs_daemon.BALLOON[key]
                        if key == "parachute_areas":
                            values = [np.sqrt(values[0]/np.pi),
                                      np.sqrt(values[1]/np.pi)]
                        itervalues = iter(values)
                        string = str(next(itervalues))
                        for value in itervalues:
                            string += ","+str(value)
                        filep.write(''.join([key, '\t', string, '\n']))
                    else:
                        filep.write(''.join([key, '\t',
                                    str(aprs_daemon.BALLOON[key]), '\n']))
                filep.close()
            except IOError:
                print "IO error"