class SnappingDock(DockWidget): def __init__(self, iface, parent=None): super(SnappingDock, self).__init__(parent) self._iface = iface self.setWindowTitle(u'Snapping Panel') self.setObjectName(u'snappingDock') self._listWidget = QListWidget(self) self._listWidget.setSelectionMode(QAbstractItemView.NoSelection) self._listWidget.setDropIndicatorShown(False) self._dockLayout = QVBoxLayout(self) self._dockLayout.setObjectName(u'dockLayout') self._dockLayout.addWidget(self._listWidget) self._dockContents = QWidget(self) self._dockContents.setObjectName(u'dockContents') self._dockContents.setLayout(self._dockLayout) self.setWidget(self._dockContents) # Keep up-to-date with layers added and removed QgsMapLayerRegistry.instance().layersAdded.connect(self._layersAdded) QgsMapLayerRegistry.instance().layersRemoved.connect( self._layersRemoved) def refresh(self): self._listWidget.clear() layers = QgsMapLayerRegistry.instance().mapLayers() layerIds = layers.keys() sorted(layerIds) for layerId in layerIds: self.addLayer(layers[layerId]) def addLayer(self, layer): if (layer is None or not layer.isValid() or layer.type() != QgsMapLayer.VectorLayer): return newItem = QListWidgetItem() newItem.setData(Qt.UserRole, layer.id()) # newItem.setSizeHint(layerWidget.minimumSizeHint()) self._listWidget.addItem(newItem) self._listWidget.setItemWidget(newItem, LayerSnappingWidget(layer, self)) def removeLayer(self, layerId): for idx in range(0, self._listWidget.count() - 1): if self._listWidget.item(idx).data() == layerId: self._listWidget.takeItem(idx) return def _layersAdded(self, layers): for layer in layers: self.addLayer(layer) def _layersRemoved(self, layerIds): for idx in range(self._listWidget.count() - 1, 0): if self._listWidget.item(idx).data() in layerIds: self._listWidget.takeItem(idx)
class SnappingDock(DockWidget): def __init__(self, iface, parent=None): super(SnappingDock, self).__init__(parent) self._iface = iface self.setWindowTitle(u'Snapping Panel') self.setObjectName(u'snappingDock') self._listWidget = QListWidget(self) self._listWidget.setSelectionMode(QAbstractItemView.NoSelection) self._listWidget.setDropIndicatorShown(False) self._dockLayout = QVBoxLayout(self) self._dockLayout.setObjectName(u'dockLayout') self._dockLayout.addWidget(self._listWidget) self._dockContents = QWidget(self) self._dockContents.setObjectName(u'dockContents') self._dockContents.setLayout(self._dockLayout) self.setWidget(self._dockContents) # Keep up-to-date with layers added and removed QgsMapLayerRegistry.instance().layersAdded.connect(self._layersAdded) QgsMapLayerRegistry.instance().layersRemoved.connect(self._layersRemoved) def refresh(self): self._listWidget.clear() layers = QgsMapLayerRegistry.instance().mapLayers() layerIds = layers.keys() sorted(layerIds) for layerId in layerIds: self.addLayer(layers[layerId]) def addLayer(self, layer): if (layer is None or not layer.isValid() or layer.type() != QgsMapLayer.VectorLayer): return newItem = QListWidgetItem() newItem.setData(Qt.UserRole, layer.id()) # newItem.setSizeHint(layerWidget.minimumSizeHint()) self._listWidget.addItem(newItem) self._listWidget.setItemWidget(newItem, LayerSnappingWidget(layer, self)) def removeLayer(self, layerId): for idx in range(0, self._listWidget.count() - 1): if self._listWidget.item(idx).data() == layerId: self._listWidget.takeItem(idx) return def _layersAdded(self, layers): for layer in layers: self.addLayer(layer) def _layersRemoved(self, layerIds): for idx in range(self._listWidget.count() - 1, 0): if self._listWidget.item(idx).data() in layerIds: self._listWidget.takeItem(idx)
class DownloadTab(QWidget): current_row = 1 def __init__(self, parent=None): QWidget.__init__(self, parent) vLayout = QVBoxLayout(self) self.downloads_list = QListWidget() vLayout.addWidget(self.downloads_list) def addDownloadItem(self, title, size): downloadItem = downloadItemClass(title, size) item = QListWidgetItem("\n\n\n\n") self.downloads_list.insertItem(self.current_row, item) self.downloads_list.setItemWidget(item, downloadItem) self.current_row += 1 return downloadItem
class LeapFlow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.controller = Controller() self.listener = LeapListener(self) self.controller.add_listener(self.listener) self.mode = "gallery" self.scroll = False self.direction = "" self.direction_x = 0 self.scroll_velocity = 0 self.current_index = 0 # List containing images for the gallery self.list_view = QListWidget() self.list_view.setFlow(0) self.list_view.setHorizontalScrollMode(1) self.list_view.setMouseTracking(True) self.list_view.itemClicked.connect(self.show_image) # Setting the style of the ListView, background, item selected, etc self.list_view.setStyleSheet( """ QListWidget::item:hover {background: transparent;} QListWidget::item:disabled:hover {background: transparent;} QListWidget::item:hover:!active {background: transparent;} QListWidget::item:selected:active {background: transparent;} QListWidget::item:selected:!active {background: transparent;} QListWidget::item:selected:disabled {background: transparent;} QListWidget::item:selected:!disabled {background: transparent;} QListWidget {background: #2C3539} """ ) # Image viewer self.scene = QGraphicsScene() self.viewer = QGraphicsView(self.scene) self.stackedWidget = QStackedWidget() self.stackedWidget.addWidget(self.list_view) self.stackedWidget.addWidget(self.viewer) self.setCentralWidget(self.stackedWidget) self.resize(500, 400) self.showMaximized() scan = ScanLibrary("/home/chris/Example") threads.append(scan) self.connect(scan, SIGNAL(scan.signal), self.add_images_to_list) scan.start() self.connect(self, SIGNAL("scrollChanged(bool)"), self.scroll_view) def setScroll(self, scroll): """Emit signal to scroll the view""" if self.scroll != scroll: self.scroll = scroll self.emit(SIGNAL("scrollChanged(bool)"), scroll) def scroll_view(self): """Scroll the view based on scroll velocity and direction""" x = self.direction_x * self.scroll_velocity / 100 bar_x = self.list_view.horizontalScrollBar().value() self.list_view.horizontalScrollBar().setValue(bar_x + x) def add_images_to_list(self): """To add a widget to the listview you must add a QListWidgetItem and replace with your widget""" for image in library: item = QListWidgetItem() pixmap = QPixmap.fromImage(QImage(library[image])) label = QLabel() label.setPixmap(pixmap.scaled(600, 400)) item.setSizeHint(label.sizeHint()) item.setData(0, library[image]) self.list_view.addItem(item) self.list_view.setItemWidget(item, label) def show_image(self, item): """"Display the selected image""" self.current_index = self.list_view.indexFromItem(item).row() self.scene.addPixmap((QPixmap.fromImage(QImage(item.text()))).scaled(self.viewer.size())) self.stackedWidget.setCurrentIndex(1) self.mode = "viewer" def previous_image(self): """Load previous image""" if self.current_index - 1 >= 0: self.current_index -= 1 self.load_image() def next_image(self): """Load next image""" if self.current_index + 1 <= len(library.keys()) - 1: self.current_index += 1 self.load_image() def load_image(self): """Load the image in self.current_index""" self.scene.addPixmap(QPixmap.fromImage(QImage(library[library.keys()[self.current_index]])))
class LeapFlow (QMainWindow): def __init__ (self): QMainWindow.__init__ (self) self.controller = Controller () self.listener = LeapListener (self) self.controller.add_listener (self.listener) self.mode = "gallery" self.scroll = False self.direction = "" self.direction_x = 0 self.scroll_velocity = 0 self.current_index = 0 # List containing images for the gallery self.list_view = QListWidget () self.list_view.setFlow (0) self.list_view.setHorizontalScrollMode (1) self.list_view.setMouseTracking (True) self.list_view.itemClicked.connect (self.show_image) # Setting the style of the ListView, background, item selected, etc self.list_view.setStyleSheet (""" QListWidget::item:hover {background: transparent;} QListWidget::item:disabled:hover {background: transparent;} QListWidget::item:hover:!active {background: transparent;} QListWidget::item:selected:active {background: transparent;} QListWidget::item:selected:!active {background: transparent;} QListWidget::item:selected:disabled {background: transparent;} QListWidget::item:selected:!disabled {background: transparent;} QListWidget {background: #2C3539} """) # Image viewer self.scene = QGraphicsScene () self.viewer = QGraphicsView (self.scene) self.stackedWidget = QStackedWidget () self.stackedWidget.addWidget (self.list_view) self.stackedWidget.addWidget (self.viewer) self.setCentralWidget (self.stackedWidget) self.resize (500, 400) self.showMaximized () scan = ScanLibrary ("/home/chris/Example") threads.append (scan) self.connect (scan, SIGNAL (scan.signal), self.add_images_to_list) scan.start () self.connect (self, SIGNAL ("scrollChanged(bool)"), self.scroll_view) def setScroll (self, scroll): """Emit signal to scroll the view""" if (self.scroll != scroll): self.scroll = scroll self.emit (SIGNAL("scrollChanged(bool)"), scroll) def scroll_view (self): """Scroll the view based on scroll velocity and direction""" x = self.direction_x * self.scroll_velocity / 100 bar_x = self.list_view.horizontalScrollBar ().value () self.list_view.horizontalScrollBar ().setValue (bar_x + x) def add_images_to_list (self): """To add a widget to the listview you must add a QListWidgetItem and replace with your widget""" for image in library: item = QListWidgetItem () pixmap = QPixmap.fromImage (QImage (library[image])) label = QLabel () label.setPixmap (pixmap.scaled (600, 400)) item.setSizeHint (label.sizeHint ()) item.setData (0, library[image]) self.list_view.addItem (item) self.list_view.setItemWidget (item, label) def show_image (self, item): """"Display the selected image""" self.current_index = self.list_view.indexFromItem (item).row () self.scene.addPixmap ((QPixmap.fromImage (QImage (item.text()))).scaled (self.viewer.size())) self.stackedWidget.setCurrentIndex (1) self.mode = "viewer" def previous_image (self): """Load previous image""" if self.current_index - 1 >= 0: self.current_index -= 1 self.load_image () def next_image (self): """Load next image""" if self.current_index + 1 <= len(library.keys ()) - 1: self.current_index += 1 self.load_image () def load_image (self): """Load the image in self.current_index""" self.scene.addPixmap (QPixmap.fromImage (QImage (library[library.keys()[self.current_index]])))
class PopupCompleter(QFrame): def __init__(self): QFrame.__init__(self, None, Qt.FramelessWindowHint | Qt.ToolTip) vbox = QVBoxLayout(self) vbox.setContentsMargins(0, 0, 0, 0) vbox.setSpacing(0) self.listWidget = QListWidget() self.listWidget.setMinimumHeight(350) vbox.addWidget(self.listWidget) self.listWidget.currentItemChanged.connect(self._repaint_items) def _repaint_items(self, current, previous): if current is not None: widget = self.listWidget.itemWidget(current) if widget is not None: widget.set_selected() if previous is not None: widget = self.listWidget.itemWidget(previous) if widget is not None: widget.set_not_selected() def reload(self, model): """Reload the data of the Popup Completer, and restart the state.""" self.listWidget.clear() self.add_help() for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) self.listWidget.setCurrentRow(8) def clear(self): """Remove all the items of the list (deleted), and reload the help.""" self.listWidget.clear() def refresh(self, model, has_text=True): """Refresh the list when the user search for some word.""" self.listWidget.clear() if not has_text: self.add_help() for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) if model: self.listWidget.setCurrentItem(model[0][0]) else: self.add_no_found() def fetch_more(self, model): """Add more items to the list on user scroll.""" for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) def add_no_found(self): """Load no results found message""" noFoundItem = self._create_help_item(resources.IMAGES['delete'], translations.TR_NO_RESULTS) self.listWidget.addItem(noFoundItem) def add_help(self): #Load help fileItem = self._create_help_item(resources.IMAGES['locate-file'], translations.TR_ONLY_FILES) self.listWidget.addItem(fileItem) classItem = self._create_help_item(resources.IMAGES['locate-class'], translations.TR_ONLY_CLASSES) self.listWidget.addItem(classItem) methodItem = self._create_help_item( resources.IMAGES['locate-function'], translations.TR_ONLY_METHODS) self.listWidget.addItem(methodItem) attributeItem = self._create_help_item( resources.IMAGES['locate-attributes'], translations.TR_ONLY_ATRIBUTES) self.listWidget.addItem(attributeItem) thisFileItem = self._create_help_item( resources.IMAGES['locate-on-this-file'], translations.TR_ONLY_CLASSES_METHODS) self.listWidget.addItem(thisFileItem) tabsItem = self._create_help_item(resources.IMAGES['locate-tab'], translations.TR_ONLY_CURRENT_TABS) self.listWidget.addItem(tabsItem) lineItem = self._create_help_item(resources.IMAGES['locate-line'], translations.TR_GO_TO_LINE) self.listWidget.addItem(lineItem) nonPythonItem = self._create_help_item( resources.IMAGES['locate-nonpython'], translations.TR_ONLY_NON_PYTHON) self.listWidget.addItem(nonPythonItem) def _create_help_item(self, image, text): Item = QListWidgetItem(QIcon(image), text) font = Item.font() font.setBold(True) Item.setSizeHint(QSize(20, 30)) Item.setBackground(QBrush(Qt.lightGray)) Item.setForeground(QBrush(Qt.black)) Item.setFont(font) return Item
class PopupCompleter(QFrame): def __init__(self): QFrame.__init__(self, None, Qt.FramelessWindowHint | Qt.ToolTip) vbox = QVBoxLayout(self) vbox.setContentsMargins(0, 0, 0, 0) vbox.setSpacing(0) self.listWidget = QListWidget() self.listWidget.setMinimumHeight(300) vbox.addWidget(self.listWidget) def reload(self, model): """Reload the data of the Popup Completer, and restart the state.""" self.listWidget.clear() self.add_help() for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) self.listWidget.setCurrentRow(6) def clear(self): """Remove all the items of the list (deleted), and reload the help.""" self.listWidget.clear() def refresh(self, model): """Refresh the list when the user search for some word.""" self.listWidget.clear() for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) if model: self.listWidget.setCurrentItem(model[0][0]) def fetch_more(self, model): """Add more items to the list on user scroll.""" for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) def add_help(self): #Load help fileItem = QListWidgetItem(QIcon(resources.IMAGES['locate-file']), '@\t(Filter only by Files)') font = fileItem.font() font.setBold(True) fileItem.setSizeHint(QSize(20, 30)) fileItem.setBackground(QBrush(Qt.lightGray)) fileItem.setForeground(QBrush(Qt.black)) fileItem.setFont(font) self.listWidget.addItem(fileItem) classItem = QListWidgetItem(QIcon(resources.IMAGES['locate-class']), '<\t(Filter only by Classes)') self.listWidget.addItem(classItem) classItem.setSizeHint(QSize(20, 30)) classItem.setBackground(QBrush(Qt.lightGray)) classItem.setForeground(QBrush(Qt.black)) classItem.setFont(font) methodItem = QListWidgetItem( QIcon(resources.IMAGES['locate-function']), '>\t(Filter only by Methods)') self.listWidget.addItem(methodItem) methodItem.setSizeHint(QSize(20, 30)) methodItem.setBackground(QBrush(Qt.lightGray)) methodItem.setForeground(QBrush(Qt.black)) methodItem.setFont(font) attributeItem = QListWidgetItem( QIcon(resources.IMAGES['locate-attributes']), '-\t(Filter only by Attributes)') self.listWidget.addItem(attributeItem) attributeItem.setSizeHint(QSize(20, 30)) attributeItem.setBackground(QBrush(Qt.lightGray)) attributeItem.setForeground(QBrush(Qt.black)) attributeItem.setFont(font) thisFileItem = QListWidgetItem( QIcon(resources.IMAGES['locate-on-this-file']), '.\t(Filter only by Classes and Methods in this File)') font = thisFileItem.font() font.setBold(True) thisFileItem.setSizeHint(QSize(20, 30)) thisFileItem.setBackground(QBrush(Qt.lightGray)) thisFileItem.setForeground(QBrush(Qt.black)) thisFileItem.setFont(font) self.listWidget.addItem(thisFileItem) nonPythonItem = QListWidgetItem( QIcon(resources.IMAGES['locate-nonpython']), '!\t(Filter only by Non Python Files)') self.listWidget.addItem(nonPythonItem) nonPythonItem.setSizeHint(QSize(20, 30)) nonPythonItem.setBackground(QBrush(Qt.lightGray)) nonPythonItem.setForeground(QBrush(Qt.black)) nonPythonItem.setFont(font)
class PopupCompleter(QFrame): def __init__(self): QFrame.__init__(self, None, Qt.FramelessWindowHint | Qt.ToolTip) vbox = QVBoxLayout(self) vbox.setContentsMargins(0, 0, 0, 0) vbox.setSpacing(0) self.listWidget = QListWidget() self.listWidget.setMinimumHeight(300) vbox.addWidget(self.listWidget) def reload(self, model): """Reload the data of the Popup Completer, and restart the state.""" self.listWidget.clear() self.add_help() for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) self.listWidget.setCurrentRow(6) def clear(self): """Remove all the items of the list (deleted), and reload the help.""" self.listWidget.clear() def refresh(self, model): """Refresh the list when the user search for some word.""" self.listWidget.clear() for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) if model: self.listWidget.setCurrentItem(model[0][0]) def fetch_more(self, model): """Add more items to the list on user scroll.""" for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) def add_help(self): #Load help fileItem = QListWidgetItem( QIcon(resources.IMAGES['locate-file']), '@\t(Filter only by Files)') font = fileItem.font() font.setBold(True) fileItem.setSizeHint(QSize(20, 30)) fileItem.setBackground(QBrush(Qt.lightGray)) fileItem.setForeground(QBrush(Qt.black)) fileItem.setFont(font) self.listWidget.addItem(fileItem) classItem = QListWidgetItem( QIcon(resources.IMAGES['locate-class']), '<\t(Filter only by Classes)') self.listWidget.addItem(classItem) classItem.setSizeHint(QSize(20, 30)) classItem.setBackground(QBrush(Qt.lightGray)) classItem.setForeground(QBrush(Qt.black)) classItem.setFont(font) methodItem = QListWidgetItem( QIcon(resources.IMAGES['locate-function']), '>\t(Filter only by Methods)') self.listWidget.addItem(methodItem) methodItem.setSizeHint(QSize(20, 30)) methodItem.setBackground(QBrush(Qt.lightGray)) methodItem.setForeground(QBrush(Qt.black)) methodItem.setFont(font) attributeItem = QListWidgetItem( QIcon(resources.IMAGES['locate-attributes']), '-\t(Filter only by Attributes)') self.listWidget.addItem(attributeItem) attributeItem.setSizeHint(QSize(20, 30)) attributeItem.setBackground(QBrush(Qt.lightGray)) attributeItem.setForeground(QBrush(Qt.black)) attributeItem.setFont(font) thisFileItem = QListWidgetItem( QIcon(resources.IMAGES['locate-on-this-file']), '.\t(Filter only by Classes and Methods in this File)') font = thisFileItem.font() font.setBold(True) thisFileItem.setSizeHint(QSize(20, 30)) thisFileItem.setBackground(QBrush(Qt.lightGray)) thisFileItem.setForeground(QBrush(Qt.black)) thisFileItem.setFont(font) self.listWidget.addItem(thisFileItem) nonPythonItem = QListWidgetItem( QIcon(resources.IMAGES['locate-nonpython']), '!\t(Filter only by Non Python Files)') self.listWidget.addItem(nonPythonItem) nonPythonItem.setSizeHint(QSize(20, 30)) nonPythonItem.setBackground(QBrush(Qt.lightGray)) nonPythonItem.setForeground(QBrush(Qt.black)) nonPythonItem.setFont(font)
class GitStatus(QDialog): def __init__(self, plugin, git, path): QDialog.__init__(self) self.git = git self.plugin = plugin self.setWindowTitle('Git status') layout = QGridLayout(self) branches = self.git.branch(unicode(path)) self.s_branches = QListWidget() if len(branches) > 0: self.s_branches.addItems(branches[1:]) self.actual_branch = QLabel("<h2>{0}</h2>".format(branches[0])) else: self.actual_branch = QLabel() branch = QLabel("<h2>Branches</h2>") change_branch = QPushButton("Change to") merge_branches = QPushButton("Merge branch") H = QHBoxLayout() delete_branch = QPushButton("Delete branch") add_branch = QPushButton("Add branch") H.addWidget(add_branch) H.addWidget(delete_branch) self.lists = [] no_staged = QLabel("<h2>No staged</h2>") untracked_files = QLabel("Untracked files") self.untracked_files = QListWidget() self.lists.append(self.untracked_files) modified_files = QLabel("Modified files") self.modified_files = QListWidget() self.lists.append(self.modified_files) deleted_files = QLabel("Deleted files") self.deleted_files = QListWidget() self.lists.append(self.deleted_files) staged = QLabel("<h2>Staged</h2>") added_files = QLabel("Added files") self.added_files = QListWidget() self.lists.append(self.added_files) s_modified_files = QLabel("Modified files") self.s_modified_files = QListWidget() self.lists.append(self.s_modified_files) s_deleted_files = QLabel("Deleted files") self.s_deleted_files = QListWidget() self.lists.append(self.s_deleted_files) layout.addWidget(self.actual_branch, 0, 0, Qt.AlignHCenter) layout.addWidget(change_branch, 1, 0) layout.addWidget(merge_branches, 2, 0) layout.addWidget(no_staged, 3, 0) layout.addWidget(untracked_files, 4, 0) layout.addWidget(self.untracked_files, 5, 0) layout.addWidget(modified_files, 6, 0) layout.addWidget(self.modified_files, 7, 0) layout.addWidget(deleted_files, 8, 0) layout.addWidget(self.deleted_files, 9, 0) layout.addWidget(branch, 0, 1) layout.addWidget(self.s_branches, 1, 1) layout.addLayout(H, 2, 1) layout.addWidget(staged, 3, 1) layout.addWidget(added_files, 4, 1) layout.addWidget(self.added_files, 5, 1) layout.addWidget(s_modified_files, 6, 1) layout.addWidget(self.s_modified_files, 7, 1) layout.addWidget(s_deleted_files, 8, 1) layout.addWidget(self.s_deleted_files, 9, 1) self.fill(self.git.no_staged["?"], self.untracked_files) self.fill(self.git.no_staged["M"], self.modified_files) self.fill(self.git.no_staged["D"], self.deleted_files) self.fill(self.git.staged["A"], self.added_files) self.fill(self.git.staged["M"], self.s_modified_files) self.fill(self.git.staged["D"], self.s_deleted_files) self.staged_b = QPushButton('Stage files', self) self.unstage_b = QPushButton("Unstage files", self) self.commit_b = QPushButton('Commit files', self) self.uncommit_b = QPushButton("Uncommit files", self) layout.addWidget(self.staged_b, 10, 0) layout.addWidget(self.unstage_b, 11, 0) layout.addWidget(self.commit_b, 10, 1) layout.addWidget(self.uncommit_b, 11, 1) self.setLayout(layout) self.connect(self.staged_b, SIGNAL('clicked()'), self.add) self.connect(self.unstage_b, SIGNAL('clicked()'), self.unstage) self.connect(self.commit_b, SIGNAL('clicked()'), self.commit) self.connect(self.uncommit_b, SIGNAL('clicked()'), self.uncommit) self.connect(change_branch, SIGNAL("clicked()"), self.change_branch) self.connect(add_branch, SIGNAL("clicked()"), self.add_branch) self.connect(delete_branch, SIGNAL("clicked()"), self.delete_branch) self.connect(merge_branches, SIGNAL("clicked()"), self.merge_branches) def fill(self, a_list, widget_list): for x in a_list: item = QListWidgetItem() widget_list.addItem(item) check_box = QCheckBox(x) widget_list.setItemWidget(item, check_box) def add(self): path = self.plugin.editor.get_project_owner() for pos in reversed(xrange(self.untracked_files.count())): item = self.untracked_files.item(pos) widget = self.untracked_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.add(path, text) self.untracked_files.removeItemWidget(item) self.untracked_files.takeItem(pos) item = QListWidgetItem() self.added_files.addItem(item) check_box = QCheckBox(text) self.added_files.setItemWidget(item, check_box) for pos in reversed(xrange(self.modified_files.count())): item = self.modified_files.item(pos) widget = self.modified_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.add(path, widget.text()) self.modified_files.removeItemWidget(item) self.modified_files.takeItem(pos) item = QListWidgetItem() self.s_modified_files.addItem(item) check_box = QCheckBox(text) self.s_modified_files.setItemWidget(item, check_box) for pos in reversed(xrange(self.deleted_files.count())): item = self.deleted_files.item(pos) widget = self.deleted_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.add(path, widget.text()) self.deleted_files.removeItemWidget(item) self.deleted_files.takeItem(pos) item = QListWidgetItem() self.s_deleted_files.addItem(item) check_box = QCheckBox(text) self.s_deleted_files.setItemWidget(item, check_box) def unstage(self): path = self.plugin.editor.get_project_owner() for pos in reversed(xrange(self.untracked_files.count())): item = self.untracked_files.item(pos) widget = self.untracked_files.itemWidget(item) if widget.isChecked(): self.git.unstage(path, widget.text()) self.untracked_files.removeItemWidget(item) self.untracked_files.takeItem(pos) for pos in reversed(xrange(self.modified_files.count())): item = self.modified_files.item(pos) widget = self.modified_files.itemWidget(item) if widget.isChecked(): self.git.unstage(path, widget.text()) self.modified_files.removeItemWidget(item) self.modified_files.takeItem(pos) for pos in reversed(xrange(self.deleted_files.count())): item = self.deleted_files.item(pos) widget = self.deleted_files.itemWidget(item) if widget.isChecked(): self.git.unstage(path, widget.text()) self.deleted_files.removeItemWidget(item) self.deleted_files.takeItem(pos) def commit(self): msg = QInputDialog.getText(self, "Commit message", "Commit Message:") if msg[1] == False: return(0) path = self.plugin.editor.get_project_owner() for pos in reversed(xrange(self.added_files.count())): item = self.added_files.item(pos) widget = self.added_files.itemWidget(item) if widget.isChecked(): self.git.commit(path, str(widget.text()), msg[0]) self.added_files.removeItemWidget(item) self.added_files.takeItem(pos) for pos in reversed(xrange(self.s_modified_files.count())): item = self.s_modified_files.item(pos) widget = self.s_modified_files.itemWidget(item) if widget.isChecked(): self.git.commit(path, widget.text(), msg[0]) self.s_modified_files.removeItemWidget(item) self.s_modified_files.takeItem(pos) for pos in reversed(xrange(self.s_deleted_files.count())): item = self.s_deleted_files.item(pos) widget = self.s_deleted_files.itemWidget(item) if widget.isChecked(): self.git.commit(path, widget.text(), msg[0]) self.s_deleted_files.takeItem(pos) self.s_deleted_files.removeItemWidget(item) def uncommit(self): path = self.plugin.editor.get_project_owner() for pos in reversed(xrange(self.added_files.count())): item = self.added_files.item(pos) widget = self.added_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.uncommit(path, str(widget.text())) self.added_files.removeItemWidget(item) self.added_files.takeItem(pos) item = QListWidgetItem() self.untracked_files.addItem(item) check_box = QCheckBox(text) self.untracked_files.setItemWidget(item, check_box) for pos in reversed(xrange(self.s_modified_files.count())): item = self.s_modified_files.item(pos) widget = self.s_modified_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.uncommit(path, widget.text()) self.s_modified_files.removeItemWidget(item) self.s_modified_files.takeItem(pos) item = QListWidgetItem() self.modified_files.addItem(item) check_box = QCheckBox(text) self.modified_files.setItemWidget(item, check_box) for pos in reversed(xrange(self.s_deleted_files.count())): item = self.s_deleted_files.item(pos) widget = self.s_deleted_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.uncommit(path, widget.text()) self.s_deleted_files.removeItemWidget(item) self.s_deleted_files.takeItem(pos) item = QListWidgetItem() self.deleted_files.addItem(item) check_box = QCheckBox(text) self.deleted_files.setItemWidget(item, check_box) def change_branch(self): path = self.plugin.editor.get_project_owner() item = self.s_branches.currentItem() if item and not self.something(): text = item.text() self.git.change_branch(path, text) self.s_branches.clear() self.s_branches.addItems(self.git.branch(unicode(path))[1:]) self.actual_branch.setText("<h2>{0}<h2>".format(text)) if self.something(): v = QMessageBox() v.setText("Error: you have unsaved changes") v.setIcon(v.Warning) v.exec_() def add_branch(self): path = self.plugin.editor.get_project_owner() msg = QInputDialog.getText(self, "New branch", "Branch Name:") if msg[1] == False: return(0) self.git.add_branch(path, msg[0]) self.s_branches.clear() self.s_branches.addItems(self.git.branch(unicode(path))[1:]) def delete_branch(self): path = self.plugin.editor.get_project_owner() item = self.s_branches.currentItem() if item: text = str(item.text()) call = self.git.delete_branch(path, text) if not call: self.s_branches.clear() self.s_branches.addItems(self.git.branch(unicode(path))[1:]) else: m = QMessageBox() m.setText("<h2>" + call + "</h2>") m.setInformativeText("Force deletion?") m.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) m.setDefaultButton(QMessageBox.Cancel) c = m.exec_() if c == QMessageBox.Ok: self.git.force_delete_branch(path, text) self.s_branches.clear() self.s_branches.addItems(self.git.branch(unicode(path))[1:]) def merge_branches(self): path = self.plugin.editor.get_project_owner() item = self.s_branches.currentItem() if item: text = str(item.text()) call = self.git.merge_branches(path, text) if call: m = QMessageBox() m.setText(call) m.setInformativeText("Unknown") m.setIcon(m.Critical) m.exec_() def something(self): for x in self.lists: if x.count() > 0: return True return False
class ComboCheckBox(QComboBox): def __init__(self, itemdicts): # items==[str,str...] super(ComboCheckBox, self).__init__() self.itemdict = itemdicts self.items = self.itemdict.keys() self.items.insert(0, u'全部') self.row_num = len(self.items) self.Selectedrow_num = 0 self.qCheckBox = [] self.qLineEdit = QLineEdit() self.qLineEdit.setReadOnly(True) self.qListWidget = QListWidget() self.addQCheckBox(0) self.qCheckBox[0].stateChanged.connect(self.All) for i in range(1, self.row_num): self.addQCheckBox(i) self.qCheckBox[i].stateChanged.connect(self.show) self.setModel(self.qListWidget.model()) self.setView(self.qListWidget) self.setLineEdit(self.qLineEdit) self.show() # self.qListWidget.setAlternatingRowColors(True) # self.qLineEdit.setAlternatingRowColors(True) # self.qLineEdit.setStyleSheet("background-color:transparen ") # self.qListWidget.setStyleSheet("background-color:#ee3333 ") def addQCheckBox(self, i): self.qCheckBox.append(QCheckBox()) qItem = QListWidgetItem(self.qListWidget) self.qCheckBox[i].setText(self.items[i]) if i > 0 and self.itemdict[self.items[i]] == "1": self.qCheckBox[i].setChecked(True) self.qListWidget.setItemWidget(qItem, self.qCheckBox[i]) def Selectlist(self): Outputlist = [] for i in range(1, self.row_num): if self.qCheckBox[i].isChecked() == True: Outputlist.append(self.qCheckBox[i].text()) self.Selectedrow_num = len(Outputlist) return Outputlist def show(self): show = '' Outputlist = self.Selectlist() self.qLineEdit.setReadOnly(False) self.qLineEdit.clear() for i in Outputlist: show += i + ';' if self.Selectedrow_num == 0: self.qCheckBox[0].setCheckState(0) elif self.Selectedrow_num == self.row_num - 1: self.qCheckBox[0].setCheckState(2) else: self.qCheckBox[0].setCheckState(1) self.qLineEdit.setText(show) self.qLineEdit.setReadOnly(True) def All(self, state): if state == 2: for i in range(1, self.row_num): self.qCheckBox[i].setChecked(True) elif state == 1: if self.Selectedrow_num == 0: self.qCheckBox[0].setCheckState(2) elif state == 0: self.clear() def clear(self): for i in range(self.row_num): self.qCheckBox[i].setChecked(False)
class PopupCompleter(QFrame): def __init__(self): QFrame.__init__(self, None, Qt.FramelessWindowHint | Qt.ToolTip) vbox = QVBoxLayout(self) vbox.setContentsMargins(0, 0, 0, 0) vbox.setSpacing(0) self.listWidget = QListWidget() self.listWidget.setMinimumHeight(350) vbox.addWidget(self.listWidget) self.listWidget.currentItemChanged.connect(self._repaint_items) def _repaint_items(self, current, previous): if current is not None: widget = self.listWidget.itemWidget(current) if widget is not None: widget.set_selected() if previous is not None: widget = self.listWidget.itemWidget(previous) if widget is not None: widget.set_not_selected() def reload(self, model): """Reload the data of the Popup Completer, and restart the state.""" self.listWidget.clear() self.add_help() for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) self.listWidget.setCurrentRow(8) def clear(self): """Remove all the items of the list (deleted), and reload the help.""" self.listWidget.clear() def refresh(self, model, has_text=True): """Refresh the list when the user search for some word.""" self.listWidget.clear() if not has_text: self.add_help() for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) if model: self.listWidget.setCurrentItem(model[0][0]) else: self.add_no_found() def fetch_more(self, model): """Add more items to the list on user scroll.""" for item in model: self.listWidget.addItem(item[0]) self.listWidget.setItemWidget(item[0], item[1]) def add_no_found(self): #Load no results found message noFoundItem = QListWidgetItem( QIcon(resources.IMAGES['delete']), 'No results were found!') font = noFoundItem.font() font.setBold(True) noFoundItem.setSizeHint(QSize(20, 30)) noFoundItem.setBackground(QBrush(Qt.lightGray)) noFoundItem.setForeground(QBrush(Qt.black)) noFoundItem.setFont(font) self.listWidget.addItem(noFoundItem) def add_help(self): #Load help fileItem = QListWidgetItem( QIcon(resources.IMAGES['locate-file']), '@\t(Filter only by Files)') font = fileItem.font() font.setBold(True) fileItem.setSizeHint(QSize(20, 30)) fileItem.setBackground(QBrush(Qt.lightGray)) fileItem.setForeground(QBrush(Qt.black)) fileItem.setFont(font) self.listWidget.addItem(fileItem) classItem = QListWidgetItem( QIcon(resources.IMAGES['locate-class']), '<\t(Filter only by Classes)') self.listWidget.addItem(classItem) classItem.setSizeHint(QSize(20, 30)) classItem.setBackground(QBrush(Qt.lightGray)) classItem.setForeground(QBrush(Qt.black)) classItem.setFont(font) methodItem = QListWidgetItem( QIcon(resources.IMAGES['locate-function']), '>\t(Filter only by Methods)') self.listWidget.addItem(methodItem) methodItem.setSizeHint(QSize(20, 30)) methodItem.setBackground(QBrush(Qt.lightGray)) methodItem.setForeground(QBrush(Qt.black)) methodItem.setFont(font) attributeItem = QListWidgetItem( QIcon(resources.IMAGES['locate-attributes']), '-\t(Filter only by Attributes)') self.listWidget.addItem(attributeItem) attributeItem.setSizeHint(QSize(20, 30)) attributeItem.setBackground(QBrush(Qt.lightGray)) attributeItem.setForeground(QBrush(Qt.black)) attributeItem.setFont(font) thisFileItem = QListWidgetItem( QIcon(resources.IMAGES['locate-on-this-file']), '.\t(Filter only by Classes and Methods in this File)') font = thisFileItem.font() font.setBold(True) thisFileItem.setSizeHint(QSize(20, 30)) thisFileItem.setBackground(QBrush(Qt.lightGray)) thisFileItem.setForeground(QBrush(Qt.black)) thisFileItem.setFont(font) self.listWidget.addItem(thisFileItem) tabsItem = QListWidgetItem( QIcon(resources.IMAGES['locate-tab']), '/\t(Filter only by the current Tabs)') font = tabsItem.font() font.setBold(True) tabsItem.setSizeHint(QSize(20, 30)) tabsItem.setBackground(QBrush(Qt.lightGray)) tabsItem.setForeground(QBrush(Qt.black)) tabsItem.setFont(font) self.listWidget.addItem(tabsItem) lineItem = QListWidgetItem( QIcon(resources.IMAGES['locate-line']), ':\t(Go to Line)') font = lineItem.font() font.setBold(True) lineItem.setSizeHint(QSize(20, 30)) lineItem.setBackground(QBrush(Qt.lightGray)) lineItem.setForeground(QBrush(Qt.black)) lineItem.setFont(font) self.listWidget.addItem(lineItem) nonPythonItem = QListWidgetItem( QIcon(resources.IMAGES['locate-nonpython']), '!\t(Filter only by Non Python Files)') self.listWidget.addItem(nonPythonItem) nonPythonItem.setSizeHint(QSize(20, 30)) nonPythonItem.setBackground(QBrush(Qt.lightGray)) nonPythonItem.setForeground(QBrush(Qt.black)) nonPythonItem.setFont(font)
class GitStatus(QDialog): def __init__(self, plugin, git, path): QDialog.__init__(self) self.git = git self.plugin = plugin self.setWindowTitle('Git status') layout = QGridLayout(self) branches = self.git.branch(unicode(path)) self.s_branches = QListWidget() if len(branches) > 0: self.s_branches.addItems(branches[1:]) self.actual_branch = QLabel("<h2>{0}</h2>".format(branches[0])) else: self.actual_branch = QLabel() branch = QLabel("<h2>Branches</h2>") change_branch = QPushButton("Change to") merge_branches = QPushButton("Merge branch") H = QHBoxLayout() delete_branch = QPushButton("Delete branch") add_branch = QPushButton("Add branch") H.addWidget(add_branch) H.addWidget(delete_branch) self.lists = [] no_staged = QLabel("<h2>No staged</h2>") untracked_files = QLabel("Untracked files") self.untracked_files = QListWidget() self.lists.append(self.untracked_files) modified_files = QLabel("Modified files") self.modified_files = QListWidget() self.lists.append(self.modified_files) deleted_files = QLabel("Deleted files") self.deleted_files = QListWidget() self.lists.append(self.deleted_files) staged = QLabel("<h2>Staged</h2>") added_files = QLabel("Added files") self.added_files = QListWidget() self.lists.append(self.added_files) s_modified_files = QLabel("Modified files") self.s_modified_files = QListWidget() self.lists.append(self.s_modified_files) s_deleted_files = QLabel("Deleted files") self.s_deleted_files = QListWidget() self.lists.append(self.s_deleted_files) layout.addWidget(self.actual_branch, 0, 0, Qt.AlignHCenter) layout.addWidget(change_branch, 1, 0) layout.addWidget(merge_branches, 2, 0) layout.addWidget(no_staged, 3, 0) layout.addWidget(untracked_files, 4, 0) layout.addWidget(self.untracked_files, 5, 0) layout.addWidget(modified_files, 6, 0) layout.addWidget(self.modified_files, 7, 0) layout.addWidget(deleted_files, 8, 0) layout.addWidget(self.deleted_files, 9, 0) layout.addWidget(branch, 0, 1) layout.addWidget(self.s_branches, 1, 1) layout.addLayout(H, 2, 1) layout.addWidget(staged, 3, 1) layout.addWidget(added_files, 4, 1) layout.addWidget(self.added_files, 5, 1) layout.addWidget(s_modified_files, 6, 1) layout.addWidget(self.s_modified_files, 7, 1) layout.addWidget(s_deleted_files, 8, 1) layout.addWidget(self.s_deleted_files, 9, 1) self.fill(self.git.no_staged["?"], self.untracked_files) self.fill(self.git.no_staged["M"], self.modified_files) self.fill(self.git.no_staged["D"], self.deleted_files) self.fill(self.git.staged["A"], self.added_files) self.fill(self.git.staged["M"], self.s_modified_files) self.fill(self.git.staged["D"], self.s_deleted_files) self.staged_b = QPushButton('Stage files', self) self.unstage_b = QPushButton("Unstage files", self) self.commit_b = QPushButton('Commit files', self) self.uncommit_b = QPushButton("Uncommit files", self) layout.addWidget(self.staged_b, 10, 0) layout.addWidget(self.unstage_b, 11, 0) layout.addWidget(self.commit_b, 10, 1) layout.addWidget(self.uncommit_b, 11, 1) self.setLayout(layout) self.connect(self.staged_b, SIGNAL('clicked()'), self.add) self.connect(self.unstage_b, SIGNAL('clicked()'), self.unstage) self.connect(self.commit_b, SIGNAL('clicked()'), self.commit) self.connect(self.uncommit_b, SIGNAL('clicked()'), self.uncommit) self.connect(change_branch, SIGNAL("clicked()"), self.change_branch) self.connect(add_branch, SIGNAL("clicked()"), self.add_branch) self.connect(delete_branch, SIGNAL("clicked()"), self.delete_branch) self.connect(merge_branches, SIGNAL("clicked()"), self.merge_branches) def fill(self, a_list, widget_list): for x in a_list: item = QListWidgetItem() widget_list.addItem(item) check_box = QCheckBox(x) widget_list.setItemWidget(item, check_box) def add(self): path = self.plugin.editor.get_project_owner() for pos in reversed(xrange(self.untracked_files.count())): item = self.untracked_files.item(pos) widget = self.untracked_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.add(path, text) self.untracked_files.removeItemWidget(item) self.untracked_files.takeItem(pos) item = QListWidgetItem() self.added_files.addItem(item) check_box = QCheckBox(text) self.added_files.setItemWidget(item, check_box) for pos in reversed(xrange(self.modified_files.count())): item = self.modified_files.item(pos) widget = self.modified_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.add(path, widget.text()) self.modified_files.removeItemWidget(item) self.modified_files.takeItem(pos) item = QListWidgetItem() self.s_modified_files.addItem(item) check_box = QCheckBox(text) self.s_modified_files.setItemWidget(item, check_box) for pos in reversed(xrange(self.deleted_files.count())): item = self.deleted_files.item(pos) widget = self.deleted_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.add(path, widget.text()) self.deleted_files.removeItemWidget(item) self.deleted_files.takeItem(pos) item = QListWidgetItem() self.s_deleted_files.addItem(item) check_box = QCheckBox(text) self.s_deleted_files.setItemWidget(item, check_box) def unstage(self): path = self.plugin.editor.get_project_owner() for pos in reversed(xrange(self.untracked_files.count())): item = self.untracked_files.item(pos) widget = self.untracked_files.itemWidget(item) if widget.isChecked(): self.git.unstage(path, widget.text()) self.untracked_files.removeItemWidget(item) self.untracked_files.takeItem(pos) for pos in reversed(xrange(self.modified_files.count())): item = self.modified_files.item(pos) widget = self.modified_files.itemWidget(item) if widget.isChecked(): self.git.unstage(path, widget.text()) self.modified_files.removeItemWidget(item) self.modified_files.takeItem(pos) for pos in reversed(xrange(self.deleted_files.count())): item = self.deleted_files.item(pos) widget = self.deleted_files.itemWidget(item) if widget.isChecked(): self.git.unstage(path, widget.text()) self.deleted_files.removeItemWidget(item) self.deleted_files.takeItem(pos) def commit(self): msg = QInputDialog.getText(self, "Commit message", "Commit Message:") if msg[1] == False: return (0) path = self.plugin.editor.get_project_owner() for pos in reversed(xrange(self.added_files.count())): item = self.added_files.item(pos) widget = self.added_files.itemWidget(item) if widget.isChecked(): self.git.commit(path, str(widget.text()), msg[0]) self.added_files.removeItemWidget(item) self.added_files.takeItem(pos) for pos in reversed(xrange(self.s_modified_files.count())): item = self.s_modified_files.item(pos) widget = self.s_modified_files.itemWidget(item) if widget.isChecked(): self.git.commit(path, widget.text(), msg[0]) self.s_modified_files.removeItemWidget(item) self.s_modified_files.takeItem(pos) for pos in reversed(xrange(self.s_deleted_files.count())): item = self.s_deleted_files.item(pos) widget = self.s_deleted_files.itemWidget(item) if widget.isChecked(): self.git.commit(path, widget.text(), msg[0]) self.s_deleted_files.takeItem(pos) self.s_deleted_files.removeItemWidget(item) def uncommit(self): path = self.plugin.editor.get_project_owner() for pos in reversed(xrange(self.added_files.count())): item = self.added_files.item(pos) widget = self.added_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.uncommit(path, str(widget.text())) self.added_files.removeItemWidget(item) self.added_files.takeItem(pos) item = QListWidgetItem() self.untracked_files.addItem(item) check_box = QCheckBox(text) self.untracked_files.setItemWidget(item, check_box) for pos in reversed(xrange(self.s_modified_files.count())): item = self.s_modified_files.item(pos) widget = self.s_modified_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.uncommit(path, widget.text()) self.s_modified_files.removeItemWidget(item) self.s_modified_files.takeItem(pos) item = QListWidgetItem() self.modified_files.addItem(item) check_box = QCheckBox(text) self.modified_files.setItemWidget(item, check_box) for pos in reversed(xrange(self.s_deleted_files.count())): item = self.s_deleted_files.item(pos) widget = self.s_deleted_files.itemWidget(item) text = widget.text() if widget.isChecked(): self.git.uncommit(path, widget.text()) self.s_deleted_files.removeItemWidget(item) self.s_deleted_files.takeItem(pos) item = QListWidgetItem() self.deleted_files.addItem(item) check_box = QCheckBox(text) self.deleted_files.setItemWidget(item, check_box) def change_branch(self): path = self.plugin.editor.get_project_owner() item = self.s_branches.currentItem() if item and not self.something(): text = item.text() self.git.change_branch(path, text) self.s_branches.clear() self.s_branches.addItems(self.git.branch(unicode(path))[1:]) self.actual_branch.setText("<h2>{0}<h2>".format(text)) if self.something(): v = QMessageBox() v.setText("Error: you have unsaved changes") v.setIcon(v.Warning) v.exec_() def add_branch(self): path = self.plugin.editor.get_project_owner() msg = QInputDialog.getText(self, "New branch", "Branch Name:") if msg[1] == False: return (0) self.git.add_branch(path, msg[0]) self.s_branches.clear() self.s_branches.addItems(self.git.branch(unicode(path))[1:]) def delete_branch(self): path = self.plugin.editor.get_project_owner() item = self.s_branches.currentItem() if item: text = str(item.text()) call = self.git.delete_branch(path, text) if not call: self.s_branches.clear() self.s_branches.addItems(self.git.branch(unicode(path))[1:]) else: m = QMessageBox() m.setText("<h2>" + call + "</h2>") m.setInformativeText("Force deletion?") m.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) m.setDefaultButton(QMessageBox.Cancel) c = m.exec_() if c == QMessageBox.Ok: self.git.force_delete_branch(path, text) self.s_branches.clear() self.s_branches.addItems( self.git.branch(unicode(path))[1:]) def merge_branches(self): path = self.plugin.editor.get_project_owner() item = self.s_branches.currentItem() if item: text = str(item.text()) call = self.git.merge_branches(path, text) if call: m = QMessageBox() m.setText(call) m.setInformativeText("Unknown") m.setIcon(m.Critical) m.exec_() def something(self): for x in self.lists: if x.count() > 0: return True return False
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)
class MainQMainWindow(QMainWindow): def __init__(self): super(MainQMainWindow, self).__init__() # Create QListWidget self.setFixedSize(800, 500) self.myQListWidget = QListWidget(self) self.alerts = [] # [Alert(AlertInfo('2018-01-12 00:00:01', '1', '1'), 'alert'), # Alert(AlertInfo('2018-01-12 00:01:01', '2', '2'), 'ignored'), # Alert(AlertInfo('2018-01-12 00:02:01', '3', '3'), 'resolved') # ] # self.myQListWidget.setStyleSheet("QListWidget::item { border: 0px solid red }") for alert in self.alerts[::-1]: # Create QCustomQWidget myQCustomQWidget = QCustomQWidget() myQCustomQWidget.setItemFromAlert(alert) # Create QListWidgetItem myQListWidgetItem = QListWidgetItem(self.myQListWidget) # Set size hint myQListWidgetItem.setSizeHint(myQCustomQWidget.sizeHint()) # Add QListWidgetItem into QListWidget self.myQListWidget.addItem(myQListWidgetItem) self.myQListWidget.setItemWidget(myQListWidgetItem, myQCustomQWidget) self.myQListWidget.itemDoubleClicked.connect(self._handleDoubleClick) self.setCentralWidget(self.myQListWidget) #TODO: update 1 element def updateValues(self, alerts): self.myQListWidget.clear() for alert in alerts[::-1]: print(alert.state) myQCustomQWidget = QCustomQWidget() myQCustomQWidget.setItemFromAlert(alert) # Create QListWidgetItem myQListWidgetItem = QListWidgetItem(self.myQListWidget) # Set size hint myQListWidgetItem.setSizeHint(myQCustomQWidget.sizeHint()) # Add QListWidgetItem into QListWidget self.myQListWidget.addItem(myQListWidgetItem) self.myQListWidget.setItemWidget(myQListWidgetItem, myQCustomQWidget) self.alerts = alerts @SimpleThread def server(self, primaryText): model_path = os.path.join('frozen_inference_graph.pb') pipe = detectionPipeline( args.filename, './config_ex.json', # pipe = detectionPipeline('/Users/StasDon/Documents/Competitions/2018-19/HacknCode/data/videos/l_07_persons_1_01.mp4', './config_ex.json', models_paths=[model_path], gui=self) pipe.processVideo() ##TODO: ADD HASHMAP def search_for_alert(self, cam): for idx, alert in enumerate(self.alerts): if alert.state == 'alert' and alert.info.camera == cam: return idx return None def _handleDoubleClick(self, item): selected_index = self.myQListWidget.currentRow() alerts = self.alerts[::-1].copy() dialog = AlertInfoWindow(alert=alerts[selected_index], parent=self) if dialog.exec_() == QDialog.Accepted: alerts[selected_index].state = dialog.choice self.updateValues(alerts[::-1]) dialog.deleteLater()