示例#1
0
class CheckList(QWidget):
    def __init__(self, model, label="", help_link="", custom_filter_button=None):
        """
        :param custom_filter_button:  if needed, add a button that opens a custom filter menu. Useful when search alone
        isn't enough to filter the list.
        :type custom_filter_button: QToolButton
        """
        QWidget.__init__(self)

        self._model = model

        if help_link != "":
            addHelpToWidget(self, help_link)

        layout = QVBoxLayout()

        self._createCheckButtons()

        self._list = QListWidget()
        self._list.setContextMenuPolicy(Qt.CustomContextMenu)
        self._list.setSelectionMode(QAbstractItemView.ExtendedSelection)

        self._search_box = SearchBox()

        check_button_layout = QHBoxLayout()

        check_button_layout.setMargin(0)
        check_button_layout.setSpacing(0)
        check_button_layout.addWidget(QLabel(label))
        check_button_layout.addStretch(1)
        check_button_layout.addWidget(self._checkAllButton)
        check_button_layout.addWidget(self._uncheckAllButton)

        layout.addLayout(check_button_layout)
        layout.addWidget(self._list)

        """
        Inserts the custom filter button, if provided. The caller is responsible for all related actions.
        """
        if custom_filter_button is not None:
            search_bar_layout = QHBoxLayout()
            search_bar_layout.addWidget(self._search_box)
            search_bar_layout.addWidget(custom_filter_button)
            layout.addLayout(search_bar_layout)
        else:
            layout.addWidget(self._search_box)

        self.setLayout(layout)

        self._checkAllButton.clicked.connect(self.checkAll)
        self._uncheckAllButton.clicked.connect(self.uncheckAll)
        self._list.itemChanged.connect(self.itemChanged)
        self._search_box.filterChanged.connect(self.filterList)
        self._list.customContextMenuRequested.connect(self.showContextMenu)

        self._model.selectionChanged.connect(self.modelChanged)
        self._model.modelChanged.connect(self.modelChanged)

        self.modelChanged()

    def _createCheckButtons(self):
        self._checkAllButton = QToolButton()
        self._checkAllButton.setIcon(resourceIcon("checked"))
        self._checkAllButton.setIconSize(QSize(16, 16))
        self._checkAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
        self._checkAllButton.setAutoRaise(True)
        self._checkAllButton.setToolTip("Select all")
        self._uncheckAllButton = QToolButton()
        self._uncheckAllButton.setIcon(resourceIcon("notchecked"))
        self._uncheckAllButton.setIconSize(QSize(16, 16))
        self._uncheckAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
        self._uncheckAllButton.setAutoRaise(True)
        self._uncheckAllButton.setToolTip("Unselect all")

    def itemChanged(self, item):
        """@type item: QListWidgetItem"""
        if item.checkState() == Qt.Checked:
            self._model.selectValue(str(item.text()))
        elif item.checkState() == Qt.Unchecked:
            self._model.unselectValue(str(item.text()))
        else:
            raise AssertionError("Unhandled checkstate!")

    def modelChanged(self):
        self._list.clear()

        items = self._model.getList()

        for item in items:
            list_item = QListWidgetItem(item)
            list_item.setFlags(list_item.flags() | Qt.ItemIsUserCheckable)

            if self._model.isValueSelected(item):
                list_item.setCheckState(Qt.Checked)
            else:
                list_item.setCheckState(Qt.Unchecked)

            self._list.addItem(list_item)

        self.filterList(self._search_box.filter())

    def setSelectionEnabled(self, enabled):
        self.setEnabled(enabled)
        self._checkAllButton.setEnabled(enabled)
        self._uncheckAllButton.setEnabled(enabled)

    def filterList(self, filter):
        filter = filter.lower()

        for index in range(0, self._list.count()):
            item = self._list.item(index)
            text = str(item.text()).lower()

            if filter == "":
                item.setHidden(False)
            elif filter in text:
                item.setHidden(False)
            else:
                item.setHidden(True)

    def checkAll(self):
        """
        Checks all visible items in the list.
        """
        for index in range(0, self._list.count()):
            item = self._list.item(index)
            if not item.isHidden():
                self._model.selectValue(str(item.text()))

    def uncheckAll(self):
        """
        Unchecks all items in the list, visible or not
        """
        self._model.unselectAll()

    def checkSelected(self):
        items = []
        for item in self._list.selectedItems():
            items.append(str(item.text()))

        for item in items:
            self._model.selectValue(item)

    def uncheckSelected(self):
        items = []
        for item in self._list.selectedItems():
            items.append(str(item.text()))

        for item in items:
            self._model.unselectValue(item)

    def showContextMenu(self, point):
        p = self._list.mapToGlobal(point)
        menu = QMenu()
        check_selected = menu.addAction("Check selected")
        uncheck_selected = menu.addAction("Uncheck selected")
        menu.addSeparator()
        clear_selection = menu.addAction("Clear selection")

        selected_item = menu.exec_(p)

        if selected_item == check_selected:
            self.checkSelected()
        elif selected_item == uncheck_selected:
            self.uncheckSelected()
        elif selected_item == clear_selection:
            self._list.clearSelection()
示例#2
0
class CheckList(HelpedWidget):
    def __init__(self, model, label="", help_link=""):
        HelpedWidget.__init__(self, "", help_link)

        layout = QVBoxLayout()

        widget = QWidget()
        widget.setLayout(layout)

        self.checkAllButton = QToolButton()
        self.checkAllButton.setIcon(resourceIcon("checked"))
        self.checkAllButton.setIconSize(QSize(16, 16))
        self.checkAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
        self.checkAllButton.setAutoRaise(True)
        self.checkAllButton.setToolTip("Select all")

        self.uncheckAllButton = QToolButton()
        self.uncheckAllButton.setIcon(resourceIcon("notchecked"))
        self.uncheckAllButton.setIconSize(QSize(16, 16))
        self.uncheckAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
        self.uncheckAllButton.setAutoRaise(True)
        self.uncheckAllButton.setToolTip("Unselect all")

        self.list = QListWidget()
        self.list.setContextMenuPolicy(Qt.CustomContextMenu)
        self.list.setSelectionMode(QAbstractItemView.ExtendedSelection)

        self.search_box = SearchBox()

        check_button_layout = QHBoxLayout()

        check_button_layout.setMargin(0)
        check_button_layout.setSpacing(0)
        check_button_layout.addWidget(QLabel(label))
        check_button_layout.addStretch(1)
        check_button_layout.addWidget(self.checkAllButton)
        check_button_layout.addWidget(self.uncheckAllButton)

        layout.addLayout(check_button_layout)
        layout.addWidget(self.list)
        layout.addWidget(self.search_box)

        self.addWidget(widget)

        self.connect(self.checkAllButton, SIGNAL('clicked()'), self.checkAll)
        self.connect(self.uncheckAllButton, SIGNAL('clicked()'),
                     self.uncheckAll)
        self.connect(self.list, SIGNAL('itemChanged(QListWidgetItem*)'),
                     self.itemChanged)
        self.search_box.filterChanged.connect(self.filterList)
        # self.connect(self.search_box, SIGNAL('filterChanged(str)'), self.filterList)

        self.connect(self.list, SIGNAL('customContextMenuRequested(QPoint)'),
                     self.showContextMenu)

        assert isinstance(model, (SelectableModelMixin, ListModelMixin))
        self.model = model
        self.model.observable().attach(
            SelectableModelMixin.SELECTION_CHANGED_EVENT, self.modelChanged)
        self.model.observable().attach(ListModelMixin.LIST_CHANGED_EVENT,
                                       self.modelChanged)
        self.modelChanged()

    def itemChanged(self, item):
        """@type item: QListWidgetItem"""
        if item.checkState() == Qt.Checked:
            self.model.selectValue(str(item.text()))
        elif item.checkState() == Qt.Unchecked:
            self.model.unselectValue(str(item.text()))
        else:
            raise AssertionError("Unhandled checkstate!")

    def modelChanged(self):
        self.list.clear()

        items = self.model.getList()

        for item in items:
            list_item = QListWidgetItem(item)
            list_item.setFlags(list_item.flags() | Qt.ItemIsUserCheckable)

            if self.model.isValueSelected(item):
                list_item.setCheckState(Qt.Checked)
            else:
                list_item.setCheckState(Qt.Unchecked)

            self.list.addItem(list_item)

        self.filterList(self.search_box.filter())

    def setSelectionEnabled(self, enabled):
        self.setEnabled(enabled)
        self.checkAllButton.setEnabled(enabled)
        self.uncheckAllButton.setEnabled(enabled)

    def filterList(self, filter):
        filter = filter.lower()

        for index in range(0, self.list.count()):
            item = self.list.item(index)
            text = str(item.text()).lower()

            if filter == "":
                item.setHidden(False)
            elif filter in text:
                item.setHidden(False)
            else:
                item.setHidden(True)

    def checkAll(self):
        self.model.selectAll()

    def uncheckAll(self):
        self.model.unselectAll()

    def checkSelected(self):
        items = []
        for item in self.list.selectedItems():
            items.append(str(item.text()))

        for item in items:
            self.model.selectValue(item)

    def uncheckSelected(self):
        items = []
        for item in self.list.selectedItems():
            items.append(str(item.text()))

        for item in items:
            self.model.unselectValue(item)

    def showContextMenu(self, point):
        p = self.list.mapToGlobal(point)
        menu = QMenu()
        check_selected = menu.addAction("Check selected")
        uncheck_selected = menu.addAction("Uncheck selected")
        menu.addSeparator()
        clear_selection = menu.addAction("Clear selection")

        selected_item = menu.exec_(p)

        if selected_item == check_selected:
            self.checkSelected()
        elif selected_item == uncheck_selected:
            self.uncheckSelected()
        elif selected_item == clear_selection:
            self.list.clearSelection()
示例#3
0
class CheckList(QWidget):
    def __init__(self,
                 model,
                 label="",
                 help_link="",
                 custom_filter_button=None):
        """
        :param custom_filter_button:  if needed, add a button that opens a custom filter menu. Useful when search alone
        isn't enough to filter the list.
        :type custom_filter_button: QToolButton
        """
        QWidget.__init__(self)

        self._model = model

        if help_link != "":
            addHelpToWidget(self, help_link)

        layout = QVBoxLayout()

        self._createCheckButtons()

        self._list = QListWidget()
        self._list.setContextMenuPolicy(Qt.CustomContextMenu)
        self._list.setSelectionMode(QAbstractItemView.ExtendedSelection)

        self._search_box = SearchBox()

        check_button_layout = QHBoxLayout()

        check_button_layout.setMargin(0)
        check_button_layout.setSpacing(0)
        check_button_layout.addWidget(QLabel(label))
        check_button_layout.addStretch(1)
        check_button_layout.addWidget(self._checkAllButton)
        check_button_layout.addWidget(self._uncheckAllButton)

        layout.addLayout(check_button_layout)
        layout.addWidget(self._list)
        """
        Inserts the custom filter button, if provided. The caller is responsible for all related actions.
        """
        if custom_filter_button is not None:
            search_bar_layout = QHBoxLayout()
            search_bar_layout.addWidget(self._search_box)
            search_bar_layout.addWidget(custom_filter_button)
            layout.addLayout(search_bar_layout)
        else:
            layout.addWidget(self._search_box)

        self.setLayout(layout)

        self._checkAllButton.clicked.connect(self.checkAll)
        self._uncheckAllButton.clicked.connect(self.uncheckAll)
        self._list.itemChanged.connect(self.itemChanged)
        self._search_box.filterChanged.connect(self.filterList)
        self._list.customContextMenuRequested.connect(self.showContextMenu)

        self._model.selectionChanged.connect(self.modelChanged)
        self._model.modelChanged.connect(self.modelChanged)

        self.modelChanged()

    def _createCheckButtons(self):
        self._checkAllButton = QToolButton()
        self._checkAllButton.setIcon(resourceIcon("checked"))
        self._checkAllButton.setIconSize(QSize(16, 16))
        self._checkAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
        self._checkAllButton.setAutoRaise(True)
        self._checkAllButton.setToolTip("Select all")
        self._uncheckAllButton = QToolButton()
        self._uncheckAllButton.setIcon(resourceIcon("notchecked"))
        self._uncheckAllButton.setIconSize(QSize(16, 16))
        self._uncheckAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
        self._uncheckAllButton.setAutoRaise(True)
        self._uncheckAllButton.setToolTip("Unselect all")

    def itemChanged(self, item):
        """@type item: QListWidgetItem"""
        if item.checkState() == Qt.Checked:
            self._model.selectValue(str(item.text()))
        elif item.checkState() == Qt.Unchecked:
            self._model.unselectValue(str(item.text()))
        else:
            raise AssertionError("Unhandled checkstate!")

    def modelChanged(self):
        self._list.clear()

        items = self._model.getList()

        for item in items:
            list_item = QListWidgetItem(item)
            list_item.setFlags(list_item.flags() | Qt.ItemIsUserCheckable)

            if self._model.isValueSelected(item):
                list_item.setCheckState(Qt.Checked)
            else:
                list_item.setCheckState(Qt.Unchecked)

            self._list.addItem(list_item)

        self.filterList(self._search_box.filter())

    def setSelectionEnabled(self, enabled):
        self.setEnabled(enabled)
        self._checkAllButton.setEnabled(enabled)
        self._uncheckAllButton.setEnabled(enabled)

    def filterList(self, filter):
        filter = filter.lower()

        for index in range(0, self._list.count()):
            item = self._list.item(index)
            text = str(item.text()).lower()

            if filter == "":
                item.setHidden(False)
            elif filter in text:
                item.setHidden(False)
            else:
                item.setHidden(True)

    def checkAll(self):
        """
        Checks all visible items in the list.
        """
        for index in range(0, self._list.count()):
            item = self._list.item(index)
            if not item.isHidden():
                self._model.selectValue(str(item.text()))

    def uncheckAll(self):
        """
        Unchecks all items in the list, visible or not
        """
        self._model.unselectAll()

    def checkSelected(self):
        items = []
        for item in self._list.selectedItems():
            items.append(str(item.text()))

        for item in items:
            self._model.selectValue(item)

    def uncheckSelected(self):
        items = []
        for item in self._list.selectedItems():
            items.append(str(item.text()))

        for item in items:
            self._model.unselectValue(item)

    def showContextMenu(self, point):
        p = self._list.mapToGlobal(point)
        menu = QMenu()
        check_selected = menu.addAction("Check selected")
        uncheck_selected = menu.addAction("Uncheck selected")
        menu.addSeparator()
        clear_selection = menu.addAction("Clear selection")

        selected_item = menu.exec_(p)

        if selected_item == check_selected:
            self.checkSelected()
        elif selected_item == uncheck_selected:
            self.uncheckSelected()
        elif selected_item == clear_selection:
            self._list.clearSelection()
