Skip to content

Commit 31821a9

Browse files
authored
Revert "Split/video v2 clean"
1 parent cfd783f commit 31821a9

12 files changed

Lines changed: 3074 additions & 4384 deletions

File tree

.deepsource.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
version = 1
2-
exclude_patterns = [
3-
"src/mulimgviewer/gui/main_gui.py",
4-
"src/mulimgviewer/gui/path_select_gui.py",
5-
]
62

73
[[analyzers]]
84
name = "python"

requirements.txt

100644100755
File mode changed.

src/mulimgviewer/__main__.py

Lines changed: 56 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -6,176 +6,97 @@
66

77
import wx
88
import wx.lib.inspection
9-
from PIL import ImageFile, Image
9+
from PIL import ImageFile,Image
1010

1111
from .src.main import MulimgViewer
1212
from .src.path_select import PathSelectFrame
1313

1414
ImageFile.LOAD_TRUNCATED_IMAGES = True
1515
Image.MAX_IMAGE_PIXELS = None
1616

17-
18-
class GuiManager:
19-
def __init__(self, UpdateUI, get_type, file_name=None):
17+
class GuiManager():
18+
def __init__(self, UpdateUI, get_type):
2019
self.UpdateUI = UpdateUI
2120
self.get_type = get_type
22-
self.file_name = file_name
2321
self.frameDict = {}
2422

25-
def GetFrame(self, type_):
26-
f = self.frameDict.get(type_)
27-
if f is None:
28-
f = self.CreateFrame(type_)
29-
self.frameDict[type_] = f
30-
return f
23+
def GetFrame(self, type):
24+
frame = self.frameDict.get(type)
25+
26+
if frame is None:
27+
frame = self.CreateFrame(type)
28+
self.frameDict[type] = frame
29+
30+
return frame
31+
32+
def CreateFrame(self, type):
33+
global file_name
34+
if file_name:
35+
input_path = Path(file_name).parent
36+
else:
37+
input_path = None
3138

32-
def CreateFrame(self, type_):
33-
input_path = Path(self.file_name).parent if self.file_name else None
34-
if type_ == 0:
39+
if type == 0:
3540
return MulimgViewer(None, self.UpdateUI, self.get_type, default_path=input_path)
36-
elif type_ == 1:
41+
elif type == 1:
3742
return PathSelectFrame(None, self.UpdateUI, self.get_type)
38-
else:
39-
raise ValueError(f"Unknown frame type: {type_}")
4043

4144

4245
class MainAPP(wx.App):
43-
def __init__(self, *args, file_name=None, **kwargs):
44-
self.file_name = file_name
45-
self.manager = None
46-
self.frame = [None, None]
47-
self.type = 0
48-
self.thread = 4
49-
self.video_manager = None
50-
self.shared_config = None
51-
self._last_manual_paths = []
52-
super().__init__(*args, **kwargs)
5346

5447
def OnInit(self):
55-
self.manager = GuiManager(self.UpdateUI, self.get_type, file_name=self.file_name)
56-
self.frame[0] = self.manager.GetFrame(0) # 主窗口
57-
self.frame[1] = self.manager.GetFrame(1) # 选择窗口
48+
self.manager = GuiManager(self.UpdateUI, self.get_type)
49+
self.frame = []
50+
self.frame.append(self.manager.GetFrame(0))
51+
self.frame.append(self.manager.GetFrame(1))
5852
self.frame[0].Show()
5953
self.SetTopWindow(self.frame[0])
6054
self.type = 0 # init show MulimgViewer
6155
return True
6256

