增加本地存储,完成

This commit is contained in:
ruotongyu
2024-03-10 13:10:30 +08:00
parent 5e5eef3f58
commit e538535d55
5 changed files with 52 additions and 29 deletions

View File

@@ -65,9 +65,9 @@ class ActionBase:
self.action_arg[arg_name] = self.__ui_name_and_link_edit[arg_name].text()
# 如果双击应用列表打开的配置页面,保存后向应用列表最后插入
if self.action_pos is None:
self.action_pos = GlobalUtil.action_list_global.count()
self.action_pos = GlobalUtil.current_action.count()
GlobalUtil.action_list_global.insertItem(self.action_pos, ActionListViewItem(self))
GlobalUtil.current_action.insertItem(self.action_pos, ActionListViewItem(self))
self.__config_ui.hide()
def config_page_show(self):

View File

@@ -5,15 +5,15 @@ from actions.search_engine_action import SearchEngineAction
class ActionList:
funcs = [OpenApplicationAction(), OpenBrowserUrlAction(), SearchEngineAction(), LLMAction()]
actions = [OpenApplicationAction(), OpenBrowserUrlAction(), SearchEngineAction(), LLMAction()]
@classmethod
def get_funcs(cls):
return cls.funcs
return cls.actions
@classmethod
def get_fuc_by_name(cls, name):
for i in cls.funcs:
def get_action_by_name(cls, name):
for i in cls.actions:
if i.name == name:
return i
return None

View File

@@ -25,7 +25,7 @@ class ActionListViewItem(QListWidgetItem):
def load(cls, action_item: ActionItem):
from actions.action_list import ActionList
from actions.action_base import ActionBase
action: ActionBase = ActionList.get_fuc_by_name(action_item.action_name)()
action: ActionBase = ActionList.get_action_by_name(action_item.action_name)
action.action_pos = action_item.action_pos
action.action_arg = action_item.action_arg
action_list_view_item = ActionListViewItem(action)
@@ -48,11 +48,12 @@ class ActionListView(QListWidget):
func_description: str
action_items: list[ActionListViewItem.ActionItem]
def __init__(self):
def __init__(self, func_list_pos_row, func_list_pos_column, *args, **kwargs):
super().__init__()
# 在func上的信息
self.func_list_pos_row = -1
self.func_list_pos_column = -1
# 在func页面上的位置
self.func_list_pos_row = func_list_pos_row
self.func_list_pos_column = func_list_pos_column
# 在func上的名称
self.func_name = ""
self.func_description = ""
self.setAcceptDrops(True)
@@ -71,9 +72,8 @@ class ActionListView(QListWidget):
@classmethod
def load(cls, action_list_view_json: ActionListViewJson):
action_list_view = ActionListView()
action_list_view.func_list_pos_row = action_list_view_json.func_list_pos_row
action_list_view.func_list_pos_column = action_list_view_json.func_list_pos_column
action_list_view = ActionListView(action_list_view_json.func_list_pos_row,
action_list_view_json.func_list_pos_column)
action_list_view.func_name = action_list_view_json.func_name
action_list_view.func_description = action_list_view_json.func_description
for item in action_list_view_json.action_items:
@@ -222,7 +222,7 @@ class ActionListView(QListWidget):
# 向指定行插入数据
item_data = e.mimeData().data(self.my_mime_type)
from actions.action_list import ActionList
function = ActionList.get_fuc_by_name(item_data)
function = ActionList.get_action_by_name(item_data)
function.action_pos = self.the_insert_row
function.config_page_show()
# self.insertItem(self.the_insert_row, ActionListViewItem(function))
@@ -234,7 +234,19 @@ class ActionListView(QListWidget):
class GlobalUtil:
action_list_global: [ActionListView]
action_list_global: list[ActionListView] = []
current_action: ActionListView = None
@classmethod
def get_list_view_by_position(cls, row, column):
for i in cls.action_list_global:
if i.func_list_pos_row == row and i.func_list_pos_column == column:
return i
return None
@classmethod
def delete_action_view(cls, action_view):
cls.action_list_global.remove(action_view)
@classmethod
def read_from_local(cls):
@@ -243,13 +255,16 @@ class GlobalUtil:
return []
with open("./cache", "rb") as file:
data = pickle.load(file)["action_list_global"]
data = pickle.load(file).get("action_list_global")
if not data:
data = []
return data
@classmethod
def save_to_local(cls):
with open("./cache", "wb") as file:
pickle.dump({"action_list_global": cls.action_list_global}, file)
action_list_json = [i.dump() for i in cls.action_list_global]
pickle.dump({"action_list_global": action_list_json}, file)
@classmethod
def init(cls):
@@ -264,5 +279,4 @@ class GlobalUtil:
else:
action_list_json = []
for action in action_list_json:
action_json = ActionListView.ActionListViewJson(**action)
cls.action_list_global.append(ActionListView.load(action_json))
cls.action_list_global.append(ActionListView.load(action))

View File

@@ -9,7 +9,7 @@ class EditPage(BasePage):
self.ui = QtUtil.load_ui("edit_page.ui")
function_list_view = FunctionListView()
self.ui.function_list_layout.addWidget(function_list_view)
# self.ui.ListViewLayout.addWidget(GlobalUtil.action_list_global)
self.ui.ListViewLayout.addWidget(GlobalUtil.current_action)
self.ui.run_button.clicked.connect(self.__run_button_click)
self.ui.save_button.clicked.connect(self.__save_button_click)
self.ui.cancel_button.clicked.connect(self.__cancel_button_click)
@@ -21,16 +21,19 @@ class EditPage(BasePage):
def __save_button_click(self):
GlobalUtil.save_to_local()
self.ui.hide()
self.func = FunctionListView()
from pages.func_list_page import FuncListPage
self.func = FuncListPage()
self.func.show()
def __cancel_button_click(self):
GlobalUtil.delete_action_view(GlobalUtil.current_action)
self.ui.hide()
self.func = FunctionListView()
self.func.show()
def __run_button_click(self):
GlobalUtil.action_list_global.model()
for index in range(GlobalUtil.action_list_global.count()):
func = GlobalUtil.action_list_global.item(index)
@staticmethod
def __run_button_click():
GlobalUtil.current_action.model()
for index in range(GlobalUtil.current_action.count()):
func = GlobalUtil.current_action.item(index)
r = func.__getattribute__("func").run_with_out_arg()

View File

@@ -3,15 +3,16 @@ from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QPushButton, QGraphicsOpacityEffect
from pages.bse_page import BasePage
from pages.edit_action_list_view import GlobalUtil, ActionListView
from pages.edit_page import EditPage
from utils.qt_util import QtUtil
class AddFuncButton(QPushButton):
def __init__(self, pos_x, pos_y, func_list_page):
def __init__(self, func_list_pos_row, func_list_pos_column, func_list_page):
super().__init__()
self.pos_x = pos_x
self.pos_y = pos_y
self.func_list_pos_row = func_list_pos_row
self.func_list_pos_column = func_list_pos_column
self.func_list_page = func_list_page
self.setMouseTracking(True)
self.clicked.connect(self.click)
@@ -27,6 +28,11 @@ class AddFuncButton(QPushButton):
def click(self):
self.func_list_page.hide()
list_view = GlobalUtil.get_list_view_by_position(self.func_list_pos_row, self.func_list_pos_column)
if not list_view:
list_view = ActionListView(self.func_list_pos_row, self.func_list_pos_column)
GlobalUtil.action_list_global.append(list_view)
GlobalUtil.current_action = list_view
self.edit_page = EditPage()
self.edit_page.show()