示例#4
0
class CheckList(HelpedWidget):
    
    def __init__(self, model, label="", help_link=""):
        HelpedWidget.__init__(self, "", help_link)

        layout = QVBoxLayout()

        widget = QWidget()
        widget.setLayout(layout)

        self.checkAllButton = QToolButton()
        self.checkAllButton.setIcon(resourceIcon("checked"))
        self.checkAllButton.setIconSize(QSize(16, 16))
        self.checkAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
        self.checkAllButton.setAutoRaise(True)
        self.checkAllButton.setToolTip("Select all")

        self.uncheckAllButton = QToolButton()
        self.uncheckAllButton.setIcon(resourceIcon("notchecked"))
        self.uncheckAllButton.setIconSize(QSize(16, 16))
        self.uncheckAllButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
        self.uncheckAllButton.setAutoRaise(True)
        self.uncheckAllButton.setToolTip("Unselect all")

        self.list = QListWidget()
        self.list.setContextMenuPolicy(Qt.CustomContextMenu)
        self.list.setSelectionMode(QAbstractItemView.ExtendedSelection)

        self.search_box = SearchBox()

        check_button_layout = QHBoxLayout()

        check_button_layout.setMargin(0)
        check_button_layout.setSpacing(0)
        check_button_layout.addWidget(QLabel(label))
        check_button_layout.addStretch(1)
        check_button_layout.addWidget(self.checkAllButton)
        check_button_layout.addWidget(self.uncheckAllButton)

        layout.addLayout(check_button_layout)
        layout.addWidget(self.list)
        layout.addWidget(self.search_box)

        self.addWidget(widget)

        self.connect(self.checkAllButton, SIGNAL('clicked()'), self.checkAll)
        self.connect(self.uncheckAllButton, SIGNAL('clicked()'), self.uncheckAll)
        self.connect(self.list, SIGNAL('itemChanged(QListWidgetItem*)'), self.itemChanged)
        self.search_box.filterChanged.connect(self.filterList)
        # self.connect(self.search_box, SIGNAL('filterChanged(str)'), self.filterList)

        self.connect(self.list, SIGNAL('customContextMenuRequested(QPoint)'), self.showContextMenu)

        assert isinstance(model, (SelectableModelMixin, ListModelMixin))
        self.model = model
        self.model.observable().attach(SelectableModelMixin.SELECTION_CHANGED_EVENT, self.modelChanged)
        self.model.observable().attach(ListModelMixin.LIST_CHANGED_EVENT, self.modelChanged)
        self.modelChanged()

    def itemChanged(self, item):
        """@type item: QListWidgetItem"""
        if item.checkState() == Qt.Checked:
            self.model.selectValue(str(item.text()))
        elif item.checkState() == Qt.Unchecked:
            self.model.unselectValue(str(item.text()))
        else:
            raise AssertionError("Unhandled checkstate!")

    def modelChanged(self):
        self.list.clear()

        items = self.model.getList()

        for item in items:
            list_item = QListWidgetItem(item)
            list_item.setFlags(list_item.flags() | Qt.ItemIsUserCheckable)

            if self.model.isValueSelected(item):
                list_item.setCheckState(Qt.Checked)
            else:
                list_item.setCheckState(Qt.Unchecked)

            self.list.addItem(list_item)

        self.filterList(self.search_box.filter())

    def setSelectionEnabled(self, enabled):
        self.setEnabled(enabled)
        self.checkAllButton.setEnabled(enabled)
        self.uncheckAllButton.setEnabled(enabled)

    def filterList(self, filter):
        filter = filter.lower()

        for index in range(0, self.list.count()):
            item = self.list.item(index)
            text = str(item.text()).lower()

            if filter == "":
                item.setHidden(False)
            elif filter in text:
                item.setHidden(False)
            else:
                item.setHidden(True)


    def checkAll(self):
        self.model.selectAll()

    def uncheckAll(self):
        self.model.unselectAll()

    def checkSelected(self):
        items = []
        for item in self.list.selectedItems():
            items.append(str(item.text()))

        for item in items:
            self.model.selectValue(item)

    def uncheckSelected(self):
        items = []
        for item in self.list.selectedItems():
            items.append(str(item.text()))

        for item in items:
            self.model.unselectValue(item)

    def showContextMenu(self, point):
        p = self.list.mapToGlobal(point)
        menu = QMenu()
        check_selected = menu.addAction("Check selected")
        uncheck_selected = menu.addAction("Uncheck selected")
        menu.addSeparator()
        clear_selection = menu.addAction("Clear selection")

        selected_item = menu.exec_(p)

        if selected_item == check_selected:
            self.checkSelected()
        elif selected_item == uncheck_selected:
            self.uncheckSelected()
        elif selected_item == clear_selection:
            self.list.clearSelection()
