예제 #1
0
    def add_mod_xml(self, parents: list, mod: str) -> None:
        log_method_name()
        if mod == DEFAULT_MOD_TEXT:
            return

        # Add entry to currently used dictionary
        parent_dict = ModsContainer.mods
        for p in parents:
            if p not in parent_dict:
                parent_dict[p] = {}
            parent_dict = parent_dict[p]
        parent_dict[ModsContainer.get_mod_key(mod)] = ModsContainer.get_mod_value(mod)

        # Save entry in mod filter file
        parent_xml = self.xml_root
        for parent in parents:
            node = parent_xml.find(parent)
            if node is not None:
                parent_xml = node
        if parent_xml != self.xml_root:
            element = ElementTree.Element("mod")
            element.text = mod
            parent_xml.append(element)
            xml_indent(self.xml_root)
            tree = ElementTree.ElementTree(self.xml_root)
            tree.write(self.xml_path)
예제 #2
0
    def save_cfg(self) -> None:
        log_method_name()
        tree = ElementTree.parse(CONFIG_PATH)
        root = tree.getroot()

        root.find("account_name").text = self.edit_account_name.text()
        root.find("stash_name").text = self.edit_stash.text()
        root.find("league_base_name").text = self.edit_base_league_name.text()
        root.find("league").text = self.combo_league.currentText()
        root.find("session_id").text = self.edit_session.text()
        stash_type = "Normal" if self.radio_stash_normal.isChecked() else "Quad"
        root.find("stash_type").text = stash_type
        root.find("main_widget_y").text = str(self.main_widget_y)
        if hasattr(self, "slider"):
            root.find("slider_value").text = str(self.slider.value)
        if self.painter_geometry:
            root.find("painter_x").text = str(self.painter_geometry.x())
            root.find("painter_y").text = str(self.painter_geometry.y())
            root.find("painter_w").text = str(self.painter_geometry.width())
            root.find("painter_h").text = str(self.painter_geometry.height())

        tree.write(CONFIG_PATH)

        # Painter already notifies us about size/position changes through signal,
        # I don't know how to do bidirectional signaling so I'm setting values by reference
        self.painter_widget.stash_type = stash_type
        if hasattr(self, "slider"):
            self.painter_widget.number_of_mods_to_draw = self.slider.value

        self.configuration_changed.emit(self.get_settings_for_requester())  # Notify Requester
예제 #3
0
    def load_mods(self, xml_path: str) -> None:
        log_method_name()
        self.xml_root = ElementTree.parse(xml_path).getroot()
        root = self.model.invisibleRootItem()
        category1 = list(self.xml_root)  # weapon, accessory, armour...
        for cat1 in category1:
            cat1_item = QStandardItem(cat1.tag)
            cat1_item.setEditable(False)
            root.appendRow(cat1_item)

            category2 = list(cat1)  # bow, claw, helmet, ring...
            for cat2 in category2:
                if cat2.tag == "mod":
                    continue
                cat2_item = QStandardItem(cat2.tag)
                cat2_item.setEditable(False)
                cat1_item.appendRow(cat2_item)
                mods2 = list(cat2)
                if mods2:
                    for mod in mods2:
                        cat2_item.appendRow(QStandardItem(mod.text))
                cat2_item.appendRow(QStandardItem(DEFAULT_MOD_TEXT))

            # Mods of category1 are added after subcategories because adding new mod or modifying existing one
            # makes it to go to the end of elements list
            mods1 = cat1.findall("mod")
            if mods1:
                for mod in mods1:
                    cat1_item.appendRow(QStandardItem(mod.text))
            cat1_item.appendRow(QStandardItem(DEFAULT_MOD_TEXT))
예제 #4
0
    def process_item_changed(self, item1: QStandardItem) -> None:
        log_method_name()
        parent = item1.parent()
        parents = []
        while parent:
            parents.append(parent.text())
            parent = parent.parent()

        if item1.text() == "":  # Deleting mod
            if FiltersWidget.mod_text_before_change == DEFAULT_MOD_TEXT:
                # Minor bug (not affecting XML file): If someone adds some characters after default mod text and then
                # removes them, there will be additional entry in mod list with default mod text, resets after program
                # reboot.
                item1.setText(DEFAULT_MOD_TEXT)
            else:
                self.delete_mod_xml(parents[::-1], FiltersWidget.mod_text_before_change)
                self.model.removeRow(item1.index().row(), item1.index().parent())
        elif any(c.isdigit() for c in item1.text()):
            if (FiltersWidget.mod_text_before_change == DEFAULT_MOD_TEXT  # Adding mod
                    or not any(c.isdigit() for c in FiltersWidget.mod_text_before_change)):
                self.add_mod_xml(parents[::-1], item1.text())
                item1.parent().appendRow(QStandardItem(DEFAULT_MOD_TEXT))
            else:  # Modifying mod
                self.delete_mod_xml(parents[::-1], FiltersWidget.mod_text_before_change)
                self.add_mod_xml(parents[::-1], item1.text())
