Esempio n. 1
0
    def __init__(self, subject_name):
        QMainWindow.__init__(self)
        self.setWindowTitle("Edit Comment Bank: {} - {} {}".format(
            subject_name, config.APP_NAME, config.APP_VERSION))
        self.setMinimumWidth(1200)
        self.setStyleSheet(config.STYLESHEET)

        self.subject = could_try_harder.load(subject_name)
        self.saved_list = could_try_harder.get_saved_list()

        # Widgets
        self.intro_comment_label = QLabel("Introductory Comment:")
        self.intro_comment_label.setProperty("styleClass", "heading")
        self.intro_comment_textedit = QTextEdit()
        self.comment_bank_label = QLabel("Comment Bank")
        self.comment_bank_label.setProperty("styleClass", "heading")
        self.comment_bank_listwidget = QListWidget()
        self.placeholder_instructions_label = QLabel(
            config.PLACEHOLDER_INSTRUCTIONS)
        self.add_comment_label = QLabel("Add Comment:")
        self.add_comment_entry = QLineEdit()
        self.add_comment_button = QPushButton("Add")
        self.update_comment_label = QLabel("Update Comment:")
        self.update_comment_entry = QLineEdit()
        self.update_comment_button = QPushButton("Update")
        self.delete_comment_button = QPushButton("Delete Comment")
        self.import_comments_combo = QComboBox()
        self.import_comments_button = QPushButton("Import...")
        self.cancel_button = QPushButton("Cancel")
        self.save_button = QPushButton("Save")

        # Layout
        self.layout = QVBoxLayout()
        self.top_layout = QHBoxLayout()
        self.intro_comment_layout = QVBoxLayout()
        self.intro_comment_layout.addWidget(self.intro_comment_label)
        self.intro_comment_layout.addWidget(self.intro_comment_textedit)
        self.top_layout.addLayout(self.intro_comment_layout)
        self.top_layout.addWidget(self.placeholder_instructions_label)
        self.layout.addLayout(self.top_layout)
        self.middle_layout = QVBoxLayout()
        self.middle_layout.addWidget(self.comment_bank_label)
        self.middle_layout.addWidget(self.comment_bank_listwidget)
        self.comment_actions_layout = QHBoxLayout()
        self.comment_actions_layout.addWidget(self.delete_comment_button, 0,
                                              Qt.AlignLeft)
        self.comment_actions_layout.addWidget(self.import_comments_combo, 1,
                                              Qt.AlignRight)
        self.comment_actions_layout.addWidget(self.import_comments_button, 0,
                                              Qt.AlignRight)
        self.middle_layout.addLayout(self.comment_actions_layout)
        self.update_comment_layout = QGridLayout()
        self.update_comment_layout.addWidget(self.update_comment_label, 0, 0)
        self.update_comment_layout.addWidget(self.update_comment_entry, 0, 1)
        self.update_comment_layout.addWidget(self.update_comment_button, 0, 2)
        self.update_comment_layout.addWidget(self.add_comment_label, 1, 0)
        self.update_comment_layout.addWidget(self.add_comment_entry, 1, 1)
        self.update_comment_layout.addWidget(self.add_comment_button, 1, 2)
        self.middle_layout.addLayout(self.update_comment_layout)
        self.layout.addLayout(self.middle_layout)
        self.bottom_layout = QHBoxLayout()
        self.bottom_layout.addWidget(self.cancel_button, 0, Qt.AlignLeft)
        self.bottom_layout.addWidget(self.save_button, 0, Qt.AlignRight)
        self.layout.addLayout(self.bottom_layout)

        # Slot connections
        self.comment_bank_listwidget.itemSelectionChanged.connect(
            self.do_update_comment_bank_selection)
        self.import_comments_button.clicked.connect(self.do_import_comments)
        self.update_comment_button.clicked.connect(self.do_update_comment)
        self.update_comment_entry.returnPressed.connect(self.do_update_comment)
        self.add_comment_button.clicked.connect(self.do_add_comment)
        self.add_comment_entry.returnPressed.connect(self.do_add_comment)
        self.delete_comment_button.clicked.connect(self.do_delete_comment)
        self.cancel_button.clicked.connect(self.do_cancel)
        self.save_button.clicked.connect(self.do_save)

        # Initial UI update
        self.update_ui()

        self.widget = QWidget()
        self.widget.setLayout(self.layout)
        self.setCentralWidget(self.widget)
Esempio n. 2
0
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1131, 555)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(10, 60, 781, 431))
        self.label.setStyleSheet(u"background-color: rgb(85, 255, 255)")
        self.label.setScaledContents(True)
        
        self.listWidget = QListWidget(self.centralwidget)
        no_of_widgets=19
        for i in range(no_of_widgets):
            QListWidgetItem(self.listWidget)
        self.listWidget.setObjectName(u"listWidget")
        self.listWidget.setGeometry(QRect(850, 160, 256, 201))

        self.horizontalSlider = QSlider(self.centralwidget)
        self.horizontalSlider.setObjectName(u"horizontalSlider")
        self.horizontalSlider.setGeometry(QRect(870, 70, 211, 22))
        self.horizontalSlider.setOrientation(Qt.Horizontal)
        #print(self.horizontalSlider.value())
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setObjectName(u"label_2")
        self.label_2.setGeometry(QRect(930, 10, 101, 51))
        self.label_2.setMinimumSize(QSize(0, 31))
        self.label_2.setScaledContents(True)
        self.label_2.setWordWrap(True)
        self.label_2.setMargin(10)
        
        # ✅ commit button
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(892, 110, 61, 28))
        self.pushButton.clicked.connect(lambda : self.commit())

        # ❌ cancle button
        self.pushButton_2 = QPushButton(self.centralwidget)
        self.pushButton_2.setObjectName(u"pushButton_2")
        self.pushButton_2.setGeometry(QRect(990, 110, 61, 28))
        self.pushButton_2.clicked.connect(lambda : self.cancle())

        # ↩️ Undo button
        self.pushButton_3 = QPushButton(self.centralwidget)
        self.pushButton_3.setObjectName(u"pushButton_3")
        self.pushButton_3.setGeometry(QRect(370, 20, 61, 28))
        self.pushButton_3.clicked.connect(lambda : self.undo())

        #crop
        self.pushButton_4 = QPushButton(self.centralwidget)
        self.pushButton_4.setObjectName(u"pushButton_4")
        self.pushButton_4.setGeometry(QRect(910, 380, 61, 28))
        self.pushButton_4.clicked.connect(self.cropping)
        
        # Resize
        self.pushButton_5 = QPushButton(self.centralwidget)
        self.pushButton_5.setObjectName(u"pushButton_5")
        self.pushButton_5.setGeometry(QRect(980, 380, 61, 28))
        self.pushButton_5.clicked.connect(self.resize)
        
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")

        self.menubar.setGeometry(QRect(0, 0, 1131, 26))
        self.menuNew_File = QMenu(self.menubar)
        self.menuNew_File.setObjectName(u"menuNew_File")

        #New File
        self.actionNew_File = QAction("NewFile")
        self.actionNew_File.triggered.connect(self.addImage)
        self.menuNew_File.addAction(self.actionNew_File)

        #Save File
        self.actionSave_File = QAction("SaveFile")
        self.actionSave_File.triggered.connect(self.saveImage)
        self.menuNew_File.addAction(self.actionSave_File)

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

        self.timer=QTimer()
        self.timer.timeout.connect(lambda : self.showFrame(self.image_stack[-1]) ) 
        self.timer.start(1)

        MainWindow.setStatusBar(self.statusbar)

        self.menubar.addAction(self.menuNew_File.menuAction())
        #self.menubar.addAction(self.menuSave.menuAction())

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
Esempio n. 3
0
    def __init__(self, status_link):
        super(ImageToPdfWidget, self).__init__()
        LABEL_WIDTH = 80
        self.last_selected_items = []
        self.options_mode = 0
        self.update_status_combobox = False
        layout = QHBoxLayout()
        self.status_bar = status_link
        self.list_view = QListWidget()
        self.list_view.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.list_view.setAlternatingRowColors(True)
        self.list_view.itemClicked.connect(self.click_item_signal)
        self.list_view.itemEntered.connect(self.click_item_signal)
        self.list_view.itemSelectionChanged.connect(
            self.change_selection_signal)

        controls_layout = QVBoxLayout()
        controls_layout.setAlignment(Qt.AlignTop)

        select_zone = SelectWidget(self.click_move_up, self.click_move_down,
                                   self.click_invert, self.click_delete)

        # options zone -------------------------------------
        options_zone = QGroupBox("Options")
        self.options_zone_layout = QVBoxLayout()

        self.options_mode_combobox = QComboBox()
        self._add_items_to_mode_combobox(self.options_mode_combobox)
        options_mode_label = QLabel("Mode")
        options_mode_label.setMaximumWidth(LABEL_WIDTH)
        options_mode_layout = QHBoxLayout()
        options_mode_layout.addWidget(options_mode_label)
        options_mode_layout.addWidget(self.options_mode_combobox)
        self.options_zone_layout.addLayout(options_mode_layout)
        self.option_source_widget = OptionsFromSourceWidget(
            label_width=LABEL_WIDTH, status_bar=self.status_bar)
        self.options_a_widget = OptionsAWidget(label_width=LABEL_WIDTH,
                                               status_bar=self.status_bar)
        self.options_mode_combobox.currentIndexChanged.connect(
            self.change_options_mode_signal)
        self.change_options_mode_signal(self.options_mode)

        options_zone.setLayout(self.options_zone_layout)

        # Add files button and final structures ---------------------------
        add_file_button = QPushButton("Add Files")
        add_file_button.clicked.connect(self.click_add_files)
        controls_layout.addWidget(select_zone)
        controls_layout.addWidget(options_zone)
        controls_layout.addWidget(add_file_button)

        # image preview ---------------------------------------------------
        image_prev_layout = QVBoxLayout()
        image_prev_layout.setContentsMargins(0, 0, 4, 0)
        self.IMG_PREVIEW_WIDTH = 256
        self.img_label = QLabel()
        self.img_label.setAlignment(Qt.AlignCenter)
        self.select_text = "Click item to preview"
        self.last_created_pix_path = ""
        self.img_label.setText(self.select_text)
        image_prev_layout.addWidget(self.img_label)
        # slider for the preview scale
        self.img_scale_slider = QSlider()
        self.img_scale_slider.setMinimum(6)
        self.img_scale_slider.setMaximum(2048)
        self.img_scale_slider.setValue(self.IMG_PREVIEW_WIDTH)
        self.img_scale_slider.setOrientation(Qt.Horizontal)
        self.img_scale_slider.valueChanged.connect(
            self.change_scale_slider_signal)
        image_prev_layout.addWidget(self.img_scale_slider)
        self._update_preview()

        layout.addLayout(image_prev_layout)
        layout.addWidget(self.list_view)
        layout.addLayout(controls_layout)
        self.setLayout(layout)
        self.update_status_combobox = True
Esempio n. 4
0
    def create_file_list(self,
                         path,
                         selected=None,
                         up=False,
                         update_list=None):
        '''Return a file list with objects populated from files/dirs in given path.

		path -- path of directory to create list elements
		selected -- name of the cwd to select in parent list
		up -- create a link to one level up
		update_list -- (QListWidget) update the given list with new path elements rather than returning a new list
		'''
        if not update_list:
            file_list = QListWidget(self)
        else:
            update_list.clear()
            file_list = update_list

        if not path and not update_list:  # if empty
            return file_list
        elif not path and update_list:
            if len(self.drives) > 0:
                for letter in self.drives:
                    try:
                        icon = QIcon(convert_to_icon(letter))
                    except Exception as e:
                        print(e)
                        traceback.print_tb(e.__traceback__)
                    update_list.addItem(QListWidgetItem(icon, letter))
            else:
                update_list.addItem(QListWidgetItem('((root))'))
            return

        # cache read contents of path to save some time and processing power?
        # TODO: could maybe also save actual QListWIdgetItems? to save on Icon creation time
        # could also copy QIcons to cached_dirs = {... 'dir_icons': [], 'file_icons': []}
        if not any(c['path'] == path for c in self.cached_dirs):
            files, dirs, dirpath = get_files(path)
            cache = {
                'path': dirpath,
                'dirs': dirs.copy(),
                'files': files.copy()
            }
            self.cached_dirs.append(cache)
            # dirs cache limit
            if len(self.cached_dirs) > 15:
                del self.cached_dirs[0]
        else:
            for c in self.cached_dirs:
                if c['path'] == path:
                    files, dirs, dirpath = c['files'].copy(), c['dirs'].copy(
                    ), c['path']

        if up:
            dirs.insert(0, os.path.abspath(os.path.join(path)))

        selected_index = -1
        if len(files) > 0:
            for i in range(len(files)):
                try:
                    icon = QIcon(
                        convert_to_icon(os.path.join(dirpath, files[i])))
                except Exception as e:
                    print(e)
                    traceback.print_tb(e.__traceback__)
                    icon = QIcon()
                files[i] = QListWidgetItem(icon, files[i])
        if len(dirs) > 0:
            for i in range(len(dirs)):
                if dirs[i] == selected:
                    selected_index = i
                try:
                    icon = QIcon(
                        convert_to_icon(
                            os.path.abspath(os.path.join(dirpath, dirs[i]))))
                except Exception as e:
                    print(e)
                    traceback.print_tb(e.__traceback__)
                    icon = QIcon()
                dirs[i] = QListWidgetItem(icon, dirs[i])

        if up:
            dirs[0].setText('..')

        if len(dirs) > 0:
            for d in dirs:
                file_list.addItem(d)
        if len(files) > 0:
            for f in files:
                file_list.addItem(f)

        if len(dirs) == 0 and len(files) == 0:
            file_list.addItem(QListWidgetItem('((empty))'))

        if selected_index >= 0:
            file_list.item(selected_index).setSelected(True)
            file_list.scrollToItem(file_list.item(selected_index))
        else:
            file_list.item(0).setSelected(True)

        if update_list:
            return
        return file_list
