shinestacker 1.0.1__py3-none-any.whl → 1.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of shinestacker might be problematic. Click here for more details.
- shinestacker/_version.py +1 -1
- shinestacker/gui/gui_run.py +2 -2
- shinestacker/gui/main_window.py +7 -4
- shinestacker/gui/project_controller.py +2 -1
- shinestacker/retouch/io_gui_handler.py +21 -17
- {shinestacker-1.0.1.dist-info → shinestacker-1.0.2.dist-info}/METADATA +1 -1
- {shinestacker-1.0.1.dist-info → shinestacker-1.0.2.dist-info}/RECORD +11 -11
- {shinestacker-1.0.1.dist-info → shinestacker-1.0.2.dist-info}/WHEEL +0 -0
- {shinestacker-1.0.1.dist-info → shinestacker-1.0.2.dist-info}/entry_points.txt +0 -0
- {shinestacker-1.0.1.dist-info → shinestacker-1.0.2.dist-info}/licenses/LICENSE +0 -0
- {shinestacker-1.0.1.dist-info → shinestacker-1.0.2.dist-info}/top_level.txt +0 -0
shinestacker/_version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '1.0.
|
|
1
|
+
__version__ = '1.0.2'
|
shinestacker/gui/gui_run.py
CHANGED
|
@@ -133,11 +133,11 @@ class RunWindow(QTextEditLogger):
|
|
|
133
133
|
def find_parent(widget, class_name):
|
|
134
134
|
current = widget
|
|
135
135
|
while current is not None:
|
|
136
|
-
if current.
|
|
136
|
+
if current.objectName() == class_name:
|
|
137
137
|
return current
|
|
138
138
|
current = current.parent()
|
|
139
139
|
return None
|
|
140
|
-
parent = find_parent(self, "
|
|
140
|
+
parent = find_parent(self, "mainWindow")
|
|
141
141
|
if parent:
|
|
142
142
|
parent.retouch_callback(path[1])
|
|
143
143
|
else:
|
shinestacker/gui/main_window.py
CHANGED
|
@@ -52,6 +52,7 @@ class MainWindow(QMainWindow, LogManager):
|
|
|
52
52
|
def __init__(self):
|
|
53
53
|
QMainWindow.__init__(self)
|
|
54
54
|
LogManager.__init__(self)
|
|
55
|
+
self.setObjectName("mainWindow")
|
|
55
56
|
self.project_controller = ProjectController(self)
|
|
56
57
|
self.project_editor = self.project_controller.project_editor
|
|
57
58
|
actions = {
|
|
@@ -139,6 +140,8 @@ class MainWindow(QMainWindow, LogManager):
|
|
|
139
140
|
self.project_controller.activate_window_requested.connect(self.activateWindow)
|
|
140
141
|
self.project_controller.enable_save_actions_requested.connect(
|
|
141
142
|
self.menu_manager.save_actions_set_enabled)
|
|
143
|
+
self.project_controller.enable_sub_actions_requested.connect(
|
|
144
|
+
self.menu_manager.set_enabled_sub_actions_gui)
|
|
142
145
|
|
|
143
146
|
def modified(self):
|
|
144
147
|
return self.project_editor.modified()
|
|
@@ -286,9 +289,9 @@ class MainWindow(QMainWindow, LogManager):
|
|
|
286
289
|
if current_action:
|
|
287
290
|
menu = QMenu(self)
|
|
288
291
|
if current_action.enabled():
|
|
289
|
-
menu.addAction(self.disable_action)
|
|
292
|
+
menu.addAction(self.menu_manager.disable_action)
|
|
290
293
|
else:
|
|
291
|
-
menu.addAction(self.enable_action)
|
|
294
|
+
menu.addAction(self.menu_manager.enable_action)
|
|
292
295
|
edit_config_action = QAction("Edit configuration")
|
|
293
296
|
edit_config_action.triggered.connect(self.edit_current_action)
|
|
294
297
|
menu.addAction(edit_config_action)
|
|
@@ -332,8 +335,8 @@ class MainWindow(QMainWindow, LogManager):
|
|
|
332
335
|
self.browse_output_path_action.triggered.connect(self.browse_output_path)
|
|
333
336
|
menu.addAction(self.browse_output_path_action)
|
|
334
337
|
menu.addSeparator()
|
|
335
|
-
menu.addAction(self.run_job_action)
|
|
336
|
-
menu.addAction(self.run_all_jobs_action)
|
|
338
|
+
menu.addAction(self.menu_manager.run_job_action)
|
|
339
|
+
menu.addAction(self.menu_manager.run_all_jobs_action)
|
|
337
340
|
if current_action.type_name == constants.ACTION_JOB:
|
|
338
341
|
retouch_path = self.get_retouch_path(current_action)
|
|
339
342
|
if len(retouch_path) > 0:
|
|
@@ -19,6 +19,7 @@ class ProjectController(QObject):
|
|
|
19
19
|
refresh_ui_requested = Signal(int, int)
|
|
20
20
|
activate_window_requested = Signal()
|
|
21
21
|
enable_save_actions_requested = Signal(bool)
|
|
22
|
+
enable_sub_actions_requested = Signal(bool)
|
|
22
23
|
|
|
23
24
|
def __init__(self, parent):
|
|
24
25
|
super().__init__(parent)
|
|
@@ -323,7 +324,7 @@ class ProjectController(QObject):
|
|
|
323
324
|
current_action, is_sub_action = self.get_current_action_at(job, action_index)
|
|
324
325
|
if current_action:
|
|
325
326
|
if not is_sub_action:
|
|
326
|
-
self.
|
|
327
|
+
self.enable_sub_actions_requested.emit(
|
|
327
328
|
current_action.type_name == constants.ACTION_COMBO)
|
|
328
329
|
dialog = self.action_config_dialog(current_action)
|
|
329
330
|
if dialog.exec() == QDialog.Accepted:
|
|
@@ -56,8 +56,9 @@ class IOGuiHandler(QObject, LayerCollectionHandler):
|
|
|
56
56
|
self.set_master_layer(master_layer)
|
|
57
57
|
self.undo_manager.reset()
|
|
58
58
|
self.blank_layer = np.zeros(master_layer.shape[:2])
|
|
59
|
-
self.finish_loading_setup(
|
|
60
|
-
|
|
59
|
+
self.finish_loading_setup(
|
|
60
|
+
stack, None, master_layer, False,
|
|
61
|
+
f"Loaded: {self.current_file_path()}")
|
|
61
62
|
|
|
62
63
|
def on_file_error(self, error_msg):
|
|
63
64
|
QApplication.restoreOverrideCursor()
|
|
@@ -136,23 +137,26 @@ class IOGuiHandler(QObject, LayerCollectionHandler):
|
|
|
136
137
|
msg.setText(str(e))
|
|
137
138
|
msg.exec()
|
|
138
139
|
return
|
|
139
|
-
self.finish_loading_setup(
|
|
140
|
+
self.finish_loading_setup(
|
|
141
|
+
stack, labels, master, True,
|
|
142
|
+
"Selected frames imported")
|
|
140
143
|
|
|
141
|
-
def finish_loading_setup(self, stack, labels, master, message):
|
|
142
|
-
if
|
|
143
|
-
self.
|
|
144
|
-
|
|
145
|
-
labels
|
|
144
|
+
def finish_loading_setup(self, stack, labels, master, add_layers, message):
|
|
145
|
+
if add_layers:
|
|
146
|
+
if self.layer_stack() is None and len(stack) > 0:
|
|
147
|
+
self.set_layer_stack(np.array(stack))
|
|
148
|
+
if labels is None:
|
|
149
|
+
labels = self.layer_labels()
|
|
150
|
+
else:
|
|
151
|
+
self.set_layer_labels(labels)
|
|
152
|
+
self.set_master_layer(master)
|
|
153
|
+
self.blank_layer = np.zeros(master.shape[:2])
|
|
146
154
|
else:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
labels = self.layer_labels()
|
|
153
|
-
for img, label in zip(stack, labels):
|
|
154
|
-
self.add_layer_label(label)
|
|
155
|
-
self.add_layer(img)
|
|
155
|
+
if labels is None:
|
|
156
|
+
labels = self.layer_labels()
|
|
157
|
+
for img, label in zip(stack, labels):
|
|
158
|
+
self.add_layer_label(label)
|
|
159
|
+
self.add_layer(img)
|
|
156
160
|
self.display_manager.update_thumbnails()
|
|
157
161
|
self.mark_as_modified_requested.emit(True)
|
|
158
162
|
self.change_layer_requested.emit(0)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
shinestacker/__init__.py,sha256=uq2fjAw2z_6TpH3mOcWFZ98GoEPRsNhTAK8N0MMm_e8,448
|
|
2
|
-
shinestacker/_version.py,sha256=
|
|
2
|
+
shinestacker/_version.py,sha256=C8nyPP5-54GgYCcP38Lbel_pRimOW-Ra4bw6Vzp2lmE,21
|
|
3
3
|
shinestacker/algorithms/__init__.py,sha256=c4kRrdTLlVI70Q16XkI1RSmz5MD7npDqIpO_02jTG6g,747
|
|
4
4
|
shinestacker/algorithms/align.py,sha256=XT4DJoD5ZvpkC1-J3W3GWmWRsXJg3qJ-3zr9erT8oW0,17514
|
|
5
5
|
shinestacker/algorithms/balance.py,sha256=iSjO-pl0vQv58iEQ077EUcDTAExMKDBdtXmJXbMhazk,16721
|
|
@@ -41,11 +41,11 @@ shinestacker/gui/base_form_dialog.py,sha256=yYqMee1mzw9VBx8siBS0jDk1qqsTIKJUgdjh
|
|
|
41
41
|
shinestacker/gui/colors.py,sha256=m0pQQ-uvtIN1xmb_-N06BvC7pZYZZnq59ZSEJwutHuk,1432
|
|
42
42
|
shinestacker/gui/gui_images.py,sha256=e0KAXSPruZoRHrajfdlmOKBYoRJJQBDan1jgs7YFltY,5678
|
|
43
43
|
shinestacker/gui/gui_logging.py,sha256=kiZcrC2AFYCWgPZo0O5SKw-E5cFrezwf4anS3HjPuNw,8168
|
|
44
|
-
shinestacker/gui/gui_run.py,sha256=
|
|
45
|
-
shinestacker/gui/main_window.py,sha256=
|
|
44
|
+
shinestacker/gui/gui_run.py,sha256=G9jKIMCEdrCwRvicRykY0r_x2Vya-9EMn4HpZL8ydRI,15141
|
|
45
|
+
shinestacker/gui/main_window.py,sha256=1Im8ER-eAYwvLXFp_OyMr3EkdpJ0K1krkmKy-WF3KM8,24210
|
|
46
46
|
shinestacker/gui/menu_manager.py,sha256=_L6LOikB3impEYqilqwXc0WJuunishjz57ozZlrBn7Q,9616
|
|
47
47
|
shinestacker/gui/new_project.py,sha256=zHmGrT27L7I6YHM1L8wjt7DzukLFPddFsbVyGVHfJoc,11004
|
|
48
|
-
shinestacker/gui/project_controller.py,sha256=
|
|
48
|
+
shinestacker/gui/project_controller.py,sha256=BbecAO0t15Usir3CYeIBiO9gvdGAmAPwhwLxci5IS7g,15103
|
|
49
49
|
shinestacker/gui/project_converter.py,sha256=_AFfU2HYKPX78l6iX6bXJrlKpdjSl63pmKzrc6kQpn8,7348
|
|
50
50
|
shinestacker/gui/project_editor.py,sha256=uouzmUkrqouQlq-dqPOgSO16r1WOnGNV2v8jTcZlRXU,23749
|
|
51
51
|
shinestacker/gui/project_model.py,sha256=eRUmH3QmRzDtPtZoxgT6amKzN8_5XzwjHgEJeL-_JOE,4263
|
|
@@ -75,7 +75,7 @@ shinestacker/retouch/filter_manager.py,sha256=SdYIZkZBUvuB6wDG0moGWav5sfEvIcB9io
|
|
|
75
75
|
shinestacker/retouch/icon_container.py,sha256=6gw1HO1bC2FrdB4dc_iH81DQuLjzuvRGksZ2hKLT9yA,585
|
|
76
76
|
shinestacker/retouch/image_editor_ui.py,sha256=GNozK_P7orgl8EioemJeyR4e_LLMbKVZi4xhYW9m38U,29893
|
|
77
77
|
shinestacker/retouch/image_viewer.py,sha256=3ebrLHTDtGd_EbIT2nNFRUjH836rblmmK7jZ62YcJ2U,19564
|
|
78
|
-
shinestacker/retouch/io_gui_handler.py,sha256=
|
|
78
|
+
shinestacker/retouch/io_gui_handler.py,sha256=DPFEq-29b88xqCpIwEmuwUU5Xn_7UGlFFhCDM1bvMxI,11645
|
|
79
79
|
shinestacker/retouch/io_manager.py,sha256=JUAA--AK0mVa1PTErJTnBFjaXIle5Qs7Ow0Wkd8at0o,2437
|
|
80
80
|
shinestacker/retouch/layer_collection.py,sha256=Q7zoCYRn__jYkfrEC2lY1uKHWfOUbsJ27xaYHIoKVxo,5730
|
|
81
81
|
shinestacker/retouch/shortcuts_help.py,sha256=SN4vNa_6yRAFaWxt5HpWn8FHgwmHrIs_wYwjl4iyDmg,3769
|
|
@@ -83,9 +83,9 @@ shinestacker/retouch/undo_manager.py,sha256=_ekbcOLcPbQLY7t-o8wf-b1uA6OPY9rRyLM-
|
|
|
83
83
|
shinestacker/retouch/unsharp_mask_filter.py,sha256=uFnth8fpZFGhdIgJCnS8x5v6lBQgJ3hX0CBke9pFXeM,3510
|
|
84
84
|
shinestacker/retouch/vignetting_filter.py,sha256=3WuoF38lQOIaU1MWmqviItuQn8NnbMN0nwV7pM9IJqU,3453
|
|
85
85
|
shinestacker/retouch/white_balance_filter.py,sha256=glMBYlmrF-i_OrB3sGUpjZE6X4FQdyLC4GBy2bWtaFc,6056
|
|
86
|
-
shinestacker-1.0.
|
|
87
|
-
shinestacker-1.0.
|
|
88
|
-
shinestacker-1.0.
|
|
89
|
-
shinestacker-1.0.
|
|
90
|
-
shinestacker-1.0.
|
|
91
|
-
shinestacker-1.0.
|
|
86
|
+
shinestacker-1.0.2.dist-info/licenses/LICENSE,sha256=pWgb-bBdsU2Gd2kwAXxketnm5W_2u8_fIeWEgojfrxs,7651
|
|
87
|
+
shinestacker-1.0.2.dist-info/METADATA,sha256=BGQfH5499HQk51ANCTjSdUxjErlNHfiz1kcCf17VKZo,5902
|
|
88
|
+
shinestacker-1.0.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
89
|
+
shinestacker-1.0.2.dist-info/entry_points.txt,sha256=SY6g1LqtMmp23q1DGwLUDT_dhLX9iss8DvWkiWLyo_4,166
|
|
90
|
+
shinestacker-1.0.2.dist-info/top_level.txt,sha256=MhijwnBVX5psfsyX8JZjqp3SYiWPsKe69f3Gnyze4Fw,13
|
|
91
|
+
shinestacker-1.0.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|