예제 #5
0
    def __init__(self):
        super(FiltersWidget,
              self).__init__(None,
                             Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
        log_method_name()
        load_styles(self)

        # Setup layout
        self.treeView = QTreeView()
        layout = QVBoxLayout()
        layout.addWidget(self.treeView)
        btn_hide = QPushButton("Close")
        btn_hide.clicked.connect(self.hide)
        layout.addWidget(btn_hide)
        self.setLayout(layout)
        self.setMinimumSize(WINDOW_WIDTH, WINDOW_HEIGHT)

        self.model = QStandardItemModel()
        self.treeView.setModel(self.model)
        self.treeView.setSelectionMode(QAbstractItemView.SingleSelection)
        self.treeView.setHeaderHidden(True)

        # Set delegate to grab mod value before it is changed, need it to modify xml and dictionary values
        self.treeView.setItemDelegate(ItemDelegate())
        self.model.itemChanged.connect(self.process_item_changed)

        self.xml_path = DEFAULT_FILTER_PATH
        self.xml_root = None

        self.load_mods(self.xml_path)
예제 #6
0
    def __init__(self, painter_widget: PainterWidget):
        self.painter_geometry = None
        super(SettingsWidget, self).__init__()
        log_method_name()
        self.painter_widget = painter_widget
        self.painter_widget.colors = slider_colors
        self.mode = "chaos_recipe"  # default mode
        self.allow_identified = False
        self.fill_greedy = True
        self.show_amulets = True
        self.show_rings = True
        self.show_belts = True
        self.auto_reload_filter = False
        self.poe_log_path = ""
        self.poe_filter_path = ""
        self.poe_filter_name = ""
        self.maximum_chaos_sets = 16

        self._create_slider(
        )  # Need to create if before loading configuration file to set tiles colors
        self._load_cfg()
        self._setup_ui()

        self.painter_widget.geometry_changed.connect(
            self.painter_geometry_changed)
예제 #7
0
    def __init__(self, painter_widget: PainterWidget):
        self.painter_geometry = None
        super(SettingsWidget, self).__init__()
        log_method_name()
        self.painter_widget = painter_widget
        self.painter_widget.colors = slider_colors

        self._create_slider()  # Need to create if before loading configuration file to set tiles colors
        self._load_cfg()
        self._setup_ui()
        self.main_widget_y = 0

        self.painter_widget.geometry_changed.connect(self.painter_geometry_changed)
예제 #8
0
파일: MainWidget.py 프로젝트: Essyer/PoETiS
 def show_hide_buttons(self) -> None:
     log_method_name()
     self.stash_name.hide()
     for button in self.buttons:
         if button != self.drag_button:
             if button.isVisible():
                 button.hide()
             else:
                 button.show()
     if self.stash_switch_button_left.isVisible():
         self.stash_switch_button_left.hide()
         self.stash_switch_button_right.hide()
     else:
         self.stash_switch_button_left.show()
         self.stash_switch_button_right.show()
예제 #9
0
    def _load_cfg(self) -> None:
        log_method_name()
        if not os.path.isfile(CONFIG_PATH):
            prepare_cfg(CONFIG_PATH)
        tree = ElementTree.parse(CONFIG_PATH)
        root = tree.getroot()
        self.account_name = self._cfg_load_or_default(root, "account_name")
        stashes_nodes = self._cfg_load_stashes(root)
        self.stashes = []
        for stash in stashes_nodes:
            self.stashes.append(stash)
        if self.stashes:
            self.active_stash = [
                self.stashes[0]["name"], 0, self.stashes[0]["type"]
            ]
        # mod_file should probably be validated upon loading (for existence)
        self.mod_file = self._cfg_load_or_default(root, "mod_file",
                                                  DEFAULT_FILTER_PATH)
        self.league = self._cfg_load_or_default(root, "league")
        self.league_base_name = self._cfg_load_or_default(
            root, "league_base_name", default_league_name)
        self.session_id = self._cfg_load_or_default(root, "session_id")
        self.stash_type = self._cfg_load_or_default(root, "stash_type", "quad")
        self.painter_widget.stash_type = self.stash_type
        self.mode = self._cfg_load_or_default(root, "mode", "chaos_recipe")
        self.allow_identified = self._cfg_load_or_default(
            root, "allow_identified", "False") == "True"
        self.fill_greedy = self._cfg_load_or_default(root, "fill_greedy",
                                                     "True") == "True"
        self.show_amulets = self._cfg_load_or_default(root, "show_amulets",
                                                      "True") == "True"
        self.show_rings = self._cfg_load_or_default(root, "show_rings",
                                                    "True") == "True"
        self.show_belts = self._cfg_load_or_default(root, "show_belts",
                                                    "True") == "True"
        self.auto_reload_filter = self._cfg_load_or_default(
            root, "auto_reload", "True") == "True"
        self.poe_log_path = self._cfg_load_or_default(
            root, "log_path", "Set PoE log file location")
        self.poe_filter_path = self._cfg_load_or_default(
            root, "filter_path", "Set PoE filter file location")
        self.poe_filter_name = self._cfg_load_or_default(
            root, "filter_name", "")
        self.maximum_chaos_sets = int(
            self._cfg_load_or_default(root, "max_chaos_sets", "16"))

        self._set_values_from_cfg()
예제 #10
0
    def _load_cfg(self) -> None:
        log_method_name()
        if not os.path.isfile(CONFIG_PATH):
            prepare_cfg(CONFIG_PATH)
        tree = ElementTree.parse(CONFIG_PATH)
        root = tree.getroot()
        self.account_name = root.find("account_name").text
        self.stash_name = root.find("stash_name").text
        self.league = root.find("league").text
        self.league_base_name = root.find("league_base_name").text
        self.session_id = root.find("session_id").text
        if root.find("stash_type").text == "Normal":
            self.stash_type = "Normal"
        else:
            self.stash_type = "Quad"

        self._set_values_from_cfg()
예제 #11
0
    def __init__(self, settings_widget: SettingsWidget):
        super(FiltersWidget, self).__init__(None, Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
        log_method_name()
        load_styles(self)
        self.xml_root = None

        # Setup layout
        self.treeView = QTreeView()
        layout = QVBoxLayout()
        layout.addWidget(self.treeView)
        btn_hide = QPushButton("Close")
        btn_hide.clicked.connect(self.hide)
        layout.addWidget(btn_hide)
        self.setLayout(layout)
        self.setMinimumSize(WINDOW_WIDTH, WINDOW_HEIGHT)
        self._init_tree()

        # this isn't requester, but same data works
        self._reload_settings(settings_widget.get_settings_for_requester())
        settings_widget.configuration_changed.connect(self._reload_settings)
예제 #12
0
파일: MainWidget.py 프로젝트: Essyer/PoETiS
 def show_hide_widget(self, widget: QWidget, force_show=False) -> None:
     log_method_name()
     icon = QIcon()
     if widget.isVisible() and not force_show:
         if isinstance(widget, PainterWidget):
             if widget.config_change_mode:
                 widget.hide_modification_mode()
                 return
             else:
                 icon.addPixmap(QPixmap(self.image_path + 'draw1.png'))
                 self.painter_button.setIcon(icon)
         widget.hide()
     else:
         if isinstance(widget, PainterWidget):
             if (self.requester.mode == "rare_scanner" and not widget.items) or \
                     (self.requester.mode == "chaos_recipe" and not widget.chaos_sets):
                 return
             else:
                 icon.addPixmap(QPixmap(self.image_path + 'draw2.png'))
                 self.painter_button.setIcon(icon)
         widget.show()
예제 #13
0
    def delete_mod_xml(self, parents: list, mod: str) -> None:
        log_method_name()
        parent_xml = self.xml_root
        # Remove entry from currently used dictionary
        parent_dict = ModsContainer.mods
        for p in parents:
            parent_dict = parent_dict[p]
        del parent_dict[ModsContainer.get_mod_key(mod)]

        for parent in parents:
            node = parent_xml.find(parent)
            if node:
                parent_xml = node
        if parent_xml != self.xml_root:
            elements = parent_xml.findall("mod")
            for element in elements:
                if element.text == mod:
                    parent_xml.remove(element)
                    xml_indent(self.xml_root)
                    tree = ElementTree.ElementTree(self.xml_root)
                    tree.write(self.xml_path)
예제 #14
0
 def show_hide_config(self) -> None:
     log_method_name()
     if self.config_change_mode:
         self.hide_modification_mode()
     else:
         self.show_modification_mode()
예제 #15
0
    def save_cfg(self) -> None:
        log_method_name()
        tree = ElementTree.parse(CONFIG_PATH)
        root = tree.getroot()

        self._cfg_set_or_create(root, "account_name",
                                self.edit_account_name.text())
        self._cfg_save_stashes(root)
        self._cfg_set_or_create(root, "mod_file",
                                FILTER_DIR + self.combo_mod_file.currentText())
        self._cfg_set_or_create(root, "league_base_name",
                                self.edit_base_league_name.text())
        self._cfg_set_or_create(root, "league",
                                self.combo_league.currentText())
        self._cfg_set_or_create(root, "session_id", self.edit_session.text())
        self._cfg_set_or_create(root, "main_widget_y", str(self.main_widget_y))
        if hasattr(self, "slider"):
            self._cfg_set_or_create(root, "slider_value",
                                    str(self.slider.value))
        if self.painter_geometry:
            self._cfg_set_or_create(root, "painter_x",
                                    str(self.painter_geometry.x()))
            self._cfg_set_or_create(root, "painter_y",
                                    str(self.painter_geometry.y()))
            self._cfg_set_or_create(root, "painter_w",
                                    str(self.painter_geometry.width()))
            self._cfg_set_or_create(root, "painter_h",
                                    str(self.painter_geometry.height()))

        self._cfg_set_or_create(root, "mode", self.mode)
        self._cfg_set_or_create(root, "allow_identified",
                                str(self.allow_identified))
        self._cfg_set_or_create(root, "fill_greedy", str(self.fill_greedy))
        self._cfg_set_or_create(root, "show_amulets", str(self.show_amulets))
        self._cfg_set_or_create(root, "show_rings", str(self.show_rings))
        self._cfg_set_or_create(root, "show_belts", str(self.show_belts))
        self._cfg_set_or_create(root, "auto_reload",
                                str(self.auto_reload_filter))
        self._cfg_set_or_create(root, "log_path", self.poe_log_path)
        self._cfg_set_or_create(root, "filter_path", self.poe_filter_path)
        if self.poe_filter_name:
            self.poe_filter_name = self.poe_filter_name.rstrip()
        self._cfg_set_or_create(root, "filter_name", self.poe_filter_name)
        self._cfg_set_or_create(root, "max_chaos_sets",
                                self.maximum_chaos_sets_text.text())
        self.maximum_chaos_sets = int(self.maximum_chaos_sets_text.text())

        xml_indent(root)
        tree.write(CONFIG_PATH)

        # Painter already notifies us about size/position changes through signal,
        # I don't know how to do bidirectional signaling so I'm setting values by reference
        self.painter_widget.stash_type = self.stashes[0][
            "type"] if self.stashes else "normal"
        if hasattr(self, "slider"):
            self.painter_widget.number_of_mods_to_draw = self.slider.value
        self.painter_widget.update()
        if self.stashes and not self.active_stash[0]:
            self.active_stash = [
                self.stashes[0]["name"], 0, self.stashes[0]["type"]
            ]

        self.configuration_changed.emit(
            self.get_settings_for_requester())  # Notify Requester
예제 #16
0
    def _setup_ui(self) -> None:
        log_method_name()
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)

        load_styles(self)
        layout_main = QVBoxLayout()

        button_stashes = QPushButton("Add/remove stashes")
        layout_main.addWidget(button_stashes)
        self._prepare_stashes_window()
        button_stashes.clicked.connect(self.window_stashes.show)

        label_mod_config = QLabel("Mod Filter")
        layout_main.addWidget(label_mod_config)
        self.combo_mod_file = QComboBox()
        self._update_mod_file_combo()
        self.combo_mod_file.activated.connect(self.save_cfg)
        self.combo_mod_file.installEventFilter(self)
        layout_main.addWidget(self.combo_mod_file)

        label_base_league_name = QLabel("League base name")
        layout_main.addWidget(label_base_league_name)
        self.edit_base_league_name = QLineEdit(self.league_base_name)
        self.edit_base_league_name.textChanged.connect(
            self._update_leagues_combo)
        self.edit_base_league_name.textChanged.connect(self.save_cfg)
        layout_main.addWidget(self.edit_base_league_name)

        label_league = QLabel("League")
        layout_main.addWidget(label_league)
        self.combo_league = QComboBox()
        self._update_leagues_combo()
        self.combo_league.currentTextChanged.connect(self.save_cfg)
        layout_main.addWidget(self.combo_league)

        self.button_show_account_session = QPushButton(
            "Show/hide account name and session")
        layout_main.addWidget(self.button_show_account_session)

        self.label_account_name = QLabel("Account name")
        layout_main.addWidget(self.label_account_name)
        self.edit_account_name = QLineEdit(self.account_name)
        self.edit_account_name.textChanged.connect(self.save_cfg)
        layout_main.addWidget(self.edit_account_name)

        self.label_session = QLabel("Session ID")
        layout_main.addWidget(self.label_session)
        self.edit_session = QLineEdit(self.session_id)
        self.edit_session.textChanged.connect(self.save_cfg)
        layout_main.addWidget(self.edit_session)

        # Hide account name and session ID if any of them was provided before
        if self.account_name or self.session_id:
            self.hide_account_session(True)
        self.button_show_account_session.clicked.connect(
            self.hide_account_session)

        btn_adjust_net = QPushButton("Adjust net position and size")
        btn_adjust_net.clicked.connect(self.painter_widget.show_hide_config)
        layout_main.addWidget(btn_adjust_net)

        label_session = QLabel("Minimum number of item mods to draw a frame")
        layout_main.addWidget(label_session)
        layout_slider = QHBoxLayout()
        self.slider.set_range(1, 5)
        self.slider.set_value(self.slider_value)
        load_styles(self.slider)
        layout_slider.addWidget(self.slider)
        layout_main.addLayout(layout_slider)

        self.slider.on_value_changed_call(self.save_cfg)

        self.radio_allow_identified = QRadioButton()
        self.radio_allow_identified.setAutoExclusive(False)
        self.radio_allow_identified.setChecked(self.allow_identified)
        self.radio_allow_identified.clicked.connect(
            self.switch_allow_identified)
        layout_radio = QHBoxLayout()
        layout_radio.setAlignment(Qt.AlignLeft)
        layout_radio.addWidget(self.radio_allow_identified)
        layout_radio.addWidget(
            QLabel("Allow identified items in chaos recipe"))
        layout_main.addLayout(layout_radio)

        self.radio_fill_greedy = QRadioButton()
        self.radio_fill_greedy.setAutoExclusive(False)
        self.radio_fill_greedy.setChecked(self.fill_greedy)
        self.radio_fill_greedy.clicked.connect(self.switch_fill_greedy)
        layout_radio = QHBoxLayout()
        layout_radio.setAlignment(Qt.AlignLeft)
        layout_radio.addWidget(self.radio_fill_greedy)
        layout_radio.addWidget(
            QLabel("Fill chaos recipe with more than one ilvl < 75 item"))
        layout_main.addLayout(layout_radio)

        self.radio_show_amulets = QRadioButton()
        self.radio_show_amulets.setAutoExclusive(False)
        self.radio_show_amulets.setChecked(self.show_amulets)
        self.radio_show_amulets.clicked.connect(self.switch_show_amulets)
        layout_radio = QHBoxLayout()
        layout_radio.setAlignment(Qt.AlignLeft)
        layout_radio.addWidget(self.radio_show_amulets)
        layout_radio.addWidget(QLabel("Always show amulets"))
        layout_main.addLayout(layout_radio)

        self.radio_show_rings = QRadioButton()
        self.radio_show_rings.setAutoExclusive(False)
        self.radio_show_rings.setChecked(self.show_rings)
        self.radio_show_rings.clicked.connect(self.switch_show_rings)
        layout_radio = QHBoxLayout()
        layout_radio.setAlignment(Qt.AlignLeft)
        layout_radio.addWidget(self.radio_show_rings)
        layout_radio.addWidget(QLabel("Always show rings"))
        layout_main.addLayout(layout_radio)

        self.radio_show_belts = QRadioButton()
        self.radio_show_belts.setAutoExclusive(False)
        self.radio_show_belts.setChecked(self.show_belts)
        self.radio_show_belts.clicked.connect(self.switch_show_belts)
        layout_radio = QHBoxLayout()
        layout_radio.setAlignment(Qt.AlignLeft)
        layout_radio.addWidget(self.radio_show_belts)
        layout_radio.addWidget(QLabel("Always show belts"))
        layout_main.addLayout(layout_radio)

        self.radio_auto_reload = QRadioButton()
        self.radio_auto_reload.setAutoExclusive(False)
        self.radio_auto_reload.setChecked(self.auto_reload_filter)
        self.radio_auto_reload.clicked.connect(self.switch_auto_reload)
        layout_radio = QHBoxLayout()
        layout_radio.setAlignment(Qt.AlignLeft)
        layout_radio.addWidget(self.radio_auto_reload)
        layout_radio.addWidget(
            QLabel("Reload filter automatically after entering a map"))
        layout_main.addLayout(layout_radio)

        layout_main.addWidget(QLabel("PoE log file location"))
        self.poe_log_path_button = QPushButton()
        self.poe_log_path_button.clicked.connect(self.select_poe_log_file)
        if self.poe_log_path:
            self.poe_log_path_button.setText(
                self.path_for_button(self.poe_log_path))
        else:
            self.poe_log_path_button.setText("Set PoE log file location")
        self.poe_log_path_button.setToolTip("PoE log file location")
        layout_main.addWidget(self.poe_log_path_button)

        layout_main.addWidget(QLabel("PoE filter file location"))
        self.poe_filter_path_button = QPushButton()
        self.poe_filter_path_button.clicked.connect(
            self.select_poe_filter_file)
        if self.poe_filter_path:
            self.poe_filter_path_button.setText(
                self.path_for_button(self.poe_filter_path))
        else:
            self.poe_filter_path_button.setText("Set PoE filter file location")
        self.poe_filter_path_button.setToolTip("PoE filter file location")
        layout_main.addWidget(self.poe_filter_path_button)

        layout_main.addWidget(
            QLabel("Max number of chaos recipe sets in stash"))
        self.maximum_chaos_sets_text = QLineEdit(str(self.maximum_chaos_sets))
        self.maximum_chaos_sets_text.textChanged.connect(self.save_cfg)
        layout_main.addWidget(self.maximum_chaos_sets_text)

        self.btn_hide = QPushButton("Close")
        self.btn_hide.clicked.connect(self.close)
        layout_main.addWidget(self.btn_hide)

        self.setLayout(layout_main)
예제 #17
0
    def _setup_ui(self) -> None:
        log_method_name()
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)

        load_styles(self)
        layout_main = QVBoxLayout()

        label_id = QLabel("Account name")
        layout_main.addWidget(label_id)
        self.edit_account_name = QLineEdit(self.account_name)
        self.edit_account_name.textChanged.connect(self.save_cfg)
        layout_main.addWidget(self.edit_account_name)

        label_stash = QLabel("Stash name")
        layout_main.addWidget(label_stash)
        self.edit_stash = QLineEdit(self.stash_name)
        self.edit_stash.textChanged.connect(self.save_cfg)
        layout_main.addWidget(self.edit_stash)

        label_base_league_name = QLabel("League base name")
        layout_main.addWidget(label_base_league_name)
        self.edit_base_league_name = QLineEdit(self.league_base_name)
        self.edit_base_league_name.textChanged.connect(self._update_leagues_combo)
        self.edit_base_league_name.textChanged.connect(self.save_cfg)
        layout_main.addWidget(self.edit_base_league_name)

        label_league = QLabel("League")
        layout_main.addWidget(label_league)
        self.combo_league = QComboBox()
        self._update_leagues_combo()
        self.combo_league.currentTextChanged.connect(self.save_cfg)
        layout_main.addWidget(self.combo_league)

        label_session = QLabel("Session ID")
        layout_main.addWidget(label_session)
        self.edit_session = QLineEdit(self.session_id)
        self.edit_session.textChanged.connect(self.save_cfg)
        layout_main.addWidget(self.edit_session)

        label_session = QLabel("Stash type")
        layout_main.addWidget(label_session)
        layout_radio = QHBoxLayout()
        self.radio_stash_normal = QRadioButton("Normal")
        self.radio_stash_normal.toggled.connect(self.save_cfg)
        radio_stash_quad = QRadioButton("Quad")
        radio_stash_quad.toggled.connect(self.save_cfg)
        if self.stash_type == "Normal":
            self.radio_stash_normal.setChecked(True)
        else:
            radio_stash_quad.setChecked(True)
        layout_radio.addWidget(self.radio_stash_normal)
        layout_radio.addWidget(radio_stash_quad)
        layout_main.addLayout(layout_radio)

        btn_adjust_net = QPushButton("Adjust net position and size")
        btn_adjust_net.clicked.connect(self.painter_widget.show_hide_config)
        layout_main.addWidget(btn_adjust_net)

        label_session = QLabel("Item tiers to detect")
        layout_main.addWidget(label_session)
        layout_slider = QHBoxLayout()
        self.slider.set_range(1, 5)
        self.slider.set_value(self.slider_value)
        load_styles(self.slider)
        layout_slider.addWidget(self.slider)
        layout_main.addLayout(layout_slider)

        self.slider.on_value_changed_call(self.save_cfg)

        self.btn_hide = QPushButton("Close")
        self.btn_hide.clicked.connect(self.close)
        layout_main.addWidget(self.btn_hide)

        self.setLayout(layout_main)