Esempio n. 5
0
    def _init_load_options_tab(self, tab):
        if self.is_blob:
            blob_layout = QGridLayout()

            # architecture selection
            arch_caption = QLabel(self)
            arch_caption.setText('Architecture:')
            blob_layout.addWidget(arch_caption, 0, 0)
            arch = QComboBox(self)
            for a in archinfo.all_arches:
                arch.addItem(f'{a.bits}b {a.name} ({a.memory_endness[-2:]})')
            blob_layout.addWidget(arch, 0, 1)
            self.option_widgets['arch'] = arch

            # load address
            base_addr_caption = QLabel(self)
            base_addr_caption.setText('Base Address:')
            blob_layout.addWidget(base_addr_caption, 1, 0)
            base_addr = QLineEdit(self)
            base_addr.setText('0')
            blob_layout.addWidget(base_addr, 1, 1)
            self.option_widgets['base_addr'] = base_addr

            # entry address
            entry_addr_caption = QLabel(self)
            entry_addr_caption.setText('Entry Address:')
            blob_layout.addWidget(entry_addr_caption, 2, 0)
            entry_addr = QLineEdit(self)
            entry_addr.setText('0')
            blob_layout.addWidget(entry_addr, 2, 1)
            self.option_widgets['entry_addr'] = entry_addr

        # load debug symbols
        load_debug_info = QCheckBox()
        load_debug_info.setText("Load debug information if available")
        load_debug_info.setChecked(True)
        self.option_widgets['load_debug_info'] = load_debug_info

        # auto load libs

        auto_load_libs = QCheckBox()
        auto_load_libs.setText(
            "Automatically load all libraries (slow, not recommended)")
        auto_load_libs.setChecked(False)
        self.option_widgets['auto_load_libs'] = auto_load_libs

        # dependencies list

        dep_group = QGroupBox("Dependencies")
        dep_list = QListWidget()
        self.option_widgets['dep_list'] = dep_list

        sublayout = QVBoxLayout()
        sublayout.addWidget(dep_list)
        dep_group.setLayout(sublayout)

        layout = QVBoxLayout()
        if self.is_blob:
            layout.addLayout(blob_layout)
        layout.addWidget(load_debug_info)
        layout.addWidget(auto_load_libs)
        layout.addWidget(dep_group)
        layout.addStretch(0)

        frame = QFrame(self)
        frame.setLayout(layout)
        tab.addTab(frame, "Loading Options")
Esempio n. 6
0
    def __init__(self, parent):
        super(LevelSelector, self).__init__(parent)

        self.setWindowTitle("Level Selector")
        self.setModal(True)

        self.selected_world = 1
        self.selected_level = 1
        self.object_set = 0
        self.object_data_offset = 0x0
        self.enemy_data_offset = 0x0

        self.world_label = QLabel(parent=self, text="World")
        self.world_list = QListWidget(parent=self)
        self.world_list.addItems(WORLD_ITEMS)

        self.world_list.itemDoubleClicked.connect(self.on_ok)
        self.world_list.itemSelectionChanged.connect(self.on_world_click)

        self.level_label = QLabel(parent=self, text="Level")
        self.level_list = QListWidget(parent=self)

        self.level_list.itemDoubleClicked.connect(self.on_ok)
        self.level_list.itemSelectionChanged.connect(self.on_level_click)

        self.enemy_data_label = QLabel(parent=self, text="Enemy Data")
        self.enemy_data_spinner = Spinner(parent=self)

        self.object_data_label = QLabel(parent=self, text="Object Data")
        self.object_data_spinner = Spinner(self)

        self.object_set_label = QLabel(parent=self, text="Object Set")
        self.object_set_dropdown = QComboBox(self)
        self.object_set_dropdown.addItems(OBJECT_SET_ITEMS)

        self.button_ok = QPushButton("Ok", self)
        self.button_ok.clicked.connect(self.on_ok)
        self.button_cancel = QPushButton("Cancel", self)
        self.button_cancel.clicked.connect(self.close)

        self.window_layout = QGridLayout(self)

        self.window_layout.addWidget(self.world_label, 0, 0)
        self.window_layout.addWidget(self.level_label, 0, 1)

        self.window_layout.addWidget(self.world_list, 1, 0)
        self.window_layout.addWidget(self.level_list, 1, 1)

        self.window_layout.addWidget(self.enemy_data_label, 2, 0)
        self.window_layout.addWidget(self.object_data_label, 2, 1)
        self.window_layout.addWidget(self.enemy_data_spinner, 3, 0)
        self.window_layout.addWidget(self.object_data_spinner, 3, 1)

        self.window_layout.addWidget(self.object_set_label, 4, 0)
        self.window_layout.addWidget(self.object_set_dropdown, 4, 1)

        self.window_layout.addWidget(self.button_ok, 5, 0)
        self.window_layout.addWidget(self.button_cancel, 5, 1)

        self.setLayout(self.window_layout)

        self.world_list.setCurrentRow(1)  # select Level 1-1
        self.on_world_click()
Esempio n. 7
0
    def __init__(self, owner):
        super(self.__class__, self).__init__()
        Ui_BookInfo.__init__(self)
        self.setupUi(self)
        self.owner = weakref.ref(owner)
        self.loadingForm = QtLoading(self)
        self.bookId = ""
        self.url = ""
        self.path = ""
        self.bookName = ""
        self.lastEpsId = -1
        self.pictureData = None

        self.msgForm = QtBubbleLabel(self)
        self.picture.installEventFilter(self)
        # self.title.setGeometry(QRect(328, 240, 329, 27 * 4))
        self.title.setWordWrap(True)
        # self.title.setAlignment(Qt.AlignLeft)
        self.title.setContextMenuPolicy(Qt.CustomContextMenu)
        self.title.customContextMenuRequested.connect(self.CopyTitle)

        # self.autor.setContextMenuPolicy(Qt.CustomContextMenu)
        # self.autor.customContextMenuRequested.connect(self.OpenAutor)

        layouy = self.horizontalLayout_4
        self.autorList = QtCategoryList(self)
        layouy.addWidget(QLabel("作者:"))
        layouy.addWidget(self.autorList)
        self.autorList.itemClicked.connect(self.ClickTagsItem)

        self.description.setContextMenuPolicy(Qt.CustomContextMenu)
        self.description.customContextMenuRequested.connect(self.CopyDescription)

        self.description.setGeometry(QRect(328, 240, 329, 27 * 4))
        self.description.setWordWrap(True)
        self.description.setAlignment(Qt.AlignTop)

        # self.categories.setGeometry(QRect(328, 240, 329, 27 * 4))
        # self.categories.setWordWrap(True)
        # self.categories.setAlignment(Qt.AlignTop)

        layouy = self.horizontalLayout_6
        self.categoriesList = QtCategoryList(self)
        layouy.addWidget(QLabel("分类:"))
        layouy.addWidget(self.categoriesList)
        self.categoriesList.itemClicked.connect(self.ClickCategoriesItem)

        # self.tags.setGeometry(QRect(328, 240, 329, 27 * 4))
        # self.tags.setWordWrap(True)
        # self.tags.setAlignment(Qt.AlignTop)

        layouy = self.horizontalLayout_7
        self.tagsList = QtCategoryList(self)
        layouy.addWidget(QLabel("Tags:"))
        layouy.addWidget(self.tagsList)
        self.tagsList.itemClicked.connect(self.ClickTagsItem)

        self.epsListWidget = QListWidget(self)
        self.epsListWidget.setFlow(self.epsListWidget.LeftToRight)
        self.epsListWidget.setWrapping(True)
        self.epsListWidget.setFrameShape(self.epsListWidget.NoFrame)
        self.epsListWidget.setResizeMode(self.epsListWidget.Adjust)

        self.epsLayout.addWidget(self.epsListWidget)

        self.listWidget = QtBookList(self, self.__class__.__name__, owner)
        self.listWidget.InitUser(self.LoadNextPage)
        self.listWidget.doubleClicked.connect(self.OpenCommentInfo)

        self.childrenListWidget = QtBookList(None, self.__class__.__name__, owner)
        self.childrenListWidget.InitUser(self.LoadChildrenNextPage)

        self.childrenWidget = QtWidgets.QWidget()
        layout = QHBoxLayout(self.childrenWidget)

        label = QLabel()
        label.setMinimumWidth(100)
        layout.addWidget(label)
        layout3 = QVBoxLayout()

        layout2 = QHBoxLayout()
        self.commentLine2 = QLineEdit()
        self.commentButton2 = QPushButton("回复")
        self.commentButton2.clicked.connect(self.SendCommentChildren)
        layout2.addWidget(self.commentLine2)
        layout2.addWidget(self.commentButton2)
        layout3.addLayout(layout2)
        layout3.addWidget(self.childrenListWidget)
        layout.addLayout(layout3)

        self.commentLayout.addWidget(self.listWidget)
        layout = QHBoxLayout()
        self.commentLine = QLineEdit()
        layout.addWidget(self.commentLine)
        self.commentButton = QPushButton("发送评论")
        layout.addWidget(self.commentButton)
        self.commentLayout.addLayout(layout, 1, 0)
        self.commentButton.clicked.connect(self.SendComment)

        # self.stackedWidget.addWidget(self.qtReadImg)
        self.epsListWidget.clicked.connect(self.OpenReadImg)

        self.closeFlag = self.__class__.__name__ + "-close"         # 切换book时,取消加载
Esempio n. 8
0
    def __init__(self, parent):
        super(LevelSelector, self).__init__(parent)

        self.setWindowTitle("Level Selector")
        self.setModal(True)

        self.level_name = ""

        self.object_set = 0
        self.object_data_offset = 0x0
        self.enemy_data_offset = 0x0

        self.world_label = QLabel(parent=self, text="World")
        self.world_list = QListWidget(parent=self)
        self.world_list.addItems(WORLD_ITEMS)

        self.world_list.itemDoubleClicked.connect(self.on_ok)
        self.world_list.itemSelectionChanged.connect(self.on_world_click)

        self.level_label = QLabel(parent=self, text="Level")
        self.level_list = QListWidget(parent=self)

        self.level_list.itemDoubleClicked.connect(self.on_ok)
        self.level_list.itemSelectionChanged.connect(self.on_level_click)

        self.enemy_data_label = QLabel(parent=self, text="Enemy Data")
        self.enemy_data_spinner = Spinner(parent=self)

        self.object_data_label = QLabel(parent=self, text="Object Data")
        self.object_data_spinner = Spinner(self)

        self.object_set_label = QLabel(parent=self, text="Object Set")
        self.object_set_dropdown = QComboBox(self)
        self.object_set_dropdown.addItems(OBJECT_SET_ITEMS)

        self.button_ok = QPushButton("Ok", self)
        self.button_ok.clicked.connect(self.on_ok)
        self.button_cancel = QPushButton("Cancel", self)
        self.button_cancel.clicked.connect(self.close)

        stock_level_widget = QWidget()
        stock_level_layout = QGridLayout(stock_level_widget)

        stock_level_layout.addWidget(self.world_label, 0, 0)
        stock_level_layout.addWidget(self.level_label, 0, 1)

        stock_level_layout.addWidget(self.world_list, 1, 0)
        stock_level_layout.addWidget(self.level_list, 1, 1)

        self.source_selector = QTabWidget()
        self.source_selector.addTab(stock_level_widget, "Stock Levels")

        for world_number in range(WORLD_COUNT):
            world_number += 1

            world_map_select = WorldMapLevelSelect(world_number)
            world_map_select.level_selected.connect(
                self._on_level_selected_via_world_map)

            self.source_selector.addTab(world_map_select,
                                        f"World {world_number}")

        data_layout = QGridLayout()

        data_layout.addWidget(self.enemy_data_label, 0, 0)
        data_layout.addWidget(self.object_data_label, 0, 1)
        data_layout.addWidget(self.enemy_data_spinner, 1, 0)
        data_layout.addWidget(self.object_data_spinner, 1, 1)

        data_layout.addWidget(self.object_set_label, 2, 0)
        data_layout.addWidget(self.object_set_dropdown, 2, 1)

        data_layout.addWidget(self.button_ok, 3, 0)
        data_layout.addWidget(self.button_cancel, 3, 1)

        main_layout = QVBoxLayout()
        main_layout.addWidget(self.source_selector)
        main_layout.addLayout(data_layout)

        self.setLayout(main_layout)

        self.world_list.setCurrentRow(1)  # select Level 1-1
        self.on_world_click()
    def _init_widgets(self):
        main = QMainWindow()
        main.setWindowFlags(Qt.Widget)

        carttree = QProgramTree(self.workspace)
        self._carttree = carttree
        carttree_dock = QDockWidget("Cartprograph Tree", carttree)
        main.setCentralWidget(carttree_dock)
        carttree_dock.setWidget(carttree)

        # TODO: THIS NEEDS A REFACTOR.. BAD
        # BEGIN CONSOLE VIEW ASSEMBLY
        console_view = self.workspace.view_manager.first_view_in_category(
            "console")
        self.console_tabs = console_view.tab_widget = QTabWidget()
        console_view.tab_widget.setTabPosition(QTabWidget.South)
        console_view.ipython_tab = QWidget()
        console_view.ipython_tab.setLayout(
            QHBoxLayout(console_view.ipython_tab))
        console_view.tab_layout = QHBoxLayout()
        console_view.ipython_tab.layout().addWidget(
            console_view._ipython_widget)
        console_view.tab_widget.addTab(console_view.ipython_tab, "Console")
        console_view.tab_layout.addWidget(console_view.tab_widget)
        console_view.layout().setContentsMargins(0, 0, 0, 0)
        console_view.layout().addLayout(console_view.tab_layout)
        console_view.min_size = QSize(0, 125)
        console_view._ipython_widget.push_namespace(
            {"cartprograph": self.workspace.cartprograph})
        console_group = QtWidgets.QGroupBox()
        console_group.setLayout(QtWidgets.QVBoxLayout(console_group))

        self.console_output = QPlainTextEdit()
        self.console_output.setReadOnly(True)
        console_group.layout().addWidget(self.console_output)

        self.console_input = QLineEdit()
        console_group.layout().addWidget(self.console_input)
        self.console_input.returnPressed.connect(
            lambda: self.workspace.cartprograph.client.send_input(
                self.selected_item_id,
                self.console_input.text() + "\n"))
        self.workspace.view_manager.first_view_in_category(
            "console").tab_widget.addTab(console_group, "Cartprograph Console")
        # END CONSOLE VIEW ASSEMBLY

        # BEGIN TAB VIEW ASSEMBLY
        func_view = self.workspace.view_manager.first_view_in_category(
            "functions")
        self.func_tabs = func_view.tab_widget = QTabWidget()
        funcview_container = QWidget()
        funcview_container.setLayout(QVBoxLayout(funcview_container))
        func_tabs_layout = QHBoxLayout()
        funcview_container.layout().addWidget(func_view._function_table)
        funcview_container.layout().addWidget(func_view._status_label)
        func_view.tab_widget.addTab(funcview_container, "Functions")
        func_tabs_layout.addWidget(func_view.tab_widget)
        func_view.layout().setContentsMargins(0, 0, 0, 0)
        func_view.layout().addLayout(func_tabs_layout)

        table_tabs = QTabWidget()
        table_functab = QWidget()
        table_functab.setLayout(QVBoxLayout(table_functab))
        table_blocktab = QWidget()
        table_blocktab.setLayout(QVBoxLayout(table_blocktab))
        table_datapoint_tab = QWidget()
        table_datapoint_tab.setLayout(QVBoxLayout(table_datapoint_tab))
        table_watchertab = QWidget()
        table_watchertab.setLayout(QVBoxLayout(table_watchertab))

        self.functable = QTableWidget()
        self.functable.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.functable.setSizeAdjustPolicy(
            QtWidgets.QAbstractScrollArea.AdjustToContents)
        table_tabs.addTab(table_functab, "Syscalls")
        table_functab.layout().addWidget(self.functable)

        self.blocktable = QTableWidget()
        self.blocktable.setEditTriggers(QAbstractItemView.NoEditTriggers)
        table_tabs.addTab(table_blocktab, "Basic Blocks")
        table_blocktab.layout().addWidget(self.blocktable)
        self.blocktable.cellDoubleClicked.connect(self._handle_table_click)

        self.datapoint_table = QTableWidget()
        self.datapoint_table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        table_tabs.addTab(table_datapoint_tab, "Datapoints")
        table_datapoint_tab.layout().addWidget(self.datapoint_table)

        self.watcherlist = QListWidget()

        table_tabs.addTab(table_watchertab, "Watchers")
        table_watchertab.layout().addWidget(self.watcherlist)
        self.watcherRefreshButton = QPushButton("Refresh")
        table_watchertab.layout().addWidget(self.watcherRefreshButton)

        self.watcherlist.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.watcherlist.customContextMenuRequested.connect(
            self._watcher_context_menu)
        self.watcherlist.itemDoubleClicked.connect(self._handle_watcher_click)
        self.watcherlist.itemChanged.connect(self._handle_watcher_change)

        self.watcherRefreshButton.clicked.connect(self._fire_watcher_update)

        func_view.tab_widget.addTab(table_tabs, "Cartprograph")

        # END TAB VIEW ASSEMBLY

        main_layout = QVBoxLayout()

        main_layout.addWidget(main)
        self.setLayout(main_layout)