示例#5
0
class Ui_MainWindow(object):
    # plot visualization variable
    present = None
    timer = None
    buffer = 16384
    linecolor = "green"
    # setting for pyaudio

    rate = 44100
    p = pyaudio.PyAudio()
    chunks = []
    inStream = None
    recThread = None
    addThread = None

    xlimit = 10000
    ylimit = 1000000

    savename = None
    displayTime = None
    data = None
    capFlag = 0
    mlFlag = 0

    fth = True
    sth = False
    tth = False

    dapper = [0.00, 0.00, 0.00]
    avgper = 0.00

    ndapper = [0.00, 0.00, 0.00]
    navgper = 0.00

    #    namePre=None
    #   ratePre=None
    #  spectrumPre=None
    # freqPre=None
    #nsamPre=None

    #

    def stream(self):
        while True:
            if self.inStream is not None:
                self.chunks.append(self.inStream.read(self.buffer))

    def record(self):
        self.inStream = self.p.open(format=pyaudio.paInt16,
                                    channels=1,
                                    rate=self.rate,
                                    input=True,
                                    frames_per_buffer=self.buffer)
        self.addThread = threading.Thread(target=self.stream)
        self.addThread.start()

    # a figure instance to plot on
    figure = None
    # this is the Canvas Widget that displays the `figure`
    canvas = None
    # this is the Navigation widget
    # it takes the Canvas widget and a parent
    toolbar = None

    def setupUi(self, MainWindow):
        screen_resolution = app.desktop().screenGeometry()
        width, height = screen_resolution.width(), screen_resolution.height()
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(width / 1.5, height / 1.5)
        #        MainWindow.setMinimumSize(QtCore.QSize(1024, 768))
        #        MainWindow.setMaximumSize(QtCore.QSize(width / 1.5, height / 1.5))

        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))

        # self.plotlayout = QtGui.QVBoxLayout(self.centralwidget)
        self.gridlayout = QtGui.QGridLayout(self.centralwidget)

        # a figure instance to plot on
        self.figure = plt.figure()
        # this is the Canvas Widget that displays the `figure`
        self.canvas = FigureCanvas(self.figure)
        cid = self.canvas.mpl_connect('button_press_event', self.plotClick)
        # this is the Navigation widget
        # it takes the Canvas widget and a parent
        self.toolbar = NavigationToolbar(self.canvas, self.centralwidget)

        self.inGridlayout = QtGui.QGridLayout()
        self.inBoxlayout = QtGui.QHBoxLayout()

        self.list = QListWidget(self.centralwidget)

        # self.gridlayout.addLayout(self.list, 1)

        # inGridlayout has toolbar, button, ...etc
        # inBoxlayout has button6, button5, button4
        #        self.gridLayout.addWidget(self.toolbar)
        self.gridlayout.addWidget(self.toolbar, 0, 0)
        self.gridlayout.addWidget(self.canvas, 1, 0)
        self.gridlayout.addLayout(self.inGridlayout, 3, 0)
        self.gridlayout.addLayout(self.inBoxlayout, 2, 0)
        self.gridlayout.addLayout(self.inBoxlayout, 0, 3)
        self.gridlayout.addWidget(self.list, 0, 1, 4, 4)
        # self.inBoxlayout.addWidget(self.toolbar,0)
        self.gridlayout.setObjectName(_fromUtf8("griddisplay"))
        # self.centralwidget.setLayout(self.plotlayout)

        palettegl = QtGui.QPalette()
        palettegl.setBrush(QtGui.QPalette.Light, QtCore.Qt.black)
        """
                self.lineEdit = QtGui.QTextEdit(self.centralwidget)
                # self.lineEdit.setGeometry(QtCore.QRect(10, 475, 800, 105))
                self.gridlayout.addWidget(self.lineEdit, 0, 3, 4, 4)
                self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
                self.lineEdit.setReadOnly(True)


"""

        self.qlabeldap = QtGui.QLabel(self.centralwidget)
        self.qlabeldap.setText("Estimated Payloaded DAP Percentage")
        self.inGridlayout.addWidget(self.qlabeldap, 1, 0, 1, 1)

        self.leftBoundary_1 = QtGui.QPushButton(self.centralwidget)
        self.leftBoundary_1.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.leftBoundary_1.setObjectName(_fromUtf8("leftBoundary_1"))
        self.leftBoundary_1.clicked.connect(self.lbnd1f)
        #        self.leftBoundary_1.setPalette(palettegl)
        #        self.leftBoundary_1.display("00:00")
        self.inGridlayout.addWidget(self.leftBoundary_1, 1, 1, 1, 1)

        self.rightBoundary_1 = QtGui.QPushButton(self.centralwidget)
        self.rightBoundary_1.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.rightBoundary_1.setObjectName(_fromUtf8("rightBoundary_1"))
        self.rightBoundary_1.clicked.connect(self.rbnd1f)
        #        self.rightBoundary_1.setPalette(palettegl)
        #        self.rightBoundary_1.display("00:00")
        self.inGridlayout.addWidget(self.rightBoundary_1, 1, 2, 1, 1)

        self.threshold_1 = QtGui.QPushButton(self.centralwidget)
        self.threshold_1.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.threshold_1.setObjectName(_fromUtf8("threshold_1"))
        self.threshold_1.clicked.connect(self.th1f)
        #        self.threshold_1.setPalette(palettegl)
        #        self.threshold_1.display("00:00")
        self.inGridlayout.addWidget(self.threshold_1, 1, 3, 1, 1)

        #        self.qLabelChunk1 = QtGui.QLabel(self.centralwidget)
        #        self.qLabelChunk1.setText("labelChunk1")
        #        self.inGridlayout.addWidget(self.qLabelChunk1,2,0,1,1)

        self.Dapp = QtGui.QLCDNumber(self.centralwidget)
        self.Dapp.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.Dapp.setObjectName(_fromUtf8("Dapp"))
        self.Dapp.setPalette(palettegl)
        self.Dapp.display("00.00")
        self.inGridlayout.addWidget(self.Dapp, 2, 0, 1, 1)

        self.lbnd1 = QtGui.QSpinBox(self.centralwidget)
        self.lbnd1.setRange(0, 20000)
        self.lbnd1.setValue(1000)
        self.lbnd1.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.lbnd1.setObjectName(_fromUtf8("lbnd1size"))
        self.inGridlayout.addWidget(self.lbnd1, 2, 1, 1, 1)

        self.rbnd1 = QtGui.QSpinBox(self.centralwidget)
        self.rbnd1.setRange(0, 20000)
        self.rbnd1.setValue(2500)
        self.rbnd1.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.rbnd1.setObjectName(_fromUtf8("rbnd1size"))
        self.inGridlayout.addWidget(self.rbnd1, 2, 2, 1, 1)

        self.th1 = QtGui.QSpinBox(self.centralwidget)
        self.th1.setRange(200000, 100000000)
        self.th1.setValue(200000)
        self.th1.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.th1.setObjectName(_fromUtf8("th1size"))
        self.inGridlayout.addWidget(self.th1, 2, 3, 1, 1)

        self.qLabelLCD2 = QtGui.QLabel(self.centralwidget)
        self.qLabelLCD2.setText("Estimated Non Payloaded DAP Percentage")
        self.inGridlayout.addWidget(self.qLabelLCD2, 3, 0, 1, 1)

        self.leftBoundary_2 = QtGui.QPushButton(self.centralwidget)
        self.leftBoundary_2.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.leftBoundary_2.setObjectName(_fromUtf8("leftBoundary_2"))
        self.leftBoundary_2.clicked.connect(self.lbnd2f)
        #        self.leftBoundary_2.setPalette(palettegl)
        #        self.leftBoundary_2.display("00:00")
        self.inGridlayout.addWidget(self.leftBoundary_2, 3, 1, 1, 1)

        self.rightBoundary_2 = QtGui.QPushButton(self.centralwidget)
        self.rightBoundary_2.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.rightBoundary_2.setObjectName(_fromUtf8("rightBoundary_2"))
        self.rightBoundary_2.clicked.connect(self.rbnd2f)
        #        self.rightBoundary_2.setPalette(palettegl)
        #        self.rightBoundary_2.display("00:00")
        self.inGridlayout.addWidget(self.rightBoundary_2, 3, 2, 1, 1)

        self.threshold_2 = QtGui.QPushButton(self.centralwidget)
        self.threshold_2.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.threshold_2.setObjectName(_fromUtf8("threshold_2"))
        self.threshold_2.clicked.connect(self.th2f)
        #        self.threshold_2.setPalette(palettegl)
        #        self.threshold_2.display("00:00")
        self.inGridlayout.addWidget(self.threshold_2, 3, 3, 1, 1)

        #        self.qLabelChunk2 = QtGui.QLabel(self.centralwidget)
        #        self.qLabelChunk2.setText("labelChunk2")
        #        self.inGridlayout.addWidget(self.qLabelChunk2,4,0,1,1)

        self.nDapp = QtGui.QLCDNumber(self.centralwidget)
        self.nDapp.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.nDapp.setObjectName(_fromUtf8("nDapp"))
        self.nDapp.setPalette(palettegl)
        self.nDapp.display("00.00")
        self.inGridlayout.addWidget(self.nDapp, 4, 0, 1, 1)

        self.lbnd2 = QtGui.QSpinBox(self.centralwidget)
        self.lbnd2.setRange(0, 20000)
        self.lbnd2.setValue(2500)
        self.lbnd2.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.lbnd2.setObjectName(_fromUtf8("lbnd2size"))
        self.inGridlayout.addWidget(self.lbnd2, 4, 1, 1, 1)
        self.lbnd2.setEnabled(False)

        self.rbnd2 = QtGui.QSpinBox(self.centralwidget)
        self.rbnd2.setRange(0, 20000)
        self.rbnd2.setValue(6000)
        self.rbnd2.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.rbnd2.setObjectName(_fromUtf8("rbnd2size"))
        self.inGridlayout.addWidget(self.rbnd2, 4, 2, 1, 1)
        self.rbnd2.setEnabled(False)

        self.th2 = QtGui.QSpinBox(self.centralwidget)
        self.th2.setRange(200000, 100000000)
        self.th2.setValue(200000)
        self.th2.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.th2.setObjectName(_fromUtf8("th2size"))
        self.inGridlayout.addWidget(self.th2, 4, 3, 1, 1)
        self.th2.setEnabled(False)

        self.qLabelLCD3 = QtGui.QLabel(self.centralwidget)
        self.qLabelLCD3.setText("Payloaded Drone/Non PD Detection Count")
        self.inGridlayout.addWidget(self.qLabelLCD3, 5, 0, 1, 1)

        self.leftBoundary_3 = QtGui.QPushButton(self.centralwidget)
        self.leftBoundary_3.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.leftBoundary_3.setObjectName(_fromUtf8("leftBoundary_3"))
        self.leftBoundary_3.clicked.connect(self.lbnd3f)
        #        self.leftBoundary_3.setPalette(palettegl)
        #        self.leftBoundary_3.display("00:00")
        self.inGridlayout.addWidget(self.leftBoundary_3, 5, 1, 1, 1)

        self.rightBoundary_3 = QtGui.QPushButton(self.centralwidget)
        self.rightBoundary_3.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.rightBoundary_3.setObjectName(_fromUtf8("rightBoundary_3"))
        self.rightBoundary_3.clicked.connect(self.rbnd3f)
        #        self.lcdNumber3_2.setPalette(palettegl)
        #        self.lcdNumber3_2.display("00:00")
        self.inGridlayout.addWidget(self.rightBoundary_3, 5, 2, 1, 1)

        self.threshold_3 = QtGui.QPushButton(self.centralwidget)
        self.threshold_3.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.threshold_3.setObjectName(_fromUtf8("threshold_3"))
        self.threshold_3.clicked.connect(self.th3f)
        #        self.threshold_3.setPalette(palettegl)
        #        self.threshold_3.display("00:00")
        self.inGridlayout.addWidget(self.threshold_3, 5, 3, 1, 1)

        #        self.qLabelChunk3 = QtGui.QLabel(self.centralwidget)
        #        self.qLabelChunk3.setText("labelChunk3")
        #        self.inGridlayout.addWidget(self.qLabelChunk3, 6, 0, 1, 1)

        self.CntLcd = QtGui.QLCDNumber(self.centralwidget)
        self.CntLcd.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.CntLcd.setObjectName(_fromUtf8("CntLcd"))
        self.CntLcd.setPalette(palettegl)
        self.CntLcd.display("00:00")
        self.inGridlayout.addWidget(self.CntLcd, 6, 0, 1, 1)

        self.lbnd3 = QtGui.QSpinBox(self.centralwidget)
        self.lbnd3.setRange(0, 20000)
        self.lbnd3.setValue(6000)
        self.lbnd3.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.lbnd3.setObjectName(_fromUtf8("lbnd3size"))
        self.inGridlayout.addWidget(self.lbnd3, 6, 1, 1, 1)
        self.lbnd3.setEnabled(False)

        self.rbnd3 = QtGui.QSpinBox(self.centralwidget)
        self.rbnd3.setRange(0, 20000)
        self.rbnd3.setValue(9000)
        self.rbnd3.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.rbnd3.setObjectName(_fromUtf8("rbnd3size"))
        self.inGridlayout.addWidget(self.rbnd3, 6, 2, 1, 1)
        self.rbnd3.setEnabled(False)

        self.th3 = QtGui.QSpinBox(self.centralwidget)
        self.th3.setRange(200000, 100000000)
        self.th3.setValue(200000)
        self.th3.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.th3.setObjectName(_fromUtf8("th3size"))
        self.inGridlayout.addWidget(self.th3, 6, 3, 1, 1)
        self.th3.setEnabled(False)

        self.lcdNumber = QtGui.QLCDNumber(self.centralwidget)
        self.lcdNumber.setGeometry(QtCore.QRect(340, 668, 91, 38))
        self.lcdNumber.setObjectName(_fromUtf8("lcdNumber"))
        self.lcdNumber.setPalette(palettegl)
        self.lcdNumber.display("00:00")
        self.inBoxlayout.addWidget(self.lcdNumber, 1)

        self.analyzeButton = QtGui.QPushButton(self.centralwidget)
        self.analyzeButton.setGeometry(QtCore.QRect(440, 668, 91, 38))
        self.analyzeButton.setObjectName(_fromUtf8("analyzeButton"))
        self.analyzeButton.clicked.connect(self.start)
        self.inBoxlayout.addWidget(self.analyzeButton, 2)
        self.analyzeButton.connect(
            QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_F1),
                            self.centralwidget), QtCore.SIGNAL('activated()'),
            self.start)
        #     self.inGridlayout.addWidget(self.analyzeButton)

        self.stopButton = QtGui.QPushButton(self.centralwidget)
        self.stopButton.setGeometry(QtCore.QRect(540, 668, 91, 38))
        self.stopButton.setObjectName(_fromUtf8("stopButton"))
        self.stopButton.clicked.connect(self.stop)
        self.inBoxlayout.addWidget(self.stopButton, 3)
        self.stopButton.connect(
            QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_F2),
                            self.centralwidget), QtCore.SIGNAL('activated()'),
            self.stop)
        #      self.inGridlayout.addWidget(self.stopButton)

        self.recordButton = QtGui.QPushButton(self.centralwidget)
        self.recordButton.setGeometry(QtCore.QRect(640, 668, 91, 38))
        self.recordButton.setObjectName(_fromUtf8("recordButton"))
        self.recordButton.clicked.connect(self.save)
        self.inBoxlayout.addWidget(self.recordButton, 4)
        self.recordButton.connect(
            QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_F3),
                            self.centralwidget), QtCore.SIGNAL('activated()'),
            self.save)

        self.chunksize = QtGui.QSpinBox(self.centralwidget)
        self.chunksize.setRange(10, 17)
        self.chunksize.setValue(14)
        self.chunksize.setGeometry(QtCore.QRect(740, 668, 55, 38))
        self.chunksize.setObjectName(_fromUtf8("chunksize"))
        self.inBoxlayout.addWidget(self.chunksize, 5)
        self.chunksize.valueChanged.connect(self.intchanged)

        #       self.inGridlayout.addWidget(self.recordButton)
        self.horizontalSlider = QtGui.QSlider(self.centralwidget)
        self.horizontalSlider.setRange(200, 20000)
        self.horizontalSlider.setValue(10000)
        self.horizontalSlider.valueChanged.connect(self.hsvhandler)
        self.horizontalSlider.setGeometry(QtCore.QRect(800, 668, 71, 38))
        self.inBoxlayout.addWidget(self.horizontalSlider, 6)
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName(_fromUtf8("horizontalSlider"))
        #    self.inGridlayout.addWidget(self.horizontalSlider)

        self.verticallSlider = QtGui.QSlider(self.centralwidget)
        self.verticallSlider.setRange(1000000, 100000000)
        self.verticallSlider.setValue(1000000)
        self.verticallSlider.valueChanged.connect(self.vsvhandler)
        self.verticallSlider.setGeometry(QtCore.QRect(880, 668, 71, 38))
        self.verticallSlider.setOrientation(QtCore.Qt.Vertical)
        self.inBoxlayout.addWidget(self.verticallSlider, 7)
        self.verticallSlider.setObjectName(_fromUtf8("verticalSlider"))
        #  self.inGridlayout.addWidget(self.verticallSlider, 7, 0, 7, 2)
        #   self.inGridlayout.addWidget(self.verticallSlider)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1024, 26))
        self.menubar.setObjectName(_fromUtf8("menubar"))

        self.menuFFT_Mode = QtGui.QMenu(self.menubar)
        self.menuFFT_Mode.setObjectName(_fromUtf8("menuDegree"))

        self.menuCross = QtGui.QMenu(self.menubar)
        self.menuCross.setObjectName(_fromUtf8("menuCross"))

        self.menuCapture = QtGui.QMenu(self.menubar)
        self.menuCapture.setObjectName(_fromUtf8("menuCapture"))

        self.menuThreshold = QtGui.QMenu(self.menubar)
        self.menuThreshold.setObjectName(_fromUtf8("menuThreshold"))

        self.menuConnection = QtGui.QMenu(self.menubar)
        self.menuConnection.setObjectName(_fromUtf8("menuConnection"))

        self.menuConsole = QtGui.QMenu(self.menubar)
        self.menuConsole.setObjectName(_fromUtf8("menuConsole"))

        self.menuHelp = QtGui.QMenu(self.menubar)
        self.menuHelp.setObjectName(_fromUtf8("menuHelp"))

        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))

        MainWindow.setStatusBar(self.statusbar)
        ag = QtGui.QActionGroup(MainWindow, exclusive=True)
        self.actionDrone = ag.addAction(
            QtGui.QAction(MainWindow, checkable=True))
        self.actionDrone.setChecked(True)
        self.actionDrone.triggered.connect(self.green)
        self.actionDrone.setObjectName(_fromUtf8("zero"))

        self.actionOthers = ag.addAction(
            QtGui.QAction(MainWindow, checkable=True))
        self.actionOthers.triggered.connect(self.red)
        self.actionOthers.setObjectName(_fromUtf8("sixty"))

        self.menuFFT_Mode.addAction(self.actionDrone)
        self.menuFFT_Mode.addAction(self.actionOthers)
        self.menubar.addAction(self.menuFFT_Mode.menuAction())

        ag2 = QtGui.QActionGroup(MainWindow, exclusive=True)
        self.scr = ag2.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.scr.setChecked(True)
        self.scr.triggered.connect(self.scrmode)
        self.scr.setObjectName(_fromUtf8("scrOnly"))

        self.rec = ag2.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.rec.triggered.connect(self.recmode)
        self.rec.setObjectName(_fromUtf8("recOnly"))

        self.scrnrec = ag2.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.scrnrec.triggered.connect(self.scrnrecmode)
        self.scrnrec.setObjectName(_fromUtf8("scrNrec"))

        self.menuCapture.addAction(self.scr)
        self.menuCapture.addAction(self.rec)
        self.menuCapture.addAction(self.scrnrec)

        self.menubar.addAction(self.menuCapture.menuAction())

        ag3 = QtGui.QActionGroup(MainWindow, exclusive=True)
        self.autopilot = ag3.addAction(
            QtGui.QAction(MainWindow, checkable=True))
        self.autopilot.triggered.connect(self.automode)
        self.autopilot.setObjectName(_fromUtf8("autopilot"))

        self.supervise = ag3.addAction(
            QtGui.QAction(MainWindow, checkable=True))
        self.supervise.triggered.connect(self.manualmode)
        self.supervise.setObjectName(_fromUtf8("supervise"))

        self.thonly = ag3.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.thonly.triggered.connect(self.thmode)
        self.thonly.setObjectName(_fromUtf8("thonly"))
        self.thonly.setChecked(True)

        self.menuCross.addAction(self.autopilot)
        self.menuCross.addAction(self.supervise)
        self.menuCross.addAction(self.thonly)

        self.menubar.addAction(self.menuCross.menuAction())

        ag4 = QtGui.QActionGroup(MainWindow, exclusive=False)

        self.fir = ag4.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.fir.setChecked(True)
        self.fir.setObjectName(_fromUtf8("First"))
        self.fir.triggered.connect(self.chkfir)

        self.sec = ag4.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.sec.setObjectName(_fromUtf8("Second"))
        self.sec.triggered.connect(self.chksec)

        self.thi = ag4.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.thi.setObjectName(_fromUtf8("Third"))
        self.thi.triggered.connect(self.chkthi)

        self.menuThreshold.addAction(self.fir)
        self.menuThreshold.addAction(self.sec)
        self.menuThreshold.addAction(self.thi)

        self.menubar.addAction(self.menuThreshold.menuAction())

        ag5 = QtGui.QActionGroup(MainWindow, exclusive=True)

        self.con = ag5.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.con.setChecked(True)
        self.con.setObjectName(_fromUtf8("Connect"))

        self.discon = ag5.addAction(QtGui.QAction(MainWindow, checkable=True))
        self.discon.setObjectName(_fromUtf8("Disconnect"))

        self.menuConnection.addAction(self.con)
        self.menuConnection.addAction(self.discon)
        self.menubar.addAction(self.menuConnection.menuAction())

        ag6 = QtGui.QActionGroup(MainWindow)

        self.write = ag6.addAction(QtGui.QAction(MainWindow))
        self.write.setChecked(True)
        self.write.setObjectName(_fromUtf8("Write"))

        self.clear = ag6.addAction(QtGui.QAction(MainWindow))
        self.clear.setObjectName(_fromUtf8("Clear"))

        self.menuConsole.addAction(self.write)
        self.menuConsole.addAction(self.clear)

        self.menubar.addAction(self.menuConsole.menuAction())

        ag7 = QtGui.QActionGroup(MainWindow)

        self.dev = ag7.addAction(QtGui.QAction(MainWindow))
        self.dev.setChecked(True)
        # self.dev.triggered.connect(self.help)
        self.dev.setObjectName(_fromUtf8("Developers"))

        self.about = ag7.addAction(QtGui.QAction(MainWindow))
        self.about.setObjectName(_fromUtf8("About"))

        self.menuHelp.addAction(self.dev)
        self.menuHelp.addAction(self.about)

        self.menubar.addAction(self.menuHelp.menuAction())

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

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(
            _translate(
                "MainWindow",
                "Realtime Fast Fourier Transform Analyzer For Caputuring Payloaded Drone Frequency-Made by Kiefer Kim",
                None))
        self.recordButton.setText(_translate("MainWindow", "Record(F3)", None))
        self.stopButton.setText(_translate("MainWindow", "Stop(F2)", None))
        self.analyzeButton.setText(
            _translate("MainWindow", "Analyze(F1)", None))

        # leftBoundary_1 etc
        self.leftBoundary_1.setText(
            _translate("MainWindow", "1st Minimum Frequency", None))
        self.rightBoundary_1.setText(
            _translate("MainWindow", "1st Maximum Frequency", None))
        self.threshold_1.setText(
            _translate("MainWindow", "1st Threshold", None))
        self.leftBoundary_2.setText(
            _translate("MainWindow", "2nd Minimum Frequency", None))
        self.rightBoundary_2.setText(
            _translate("MainWindow", "2nd Maximum Frequency", None))
        self.threshold_2.setText(
            _translate("MainWindow", "2nd Threshold", None))
        self.leftBoundary_3.setText(
            _translate("MainWindow", "3rd Minimum Frequency", None))
        self.rightBoundary_3.setText(
            _translate("MainWindow", "3rd Maximum Frequency", None))
        self.threshold_3.setText(
            _translate("MainWindow", "3rd Threshold", None))

        self.menuFFT_Mode.setTitle(
            _translate("MainWindow", "Object Type", None))
        self.actionDrone.setText(
            _translate("MainWindow", "Payloaded Drone", None))
        self.actionOthers.setText(_translate("MainWindow", "Others", None))

        self.menuCross.setTitle(
            _translate("MainWindow", "Machine Learning", None))
        self.autopilot.setText(_translate("MainWindow", "Self Learn", None))
        self.supervise.setText(_translate("MainWindow", "Validation", None))
        self.thonly.setText(_translate("MainWindow", "Deactivate", None))

        self.menuCapture.setTitle(_translate("MainWindow", "Record", None))
        self.scr.setText(_translate("MainWindow", "Plot.png Only", None))
        self.rec.setText(_translate("MainWindow", "Record.wav Only", None))
        self.scrnrec.setText(
            _translate("MainWindow", "Plot.png+Record.wav", None))

        self.menuThreshold.setTitle(_translate("MainWindow", "Threshold",
                                               None))
        self.fir.setText(_translate("MainWindow", "First", None))
        self.sec.setText(_translate("MainWindow", "Second", None))
        self.thi.setText(_translate("MainWindow", "Third", None))

        self.menuConnection.setTitle(
            _translate("MainWindow", "Connection", None))
        self.con.setText(_translate("MainWindow", "Connect", None))
        self.discon.setText(_translate("MainWindow", "Disconnect", None))
        #
        self.menuConsole.setTitle(_translate("MainWindow", "Console", None))
        self.write.setText(_translate("MainWindow", "Write", None))
        self.clear.setText(_translate("MainWindow", "Clear", None))

        self.menuHelp.setTitle(_translate("MainWindow", "Help", None))
        self.dev.setText(_translate("MainWindow", "Developers", None))
        self.about.setText(_translate("MainWindow", "About", None))

    def tick(self):
        now = datetime.datetime.now()
        minutes, seconds = divmod((now - self.present).total_seconds(), 60)
        self.displayTime = QtCore.QTime(0, minutes, round(seconds))
        self.lcdNumber.display(self.displayTime.toString('mm:ss'))

        if len(self.chunks) > 0:
            X = self.chunks.pop(0)
            self.data = scipy.array(struct.unpack("%dB" % (self.buffer * 2),
                                                  X))

            # print "RECORDED",len(self.data)/float(self.rate),"SEC"
            # ffty = scipy.fftpack.fft(self.data)
            # fftx = scipy.fftpack.rfftfreq(self.buffer * 2, 1.0 / self.rate)

            spectrum = scipy.fftpack.fft(self.data)
            freq = scipy.fftpack.fftfreq(len(self.data), d=0.5 / self.rate)
            #if self.mlFlag is 0:
            ax2 = self.figure.add_subplot(111)
            ax2.plot(freq, abs(spectrum), color=self.linecolor)
            if self.fir.isChecked():
                l1 = self.lbnd1.value() * self.buffer / self.rate
                r1 = self.rbnd1.value() * self.buffer / self.rate
                max1 = np.amax(abs(spectrum[l1:r1]))
                for index, xy in enumerate(zip(freq, abs(spectrum))):
                    if xy[1] == max1:
                        plt.annotate('(%s, %s)' % (int(xy[0]), int(xy[1])),
                                     xy=xy)
                        if max1 >= self.th1.value() and xy[0] > 0:
                            temp = self.capFlag
                            self.capFlag = -1
                            self.save()
                            if self.actionDrone.isChecked():
                                self.lineEdit.append(u'드론모드 th1 검출:')
                                if self.thonly.isChecked():
                                    self.dapper[0] = max1 / self.th1.value(
                                    ) * 100
                                    if self.dapper[0] > 100.00:
                                        self.dapper[0] = 100.00
                            else:
                                self.lineEdit.append(u'기타모드 th1 검출:')
                            self.lineEdit.append(self.savename + ":" +
                                                 str(xy) + ">=" +
                                                 str(self.th1.value()))
                            self.capFlag = temp

            if self.sec.isChecked():
                l2 = self.lbnd2.value() * self.buffer / self.rate
                r2 = self.rbnd2.value() * self.buffer / self.rate
                max2 = np.amax(abs(spectrum[l2:r2]))
                for index, xy in enumerate(zip(freq, abs(spectrum))):
                    if xy[1] == max2:
                        plt.annotate('(%s, %s)' % (int(xy[0]), int(xy[1])),
                                     xy=xy)
                        if max2 >= self.th2.value() and xy[0] > 0:
                            temp = self.capFlag
                            self.capFlag = -1
                            self.save()
                            if self.actionDrone.isChecked():
                                self.lineEdit.append(u'드론모드 th2 검출:')
                                if self.thonly.isChecked():
                                    self.dapper[1] = max2 / self.th2.value(
                                    ) * 100
                                    if self.dapper[1] > 100.00:
                                        self.dapper[1] = 100.00
                            else:
                                self.lineEdit.append(u'기타모드 th2 검출:')
                            self.lineEdit.append(self.savename + ":" +
                                                 str(xy) + ">=" +
                                                 str(self.th2.value()))
                            self.capFlag = temp

            if self.thi.isChecked():
                l3 = self.lbnd3.value() * self.buffer / self.rate
                r3 = self.rbnd3.value() * self.buffer / self.rate
                max3 = np.amax(abs(spectrum[l3:r3]))
                for index, xy in enumerate(zip(freq, abs(spectrum))):
                    if xy[1] == max3:
                        plt.annotate('(%s, %s)' % (int(xy[0]), int(xy[1])),
                                     xy=xy)
                        if max3 >= self.th3.value() and xy[0] > 0:
                            temp = self.capFlag
                            self.capFlag = -1
                            self.save()
                            if self.actionDrone.isChecked():
                                self.lineEdit.append(u'드론모드 th3 검출:')
                                if self.thonly.isChecked():
                                    self.dapper[2] = max3 / self.th3.value(
                                    ) * 100
                                    if self.dapper[2] > 100.00:
                                        self.dapper[2] = 100.00
                            else:
                                self.lineEdit.append(u'기타모드 th3 검출:')
                            self.lineEdit.append(self.savename + ":" +
                                                 str(xy) + ">=" +
                                                 str(self.th3.value()))
                            self.capFlag = temp
            self.calcdap()

            #print np.alen(abs(spectrum))
            #print np.alen(freq)
            #for xy in zip(freq, abs(spectrum)):
            #   if maxamplitude == xy[1]:
            #      plt.annotate('(%s, %s)' % xy, xy=xy, textcoords='data')
            ax2.set_xlim(0, self.xlimit)
            ax2.set_ylim(0, self.ylimit)
            ax2.set_xlabel("frequency [Hz]")
            #ax2.set_title("Recorded Chunk Sec: " + str(len(self.data) / float(self.rate)))
            # ax2.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))
            ax2.grid(True)
            ax2.hold(False)
            plt.title("Recorded Chunk Sec: " +
                      str(len(self.data) / float(self.rate)))
            self.canvas.draw()

            #elif self.mlFlag is 1 and self.namePre:
        '''
        data = [random.random() for i in range(10)]
        # create an axis
        ax = self.figure.add_subplot(111)
        # discards the old graph
        ax.hold(True)
        # plot data
        ax.plot(data, '*-')
        # refresh canvas
        self.canvas.draw()
        '''

    # 리스트에 CustomWidget의 객체들을 삽입
    def create(self):
        for i in range(0, 3):
            wid = Ui_MainWindow.CustomWidget(
                "abcdefghijklmnopqrstu")  # 매개변수가 log 값이 되어야함

            wid2 = QtGui.QListWidgetItem()
            wid2.setSizeHint(QtCore.QSize(100, 60))
            self.list.addItem(wid2)
            self.list.setItemWidget(wid2, wid)
            self.list.setStyleSheet(
                "QListWidget::item { border-bottom: 1px solid black; }")

    # 리스트에 있는 CustomWidget의 객체들을 삭제
    def remove(self):
        self.list.takeItem(self.list.currentRow())

    def tongtong(self):
        print "When I look into your eyes"

    def start(self):
        if self.timer is None:
            self.recThread = threading.Thread(target=self.record)
            self.recThread.start()
            self.present = datetime.datetime.now()
            self.timer = QtCore.QTimer()
            self.timer.timeout.connect(self.tick)
            self.timer.start(10)
            self.chunksize.setDisabled(True)
            self.statusbar.showMessage("Analyzing Started")

    def stop(self):
        if self.timer is not None:
            self.statusbar.showMessage("Analyzing Stopped")
            self.timer.stop()
            self.timer = None
            self.addThread = None
            self.recThread = None
            self.inStream = None
            self.chunks = []
            self.chunksize.setEnabled(True)

    def save(self):
        if self.figure:
            now = datetime.datetime.now()
            self.savename = now.isoformat().replace("T", "-").replace(
                ":", "-") + "+" + self.displayTime.toString('mm-ss')
            if self.capFlag is 0:
                if self.displayTime:
                    self.figure.savefig("%s.png" % self.savename,
                                        bbox_inches='tight')
                    self.statusbar.showMessage(
                        self.savename + ".png Saved on Current Directory")
            elif self.capFlag is 1:
                if self.data is not None:
                    scipy.io.wavfile.write("%s.wav" % self.savename, self.rate,
                                           self.data)
                    self.statusbar.showMessage(
                        self.savename + ".wav Saved on Current Directory")
            elif self.capFlag is 2:
                if self.data is not None and self.displayTime:
                    self.figure.savefig("%s.png" % self.savename,
                                        bbox_inches='tight')
                    scipy.io.wavfile.write("%s.wav" % self.savename, self.rate,
                                           self.data)
                    self.statusbar.showMessage(
                        self.savename + ".png and " + self.savename +
                        ".wav Saved on Current Directory")

    def intchanged(self):
        self.buffer = 2**self.chunksize.value()
        self.statusbar.showMessage(
            "Current Buffer Size Changed: " + str(self.buffer * 2) +
            " Change will be affected on further analysis ")

    def green(self):
        self.linecolor = "green"
        self.statusbar.showMessage(
            "Fast Fourier Transform Mode Changed to Payloaded Drone")

    def red(self):
        self.linecolor = "red"
        self.statusbar.showMessage(
            "Fast Fourier Transform Mode Changed to Others")

    def hsvhandler(self, value):
        self.xlimit = self.horizontalSlider.value()
        self.statusbar.showMessage("X-limit Changed to: " + str(self.xlimit))

    def vsvhandler(self, value):
        self.ylimit = self.verticallSlider.value()
        self.statusbar.showMessage("Y-limit Changed to: " + str(self.ylimit))

    def scrmode(self):
        self.capFlag = 0
        self.statusbar.showMessage("Recording Mode Changed to Plot Only")

    def recmode(self):
        self.capFlag = 1
        self.statusbar.showMessage("Recording Mode Changed to Wave Only")

    def scrnrecmode(self):
        self.capFlag = 2
        self.statusbar.showMessage("Recording Mode Changed to Plot+Wave")

    def automode(self):
        self.mlFlag = 0
        self.statusbar.showMessage(
            "Machine Learning Mode Changed to Autopilot")

    def manualmode(self):
        self.mlFlag = 1
        self.statusbar.showMessage("Machine Learning Mode Changed to Manual")
        #name = QtGui.QFileDialog.getOpenself.savenames(None, u'녹음 파일 선택 - wav확장자를 가진 파일 하나를 열어주세요',QtGui.QDesktopServices.storageLocation(QtGui.QDesktopServices.MusicLocation),"Record (*.wav)");
        #name = QtGui.QFileDialog.getOpenself.savenames(None, u'녹음 파일 선택 - wav확장자를 가진 파일 하나를 열어주세요',"./","Record (*.wav)");

    '''
        if not name:
            return
        else:
            self.namePre=name[0]
            self.ratePre, X = scipy.io.wavfile.read(self.namePre)
            fnarray=self.namePre.split("\\")
            self.namePre=fnarray[len(fnarray)-1]
            self.spectrumPre = scipy.fftpack.fft(X)
            self.freqPre=scipy.fftpack.fftfreq(len(X), d=1.0 / self.ratePre)
            self.nsamPre=X.shape[0]
    '''

    def thmode(self):
        '''
        for file in os.listdir("./X"):
            if file.endswith(".wav"):
                fnarray = file.split("/")
                tt=fnarray[len(fnarray) - 1]
                self.ratePre, X = scipy.io.wavfile.read("./X/"+file)
                self.spectrumPre = scipy.fftpack.fft(X)
                self.freqPre = scipy.fftpack.fftfreq(len(X), d=1.0 / self.ratePre)
                ax2 = self.figure.add_subplot(111)
                ax2.plot(self.freqPre, abs(self.spectrumPre), color=self.linecolor)
                ax2.set_xlim(1000, self.xlimit)
                ax2.set_ylim(0, 10000000)
                ax2.set_xlabel("frequency [Hz]")
                # ax2.set_title("Recorded Chunk Sec: " + str(len(self.data) / float(self.rate)))
                # ax2.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))
                ax2.set_title(tt)
                ax2.grid(True)
                #self.canvas.draw()
                print tt
                plt.savefig("%s.png" % tt, bbox_inches='tight')

            '''

        self.mlFlag = 2
        self.statusbar.showMessage(
            "Machine Learning Mode Deactivated. Using Preset Threshold")

    def chkfir(self):
        if self.fir.isChecked() == False:
            self.lbnd1.setEnabled(False)
            self.rbnd1.setEnabled(False)
            self.th1.setEnabled(False)
        else:
            self.lbnd1.setEnabled(True)
            self.rbnd1.setEnabled(True)
            self.th1.setEnabled(True)

    def chksec(self):
        if self.sec.isChecked() == False:
            self.lbnd2.setEnabled(False)
            self.rbnd2.setEnabled(False)
            self.th2.setEnabled(False)
        else:
            self.lbnd2.setEnabled(True)
            self.rbnd2.setEnabled(True)
            self.th2.setEnabled(True)

    def chkthi(self):
        if self.thi.isChecked() == False:
            self.lbnd3.setEnabled(False)
            self.rbnd3.setEnabled(False)
            self.th3.setEnabled(False)
        else:
            self.lbnd3.setEnabled(True)
            self.rbnd3.setEnabled(True)
            self.th3.setEnabled(True)

    def lbnd1f(self):
        self.leftBoundary_1.setEnabled(False)
        self.leftBoundary_2.setEnabled(True)
        self.leftBoundary_3.setEnabled(True)
        self.rightBoundary_1.setEnabled(True)
        self.rightBoundary_2.setEnabled(True)
        self.rightBoundary_3.setEnabled(True)
        self.threshold_1.setEnabled(True)
        self.threshold_2.setEnabled(True)
        self.threshold_3.setEnabled(True)
        self.lbnd1.setFocus(True)

    def lbnd2f(self):
        self.leftBoundary_1.setEnabled(True)
        self.leftBoundary_2.setEnabled(False)
        self.leftBoundary_3.setEnabled(True)
        self.rightBoundary_1.setEnabled(True)
        self.rightBoundary_2.setEnabled(True)
        self.rightBoundary_3.setEnabled(True)
        self.threshold_1.setEnabled(True)
        self.threshold_2.setEnabled(True)
        self.threshold_3.setEnabled(True)
        self.lbnd2.setFocus(True)

    def lbnd3f(self):
        self.leftBoundary_1.setEnabled(True)
        self.leftBoundary_2.setEnabled(True)
        self.leftBoundary_3.setEnabled(False)
        self.rightBoundary_1.setEnabled(True)
        self.rightBoundary_2.setEnabled(True)
        self.rightBoundary_3.setEnabled(True)
        self.threshold_1.setEnabled(True)
        self.threshold_2.setEnabled(True)
        self.threshold_3.setEnabled(True)
        self.lbnd3.setFocus(True)

    def rbnd1f(self):
        self.leftBoundary_1.setEnabled(True)
        self.leftBoundary_2.setEnabled(True)
        self.leftBoundary_3.setEnabled(True)
        self.rightBoundary_1.setEnabled(False)
        self.rightBoundary_2.setEnabled(True)
        self.rightBoundary_3.setEnabled(True)
        self.threshold_1.setEnabled(True)
        self.threshold_2.setEnabled(True)
        self.threshold_3.setEnabled(True)
        self.rbnd1.setFocus(True)

    def rbnd2f(self):
        self.leftBoundary_1.setEnabled(True)
        self.leftBoundary_2.setEnabled(True)
        self.leftBoundary_3.setEnabled(True)
        self.rightBoundary_1.setEnabled(True)
        self.rightBoundary_2.setEnabled(False)
        self.rightBoundary_3.setEnabled(True)
        self.threshold_1.setEnabled(True)
        self.threshold_2.setEnabled(True)
        self.threshold_3.setEnabled(True)
        self.rbnd2.setFocus(True)

    def rbnd3f(self):
        self.leftBoundary_1.setEnabled(True)
        self.leftBoundary_2.setEnabled(True)
        self.leftBoundary_3.setEnabled(True)
        self.rightBoundary_1.setEnabled(True)
        self.rightBoundary_2.setEnabled(True)
        self.rightBoundary_3.setEnabled(False)
        self.threshold_1.setEnabled(True)
        self.threshold_2.setEnabled(True)
        self.threshold_3.setEnabled(True)
        self.rbnd3.setFocus(True)

    def th1f(self):
        self.leftBoundary_1.setEnabled(True)
        self.leftBoundary_2.setEnabled(True)
        self.leftBoundary_3.setEnabled(True)
        self.rightBoundary_1.setEnabled(True)
        self.rightBoundary_2.setEnabled(True)
        self.rightBoundary_3.setEnabled(True)
        self.threshold_1.setEnabled(False)
        self.threshold_2.setEnabled(True)
        self.threshold_3.setEnabled(True)
        self.th1.setFocus(True)

    def th2f(self):
        self.leftBoundary_1.setEnabled(True)
        self.leftBoundary_2.setEnabled(True)
        self.leftBoundary_3.setEnabled(True)
        self.rightBoundary_1.setEnabled(True)
        self.rightBoundary_2.setEnabled(True)
        self.rightBoundary_3.setEnabled(True)
        self.threshold_1.setEnabled(True)
        self.threshold_2.setEnabled(False)
        self.threshold_3.setEnabled(True)
        self.th2.setFocus(True)

    def th3f(self):
        self.leftBoundary_1.setEnabled(True)
        self.leftBoundary_2.setEnabled(True)
        self.leftBoundary_3.setEnabled(True)
        self.rightBoundary_1.setEnabled(True)
        self.rightBoundary_2.setEnabled(True)
        self.rightBoundary_3.setEnabled(True)
        self.threshold_1.setEnabled(True)
        self.threshold_2.setEnabled(True)
        self.threshold_3.setEnabled(False)
        self.th3.setFocus(True)

    def calcdap(self):
        nzerocnt = 0
        avgdap = 0.00
        for per in self.dapper:
            if per > 0:
                nzerocnt += 1
                avgdap += per
        if nzerocnt > 0:
            self.avgper = avgdap / float(nzerocnt)
            self.Dapp.display(self.avgper)
        else:
            self.Dapp.display(0.00)

    def calcndap(self):
        nzerocnt = 0
        avgndap = 0.00
        for per in self.ndapper:
            if per > 0:
                nzerocnt += 1
                avgndap += per
        if nzerocnt > 0:
            self.navgper = avgndap / float(nzerocnt)
            self.nDapp.display(self.navgper)
        else:
            self.nDapp.display(0.00)

    def plotClick(self, value):
        if not str(value).__contains__("(None,None)"):
            arr = str(value).split("=")[2].lstrip("(").replace(") button",
                                                               "").split(",")
            xflt = float(arr[0])
            x = int(xflt)
            yflt = float(arr[1])
            y = int(yflt)
            if self.leftBoundary_1.isEnabled() is False:
                if x < self.rbnd1.value():
                    self.lbnd1.setValue(x)
                    self.leftBoundary_1.setEnabled(True)
            elif self.leftBoundary_2.isEnabled() is False:
                if x < self.rbnd2.value():
                    self.lbnd2.setValue(x)
                    self.leftBoundary_2.setEnabled(True)
            elif self.leftBoundary_3.isEnabled() is False:
                if x < self.rbnd3.value():
                    self.lbnd3.setValue(x)
                    self.leftBoundary_3.setEnabled(True)
            elif self.rightBoundary_1.isEnabled() is False:
                if x > self.lbnd1.value():
                    self.rbnd1.setValue(x)
                    self.rightBoundary_1.setEnabled(True)
            elif self.rightBoundary_2.isEnabled() is False:
                if x > self.lbnd2.value():
                    self.rbnd2.setValue(x)
                    self.rightBoundary_2.setEnabled(True)
            elif self.rightBoundary_3.isEnabled() is False:
                if x > self.lbnd3.value():
                    self.rbnd3.setValue(x)
                    self.rightBoundary_3.setEnabled(True)
            elif self.threshold_1.isEnabled() is False:
                self.th1.setValue(y)
                self.threshold_1.setEnabled(True)
            elif self.threshold_2.isEnabled() is False:
                self.th2.setValue(y)
                self.threshold_2.setEnabled(True)
            elif self.threshold_3.isEnabled() is False:
                self.th3.setValue(y)
                self.threshold_3.setEnabled(True)

                #if event.xdata is not None:
        #   print('button=%d, x=%d, y=%d, xdata=%f, ydata=%f' % (event.button, event.x, event.y, event.xdata, event.ydata))

    def listItemRightClicked(self, QPos):
        self.listMenu = QtGui.QMenu()
        menu_item = self.listMenu.addAction("Remove Item")
        #        self.connect(menu_item, QtCore.SIGNAL("triggered()"), self.menuItemClicked)
        parentPosition = self.list.mapToGlobal(QtCore.QPoint(0, 0))
        self.listMenu.move(parentPosition + QPos)
        self.listMenu.show()

    def menuItemClicked(self):
        currentItemName = str(
            self.listWidget_extractedmeters.currentItem().text())
        print(currentItemName)

    class CustomWidget(QtGui.QWidget):
        downloadRequest = QtCore.pyqtSignal(str)

        def __init__(self, log):
            QtGui.QWidget.__init__(self)
            self.label = QtGui.QLabel(self)
            self.label.setText(log)
            self.button1 = QtGui.QPushButton('1', self)
            self.button1.setFixedSize(20, 20)
            #self.button1.clicked.connect(Ui_MainWindow.tongtong)
            self.button2 = QtGui.QPushButton('2', self)
            self.button2.setFixedSize(20, 20)
            self.button2.clicked.connect(self.handleButton)
            self.button3 = QtGui.QPushButton('3', self)
            self.button3.setFixedSize(20, 20)
            self.button3.clicked.connect(self.handleButton)
            self.button4 = QtGui.QPushButton('4', self)
            self.button4.setFixedSize(20, 20)
            self.button4.clicked.connect(self.handleButton)
            self.button5 = QtGui.QPushButton('5', self)
            self.button5.setFixedSize(20, 20)
            self.button5.clicked.connect(self.handleButton)

            self.layout = QtGui.QVBoxLayout(self)
            self.layout2 = QtGui.QHBoxLayout(self)
            self.layout.addWidget(self.label)
            self.layout.addLayout(self.layout2, 1)

            self.layout2.addWidget(self.button1)
            self.layout2.addWidget(self.button2)
            self.layout2.addWidget(self.button3)
            self.layout2.addWidget(self.button4)
            self.layout2.addWidget(self.button5)

        def handleButton(self):
            url = self.edit.text().strip()
            if url and not self._thread.isRunning():
                self.viewer.clear()
                self._thread.start()
                # safely communicate with worker via signal
                self.downloadRequest.emit(url)