예제 #18
0
 def show_modification_mode(self) -> None:
     log_method_name()
     self.drag_button.show()
     self.resize_button.show()
     self.show()
     self.config_change_mode = True
예제 #19
0
 def hide_modification_mode(self) -> None:
     log_method_name()
     self.drag_button.hide()
     self.resize_button.hide()
     self.hide()
     self.config_change_mode = False
예제 #20
0
파일: MainWidget.py 프로젝트: Essyer/PoETiS
    def __init__(self, screen_geometry: QRect):
        super(MainWidget, self).__init__(None)
        self.image_path = PROJECT_ROOT + "/img/"
        # initialize_logging()
        log_method_name()

        # Setup main widget UI
        self.screen_geometry = screen_geometry
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.Tool)
        self.setAttribute(Qt.WA_NoSystemBackground, True)
        self.setAttribute(Qt.WA_TranslucentBackground, True)
        self.buttons_size = QSize(26, 26)

        self.error_widget = DragWidget()
        load_styles(self.error_widget)
        self.error_widget.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)

        # Initialize other classes, order is important
        self.painter_widget = PainterWidget(screen_geometry)
        self.settings_widget = SettingsWidget(self.painter_widget)
        self.filters_widget = FiltersWidget(self.settings_widget)
        self.requester = Requester(self.settings_widget, self.painter_widget)
        self.last_requested_time = 0
        self.logListener = LogListener(self.settings_widget)
        self.filter_manager = FilterManager(self.settings_widget)

        # Load mod configuration
        ModsContainer.load_mods_config(self.settings_widget.mod_file)

        # Setup Requester thread
        self.objThread_requester = QThread()
        self.requester.moveToThread(self.objThread_requester)
        self.requester.finished.connect(self.objThread_requester.quit)
        self.requester.failed.connect(self._requester_failed)
        self.objThread_requester.started.connect(self.requester.run)
        self.objThread_requester.finished.connect(self._requester_finished)
        # self.requester.start()

        # Setup log listener and filter manager
        self.objThread_logListener = QThread()
        self.logListener.moveToThread(self.objThread_logListener)
        self.logListener.entered_map.connect(self._request_count_chaos_items)
        self.requester.finished_counting_chaos.connect(self._request_process_chaos_counters)
        self.logListener.start()

        # Setup main widget UI
        self.screen_geometry = screen_geometry
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
        self.setAttribute(Qt.WA_NoSystemBackground, True)
        self.setAttribute(Qt.WA_TranslucentBackground, True)

        self.move(0, self.settings_widget.main_widget_y)

        layout = QVBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setAlignment(Qt.AlignTop)
        layout.setSpacing(0)

        # Setup buttons
        self.drag_button = DragButton(self, True)
        icon = QIcon()
        icon.addPixmap(QPixmap(self.image_path + 'move.png'))
        self.drag_button.setIcon(icon)

        self.mode_switch_button = QPushButton()
        self.mode_switch_button.clicked.connect(lambda: self.show_hide_widget(self.painter_widget))
        font = QFont()
        font.setBold(True)
        self.mode_switch_button.setFont(font)
        if self.settings_widget.mode == "chaos_recipe":
            self.mode_switch_button.setText("C")
        else:
            self.mode_switch_button.setText("R")
        self.mode_switch_button.clicked.connect(self._switch_mode)
        self.mode_switch_button.setToolTip("Chaos recipe / Rare scanner")

        self.run_button = QPushButton()
        icon.addPixmap(QPixmap(self.image_path + 'run.png'))
        self.run_button.setIcon(icon)
        self.run_button.clicked.connect(self._run_requester)

        self.painter_button = QPushButton()
        self.painter_button.clicked.connect(lambda: self.show_hide_widget(self.painter_widget))
        icon.addPixmap(QPixmap(self.image_path + 'draw1.png'))
        self.painter_button.setIcon(icon)

        self.filter_reload_button = QPushButton()
        icon.addPixmap(QPixmap(self.image_path + 'refresh.png'))
        self.filter_reload_button.setIcon(icon)
        self.filter_reload_button.clicked.connect(self._request_count_chaos_items)
        self.filter_reload_button.setToolTip("Refresh chaos recipe filter")

        self.filters_button = QPushButton()
        self.filters_button.clicked.connect(lambda: self.show_hide_widget(self.filters_widget))
        icon.addPixmap(QPixmap(self.image_path + 'filter.png'))
        self.filters_button.setIcon(icon)
        self.filters_button.setToolTip("Manage rare scanner filters")

        self.settings_button = QPushButton()
        self.settings_button.clicked.connect(lambda: self.show_hide_widget(self.settings_widget))
        icon.addPixmap(QPixmap(self.image_path + 'settings.png'))
        self.settings_button.setIcon(icon)

        self.exit_button = QPushButton()
        self.exit_button.clicked.connect(QCoreApplication.quit)
        icon.addPixmap(QPixmap(self.image_path + 'exit.png'))
        self.exit_button.setIcon(icon)

        self.buttons = [
            self.drag_button,
            self.mode_switch_button,
            self.run_button,
            self.painter_button,
            self.filter_reload_button,
            self.filters_button,
            self.settings_button,
            self.exit_button
        ]
        for button in self.buttons:
            button.setFixedWidth(self.buttons_size.width())
            button.setFixedHeight(self.buttons_size.height())
            button.setWindowFlags(Qt.Dialog)
            load_styles(button)
            if button is self.mode_switch_button:
                layout.addWidget(button, 0, Qt.AlignTop)
            else:
                layout.addWidget(button, 0, Qt.AlignTop)
            if button is self.drag_button:
                self._prepare_stash_switch(layout)

        widget = QWidget(flags=Qt.Widget)
        widget.setLayout(layout)
        self.setCentralWidget(widget)