Esempio n. 10
0
    def __init__(self, pid=0, db=0, mode=0):
        super().__init__()
        self.font = mainfont
        self.resize(500, self.height())
        layout = QGridLayout()
        self.layout = layout
        self.buttext = []
        self.last_alid = 0

        self.listWidget = QListWidget()
        self.listWidget.itemDoubleClicked.connect(self.doubleClick)
        self.listWidget.itemSelectionChanged.connect(self.itemChanged)

        self.dictAlbum = QWidget()
        self.DICTVIEWERTYPE = type(DictViewer())
        self.setFont(mainfont)
        self.db = db
        self.pid = pid
        self.album_ids = db.get_all_albums_ids()
        print(self.album_ids)
        if self.album_ids:
            for alid in self.album_ids:
                album = db.get_album_data(alid)
                print(album)
                self.dictAlbum = DictViewer(album, 1,
                                            self.db.albums.invizible_fields,
                                            self.db.albums.editable_fields)

                if album:
                    text = ''
                    text = album['title'] if type(album) == type(
                        {}) and 'title' in album.keys(
                        ) and album['title'] != '' else text
                    item = QListWidgetItem(text)
                    if type(album) == type({}) and 'alid' in album.keys():
                        item.setWhatsThis(str(album['alid']))
                    self.listWidget.addItem(item)
            self.listWidget.setCurrentRow(0)
        self.mode = mode

        def openMenu(position):
            # Создание PopupMenu
            menu = QMenu()
            openAction = menu.addAction('Открыть альбом')
            openEAction = menu.addAction('Открыть события')
            menu.addSeparator()
            if mode > 0:
                #importAction = menu.addAction('Выгрузить альбом')
                exportAction = menu.addAction('Добавить альбом')
                renameAction = menu.addAction('Переименовать альбом')
                #menu.addSeparator()
                #editAction = menu.addAction('Заменить')
                menu.addSeparator()
                delAction = menu.addAction('Удалить альбом')
                delAllAction = menu.addAction('Удалить все альбомы')
                menu.addSeparator()
            else:
                exportAction, delAction, delAllAction = QAction(), QAction(
                ), QAction()
            quitAction = menu.addAction('Выход')
            action = menu.exec_(self.mapToGlobal(position))

            # Привязка событий к Actions
            if action == openAction:
                self.doubleClick(self.listWidget.currentItem())

            if action == openEAction:
                item = self.listWidget.currentItem()
                if item is not None:
                    alid = item.whatsThis()
                    self.events = EventViewer(int(alid), db, 1)
                    self.events.show()

            if action == exportAction:
                text, ok = QInputDialog().getText(self, "Название альбома",
                                                  "Ввкдите название альбома:",
                                                  QLineEdit.Normal, 'Альбом')
                if ok:
                    res = self.db.add_album({'imid': -1, 'title': text})
                    if len(res) == 1:
                        album = res[0]
                        item = QListWidgetItem(text)
                        item.setWhatsThis(str(album['alid']))
                        self.listWidget.addItem(item)
                self.album_ids = db.get_all_albums_ids()

            if action == renameAction:
                item = self.listWidget.currentItem()
                if item is not None:
                    alid = item.whatsThis()
                    album = db.get_album_data(alid)
                    text, ok = QInputDialog().getText(
                        self, "Название альбома", "Ввкдите название альбома:",
                        QLineEdit.Normal, album['title'])
                    if ok:
                        album = db.edit_album({
                            'alid': int(alid),
                            'imid': -1,
                            'title': text
                        })
                        item.setText(text)
                        if album:
                            album = self.db.get_album_data(alid)
                            # b = layout.takeAt(1)
                            # self.dictAlbum.close()
                            # b.widget().deleteLater()
                            self.dictAlbum = DictViewer(
                                album, 1, self.db.albums.invizible_fields,
                                self.db.albums.editable_fields)
                            self.layout.addWidget(self.dictAlbum, 0, 1)
                        self.album_ids = db.get_all_albums_ids()

            if action == delAction:
                res = QMessageBox.question(
                    self, 'ВНИМАНИЕ!!!',
                    "Вы действительно хотите удалить альбом?",
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                if res == QMessageBox.Yes:
                    self.delete_item()

            if action == delAllAction:
                res = QMessageBox.question(
                    self, 'ВНИМАНИЕ!!!',
                    "Вы действительно хотите удалить все альбомы?",
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                if res == QMessageBox.Yes:
                    item = self.listWidget.currentItem()
                    while item is not None:
                        self.delete_item()
                        item = self.listWidget.currentItem()

                    self.album_ids = db.get_all_albums_ids()

            if action == quitAction:
                self.accept()

        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(openMenu)

        layout.addWidget(self.listWidget, 0, 0)
        layout.addWidget(self.dictAlbum, 0, 1)

        self.setLayout(layout)
Esempio n. 11
0
    def _initUI(self):
        # Create widgets
        self.objects = PropobjList()
        self.properties = PropobjList()

        self.goal = Goal("TODO")

        self.edit = QPlainTextEdit()
        self.send = QPushButton("Send to lean")
        self.undo = QPushButton("Undo")

        self.deflist = QListWidget()

        # --> Build deflist
        for st in self.statements:
            self.deflist.addItem(st.pretty_name)

        # --> Link signal
        self.deflist.itemClicked.connect(self.add_statement_name)

        # Create layouts
        goal_layout = QHBoxLayout()
        main_layout = QVBoxLayout()
        workspace_layout = QHBoxLayout()
        propobj_layout = QVBoxLayout()
        tools_layout = QVBoxLayout()
        btns_layout = QHBoxLayout()

        # Create QGroupBox to have titles
        propobj_gb = QGroupBox('Properties and objects')
        self.tools_gb = QGroupBox('Lean code')

        # Put widgets in layouts and group boxes
        goal_layout.addStretch()
        goal_layout.addWidget(self.goal)
        goal_layout.addStretch()

        # Add space below goal
        goal_layout.setContentsMargins(0, 10, 0, 30)  #LTRB

        # Build propobj layout
        propobj_layout.addWidget(self.objects)
        propobj_layout.addWidget(self.properties)
        propobj_gb.setLayout(propobj_layout)

        # Build tools layout
        btns_layout.addWidget(self.send)
        btns_layout.addWidget(self.undo)

        tools_layout.addWidget(self.deflist)
        tools_layout.addWidget(self.edit)
        tools_layout.addLayout(btns_layout)

        self.tools_gb.setLayout(tools_layout)

        # Build workspace layout
        workspace_layout.addWidget(propobj_gb)
        workspace_layout.addWidget(self.tools_gb)

        # Don't forget me
        main_layout.addLayout(goal_layout)
        main_layout.addLayout(workspace_layout)
        self.setWindowTitle("d∃∀duction")
        self.setLayout(main_layout)
        self.show()
Esempio n. 12
0
    def executeProject(self, mainWindow, project_name):
        if project_name == "SmartGroceries":
            self.referenceItemsLabels = {}
            self.itemInHand = None
            self.itemsInCart = list()
            self.currentOrderReferenceItems = list()
            self.currentOrderUserId = 0
            self.recommendedItemsButtons = list()
            self.previousRecommendations = list()
            self.numberOfGoodRecommendations = 0
            self.supportedUsers = range(1, 1001)

            products = pd.read_csv(
                os.path.join(
                    os.path.dirname(os.path.dirname(
                        os.path.abspath(__file__))), "projects",
                    "SmartGroceries", "data", "products.csv"))
            aisles = pd.read_csv(
                os.path.join(
                    os.path.dirname(os.path.dirname(
                        os.path.abspath(__file__))), "projects",
                    "SmartGroceries", "data", "aisles.csv"))
            test_data = pd.read_csv(
                os.path.join(
                    os.path.dirname(os.path.dirname(
                        os.path.abspath(__file__))), "projects",
                    "SmartGroceries", "data", "test_set.csv"))
            # print(products)
            # print(aisles)
            # print(test_data)
            aisle_name_to_id = {
                k: v
                for k, v in zip(aisles.aisle, aisles.aisle_id)
            }
            product_name_to_id = {
                k: v
                for k, v in zip(products.product_name, products.product_id)
            }
            product_id_to_name = {
                k: v
                for k, v in zip(products.product_id, products.product_name)
            }

            def changeCurrentitem(itemName):
                if itemName == "":
                    self.itemInHand = None
                    currentItemLabel.setText(
                        f"<b>Select an item from the list or from the recommendations</b>s"
                    )
                    addToCartButton.setEnabled(False)
                else:
                    self.itemInHand = product_name_to_id[itemName]
                    currentItemLabel.setText(f"Add <b>{itemName}</b> to Cart")
                    addToCartButton.setEnabled(True)
                    addToCartButton.setFocus()

            def handleNewOrderButtonClicked():
                grouped = test_data.groupby('order_id')
                while True:
                    order_number = random.sample(grouped.indices.keys(), 1)[0]
                    currentOrder = grouped.get_group(order_number)
                    self.currentOrderReferenceItems = currentOrder.product_id.tolist(
                    )
                    self.currentOrderUserId = currentOrder.user_id.iloc[0]
                    if len(
                            self.currentOrderReferenceItems
                    ) > 1 and self.currentOrderUserId in self.supportedUsers:
                        break
                print(self.currentOrderReferenceItems)
                orderInfo = f"<b>Order ID: </b>{currentOrder.order_id.iloc[0]}<br>"
                orderInfo += f"<b>User ID: </b>{self.currentOrderUserId} | <b>DOW: </b>{calendar.day_name[currentOrder.order_dow.iloc[0]]} | <b>Hour of Day: </b>{currentOrder.order_hour_of_day.iloc[0]}  | <b>Number of Items: </b>{len(self.currentOrderReferenceItems)}"
                orderInfo += "<br><b>Items in the Reference Order:</b>"

                for widget in self.referenceItemsLabels.values():
                    item = referenceItemsLayout.itemAt(0)
                    widget.setVisible(False)
                    referenceItemsLayout.removeItem(item)
                    del item
                self.referenceItemsLabels.clear()
                currentCartItems.clear()
                self.itemsInCart.clear()
                self.previousRecommendations.clear()
                self.numberOfGoodRecommendations = 0

                updateCurrentRecommendations(list())
                for product in self.currentOrderReferenceItems:
                    refItemName = product_id_to_name[product]
                    refItemLabel = QPushButton(refItemName)
                    refItemLabel.setContentsMargins(QMargins(0, 0, 0, 0))
                    refItemLabel.setStyleSheet("Text-align:left")
                    refItemLabel.setFlat(False)
                    refItemLabel.clicked.connect(
                        partial(changeCurrentitem, refItemName))
                    self.referenceItemsLabels[product] = refItemLabel
                    orderInfoLabel.setText(
                        f"<b>Order Information</b><br>{orderInfo}")

                for referenceItemLabel in self.referenceItemsLabels.values():
                    referenceItemsLayout.addWidget(referenceItemLabel)

                runAutoButton.setFocus()

            def handleRunAutomatically():
                for referenceItemLabel in self.referenceItemsLabels.values():
                    referenceItemLabel.click()
                    addToCartButton.click()

            def updateCurrentRecommendations(recommendations):
                for widget in self.recommendedItemsButtons:
                    item = recommendationsLayout.itemAt(0)
                    widget.setVisible(False)
                    recommendationsLayout.removeItem(item)
                    del item
                self.recommendedItemsButtons.clear()
                for product in recommendations:
                    recItemName = product_id_to_name[product]
                    recItemButton = QPushButton(recItemName)
                    recItemButton.setContentsMargins(QMargins(0, 0, 0, 0))
                    recItemButton.setStyleSheet("Text-align:left;")
                    if product not in self.currentOrderReferenceItems:
                        recItemButton.setFlat(True)
                    recItemButton.clicked.connect(
                        partial(changeCurrentitem, recItemName))
                    self.recommendedItemsButtons.append(recItemButton)
                for recItemButton in self.recommendedItemsButtons:
                    recommendationsLayout.addWidget(recItemButton)
                if len(recommendations) > 0:
                    currentRecommendationsLabel.setVisible(True)
                else:
                    currentRecommendationsLabel.setVisible(False)
                self.previousRecommendations += recommendations

            def handleAddToCartButtonClicked():
                print(self.currentOrderReferenceItems)
                print(self.itemInHand)
                if self.itemInHand not in self.currentOrderReferenceItems:
                    QMessageBox(
                        QMessageBox.Critical, "Error adding item to cart",
                        "You can only add items that exists in the reference order"
                    ).exec_()
                    return
                elif self.itemInHand in self.itemsInCart:
                    QMessageBox(QMessageBox.Critical,
                                "Error adding item to cart",
                                "This item is already in the cart").exec_()
                    return
                self.referenceItemsLabels[self.itemInHand].setFlat(True)
                self.itemsInCart.append(self.itemInHand)
                currentCartItems.addItem(product_id_to_name[self.itemInHand])
                if self.itemInHand in self.previousRecommendations:
                    self.numberOfGoodRecommendations += 1
                    self.referenceItemsLabels[self.itemInHand].setStyleSheet(
                        "Text-align:left; background-color:green;")
                    self.referenceItemsLabels[self.itemInHand].setFlat(False)

                #update recommendations
                result = self._sendCommand(
                    "PROCESS_PROJECT_GROUP_2", ";".join([
                        str(self.currentOrderUserId),
                        ",".join([str(x) for x in self.itemsInCart]),
                        ",".join([
                            str(x) for x in set(self.previousRecommendations)
                        ])
                    ]))
                if result == FAILURE_CODE:
                    self.log(
                        "Processing Failed, error getting recommendations from the RPi"
                    )
                    return
                else:
                    try:
                        recommendations = [int(id) for id in result.split(',')]
                    except:
                        recommendations = []

                updateCurrentRecommendations(recommendations)
                if len(self.itemsInCart) == len(
                        self.currentOrderReferenceItems):
                    completionMessage = QMessageBox(
                        QMessageBox.Information, "Order Completed",
                        f"Order Completed with {self.numberOfGoodRecommendations} Good Recommendation(s)\nPress New Order to start a new order"
                    )
                    if self.numberOfGoodRecommendations == 0:
                        completionMessage.setIconPixmap(
                            QPixmap('images/this_is_fine.jpg'))
                    completionMessage.setWindowIcon(appIcon)
                    completionMessage.exec_()
                    newOrderButton.setFocus()

            def aisleChanged():
                aisle_number = aisle_name_to_id[
                    selectAisleCombobox.currentText()]
                products_in_aisle = products[
                    products.aisle_id == aisle_number].product_name.tolist()
                selectproductCombobox.clear()
                selectproductCombobox.addItem("")
                selectproductCombobox.addItems(products_in_aisle)

            def itemChanged():
                current_item = selectproductCombobox.currentText()
                changeCurrentitem(current_item)

            dialog = QDialog(mainWindow)
            appIcon = QIcon("images/this_is_fine.jpg")
            dialog.setWindowIcon(appIcon)
            dialog.setMinimumWidth(600)
            dialog.setWindowTitle("Smart Groceries Demo")
            layout = QVBoxLayout()
            newOrderButton = QPushButton("New Order")
            orderInfoLabel = QLabel()
            orderInfoLabel.setTextFormat(Qt.RichText)
            chooseItemLayout = QHBoxLayout()
            verticalSpacer = QSpacerItem(20, 20)
            currentCartItems = QListWidget()

            layoutWidget = QWidget()
            referenceItemsLayout = QVBoxLayout(layoutWidget)
            referenceItemsLayout.setSpacing(0)
            referenceItemsLayout.setMargin(0)
            scroll = QScrollArea(dialog)
            scroll.setWidgetResizable(True)
            scroll.setMinimumHeight(150)
            scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
            scroll.setWidget(layoutWidget)

            selectAisleLabel = QLabel("Aisle: ")
            selectProductLabel = QLabel("Product: ")
            selectAisleCombobox = QComboBox()
            selectproductCombobox = QComboBox()
            chooseItemLayout.addWidget(selectAisleLabel, 0, Qt.AlignLeft)
            chooseItemLayout.addWidget(selectAisleCombobox, 0, Qt.AlignLeft)
            chooseItemLayout.addWidget(selectProductLabel, 0, Qt.AlignLeft)
            chooseItemLayout.addWidget(selectproductCombobox, 0, Qt.AlignLeft)

            addToCartButton = QPushButton("Add to Cart")
            currentItemLabel = QLabel()
            currentItemLabel.setTextFormat(Qt.RichText)
            if self.itemInHand is None:
                currentItemLabel.setText(
                    f"<b>Select an item from the list or from the recommendations</b>"
                )
            addToCartButton.setDisabled(True)
            currentItemLayout = QHBoxLayout()
            currentItemLayout.addWidget(currentItemLabel)
            currentItemLayout.addWidget(addToCartButton)
            recommendationsLayout = QVBoxLayout()
            recommendationsLayout.setSpacing(0)
            recommendationsLayout.setMargin(0)

            newOrderButton.clicked.connect(handleNewOrderButtonClicked)
            addToCartButton.clicked.connect(handleAddToCartButtonClicked)
            selectproductCombobox.currentIndexChanged.connect(itemChanged)
            selectAisleCombobox.currentIndexChanged.connect(aisleChanged)
            selectAisleCombobox.addItems(aisles.aisle.tolist())

            layout.addWidget(newOrderButton)
            layout.addSpacerItem(verticalSpacer)
            layout.addWidget(orderInfoLabel)
            layout.addWidget(scroll)
            layout.addSpacerItem(verticalSpacer)
            layout.addLayout(chooseItemLayout)
            layout.addSpacerItem(verticalSpacer)
            itemsInTheCartLabel = QLabel("<b>Items in the Cart<b>")
            layout.addWidget(itemsInTheCartLabel)
            itemsInTheCartLabel.setTextFormat(Qt.RichText)
            layout.addWidget(currentCartItems)
            layout.addSpacerItem(verticalSpacer)
            currentRecommendationsLabel = QLabel(
                "<b>Current Recommendations<b>")
            layout.addWidget(currentRecommendationsLabel)
            currentRecommendationsLabel.setTextFormat(Qt.RichText)
            currentRecommendationsLabel.setVisible(False)
            layout.addLayout(recommendationsLayout)
            layout.addSpacerItem(verticalSpacer)
            layout.addLayout(currentItemLayout)
            runAutoButton = QPushButton("Run and Watch. TRUST ME, IT IS FUN!")
            layout.addWidget(runAutoButton)
            runAutoButton.clicked.connect(handleRunAutomatically)
            dialog.setLayout(layout)
            handleNewOrderButtonClicked()
            dialog.exec_()
            return
Esempio n. 13
0
    def create_table(self):
        try:
            data = json.loads(get_domain_data(self.domain_input_field.text()))
            grid = QGridLayout()
            #title_label = QLabel()
            # title_label.repaint()
            # title_label.setText(f'Showing results for {data["domain"]}')
            # title_label.setFont(QFont("Times New Roman", 15))
            self.title_label2.repaint()
            self.title_label2.setText(f'Showing results for {data["domain"]}')
            self.title_label2.setFont(QFont("Times New Roman", 15))

            #language_label = QLabel()
            #language_label.setText(f'Language: {data["language"]}')
            self.language_label.repaint()
            self.language_label.setText(f'Language: {data["language"]}')
            email_label = QLabel()
            self.email_label.repaint()
            self.email_label.setText("Emails:")
            phone_label = QLabel()
            self.email_label.repaint()
            self.phone_label.setText("Phone numbers:")
            country_label = QLabel()
            self.country_label.repaint()
            self.country_label.setText(f'Country: {data["country"]}')
            phone_numbers = QListWidget()
            emails = QListWidget()
            self.phone_numbers.clear()
            self.emails.clear()
            self.phone_numbers.repaint()
            self.emails.repaint()
            if data["phone_numbers"]:
                self.phone_numbers.addItems(data["phone_numbers"])
            else:
                self.phone_numbers.addItems(["No phone numbers found"])
            if data["emails"]:
                self.emails.addItems(data["emails"])
            else:
                self.emails.addItems(["No emails found"])
            last_updated_label = QLabel()
            self.last_updated_label.repaint()
            self.last_updated_label.setText(
                f'Last updated at: {data["updated_at"]}')
            grid.addWidget(self.title_label2,
                           0,
                           0,
                           1,
                           2,
                           alignment=Qt.AlignCenter)
            grid.addWidget(self.language_label, 1, 0)
            grid.addWidget(self.country_label, 2, 0)
            grid.addWidget(self.email_label, 3, 0)
            grid.addWidget(self.phone_label, 3, 1)
            grid.addWidget(self.emails, 4, 0)
            grid.addWidget(self.phone_numbers, 4, 1)
            grid.addWidget(self.last_updated_label,
                           5,
                           0,
                           1,
                           2,
                           alignment=Qt.AlignRight)
            self.response_window.setLayout(grid)
            self.response_window.show()
            return
        except json.decoder.JSONDecodeError:
            data = get_domain_data(self.domain_input_field.text())
            message_box = QMessageBox()
            message_box.setText(data)
            message_box.setIcon(QMessageBox.Icon.Question)
            message_box.exec_()
Esempio n. 14
0
    def __init__(self, subject_name):
        QMainWindow.__init__(self)
        self.setWindowTitle("Edit Reports: {} - {} {}".format(
            subject_name, config.APP_NAME, config.APP_VERSION))
        self.setMinimumWidth(1200)
        self.setStyleSheet(config.STYLESHEET)

        self.subject = could_try_harder.load(subject_name)
        self.student = {}

        # Used to keep track of current student
        self.s_index = 0
        self.load_student()

        # Widgets
        self.previous_student_button = QPushButton("Previous Student")
        self.student_name_label = QLabel()
        self.student_name_label.setProperty("styleClass", "title")
        self.next_student_button = QPushButton("Next Student")
        self.intro_comment_label = QLabel("Introductory Comment")
        self.intro_comment_label.setProperty("styleClass", "heading")
        self.intro_comment = QLabel()
        self.comment_bank_label = QLabel("Comment Bank")
        self.comment_bank_label.setProperty("styleClass", "heading")
        self.comment_bank_listwidget = QListWidget()
        self.add_comment_button = QPushButton("Add Selected Comment")
        self.comment_label = QLabel("Student Comment")
        self.comment_label.setProperty("styleClass", "heading")
        self.comment_textedit = QTextEdit()
        self.cancel_button = QPushButton("Cancel")
        self.save_button = QPushButton("Save")

        # Layout
        self.layout = QVBoxLayout()
        self.top_layout = QHBoxLayout()
        self.top_layout.addWidget(self.previous_student_button, 0,
                                  Qt.AlignLeft)
        self.top_layout.addWidget(self.student_name_label, 1, Qt.AlignCenter)
        self.top_layout.addWidget(self.next_student_button, 0, Qt.AlignRight)
        self.layout.addLayout(self.top_layout)
        self.middle_layout = QVBoxLayout()
        self.middle_layout.addWidget(self.intro_comment_label)
        self.middle_layout.addWidget(self.intro_comment)
        self.middle_layout.addWidget(self.comment_bank_label)
        self.middle_layout.addWidget(self.comment_bank_listwidget)
        self.middle_layout.addWidget(self.add_comment_button)
        self.middle_layout.addWidget(self.comment_label)
        self.middle_layout.addWidget(self.comment_textedit)
        self.layout.addLayout(self.middle_layout)
        self.bottom_layout = QHBoxLayout()
        self.bottom_layout.addWidget(self.cancel_button, 0, Qt.AlignLeft)
        self.bottom_layout.addWidget(self.save_button, 0, Qt.AlignRight)
        self.layout.addLayout(self.bottom_layout)

        # Slots
        self.previous_student_button.clicked.connect(self.do_previous_student)
        self.next_student_button.clicked.connect(self.do_next_student)
        self.comment_bank_listwidget.itemSelectionChanged.connect(
            self.do_update_comment_bank_selection)
        self.add_comment_button.clicked.connect(self.do_add_comment)
        self.cancel_button.clicked.connect(self.do_cancel)
        self.save_button.clicked.connect(self.do_save)

        # Initial UI Update
        self.update_ui()

        self.widget = QWidget()
        self.widget.setLayout(self.layout)
        self.setCentralWidget(self.widget)
Esempio n. 15
0
    def init_ui(self):
        self.vbox = QVBoxLayout()
        self.hbox = QHBoxLayout()

        # Set layout
        self.setLayout(self.vbox)

        # Group list
        vbox3 = QVBoxLayout()
        group_frame = QGroupBox("Device Groups")
        group_frame.setLayout(QVBoxLayout())
        self.group_list = QListWidget()
        self.group_list.itemPressed.connect(self.group_selected)
        group_frame.layout().addWidget(self.group_list)
        vbox3.addWidget(group_frame)

        # Sliders
        self.group_toggle = QCheckBox("Power")
        self.group_toggle.setEnabled(False)
        vbox3.addWidget(self.group_toggle)
        vbox3.addWidget(QLabel("Brightness"))
        self.group_brightness_slider = QSlider(Qt.Orientation.Horizontal)
        self.group_brightness_slider.setEnabled(False)
        self.group_brightness_slider.sliderMoved.connect(
            self.group_brightness_changed)
        vbox3.addWidget(self.group_brightness_slider)
        vbox3.addWidget(QLabel("Color Temperature"))
        self.group_color_slider = QSlider(Qt.Orientation.Horizontal)
        self.group_color_slider.setEnabled(False)
        self.group_color_slider.sliderMoved.connect(self.group_color_changed)
        vbox3.addWidget(self.group_color_slider)

        self.hbox.addLayout(vbox3)

        # moods
        mood_frame = QGroupBox("Moods")
        mood_frame.setLayout(QVBoxLayout())
        self.mood_list = QListWidget()
        self.mood_list.itemPressed.connect(self.mood_selected)
        mood_frame.layout().addWidget(self.mood_list)

        self.hbox.addWidget(mood_frame)

        # Devices in group
        vbox2 = QVBoxLayout()

        device_frame = QGroupBox("Devices in Group")
        device_frame.setLayout(QVBoxLayout())
        self.device_list = QListWidget()
        self.device_list.setEnabled(False)
        self.device_list.itemPressed.connect(self.device_selected)
        device_frame.layout().addWidget(self.device_list)
        vbox2.addWidget(device_frame)

        # Sliders
        self.device_toggle = QCheckBox("Power")
        self.device_toggle.setEnabled(False)
        vbox2.addWidget(self.device_toggle)
        vbox2.addWidget(QLabel("Brightness"))
        self.brightness_slider = QSlider(Qt.Orientation.Horizontal)
        self.brightness_slider.setEnabled(False)
        self.brightness_slider.sliderMoved.connect(self.brightness_changed)
        vbox2.addWidget(self.brightness_slider)
        vbox2.addWidget(QLabel("Color Temperature"))
        self.color_slider = QSlider(Qt.Orientation.Horizontal)
        self.color_slider.setEnabled(False)
        self.color_slider.sliderMoved.connect(self.color_changed)
        vbox2.addWidget(self.color_slider)

        self.hbox.addLayout(vbox2)
        self.vbox.addLayout(self.hbox)

        # Settings button
        icon = QIcon(resource_path('icons/settings.png'))
        self.settings_button = QPushButton(icon, "Settings")
        self.settings_button.pressed.connect(self.settings_pressed)
        self.vbox.addWidget(self.settings_button)

        self.setWindowTitle('TradfriGUI')
        self.re_init()
Esempio n. 16
0
    def __init__(self, parent=None):
        super().__init__(parent)

        self.setMinimumSize(800, 600)
        self.setWindowTitle(self.tr("Preferences"))

        self._preferences = Preferences()

        #
        # Content

        self._generalPage = PreferencesGeneralPage()
        self._generalPage.setZeroMargins()
        self._generalPage.preferencesChanged.connect(
            self._onPreferencesChanged)

        self._documentsPage = PreferencesDocumentsPage()
        self._documentsPage.setZeroMargins()
        self._documentsPage.preferencesChanged.connect(
            self._onPreferencesChanged)

        self._documentPresetsPage = PreferencesDocumentPresetsPage()
        self._documentPresetsPage.setZeroMargins()
        self._documentPresetsPage.preferencesChanged.connect(
            self._onPreferencesChanged)

        stackedBox = QStackedWidget()
        stackedBox.addWidget(self._generalPage)
        stackedBox.addWidget(self._documentsPage)
        stackedBox.addWidget(self._documentPresetsPage)
        stackedBox.setCurrentIndex(0)

        listBox = QListWidget()
        listBox.addItem(self._generalPage.title())
        listBox.addItem(self._documentsPage.title())
        listBox.addItem(self._documentPresetsPage.title())
        listBox.setCurrentRow(stackedBox.currentIndex())
        listBox.currentRowChanged.connect(stackedBox.setCurrentIndex)

        preferencesBox = QHBoxLayout()
        preferencesBox.addWidget(listBox, 1)
        preferencesBox.addWidget(stackedBox, 3)

        # Button box
        buttonBox = QDialogButtonBox(QDialogButtonBox.RestoreDefaults
                                     | QDialogButtonBox.Ok
                                     | QDialogButtonBox.Apply
                                     | QDialogButtonBox.Cancel)
        self._buttonApply = buttonBox.button(QDialogButtonBox.Apply)
        buttonBox.button(QDialogButtonBox.RestoreDefaults).clicked.connect(
            self._onButtonDefaultsClicked)
        buttonBox.accepted.connect(self._onButtonOkClicked)
        buttonBox.button(QDialogButtonBox.Apply).clicked.connect(
            self._onButtonApplyClicked)
        buttonBox.rejected.connect(self.close)

        # Main layout
        layout = QVBoxLayout(self)
        layout.addLayout(preferencesBox)
        layout.addWidget(buttonBox)

        self._updatePreferences()
        self._buttonApply.setEnabled(False)
Esempio n. 17
0
import sys

from PySide2.QtWidgets import QApplication, QListWidget

if __name__ == '__main__':
    """
    Simple QListWidget showing some items
    """

    app = QApplication(sys.argv)

    # Let's make the QListWidget show this data
    data = ["ONE", "TWO", "THREE", "FOUR", "FIVE"]

    list_widget = QListWidget()
    list_widget.show()
    list_widget.addItems(data)

    sys.exit(app.exec_())
Esempio n. 18
0
 def __init__(self):
     super().__init__(QListWidget())
     self._layout.addWidget(self._instance)
     self.__items = []
Esempio n. 19
0
    def __init__(self):
        QMainWindow.__init__(self)
        signal.signal(signal.SIGINT, self.exit_app)
        self.setWindowTitle("Steam Account Switcher")
        self.setMinimumSize(300, 200)
        self.resize(300, 300)

        # Logo
        self.switcher_logo = QIcon("logo.png")
        self.setWindowIcon(self.switcher_logo)
        if platform.system() == "Windows":  # windows taskbar app icon fix
            import ctypes
            win_appid = 'github.tommis.steam_account_switcher'
            ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(
                win_appid)

        from steamswitcher import SteamSwitcher

        self.switcher = SteamSwitcher()
        self.args = self.switcher.args
        self.main_widget = QWidget()

        if self.args.gui or self.switcher.settings.get(
                "show_on_startup", True) and not self.args.no_gui:
            self.show()
        elif self.args.no_gui and self.args.no_tray:
            self.exit_app()

        self.menu_bar = self.menuBar()
        self.file_menu = self.menu_bar.addMenu(_("File"))
        self.settings_menu = self.menu_bar.addMenu(_("Settings"))
        self.size_menu = self.menu_bar.addMenu(_("Size"))

        refresh_action = QAction(_("Refresh"), self)
        import_action = QAction(_("Import accounts"), self)
        open_skinsdir_action = QAction(_("Skins dir"), self)
        about_action = QAction(_("About"), self)
        exit_action = QAction(_("Exit"), self)

        refresh_action.triggered.connect(Accounts.steamapi_refresh)
        import_action.triggered.connect(
            lambda: DialogImportAccount.import_accounts_dialog(self))
        open_skinsdir_action.triggered.connect(self.open_skinsdir)
        about_action.triggered.connect(lambda: DialogAbout.about_dialog(self))
        exit_action.triggered.connect(self.exit_app)

        refresh_action.setShortcut("F5")
        exit_action.setShortcut("Ctrl+Q")

        self.file_menu.addActions([
            refresh_action, import_action, open_skinsdir_action, about_action
        ])
        self.file_menu.addSeparator()
        self.file_menu.addAction(exit_action)

        set_steamapi_key = QAction(_("Set steamapi key"), self)
        show_avatars = QAction(_("Show avatars"), self, checkable=True)
        use_systemtray = QAction(_("Use systemtray"), self, checkable=True)

        after_login_menu = QMenu(_("After login"))

        after_login_behaviour_group = QActionGroup(after_login_menu)
        nothing_behaviour = QAction(_('Nothing'),
                                    after_login_behaviour_group,
                                    checkable=True,
                                    data="nothing")
        close_behaviour = QAction(_('Close'),
                                  after_login_behaviour_group,
                                  checkable=True,
                                  data="close")
        minimize_behaviour = QAction(_('Minimize to taskbar'),
                                     after_login_behaviour_group,
                                     checkable=True,
                                     data="minimize")
        minimize_tray_behaviour = QAction(_('Minimize to tray'),
                                          after_login_behaviour_group,
                                          checkable=True,
                                          data="minimize_tray")

        after_login_menu.addActions([
            nothing_behaviour, close_behaviour, minimize_behaviour,
            minimize_tray_behaviour
        ])

        behaviour_switcher = {
            "close": lambda: close_behaviour.setChecked(True),
            "minimize": lambda: minimize_behaviour.setChecked(True),
            "minimize_tray": lambda: minimize_tray_behaviour.setChecked(True)
        }
        behaviour_switcher.get(self.switcher.settings["behavior_after_login"],
                               lambda: nothing_behaviour.setChecked(True))()

        after_login_menu.triggered.connect(self.set_after_login_action)

        self.systemtray(self.main_widget)

        set_steamapi_key.triggered.connect(lambda: self.steamapi_key_dialog())
        show_avatars.triggered.connect(lambda: self.set_show_avatars())
        use_systemtray.triggered.connect(lambda: self.set_use_systemtray())

        self.settings_menu.addAction(set_steamapi_key)
        self.settings_menu.addSeparator()
        self.settings_menu.addActions([show_avatars, use_systemtray])
        self.settings_menu.addMenu(after_login_menu)

        show_avatars.setChecked(self.switcher.settings.get("show_avatars"))
        use_systemtray.setChecked(self.switcher.settings.get("use_systemtray"))

        set_size_small = QAction(_("Small"), self)
        set_size_medium = QAction(_("Medium"), self)
        set_size_large = QAction(_("Large"), self)
        set_size_small.triggered.connect(lambda: self.set_size("small"))
        set_size_medium.triggered.connect(lambda: self.set_size("medium"))
        set_size_large.triggered.connect(lambda: self.set_size("large"))
        self.size_menu.addActions(
            [set_size_small, set_size_medium, set_size_large])

        set_size_small.setShortcut("Ctrl+1")
        set_size_medium.setShortcut("Ctrl+2")
        set_size_large.setShortcut("Ctrl+3")

        self.add_button = QPushButton(_("Add account"))
        self.edit_button = QPushButton(_("Edit account"))
        self.edit_button.setDisabled(True)

        self.buttons = QHBoxLayout()
        self.buttons.addWidget(self.add_button)
        self.buttons.addWidget(self.edit_button)

        self.layout = QVBoxLayout()
        self.main_widget.setLayout(self.layout)

        self.accounts_list = QListWidget()
        self.accounts_list.setDragDropMode(QAbstractItemView.InternalMove)
        self.layout.addWidget(self.accounts_list)
        self.layout.addLayout(self.buttons)

        self.layout.setSpacing(10)
        self.accounts_list.setSpacing(1)

        self.import_accounts_window = QDialog()

        self.load_accounts()

        def edit_button_enabled():
            if self.accounts_list.selectedItems():
                self.edit_button.setEnabled(True)
            else:
                self.edit_button.setEnabled(False)

        # Signals and Slots
        self.add_button.clicked.connect(lambda: self.account_dialog(True))
        self.edit_button.clicked.connect(lambda: self.account_dialog(False))
        self.accounts_list.itemSelectionChanged.connect(edit_button_enabled)
        self.accounts_list.doubleClicked.connect(lambda: self.steam_login(
            self.accounts_list.currentIndex().data(5)))
        self.accounts_list.setContextMenuPolicy(Qt.CustomContextMenu)
        self.accounts_list.customContextMenuRequested.connect(
            lambda: RightClickMenu.show_rightclick_menu(self))
        #self.accounts_list.layoutChanged.connect(lambda: self.account_reordered)
        #self.accounts_list.dropEvent(self.dropEvent(QDropEvent))

        self.setCentralWidget(self.main_widget)

        if self.args.no_tray:
            print("test")
        elif self.switcher.settings.get("use_systemtray") or self.args.tray:
            self.tray_icon.show()

        if self.switcher.first_run or self.args.first_run:
            self.steamapi_key_dialog()
        elif not self.switcher.first_run and \
             not self.is_valid_steampi_key(self.switcher.settings["steam_api_key"]):
            self.tray_icon.showMessage("No api key",
                                       "Set the steam web api key.",
                                       self.switcher_logo)
Esempio n. 20
0
import sys

from PySide2.QtWidgets import QApplication, QListWidget, QListWidgetItem
from PySide2.QtCore import Qt

if __name__ == '__main__':
    app = QApplication(sys.argv)

    lw = QListWidget()
    for i in range(5):
        text = f'Item {i}'
        item = QListWidgetItem(text)
        item.setCheckState(Qt.Unchecked)
        lw.addItem(item)
    lw.setDragDropMode(lw.InternalMove)
    lw.show()
    sys.exit(app.exec_())
    def initUI(self):
        # Define buttons
        # Button to calculate lunar dates
        self.calculate_lunar = QPushButton('음력날짜 계산', self)
        self.calculate_lunar.clicked.connect(self.calculate_lunar_date)
        self.calculate_lunar.setGeometry(20, 260, 130, 35)
        self.calculate_lunar.setStatusTip('음력 날짜를 계산합니다.')
        self.calculate_lunar.setShortcut('Return')

        # Button to save ICS file to local directory
        self.ICS_save_button = QPushButton('ICS 파일 저장', self)
        self.ICS_save_button.clicked.connect(self.create_ics_file)
        self.ICS_save_button.setGeometry(175, 260, 130, 35)
        self.ICS_save_button.setStatusTip('ICS 파일을 컴퓨터에 저장합니다.')

        # Define labels
        # Define label for lunar date to convert
        lunar_date_text = QLabel(self)
        lunar_date_text.setText('계산할 음력 날짜')
        lunar_date_text.setGeometry(25, 15, 240, 25)

        # Define label for name of event
        event_name_text = QLabel(self)
        event_name_text.setText('이벤트 이름 입력')
        event_name_text.setGeometry(25, 50, 240, 25)

        # Define label for repetition
        event_name_text = QLabel(self)
        event_name_text.setText('몇년치나 할까요?')
        event_name_text.setGeometry(25, 85, 240, 25)

        # Define ListWidget to display results
        self.result_console = QListWidget(self)
        self.result_console.setGeometry(25, 118, 275, 133)
        self.result_console.setStatusTip('올해부터 매년 양력날짜가 출력됩니다.')

        # Define user input areas
        # Define lunar date to convert to solar date
        self.user_date_input = QLineEdit(self)
        self.user_date_input.setGeometry(180, 15, 120, 27)
        self.user_date_input.setAlignment(Qt.AlignCenter)
        self.user_date_input.setPlaceholderText('YYYYMMDD')
        self.user_date_input.setStatusTip('날짜를 YYYYMMDD로 입력하세요.')

        # Define name of event to use in ICS file
        self.user_event_name = QLineEdit(self)
        self.user_event_name.setGeometry(180, 50, 120, 27)
        self.user_event_name.setAlignment(Qt.AlignCenter)
        self.user_event_name.setPlaceholderText('이벤트 이름')
        self.user_event_name.setStatusTip('이벤트 이름을 입력하세요.')

        # Define number of years to convert
        self.user_repetition = QLineEdit(self)
        self.user_repetition.setGeometry(180, 84, 120, 27)
        self.user_repetition.setAlignment(Qt.AlignCenter)
        self.user_repetition.setText('10')
        self.user_repetition.setStatusTip('생성할 햇수를 입력하세요.')

        # Define size of main window
        self.setGeometry(200, 320, 325, 330)
        self.setWindowTitle('날짜')
        self.statusBar()
        self.show()
Esempio n. 22
0
    def __init__(self, alid=0, db=0, mode=0):
        super().__init__()
        self.font = mainfont
        self.resize(1000, 600)
        layout = QGridLayout()
        self.layout = layout
        self.buttext = []
        self.dictViewer = QWidget()

        self.linedits = {}
        self.last_eid = 0
        self.photo_ids = 0
        self.QLABELM_TYPE = type(QLabelM())

        self.listWidget = QListWidget()
        self.listWidget.itemDoubleClicked.connect(self.doubleClick)
        self.listWidget.itemSelectionChanged.connect(self.itemChanged)

        self.setFont(mainfont)
        self.db = db
        self.alid = alid
        self.event_ids = db.get_all_event_ids(self.alid)
        self.photo_gallery = QLabel()
        #self.photo_gallery.setAlignment(Qt.AlignCenter)
        #self.photo_gallery.setPixmap(QPixmap('f.png').scaled(400,400,Qt.KeepAspectRatio))
        print(self.event_ids)
        if self.event_ids:
            for eid in self.event_ids:
                event = db.get_event_data(self.alid, eid)
                print(event)
                if event:
                    text = ''
                    text = event['event_head'] if type(event) == type(
                        {}) and 'event_head' in event.keys(
                        ) and event['event_head'] != '' else text
                    item = QListWidgetItem(text)
                    if type(event) == type({}) and 'eid' in event.keys():
                        item.setWhatsThis(str(event['eid']))
                    self.listWidget.addItem(item)
            if self.listWidget.count():
                self.listWidget.setCurrentRow(0)

        self.mode = mode

        def openMenu(position):
            # Создание PopupMenu
            menu = QMenu()
            if mode > 0:
                addAction = menu.addAction('Добавить событие')
                #menu.addSeparator()
                editAction = menu.addAction('Переименовать событие')
                #menu.addSeparator()
                delAction = menu.addAction('Удалить событие')
                delAllAction = menu.addAction('Удалить все события')
                menu.addSeparator()
            else:
                addAction, editAction, delAction, delAllAction = QAction(
                ), QAction(), QAction(), QAction()
            quitAction = menu.addAction('Выход')
            action = menu.exec_(self.mapToGlobal(position))

            # Привязка событий к Actions
            if action == addAction:
                text, ok = QInputDialog().getText(self, "Название события",
                                                  "Ввкдите название события:",
                                                  QLineEdit.Normal, '')
                if ok:
                    text = 'Новое событие' if text == '' else text
                    res = self.db.add_event({
                        'alid': self.alid,
                        'event_head': text
                    })
                    if len(res) == 1:
                        event = res[0]
                        text = event['event_head'] if type(event) == type(
                            {}
                        ) and 'event_head' in event.keys(
                        ) and event['event_head'] != '' else 'Новое событие'
                        item = QListWidgetItem(text)
                        item.setWhatsThis(str(event['eid']))
                        self.listWidget.addItem(item)
                        db.events.save()
                        #self.changed = True
                self.event_ids = db.get_all_event_ids(self.alid)

            if action == editAction:
                eid = self.listWidget.currentItem()
                if eid is not None:
                    eid = self.listWidget.currentItem().whatsThis()
                    last_name = self.db.get_event_data(self.alid,
                                                       eid)['event_head']
                    text, ok = QInputDialog().getText(
                        self, "Название события",
                        "Ввкдите новое название события:", QLineEdit.Normal,
                        str(last_name))
                    if ok:
                        event = self.db.edit_event({
                            'alid': self.alid,
                            'eid': eid,
                            'event_head': text
                        })
                        self.listWidget.currentItem().setText(text)
                        self.db.events.save()
                        if event:
                            event = self.db.get_event_data(alid, eid)
                            #b = layout.takeAt(1)
                            self.dictViewer.close()
                            #b.widget().deleteLater()
                            self.dictViewer = DictViewer(
                                event, 1, self.db.events.invizible_fields,
                                self.db.events.editable_fields)
                            self.layout.addWidget(self.dictViewer, 0, 2)
                    self.event_ids = db.get_all_event_ids(self.alid)

            if action == delAction:
                res = QMessageBox.question(
                    self, 'ВНИМАНИЕ!!!',
                    "Вы действительно хотите удалить событие?",
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                if res == QMessageBox.Yes:
                    eid = self.listWidget.currentItem()
                    if eid is not None:
                        eid = self.listWidget.currentItem().whatsThis()
                        self.db.del_event({'alid': self.alid, 'eid': eid})
                        self.listWidget.takeItem(self.listWidget.currentRow())
                        self.db.events.save()
                        #self.changed = True
                    self.event_ids = db.get_all_event_ids(self.alid)

            if action == delAllAction:
                res = QMessageBox.question(
                    self, 'ВНИМАНИЕ!!!',
                    "Вы действительно хотите удалить все события?",
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                if res == QMessageBox.Yes:
                    if self.db.del_all_events(int(self.alid)):
                        self.listWidget.clear()
                        self.db.events.save()
                        #self.changed = True
                    self.event_ids = db.get_all_event_ids(self.alid)

                    #db.photos.save()

            if action == quitAction:
                self.accept()

        self.listWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.listWidget.customContextMenuRequested.connect(openMenu)

        layout.addWidget(self.listWidget, 0, 0, 1, 1)
        layout.addWidget(self.photo_gallery, 0, 1, 1, 1)

        self.setLayout(layout)
Esempio n. 23
0
    def _init_load_options_tab(self, tab):
        arch_layout = QHBoxLayout()
        arch_caption = QLabel(self)
        arch_caption.setText('Architecture:')
        arch_caption.setSizePolicy(
            QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
        arch_layout.addWidget(arch_caption)
        arch_combo = QComboBox(self)
        for arch in archinfo.all_arches:
            addendum = ' (P-code Engine)' if hasattr(arch,
                                                     'pcode_arch') else ''
            arch_combo.addItem(
                f'{arch.bits}b {arch.name} ({arch.memory_endness[-2:]}){addendum}',
                str(arch))
        index = arch_combo.findData(str(self.arch))
        arch_combo.setCurrentIndex(index)
        arch_layout.addWidget(arch_combo)
        self.option_widgets['arch'] = arch_combo

        if self.is_blob:
            blob_layout = QGridLayout()

            # load address
            base_addr_caption = QLabel(self)
            base_addr_caption.setText('Base Address:')
            blob_layout.addWidget(base_addr_caption, 1, 0)
            base_addr = QLineEdit(self)
            base_addr.setText('0')
            blob_layout.addWidget(base_addr, 1, 1)
            self.option_widgets['base_addr'] = base_addr

            # entry address
            entry_addr_caption = QLabel(self)
            entry_addr_caption.setText('Entry Address:')
            blob_layout.addWidget(entry_addr_caption, 2, 0)
            entry_addr = QLineEdit(self)
            entry_addr.setText('0')
            blob_layout.addWidget(entry_addr, 2, 1)
            self.option_widgets['entry_addr'] = entry_addr

        # load debug symbols
        load_debug_info = QCheckBox()
        load_debug_info.setText("Load debug information if available")
        load_debug_info.setChecked(True)
        self.option_widgets['load_debug_info'] = load_debug_info

        # auto load libs

        auto_load_libs = QCheckBox()
        auto_load_libs.setText(
            "Automatically load all libraries (slow, not recommended)")
        auto_load_libs.setChecked(False)
        self.option_widgets['auto_load_libs'] = auto_load_libs

        # dependencies list

        dep_group = QGroupBox("Dependencies")
        dep_list = QListWidget()
        self.option_widgets['dep_list'] = dep_list

        sublayout = QVBoxLayout()
        sublayout.addWidget(dep_list)
        dep_group.setLayout(sublayout)

        layout = QVBoxLayout()
        if self.is_blob:
            layout.addLayout(blob_layout)
        layout.addLayout(arch_layout)
        layout.addWidget(load_debug_info)
        layout.addWidget(auto_load_libs)
        layout.addWidget(dep_group)
        layout.addStretch(0)

        frame = QFrame(self)
        frame.setLayout(layout)
        tab.addTab(frame, "Loading Options")
Esempio n. 24
0
    def __init__(self):
        super().__init__()

        self.streamfile = ""
        self.streams = {}
        scriptdir = os.path.dirname(os.path.realpath(__file__))
        icon = (scriptdir + os.path.sep + "icon/pyradio.ico")
        self.setWindowIcon(QtGui.QIcon(icon))
        self.setStuff()
        # Tray
        self.tray = QSystemTrayIcon()
        self.tray.setIcon(QtGui.QIcon(icon))
        self.tray.activated.connect(self.call)

        self.icon = QtGui.QIcon()
        self.icon.addFile(icon)
        self.setWindowIcon(self.icon)

        # tray menu
        self.trayIconMenu = QtWidgets.QMenu()
        self.quitAction = QtWidgets.QAction("&Quit", triggered=self.close)
        self.trayIconMenu.addAction(self.quitAction)
        self.tray.setContextMenu(self.trayIconMenu)
        self.trayIconMenu.setStyleSheet(open("css/main.css", "r").read())

        # Media player
        self.radio = vlc.MediaPlayer()
        self.playing = False

        self.pal = QtGui.QPalette(self.palette())

        self.playing_label = QLabel("Stopped")
        self.label = QLabel("Radios:")

        self.label.setAlignment(Qt.AlignCenter)
        self.playing_label.setAlignment(Qt.AlignCenter)
        self.btn = QPushButton("Play/Stop")
        self.btn.clicked.connect(self.control)
        self.list = QListWidget()
        self.list.itemDoubleClicked.connect(self.control)

        self.edit = QPushButton("Edit Radios")
        self.edit.clicked.connect(self.openfile)
        self.refresh = QPushButton("Refresh")
        self.refresh.clicked.connect(self.refreshstreams)

        self.slider = QSlider(QtGui.Qt.Horizontal)
        self.slider.setMaximum(100)
        self.slider.setValue(self.volume)
        self.slider.valueChanged.connect(self.changeVolume)

        self.setStyleSheet(open("css/main.css", "r").read())

        self.refreshstreams()

        self.current = ""
        self.buttons = QHBoxLayout()

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.list)
        self.layout.addWidget(self.playing_label)
        self.layout.addWidget(self.slider)
        self.buttons.addWidget(self.btn)
        self.buttons.addWidget(self.edit)
        self.buttons.addWidget(self.refresh)

        self.layout.addLayout(self.buttons)
        self.setLayout(self.layout)
Esempio n. 25
0
    def __init__(self, parent=None):
        # super().__init__()
        QMainWindow.__init__(self, parent)
        # const value
        self.dequeMax = 1000
        self.notchCutOff = 60
        self.notchQualityFactor = 15
        self.lowPassCutOff = 50
        self.lowPassOrder = 8
        self.samplingRate = 500
        self.two_16 = pow(2, 16)
        self.two_8 = pow(2, 8)
        self.max_uv = 407
        self.two_resolution = 8388607
        self.rawGraphFrame = 25
        self.update_num = 20
        self.timerCounter = 0

        # value
        self.measure_time = 0
        self.timerCount = 0
        self.printIndex = 0
        self.headerCount = 0
        self.ch1_1_value = 0
        self.ch1_2_value = 0
        self.ch1_3_value = 0
        self.ch2_1_value = 0
        self.ch2_2_value = 0
        self.ch2_3_value = 0
        self.dataIndex = 0
        self.read_state = parsingState.header1
        self.ptr = 0
        self.ptrFilter = 0
        self.ptrTime = 0
        self.boolPaused = True

        # UI
        self.pgWidget = QWidget()
        self.setCentralWidget(self.pgWidget)
        self.setGeometry(QRect(250, 120, 1600, 820))

        self.dockingWidget = QDockWidget("개발용 텍스트")
        self.listWidget = QListWidget()
        self.listWidget.setFont("Courier")
        self.dockingWidget.setWidget(self.listWidget)
        self.dockingWidget.setAllowedAreas(Qt.LeftDockWidgetArea
                                           | Qt.RightDockWidgetArea)
        self.dockingWidget.setFloating(False)
        self.addDockWidget(Qt.RightDockWidgetArea, self.dockingWidget)

        self.vBoxLayout2 = QVBoxLayout(self.pgWidget)
        self.lLabel = QLabel("블루투스 자동연결을 실행합니다.")
        self.lLabel.resize(200, 45)
        self.lLabel.setMaximumHeight(45)
        self.lLabel.setMinimumHeight(30)
        self.lLabel.setStyleSheet("color: blue;"
                                  "border-style: solid;"
                                  "border-width: 1px;"
                                  "border-color: #c1f7fe;"
                                  "border-radius: 3px;"
                                  "background-color: #F7FFFE;")
        font1 = self.lLabel.font()
        font1.setPointSize(30)
        font1.setFamily('Times New Roman')
        font1.setBold(True)
        self.lLabel.setFont(font1)

        self.setWindowTitle('Brint Monitor')
        self.setWindowIcon(QIcon("./images/brainGreen.png"))

        # grpah
        self.ax3 = pg.PlotWidget()
        self.ax3.setMaximumHeight(340)
        self.ax3.setMinimumHeight(250)
        self.ax3.setDownsampling(mode='peak')
        self.ax3.setTitle("좌측 뇌파", color='w')
        self.ax3.setClipToView(True)
        self.ax3.setLabel('left', "뇌파 [uV]", color='white')
        self.ax3.setLabel('bottom', '시간 [초]', color='white')
        self.ax3.setRange(xRange=[-10, 0], yRange=[-150, 150])

        self.ax4 = pg.PlotWidget()
        self.ax4.setMaximumHeight(340)
        self.ax4.setMinimumHeight(250)
        self.ax4.setDownsampling(mode='peak')
        self.ax4.setTitle("우측 뇌파", color='w')
        self.ax4.setClipToView(True)
        self.ax4.setRange(xRange=[-10, 0], yRange=[-150, 150])
        self.ax4.setLabel('left', '뇌파 [uV]', color='white')
        self.ax4.setLabel('bottom', '시간 [초]', color='white', size=30)
        self.vBoxLayout2.addWidget(self.ax3)
        self.vBoxLayout2.addWidget(self.ax4)
        self.pen = pg.mkPen(color=(255, 0, 0))
        self.line3 = self.ax3.plot(pen=self.pen)
        self.line4 = self.ax4.plot()
        self.data3 = np.zeros(500)
        self.data3_x = np.linspace(0, 499, 500) * 0.002
        self.data4 = np.zeros(500)
        self.data4_x = np.linspace(0, 499, 500) * 0.002
        self.vBoxLayout2.addWidget(self.lLabel)
        # database
        self.fData = deque(np.zeros(self.dequeMax), maxlen=self.dequeMax)
        self.fData2 = deque(np.zeros(self.dequeMax), maxlen=self.dequeMax)
        self.buffer = []
        self.ch1_int_buffer = []
        self.ch2_int_buffer = []

        # xml
        self.user = ET.Element("userName")

        # bluetooth
        self.scanner = BleakScanner()
        self.macAddress = " "
        self.Read_UUID = "0000fff1-0000-1000-8000-00805f9b34fb"
        self.Rx_UUID = "a9da6040-0823-4995-94ec-9ce41ca28833"
        self.Tx_UUID = "a73e9a10-628f-4494-a099-12efaf72258f"
        self.client = None
        # "74:F0:7D:C0:52:0C"
        self.panaxAddress = "PAPA"  # "BGX-76DE"
        self.find_device = False
        self.noexcept = False
        self.conBool = False
        self.autoScan()
        # event
        # create actions, file menu action
        self.save = QAction("&Save", self)
        self.save.setIcon(QIcon("./images/saveBlue.png"))
        self.save.setShortcut("Ctrl+S")
        self.save.setStatusTip("Save .xml file")
        self.save.triggered.connect(self.save_rx)

        self.exitAction = QAction("E&xit", self)
        self.exitAction.setIcon(QIcon("./images/Quit.png"))
        self.exitAction.setShortcut("Ctrl+Q")
        self.exitAction.setStatusTip("Exit the application")
        self.exitAction.triggered.connect(self.close)

        # control menu action
        self.start = QAction("S&tart", self)
        self.start.setIcon(QIcon("./images/recordRed.png"))
        self.start.setStatusTip("측정을 시작합니다")
        self.start.triggered.connect(self.startDialog)

        self.paused = QAction("P&ause", self)
        self.paused.setIcon(QIcon("./images/pauseBlue.png"))
        self.paused.setStatusTip("측정을 정지합니다")
        self.paused.triggered.connect(self.pausedMeasure)

        self.stop = QAction("&Stop", self)
        self.stop.setIcon(QIcon("./images/stopBlue.png"))
        self.stop.setStatusTip("측정을 멈춤니다")
        self.stop.triggered.connect(self.rx_stop)

        # view menu action

        # about
        self.aboutAction = QAction("&About", self)
        self.aboutAction.setStatusTip("Show the application's About box")
        self.aboutAction.triggered.connect(self.about)

        # createMenus
        fileMenu = self.menuBar().addMenu("&File")
        fileMenu.addAction(self.save)
        # fileMenu.addAction(self.load)
        fileMenu.addAction(self.exitAction)
        ControlMenu = self.menuBar().addMenu("&Control")
        ControlMenu.addAction(self.start)
        ControlMenu.addAction(self.paused)
        ControlMenu.addAction(self.stop)

        helpMenu = self.menuBar().addMenu("&Help")
        helpMenu.addAction(self.aboutAction)

        # createToolBar
        pgToolBar = self.addToolBar("&PG")
        pgToolBar.setObjectName("PGToolBar")
        pgToolBar.addAction(self.save)
        pgToolBar.addSeparator()

        pgToolBar.addAction(self.start)
        pgToolBar.addAction(self.paused)
        pgToolBar.addAction(self.stop)

        pgToolBar.addSeparator()
        pgToolBar.addAction(self.aboutAction)

        pgToolBar2 = self.addToolBar("PG2")
        pgToolBar2.setObjectName("PGToolBar2")

        # createStatusBar
        '''
Esempio n. 26
0
 def createOrderList(self):
     self.orderList = QListWidget()
     # Enable drag & drop ordering of items.
     self.orderList.setDragDropMode(QAbstractItemView.InternalMove)
Esempio n. 27
0
    def __init__(self,
                 motors={},
                 listOfSequenceHandler=None,
                 sequence=None,
                 modifySequence=False):
        """
        Initializtion of the window for creating a new sequence
        :param motors: The dictionary of all the motors
        :param listOfSequenceHandler: The handler of the list of sequence
        """
        QDialog.__init__(self)
        # Set the window icon
        appIcon = QIcon(icon)
        self.setWindowIcon(appIcon)

        ## Flag if the sequence is a modified one or a new one
        self.__modifySequence = modifySequence
        ## The handler of the list of sequence
        self.__listOfSequenceHandler = listOfSequenceHandler
        ## The dictionary of all the motors
        self.__motors = motors
        ## The new sequence
        self.__sequence = sequence
        ## A dictionary of the positions of the new sequence
        self.__wantedPositions = {}
        ## The layout of the create sequence window
        self.__layout = QVBoxLayout(self)
        ## The widget for the name of the sequenc
        self.nameEntry = QLineEdit()
        self.nameEntry.setText(self.__sequence.getName())
        ## The label for the widget in which the name of the sequence is written
        self.__nameLabel = QLabel("Sequence Name")
        ## The list of the different moves that forms the sequence
        self.__listOfMoveLabels = QListWidget()
        moveNumber = 1
        for move in self.__sequence.getMoves():
            # Set text for the move label
            labelText = "move " + str(moveNumber) + ": "
            moveNumber += 1
            for motor in self.__motors:
                labelText += self.__motors[motor].getName() + " " + \
                             str(move.getMotorPosition(self.__motors[motor].getName())) + ", "
            label = moveLabel(move, labelText, self.__motors)

            # insert label to the head of the list
            self.__listOfMoveLabels.insertItem(0, label)

        # Put the sliders of the create sequence window in a list
        ## List of sliders in the create sequence window
        self.listOfSliders = []
        dictOfSlider = dict()

        for motor in self.__motors:
            dictOfSlider[motor] = QSlider(Qt.Horizontal)
            dictOfSlider[motor].setMaximum(4095)
            dictOfSlider[motor].setValue(
                self.__motors[motor].getCurrentPosition())
            dictOfSlider[motor].sliderMoved.connect(
                self.__motors[motor].setGoalPosition)
            self.listOfSliders.append(dictOfSlider[motor])

        ## Message to make the user put a name to the sequence
        self.__noNameMessage = QMessageBox()
        self.__noNameMessage.setIcon(QMessageBox.Warning)
        self.__noNameMessage.setWindowIcon(appIcon)
        self.__noNameMessage.setText(
            "Please name your sequence before saving it")
        self.__noNameMessage.setStandardButtons(QMessageBox.Ok)
        # Renable the create sequence window and closes the message
        self.__noNameMessage.accepted.connect(self.enableWindow)

        ## Warning message to make sure the user doen't want to save the sequence
        self.__warningMessage = QMessageBox()
        self.__warningMessage.setIcon(QMessageBox.Warning)
        self.__warningMessage.setWindowIcon(appIcon)
        self.__warningMessage.setText(
            "Are you sure you want to close this window? Your sequence will not be saved"
        )
        self.__warningMessage.setStandardButtons(QMessageBox.Ok
                                                 | QMessageBox.Cancel)
        # Close the create sequence window and the message
        self.__warningMessage.accepted.connect(self.reject)
        # Renable the create sequence window and closes the message
        self.__warningMessage.rejected.connect(self.enableWindow)

        # Set the text for the labels
        ## Labels for the motors in the UI
        self.__motorLabels = []
        for motorNumber in range(0, len(motors)):
            self.__motorLabels.append(
                QLabel("Motor " + str(motorNumber + 1) + " position"))

        ## Button to add a move to the sequence and procede to the next move
        self.nextMoveButton = QPushButton("Save Move")

        ## Buttons to accept or cancel the creation of a sequence
        self.buttonBox = QDialogButtonBox()
        self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel
                                          | QDialogButtonBox.Ok)
        # If ok pressed add the sequence to the list
        self.buttonBox.accepted.connect(
            lambda: self.addSequenceToList(self.__modifySequence))
        # If cancel pressed close the create sequence window
        self.buttonBox.rejected.connect(self.__warningMessage.exec)

        # Renable the main window when the create sequence closes
        self.rejected.connect(self.__listOfSequenceHandler.enableUi)
        self.accepted.connect(self.__listOfSequenceHandler.enableUi)

        self.nextMoveButton.clicked.connect(self.addMovetoSequence)

        self.__listOfMoveLabels.itemDoubleClicked.connect(
            self.moveDoubleClicked)

        # Build the vertical layout with the different widgets
        self.__layout.addWidget(self.__nameLabel)
        self.__layout.addWidget(self.nameEntry)
        self.__layout.addWidget(self.__listOfMoveLabels)
        for motorNumber in range(len(self.__motors)):
            self.__layout.addWidget(self.__motorLabels[motorNumber])
            self.__layout.addWidget(self.listOfSliders[motorNumber])
        self.__layout.addWidget(self.nextMoveButton)
        self.__layout.addWidget(self.buttonBox)

        # Connect the qwidgetlist to the custom right click menu
        self.__listOfMoveLabels.setContextMenuPolicy(Qt.CustomContextMenu)
        self.__listOfMoveLabels.customContextMenuRequested.connect(
            self.rightClickMenu)
Esempio n. 28
0
    def __init__(self, parent):
        """ standard constructor: set up class variables, ui elements
            and layout """

        # TODO: split current piece info into separate lineedits for title, album name and length
        # TODO: make time changeable by clicking next to the slider (not only
        #       by dragging the slider)
        # TODO: add "about" action to open info dialog in new "help" menu
        # TODO: add option to loop current piece (?)
        # TODO: more documentation
        # TODO: add some "whole piece time remaining" indicator? (complicated)
        # TODO: implement a playlist of pieces that can be edited and enable
        #       going back to the previous piece (also un- and re-shuffling?)
        # TODO: implement debug dialog as menu action (if needed)

        if not isinstance(parent, PiecesMainWindow):
            raise ValueError('Parent widget must be a PiecesMainWindow')

        super(PiecesPlayer, self).__init__(parent=parent)

        # -- declare and setup variables for storing information --
        # various data
        self._set_str = ''  # string of currently loaded directory sets
        self._pieces = {}  # {<piece1>: [<files piece1 consists of>], ...}
        self._playlist = []  # list of keys of self._pieces (determines order)
        self._shuffled = True  # needed for (maybe) reshuffling when looping
        # doc for self._history:
        # key: timestamp ('HH:MM:SS'),
        # value: info_str of piece that started playing at that time
        self._history = {}
        self._status = 'Paused'
        self._current_piece = {'title': '', 'files': [], 'play_next': 0}
        self._default_volume = 60  # in percent from 0 - 100
        self._volume_before_muted = self._default_volume
        # set to true by self.__event_movement_ended and used by self.__update
        self._skip_to_next = False
        # vlc-related variables
        self._vlc_instance = VLCInstance()
        self._vlc_mediaplayer = self._vlc_instance.media_player_new()
        self._vlc_mediaplayer.audio_set_volume(self._default_volume)
        self._vlc_medium = None
        self._vlc_events = self._vlc_mediaplayer.event_manager()

        # -- create and setup ui elements --
        # buttons
        self._btn_play_pause = QPushButton(QIcon(get_icon_path('play')), '')
        self._btn_previous = QPushButton(QIcon(get_icon_path('previous')), '')
        self._btn_next = QPushButton(QIcon(get_icon_path('next')), '')
        self._btn_volume = QPushButton(QIcon(get_icon_path('volume-high')), '')
        self._btn_loop = QPushButton(QIcon(get_icon_path('loop')), '')
        self._btn_loop.setCheckable(True)
        self._btn_play_pause.clicked.connect(self.__action_play_pause)
        self._btn_previous.clicked.connect(self.__action_previous)
        self._btn_next.clicked.connect(self.__action_next)
        self._btn_volume.clicked.connect(self.__action_volume_clicked)
        # labels
        self._lbl_current_piece = QLabel('Current piece:')
        self._lbl_movements = QLabel('Movements:')
        self._lbl_time_played = QLabel('00:00')
        self._lbl_time_left = QLabel('-00:00')
        self._lbl_volume = QLabel('100%')
        # needed so that everything has the same position
        # independent of the number of digits of volume
        self._lbl_volume.setMinimumWidth(55)
        # sliders
        self._slider_time = QSlider(Qt.Horizontal)
        self._slider_volume = QSlider(Qt.Horizontal)
        self._slider_time.sliderReleased.connect(
            self.__event_time_changed_by_user)
        self._slider_volume.valueChanged.connect(self.__event_volume_changed)
        self._slider_time.setRange(0, 100)
        self._slider_volume.setRange(0, 100)
        self._slider_volume.setValue(self._default_volume)
        self._slider_volume.setMinimumWidth(100)
        # other elements
        self._checkbox_loop_playlist = QCheckBox('Loop playlist')
        self._lineedit_current_piece = QLineEdit()
        self._lineedit_current_piece.setReadOnly(True)
        self._lineedit_current_piece.textChanged.connect(
            self.__event_piece_text_changed)
        self._listwidget_movements = QListWidget()
        self._listwidget_movements.itemClicked.connect(
            self.__event_movement_selected)

        # -- create layout and insert ui elements--
        self._layout = QVBoxLayout(self)
        # row 0 (name of current piece)
        self._layout_piece_name = QHBoxLayout()
        self._layout_piece_name.addWidget(self._lbl_current_piece)
        self._layout_piece_name.addWidget(self._lineedit_current_piece)
        self._layout.addLayout(self._layout_piece_name)
        # rows 1 - 5 (movements of current piece)
        self._layout.addWidget(self._lbl_movements)
        self._layout.addWidget(self._listwidget_movements)
        # row 6 (time)
        self._layout_time = QHBoxLayout()
        self._layout_time.addWidget(self._lbl_time_played)
        self._layout_time.addWidget(self._slider_time)
        self._layout_time.addWidget(self._lbl_time_left)
        self._layout.addLayout(self._layout_time)
        # row 7 (buttons and volume)
        self._layout_buttons_and_volume = QHBoxLayout()
        self._layout_buttons_and_volume.addWidget(self._btn_play_pause)
        self._layout_buttons_and_volume.addWidget(self._btn_previous)
        self._layout_buttons_and_volume.addWidget(self._btn_next)
        self._layout_buttons_and_volume.addWidget(self._btn_loop)
        self._layout_buttons_and_volume.addSpacing(40)
        # distance between loop and volume buttons: min. 40, but stretchable
        self._layout_buttons_and_volume.addStretch()
        self._layout_buttons_and_volume.addWidget(self._btn_volume)
        self._layout_buttons_and_volume.addWidget(self._slider_volume)
        self._layout_buttons_and_volume.addWidget(self._lbl_volume)
        self._layout.addLayout(self._layout_buttons_and_volume)

        # -- setup hotkeys --
        self._KEY_CODES_PLAY_PAUSE = [269025044]
        self._KEY_CODES_NEXT = [269025047]
        self._KEY_CODES_PREVIOUS = [269025046]
        self._keyboard_listener = keyboard.Listener(on_press=self.__on_press)
        self._keyboard_listener.start()
        QShortcut(QKeySequence('Space'), self, self.__action_play_pause)

        # -- various setup --
        self._timer = QTimer(self)
        self._timer.timeout.connect(self.__update)
        self._timer.start(100)  # update every 100ms
        self.setMinimumWidth(900)
        self.setMinimumHeight(400)
        # get directory set(s) input and set up self._pieces
        # (exec_ means we'll wait for the user input before continuing)
        DirectorySetChooseDialog(self, self.set_pieces_and_playlist).exec_()
        # skip to next movement / next piece when current one has ended
        self._vlc_events.event_attach(VLCEventType.MediaPlayerEndReached,
                                      self.__event_movement_ended)
Esempio n. 29
0
    def __init__(self):
        QMainWindow.__init__(self)

        self.twitch_client_id = config.TWITCH_API_CLIENT_ID
        self.twitch_oauth_token = config.TWITCH_API_OAUTH_TOKEN

        self.twitch_interface = TwitchInterface(
            api_client_id=config.TWITCH_API_CLIENT_ID,
            api_oauth_token=config.TWITCH_API_OAUTH_TOKEN,
            browser_client_id=config.TWITCH_BROWSER_OAUTH_TOKEN,
            browser_oauth_token=config.TWITCH_BROWSER_OAUTH_TOKEN)

        self.vlc_interface = VLCInterface(config.VLC_PATH)

        self.loaded_video = None

        self.main_layout = QVBoxLayout()

        self.launch_vlc_btn = QPushButton("Launch VLC")

        self.info_layout = QGridLayout()

        self.file_picker_layout = QHBoxLayout()

        self.file_path_field = QLineEdit()
        self.file_browser_btn = QPushButton(text="...")

        self.file_picker_layout.addWidget(self.file_path_field)
        self.file_picker_layout.addWidget(self.file_browser_btn)

        vod_filepath_label = QLabel("VOD Filepath")
        id_twitch_label = QLabel("ID Twitch")
        created_at_label = QLabel("Created at")
        duration_label = QLabel("Duration")
        title_label = QLabel("Title")
        streamer_label = QLabel("Streamer")

        self.id_twitch_field = QLineEdit()
        self.created_at_field = QLineEdit()
        self.duration_field = QLineEdit()
        self.title_field = QLineEdit()
        self.streamer_field = QLineEdit()

        self.id_twitch_field.setEnabled(False)
        self.created_at_field.setEnabled(False)
        self.duration_field.setEnabled(False)
        self.title_field.setEnabled(False)
        self.streamer_field.setEnabled(False)

        self.info_layout.addWidget(vod_filepath_label, 0, 0)
        self.info_layout.addWidget(id_twitch_label, 1, 0)
        self.info_layout.addWidget(created_at_label, 2, 0)
        self.info_layout.addWidget(duration_label, 3, 0)
        self.info_layout.addWidget(title_label, 4, 0)
        self.info_layout.addWidget(streamer_label, 5, 0)

        self.info_layout.addLayout(self.file_picker_layout, 0, 1)
        self.info_layout.addWidget(self.id_twitch_field, 1, 1)
        self.info_layout.addWidget(self.created_at_field, 2, 1)
        self.info_layout.addWidget(self.duration_field, 3, 1)
        self.info_layout.addWidget(self.title_field, 4, 1)
        self.info_layout.addWidget(self.streamer_field, 5, 1)

        self.segments_create_btn = QPushButton("Import Chapters")
        self.download_thumbnails_btn = QPushButton("Download Thumbnails")
        self.download_chatlog_btn = QPushButton("Download Chat Log")

        self.segments_list = QListWidget()

        self.segments_add_btn = QPushButton(text="+")
        self.segments_delete_btn = QPushButton(text="-")

        self.jump_start_btn = QPushButton(text="Jump To Start")
        self.jump_end_btn = QPushButton(text="Jump To End")

        self.set_start_btn = QPushButton(text="Set Start")
        self.set_end_btn = QPushButton(text="Set End")

        self.split_btn = QPushButton(text="Split")

        self.process_selected_btn = QPushButton(
            text="Process Selected Segment")
        self.process_all_btn = QPushButton(text="Process All Segments")

        self.jump_layout = QHBoxLayout()

        self.jump_layout.addWidget(self.jump_start_btn)
        self.jump_layout.addWidget(self.jump_end_btn)

        self.set_layout = QHBoxLayout()

        self.set_layout.addWidget(self.set_start_btn)
        self.set_layout.addWidget(self.set_end_btn)

        self.main_layout.addWidget(self.launch_vlc_btn)
        self.main_layout.addLayout(self.file_picker_layout)
        self.main_layout.addLayout(self.info_layout)
        self.main_layout.addWidget(self.segments_create_btn)
        self.main_layout.addWidget(self.download_thumbnails_btn)
        self.main_layout.addWidget(self.download_chatlog_btn)
        self.main_layout.addWidget(self.segments_list)
        self.main_layout.addWidget(self.segments_add_btn)
        self.main_layout.addWidget(self.segments_delete_btn)
        self.main_layout.addLayout(self.jump_layout)
        self.main_layout.addLayout(self.set_layout)
        self.main_layout.addWidget(self.split_btn)
        self.main_layout.addWidget(self.process_selected_btn)
        self.main_layout.addWidget(self.process_all_btn)

        self.main_widget = QWidget()
        self.main_widget.setLayout(self.main_layout)

        self.setCentralWidget(self.main_widget)

        self.segments_list.itemDoubleClicked.connect(
            self.on_segments_list_doubleclick)

        self.jump_start_btn.clicked.connect(self.jump_to_segment_start)
        self.jump_end_btn.clicked.connect(self.jump_to_segment_end)
        self.set_start_btn.clicked.connect(self.set_segment_start)
        self.set_end_btn.clicked.connect(self.set_segment_end)

        self.download_thumbnails_btn.clicked.connect(self.download_thumbnails)
        self.segments_add_btn.clicked.connect(self.create_segment)
        self.segments_delete_btn.clicked.connect(self.delete_segment)
        self.split_btn.clicked.connect(self.split_selected_segment)
        self.launch_vlc_btn.clicked.connect(self.on_launch_vlc)
        self.file_path_field.returnPressed.connect(self.on_video_url_changed)
        self.file_browser_btn.clicked.connect(self.on_filebrowse_btn_click)
        self.process_selected_btn.clicked.connect(
            self.process_selected_segment)
        self.process_all_btn.clicked.connect(self.process_all_segments)
    def __init__(self, platforms, regions, genres, years):
        super(FilterDock, self).__init__()

        # QDockWidget settings
        self.setAllowedAreas(Qt.BottomDockWidgetArea)
        self.setFeatures(QDockWidget.DockWidgetClosable)
        self.setFixedHeight(150)
        self.setVisible(False)
        self.setWindowTitle("Filter options")

        # The selected items for each widget are saved in a set-dictionary
        self._selections = defaultdict(set)

        #  Widget settings
        # Platform widgets
        self._platformLabel = QLabel("Platform")
        self._platforms = QListWidget()
        self._platforms.addItems(platforms)
        self._platforms.setSelectionMode(QAbstractItemView.MultiSelection)
        self._platforms.setMaximumWidth(200)
        self._platformVBox = QVBoxLayout()
        self._platformVBox.addWidget(self._platformLabel, 0)
        self._platformVBox.addWidget(self._platforms, 1)

        # Region widgets
        self._regionLabel = QLabel("Region")
        self._regions = QListWidget()
        self._regions.addItems(regions)
        self._regions.setSelectionMode(QAbstractItemView.MultiSelection)
        self._regions.setMaximumWidth(200)
        self._regionVBox = QVBoxLayout()
        self._regionVBox.addWidget(self._regionLabel, 0)
        self._regionVBox.addWidget(self._regions, 1)

        # Genre widgets
        self._genreLabel = QLabel("Genre")
        self._genres = QListWidget()
        self._genres.addItems(genres)
        self._genres.setSelectionMode(QAbstractItemView.MultiSelection)
        self._genres.setMaximumWidth(300)
        self._genreVBox = QVBoxLayout()
        self._genreVBox.addWidget(self._genreLabel, 0)
        self._genreVBox.addWidget(self._genres, 1)

        # Year widgets
        self._yearLabel = QLabel("Year")
        self._years = QListWidget()
        self._years.addItems(years)
        self._years.setSelectionMode(QAbstractItemView.MultiSelection)
        self._years.setMaximumWidth(75)
        self._yearsVbox = QVBoxLayout()
        self._yearsVbox.addWidget(self._yearLabel, 0)
        self._yearsVbox.addWidget(self._years, 1)

        # Inventory widgets
        self._itemType = {1: "Game", 2: "Console", 3: "Accessory"}
        self._item = QCheckBox(self._itemType[1])
        self._item.setTristate(True)
        self._item.setCheckState(Qt.PartiallyChecked)
        self._manual = QCheckBox("Manual")
        self._manual.setTristate(True)
        self._manual.setCheckState(Qt.PartiallyChecked)
        self._box = QCheckBox("Box")
        self._box.setTristate(True)
        self._box.setCheckState(Qt.PartiallyChecked)
        self._inventoryLabelsVBox = QVBoxLayout()
        self._inventorySelectionsVBox = QVBoxLayout()
        self._inventorySelectionsVBox.addStretch(3)
        self._inventorySelectionsVBox.addWidget(self._item, 0)
        self._inventorySelectionsVBox.addWidget(self._box, 1)
        self._inventorySelectionsVBox.addWidget(self._manual, 2)
        self._inventorySelectionsVBox.setAlignment(Qt.AlignLeft)
        self._haveHBox = QHBoxLayout()
        self._haveHBox.addLayout(self._inventoryLabelsVBox, 0)
        self._haveHBox.addLayout(self._inventorySelectionsVBox, 1)
        self._inventoryGroup = QGroupBox("Inventory")
        self._inventoryGroup.setMaximumWidth(120)
        self._inventoryGroup.setLayout(self._haveHBox)

        # Clear and Apply button widgets
        self._clearBtn = QPushButton("Clear selection")
        self._clearBtn.setMaximumSize(self._clearBtn.sizeHint())
        self._clearBtn.clicked.connect(self._clearFilters)
        self._btnHBox = QHBoxLayout()
        self._btnHBox.setAlignment(Qt.AlignBottom | Qt.AlignRight)
        self._btnHBox.addWidget(self._clearBtn, 0)

        # General layout
        mainHBox = QHBoxLayout()
        mainHBox.setAlignment(Qt.AlignLeft)
        mainHBox.addLayout(self._platformVBox, 0)
        mainHBox.addLayout(self._regionVBox, 0)
        mainHBox.addLayout(self._genreVBox, 0)
        mainHBox.addLayout(self._yearsVbox, 0)
        mainHBox.addWidget(self._inventoryGroup, 0)
        mainHBox.addLayout(self._btnHBox, 0)
        mainWidget = QWidget()
        mainWidget.setLayout(mainHBox)
        self.setWidget(mainWidget)