Skip to content

Commit 9593dfd

Browse files
committed
add frame ui
1 parent 37b01c9 commit 9593dfd

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

main.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ def capture(self, _, __):
8787
frame_file = self.ProMan.frames_folder / f"{len(list(self.ProMan.frames_folder.glob('*.png'))):06d}.png"
8888
cv2.imwrite(str(frame_file), frame) # Fix: Convert Path to string
8989

90+
self.refetch_frames_list()
91+
9092
def render_capture(self):
9193
if not (self.isInitCap and self.isopenProject):
9294
return
@@ -102,6 +104,28 @@ def render_capture(self):
102104
texture_data = np.true_divide(data, 255.0) # Normalize to [0, 1]
103105
dpg.set_value("texture_preview", texture_data)
104106

107+
def refetch_frames_list(self):
108+
if not self.isopenProject:
109+
return
110+
111+
frames = self.ProMan.list_frames()
112+
113+
for frame in frames:
114+
frame_name = frame.name
115+
frame_path = frame
116+
117+
with dpg.texture_registry():
118+
width, height, channels, data = dpg.load_image(str(frame_path))
119+
120+
try:
121+
dpg.add_raw_texture(width, height, data, format=dpg.mvFormat_Float_rgb, tag=f"frame_texture_{frame_name}")
122+
except Exception as e:
123+
continue
124+
125+
with dpg.group(horizontal=True, parent="frames_window_group"):
126+
dpg.add_image(f"frame_texture_{frame_name}")
127+
dpg.add_button(label="Delete", callback=lambda _, __: frame_path.unlink(), tag=f"frame_delete_{frame_name}")
128+
105129
def create_project(self, _, __):
106130
project_name = dpg.get_value("new_project_name")
107131
project_fps = dpg.get_value("new_project_fps")
@@ -121,16 +145,19 @@ def create_project(self, _, __):
121145
try:
122146
self.ProMan.create_project()
123147
self.isopenProject = True
148+
self.refetch_frames_list()
124149
Thread(target=self.start_camera).start()
125150
except Exception as e:
126151
dpg.show_item("dialog_window")
127152
dpg.set_value("dialog_window_title", "can't create project")
128153
dpg.set_value("dialog_window_text", str(traceback.format_exc()))
129154

155+
130156
def open_project(self, _, data):
131157
try:
132158
self.ProMan = ProjectManager.load_project(data["file_path_name"])
133159
self.isopenProject = True
160+
self.refetch_frames_list()
134161
Thread(target=self.start_camera).start()
135162
except Exception as e:
136163
dpg.show_item("dialog_window")
@@ -195,7 +222,7 @@ def init(self):
195222

196223
raw_data = array.array("f", texture_data)
197224

198-
with dpg.texture_registry():
225+
with dpg.texture_registry(show=True):
199226
dpg.add_raw_texture(self.preview_size[0], self.preview_size[1], raw_data, format=dpg.mvFormat_Float_rgb, tag="texture_preview")
200227
dpg.add_raw_texture(self.preview_size[0], self.preview_size[1], raw_data, format=dpg.mvFormat_Float_rgb, tag="texture_playback")
201228

@@ -244,6 +271,10 @@ def render(self):
244271

245272
dpg.configure_item("effect_window", width=window_width, height=effect_height, pos=(0, effect_y))
246273

274+
# Frames window height at the full right side of the viewport
275+
frames_width = viewport_width - window_width
276+
dpg.configure_item("frames_window", width=frames_width, height=viewport_height-18, pos=(window_width, 18))
277+
247278
def exit(self):
248279
self.close_project(None, None)
249280
dpg.destroy_context()

manager.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,6 @@ def load_project(project_location):
144144
project_height=project_settings["height"],
145145
project_location=project_location
146146
)
147+
148+
def list_frames(self):
149+
return sorted(self.frames_folder.glob("*.png"))

ui.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ def windows(self):
3131
dpg.add_text("Effect")
3232
dpg.add_group(horizontal=True, tag="effect_window_group")
3333

34+
with dpg.window(label="Frames", tag="frames_window", show=True, no_close=True, no_resize=True, no_title_bar=True, no_move=True):
35+
dpg.add_text("Frames")
36+
# add group for frames
37+
dpg.add_group(horizontal=True, tag="frames_window_group")
38+
39+
3440
dpg.add_file_dialog(label="Open Project", tag="open_project_dialog", callback=self.app.open_project, directory_selector=True, show=False)
3541

3642
with dpg.window(label="Preferences", tag="preferences_window", show=False):

0 commit comments

Comments
 (0)