63-
@staticmethod
64-
def _normalize_paths(paths):
65-
if paths is None:
66-
return []
67-
if isinstance(paths, str):
68-
return [paths] if paths else []
69-
try:
70-
iterable = list(paths)
71-
except TypeError:
72-
return []
73-
normalized = []
74-
for item in iterable:
75-
if isinstance(item, str):
76-
if item:
77-
normalized.append(item)
78-
else:
79-
normalized.append(str(item))
80-
return normalized
81-
82-
def UpdateUI(self, ui_type, input_path=None, parallel_to_sequential=None, video_manager=None, shared_config=None):
83-
"""
84-
ui_type: 1=PathSelectFrame, 0=MulimgViewer, -1=全部关闭
85-
input_path: list[str] 或 None
86-
parallel_to_sequential: 保持原参数
87-
"""
88-
if video_manager is not None:
89-
self.video_manager = video_manager
90-
self.shared_config = shared_config
91-
self.frame[1].set_video_manager(self.video_manager, self.shared_config)
92-
self.type = ui_type
93-
self.thread = 4
94-
95-
normalized_input = self._normalize_paths(input_path)
96-
ptos_flag = parallel_to_sequential
97-
if ptos_flag is None:
98-
frame0 = self.frame[0] if self.frame and self.frame[0] else None
99-
if frame0 is not None:
100-
shared_cfg = getattr(frame0, "shared_config", None)
101-
if shared_cfg is not None and hasattr(shared_cfg, "parallel_to_sequential"):
102-
ptos_flag = bool(getattr(shared_cfg, "parallel_to_sequential", False))
103-
elif hasattr(frame0, "parallel_to_sequential"):
104-
try:
105-
ptos_flag = bool(frame0.parallel_to_sequential.GetValue())
106-
except Exception:
107-
ptos_flag = False
108-
if ptos_flag is None:
109-
ptos_flag = False
110-
if normalized_input:
111-
self._last_manual_paths = normalized_input
112-
if not self.frame[0].shared_config.video_mode:
113-
self.frame[0].ImgManager.init(normalized_input, 1, ptos_flag)
57+
def UpdateUI(self, type, input_path=None, parallel_to_sequential=False):
58+
# type=1: PathSelectFrame
59+
# type=0: MulimgViewer
60+
# type=-1: Close
61+
self.type = type
62+
63+
if input_path != None:
64+
if len(input_path) != 0:
65+
# refresh one_dir_mul_dir_manual path
66+
self.frame[0].ImgManager.init(
67+
input_path, 1, parallel_to_sequential)
68+
self.frame[1].refresh_txt(input_path)
69+
11470
self.frame[0].show_img_init()
11571
self.frame[0].ImgManager.set_action_count(0)
11672
self.frame[0].show_img()
11773

118-
if ui_type == -1:
119-
try:
120-
self.frame[0].close(None)
121-
except Exception:
122-
pass
123-
try:
124-
self.frame[1].close(None)
125-
except Exception:
126-
pass
127-
return True
128-
129-
if ui_type == 0:
130-
if self.frame[1]:
131-
self.frame[1].Show(False)
132-
self.frame[0].Show(True)
133-
self.SetTopWindow(self.frame[0])
134-
return True
135-
136-
if ui_type == 1:
137-
try:
138-
if self.frame[1]:
139-
self.frame[1].Destroy()
140-
except Exception:
141-
pass
142-
self.frame[1] = self.manager.CreateFrame(1)
143-
144-
paths_to_show = None
145-
if normalized_input:
146-
paths_to_show = normalized_input
147-
self._last_manual_paths = normalized_input
148-
else:
149-
img_mgr = getattr(self.frame[0], "ImgManager", None)
150-
if img_mgr and getattr(img_mgr, "input_path", None):
151-
paths_to_show = self._normalize_paths(img_mgr.input_path)
152-
self._last_manual_paths = paths_to_show
153-
elif self._last_manual_paths:
154-
paths_to_show = self._normalize_paths(self._last_manual_paths)
155-
156-
if paths_to_show:
157-
try:
158-
self.frame[1].refresh_txt(paths_to_show)
159-
except AttributeError:
160-
self.frame[1].m_richText1.Value = "\n".join(paths_to_show) + "\n"
161-
# 关键:重建后立刻把 vm 注入新实例
162-
if getattr(self, "video_manager", None) is not None:
163-
self.frame[1].set_video_manager(self.video_manager,self.shared_config)
164-
165-
self.frame[1].Show(True)
166-
self.frame[1].Raise()
167-
self.SetTopWindow(self.frame[1])
168-
return True
74+
if type == -1:
75+
# close window
76+
self.frame[0].close(None)
77+
self.frame[1].close(None)
78+
elif type == 0:
79+
# hidden PathSelectFrame, show MulimgViewer
80+
self.frame[1].Show(False)
81+
self.frame[type].Show(True)
82+
elif type == 1:
83+
# show PathSelectFrame
84+
self.frame[type].Show(True)
16985

17086
return True
17187

17288
def get_type(self):
17389
return self.type
17490

91+
17592
def main():
176-
file_name = sys.argv[1] if len(sys.argv) > 1 else None
177-
app = MainAPP(file_name=file_name)
178-
# 调试可打开:
93+
global file_name
94+
if len(sys.argv)>1:
95+
file_name = sys.argv[1]
96+
else:
97+
file_name = None
98+
app = MainAPP()
99+
# debug
179100
# wx.lib.inspection.InspectionTool().Show()
180101
app.MainLoop()
181102

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
{
2+
"row_col": "1,1",
3+
"row_col_one_img": "1,1",
4+
"show_scale": "1,1",
5+
"row_col_img_unit": "3,1",
6+
"gap": "10,10,5,5,3,3,2,2",
7+
"magnifer_row_col": "1,1",
8+
"output_scale": "1,1",
9+
"img_resolution": "-1,-1",
10+
"magnifer_resolution": "-1,-1",
11+
"magnifier_show_scale": "-1,-1",
12+
"line_width": "2,2",
13+
"magnifier_out_scale": "1,1",
14+
"title_font_size": "20",
15+
"box_position": 0,
16+
"choice_normalized_size": 0,
17+
"choice_output": 0,
18+
"image_interp": 2,
19+
"Magnifier_format": 1,
20+
"title_font": 0,
21+
"parallel_sequential": false,
22+
"parallel_to_sequential": false,
23+
"auto_save_all": false,
24+
"move_file": false,
25+
"img_vertical": false,
26+
"one_img_vertical": false,
27+
"img_unit_vertical": false,
28+
"magnifer_vertical": false,
29+
"show_original": true,
30+
"show_magnifer": true,
31+
"title_show": true,
32+
"auto_layout_check": false,
33+
"one_img": false,
34+
"onetitle": false,
35+
"show_custom_func": false,
36+
"show_box": true,
37+
"show_box_in_crop": true,
38+
"select_img_box": false,
39+
"title_auto": true,
40+
"title_exif": false,
41+
"title_show_parent": false,
42+
"title_show_prefix": true,
43+
"title_show_name": true,
44+
"title_show_suffix": false,
45+
"title_down_up": false,
46+
"save_format": 0,
47+
"title_show_rename": false,
48+
"customfunc_choice": 0,
49+
"show_all_func": false,
50+
"show_all_func_layout": "2,2",
51+
"func_layout_vertical": false,
52+
"hotkeys": {
53+
"next_img": "CTRL+N",
54+
"last_img": "CTRL+L",
55+
"save_img": "CTRL+S",
56+
"refresh": "CTRL+R",
57+
"hidden": "CTRL+H",
58+
"move_up": "UP",
59+
"move_down": "DOWN",
60+
"move_left": "LEFT",
61+
"move_right": "RIGHT",
62+
"delete_box": "DELETE"
63+
},
64+
"window_state": {
65+
"x": 340,
66+
"y": 120,
67+
"w": 1026,
68+
"h": 779,
69+
"maximized": false
70+
}
71+
}

0 commit comments

Comments
 (0)