save chooseaddonupdate check state

This commit is contained in:
bluegreenmagick 2021-03-03 11:23:59 +09:00
parent 69006b5872
commit e73e0bec34

View file

@ -105,6 +105,7 @@ class AddonMeta:
max_point_version: int max_point_version: int
branch_index: int branch_index: int
human_version: Optional[str] human_version: Optional[str]
update_enabled: bool
def human_name(self) -> str: def human_name(self) -> str:
return self.provided_name or self.dir_name return self.provided_name or self.dir_name
@ -140,6 +141,7 @@ class AddonMeta:
max_point_version=json_meta.get("max_point_version", 0) or 0, max_point_version=json_meta.get("max_point_version", 0) or 0,
branch_index=json_meta.get("branch_index", 0) or 0, branch_index=json_meta.get("branch_index", 0) or 0,
human_version=json_meta.get("human_version"), human_version=json_meta.get("human_version"),
update_enabled=json_meta.get("update_enabled", True),
) )
@ -243,6 +245,7 @@ class AddonManager:
json_obj["branch_index"] = addon.branch_index json_obj["branch_index"] = addon.branch_index
if addon.human_version is not None: if addon.human_version is not None:
json_obj["human_version"] = addon.human_version json_obj["human_version"] = addon.human_version
json_obj["update_enabled"] = addon.update_enabled
self.writeAddonMeta(addon.dir_name, json_obj) self.writeAddonMeta(addon.dir_name, json_obj)
@ -1152,15 +1155,15 @@ class ChooseAddonsToUpdateList(QListWidget):
qconnect(self.itemDoubleClicked, self.double_click) qconnect(self.itemDoubleClicked, self.double_click)
def setup(self) -> None: def setup(self) -> None:
check_state = Qt.Unchecked
header_item = QListWidgetItem("", self) header_item = QListWidgetItem("", self)
header_item.setFlags(Qt.ItemFlag(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)) header_item.setFlags(Qt.ItemFlag(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled))
header_item.setBackground(Qt.lightGray) header_item.setBackground(Qt.lightGray)
header_item.setCheckState(check_state)
self.header_item = header_item self.header_item = header_item
for update_info in self.updated_addons: for update_info in self.updated_addons:
addon_id = update_info.id addon_id = update_info.id
addon_name = self.mgr.addon_meta(str(addon_id)).human_name() addon_meta = self.mgr.addon_meta(str(addon_id))
update_enabled = addon_meta.update_enabled
addon_name = addon_meta.human_name()
update_timestamp = update_info.suitable_branch_last_modified update_timestamp = update_info.suitable_branch_last_modified
update_time = datetime.fromtimestamp(update_timestamp) update_time = datetime.fromtimestamp(update_timestamp)
@ -1168,8 +1171,12 @@ class ChooseAddonsToUpdateList(QListWidget):
item = QListWidgetItem(addon_label, self) item = QListWidgetItem(addon_label, self)
# Not user checkable because it overlaps with itemClicked signal # Not user checkable because it overlaps with itemClicked signal
item.setFlags(Qt.ItemFlag(Qt.ItemIsEnabled)) item.setFlags(Qt.ItemFlag(Qt.ItemIsEnabled))
item.setCheckState(check_state) if update_enabled:
item.setCheckState(Qt.Checked)
else:
item.setCheckState(Qt.Unchecked)
item.setData(self.ADDON_ID_ROLE, addon_id) item.setData(self.ADDON_ID_ROLE, addon_id)
self.refresh_header_check_state()
def toggle_check(self, item: QListWidgetItem) -> None: def toggle_check(self, item: QListWidgetItem) -> None:
if item == self.header_item: if item == self.header_item:
@ -1182,11 +1189,9 @@ class ChooseAddonsToUpdateList(QListWidget):
# Normal Item # Normal Item
if item.checkState() == Qt.Checked: if item.checkState() == Qt.Checked:
item.setCheckState(Qt.Unchecked) item.setCheckState(Qt.Unchecked)
self.header_item.setCheckState(Qt.Unchecked)
else: else:
item.setCheckState(Qt.Checked) item.setCheckState(Qt.Checked)
if self.every_item_is_checked(): self.refresh_header_check_state()
self.header_item.setCheckState(Qt.Checked)
def double_click(self, item: QListWidgetItem) -> None: def double_click(self, item: QListWidgetItem) -> None:
if item == self.header_item: if item == self.header_item:
@ -1201,21 +1206,33 @@ class ChooseAddonsToUpdateList(QListWidget):
for i in range(1, self.count()): for i in range(1, self.count()):
self.item(i).setCheckState(check) self.item(i).setCheckState(check)
def every_item_is_checked(self) -> bool: def refresh_header_check_state(self) -> None:
for i in range(1, self.count()): for i in range(1, self.count()):
item = self.item(i) item = self.item(i)
if item.checkState() == Qt.Unchecked: if item.checkState() == Qt.Unchecked:
return False self.header_item.setCheckState(Qt.Unchecked)
return True return
self.header_item.setCheckState(Qt.Checked)
def get_selected_addon_ids(self) -> List[int]: def get_selected_addon_ids(self) -> List[int]:
addon_ids = [] addon_ids = []
for i in range(1, self.count()): for i in range(1, self.count()):
item = self.item(i) item = self.item(i)
if item.checkState() == Qt.Checked: if item.checkState() == Qt.Checked:
addon_ids.append(item.data(self.ADDON_ID_ROLE)) addon_id = item.data(self.ADDON_ID_ROLE)
addon_ids.append(addon_id)
return addon_ids return addon_ids
def save_check_state(self) -> None:
for i in range(1, self.count()):
item = self.item(i)
addon_id = item.data(self.ADDON_ID_ROLE)
addon_meta = self.mgr.addon_meta(str(addon_id))
checked = item.checkState() == Qt.Checked
print(checked)
addon_meta.update_enabled = checked
self.mgr.write_addon_meta(addon_meta)
class ChooseAddonsToUpdateDialog(QDialog): class ChooseAddonsToUpdateDialog(QDialog):
def __init__( def __init__(
@ -1249,6 +1266,7 @@ class ChooseAddonsToUpdateDialog(QDialog):
"Returns a list of selected addons' ids" "Returns a list of selected addons' ids"
ret = self.exec_() ret = self.exec_()
saveGeom(self, "addonsChooseUpdate") saveGeom(self, "addonsChooseUpdate")
self.addons_list_widget.save_check_state()
if ret == QDialog.Accepted: if ret == QDialog.Accepted:
return self.addons_list_widget.get_selected_addon_ids() return self.addons_list_widget.get_selected_addon_ids()
else: else: