shinestacker 1.3.0__py3-none-any.whl → 1.3.1__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.

@@ -16,6 +16,7 @@ class ColorPalette:
16
16
  BLACK = ColorEntry(0, 0, 0)
17
17
  WHITE = ColorEntry(255, 255, 255)
18
18
  LIGHT_BLUE = ColorEntry(210, 210, 240)
19
+ LIGHT_GREEN = ColorEntry(210, 240, 210)
19
20
  LIGHT_RED = ColorEntry(240, 210, 210)
20
21
  DARK_BLUE = ColorEntry(0, 0, 160)
21
22
  DARK_RED = ColorEntry(160, 0, 0)
@@ -58,6 +58,7 @@ class FolderFileSelectionWidget(QWidget):
58
58
  # self.path_edit.setPlaceholderText("input files")
59
59
 
60
60
  def handle_browse(self):
61
+ self.path_edit.setText('')
61
62
  if self.selection_mode == 'folder':
62
63
  self.browse_folder()
63
64
  else:
@@ -80,6 +81,7 @@ class FolderFileSelectionWidget(QWidget):
80
81
  self.selected_files = files
81
82
  self.path_edit.setText(parent_dir)
82
83
  else:
84
+ self.selected_files = []
83
85
  QMessageBox.warning(
84
86
  self, "Invalid Selection",
85
87
  "All files must be in the same directory."
@@ -91,6 +93,9 @@ class FolderFileSelectionWidget(QWidget):
91
93
  def get_selected_files(self):
92
94
  return self.selected_files
93
95
 
96
+ def num_selected_files(self):
97
+ return len(self.selected_files)
98
+
94
99
  def get_selected_filenames(self):
95
100
  return [os.path.basename(file_path) for file_path in self.selected_files]
96
101
 
@@ -301,6 +301,9 @@ class MainWindow(QMainWindow, LogManager):
301
301
  edit_config_action.triggered.connect(self.edit_current_action)
302
302
  menu.addAction(edit_config_action)
303
303
  menu.addSeparator()
304
+ menu.addAction(self.menu_manager.run_job_action)
305
+ menu.addAction(self.menu_manager.run_all_jobs_action)
306
+ menu.addSeparator()
304
307
  self.current_action_working_path, name = get_action_working_path(current_action)
305
308
  if self.current_action_working_path != '' and \
306
309
  os.path.exists(self.current_action_working_path):
@@ -339,9 +342,6 @@ class MainWindow(QMainWindow, LogManager):
339
342
  self.browse_output_path_action = QAction(action_name)
340
343
  self.browse_output_path_action.triggered.connect(self.browse_output_path)
341
344
  menu.addAction(self.browse_output_path_action)
342
- menu.addSeparator()
343
- menu.addAction(self.menu_manager.run_job_action)
344
- menu.addAction(self.menu_manager.run_all_jobs_action)
345
345
  if current_action.type_name == constants.ACTION_JOB:
346
346
  retouch_path = self.get_retouch_path(current_action)
347
347
  if len(retouch_path) > 0:
@@ -533,7 +533,7 @@ class MainWindow(QMainWindow, LogManager):
533
533
  r = self.get_retouch_path(job)
534
534
  if len(r) > 0:
535
535
  retouch_paths.append((job.params["name"], r))
536
- new_window, id_str = self.create_new_window(f"{project_name} [Project 📚]",
536
+ new_window, id_str = self.create_new_window(f"{project_name} [Project]",
537
537
  labels, retouch_paths)
538
538
  worker = ProjectLogWorker(self.project(), id_str)
539
539
  self.connect_worker_signals(worker, new_window)
@@ -75,7 +75,7 @@ class NewProjectDialog(BaseFormDialog):
75
75
  self.focus_stack_depth_map.setChecked(gui_constants.NEW_PROJECT_FOCUS_STACK_DEPTH_MAP)
76
76
  self.multi_layer = QCheckBox()
77
77
  self.multi_layer.setChecked(gui_constants.NEW_PROJECT_MULTI_LAYER)
78
- step1_group = QGroupBox("1️⃣ Select Input")
78
+ step1_group = QGroupBox("1) Select Input")
79
79
  step1_layout = QVBoxLayout()
80
80
  step1_layout.setContentsMargins(15, 0, 15, 15)
81
81
  step1_layout.addWidget(
@@ -92,7 +92,7 @@ class NewProjectDialog(BaseFormDialog):
92
92
  step1_layout.addLayout(input_form)
93
93
  step1_group.setLayout(step1_layout)
94
94
  self.form_layout.addRow(step1_group)
95
- step2_group = QGroupBox("2️⃣ Basic Options")
95
+ step2_group = QGroupBox("2) Basic Options")
96
96
  step2_layout = QFormLayout()
97
97
  step2_layout.setContentsMargins(15, 0, 15, 15)
98
98
  step2_layout.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
@@ -136,7 +136,7 @@ class NewProjectDialog(BaseFormDialog):
136
136
  "Save multi layer TIFF:", self.multi_layer)
137
137
  step2_group.setLayout(step2_layout)
138
138
  self.form_layout.addRow(step2_group)
139
- step3_group = QGroupBox("3️⃣ Confirmation")
139
+ step3_group = QGroupBox("3) Confirm")
140
140
  step3_layout = QVBoxLayout()
141
141
  step3_layout.setContentsMargins(15, 0, 15, 15)
142
142
  step3_layout.addWidget(
@@ -145,7 +145,7 @@ class NewProjectDialog(BaseFormDialog):
145
145
  QLabel("Select: <b>View</b> > <b>Expert options</b> for advanced configuration."))
146
146
  step3_group.setLayout(step3_layout)
147
147
  self.form_layout.addRow(step3_group)
148
- step4_group = QGroupBox("4️⃣ Execution")
148
+ step4_group = QGroupBox("4) Execute")
149
149
  step4_layout = QHBoxLayout()
150
150
  step4_layout.setContentsMargins(15, 0, 15, 15)
151
151
  step4_layout.addWidget(QLabel("Press ▶️ to run your job."))
@@ -200,7 +200,7 @@ class NewProjectDialog(BaseFormDialog):
200
200
  return count
201
201
  if self.input_widget.get_selection_mode() == 'files' and \
202
202
  self.input_widget.get_selected_files():
203
- self.n_image_files = len(self.input_widget.get_selected_files())
203
+ self.n_image_files = self.input_widget.num_selected_files()
204
204
  self.selected_filenames = self.input_widget.get_selected_filenames()
205
205
  else:
206
206
  self.n_image_files = count_image_files(self.input_widget.get_path())
@@ -268,7 +268,7 @@ class ProjectEditor(QObject):
268
268
  if os.path.isabs(in_path):
269
269
  in_path = ".../" + os.path.basename(in_path)
270
270
  ico = constants.ACTION_ICONS[constants.ACTION_JOB]
271
- return txt + (f" [{ico}Job: 📁 {in_path} → 📂 ...]" if long_name else "")
271
+ return txt + (f" [{ico}Job] - 📁 {in_path} → 📂 ..." if long_name else "")
272
272
 
273
273
  def action_text(self, action, is_sub_action=False, indent=True, long_name=False, html=False):
274
274
  ico = constants.ACTION_ICONS.get(action.type_name, '')
@@ -285,9 +285,9 @@ class ProjectEditor(QObject):
285
285
  in_path = ".../" + os.path.basename(in_path)
286
286
  if os.path.isabs(out_path):
287
287
  out_path = ".../" + os.path.basename(out_path)
288
- return f"{txt} [{ico}{action.type_name}" + \
289
- (f": 📁 <i>{in_path}</i> → 📂 <i>{out_path}</i>]"
290
- if long_name and not is_sub_action else "]")
288
+ return f"{txt} [{ico}{action.type_name}]" + \
289
+ (f" - 📁 <i>{in_path}</i> → 📂 <i>{out_path}</i>"
290
+ if long_name and not is_sub_action else "")
291
291
 
292
292
  def get_job_at(self, index):
293
293
  return None if index < 0 else self.project_job(index)
@@ -495,6 +495,8 @@ class ProjectEditor(QObject):
495
495
  text = self.action_text(action, long_name=True, html=True, is_sub_action=is_sub_action)
496
496
  item = QListWidgetItem()
497
497
  item.setText('')
498
+ item.setToolTip("<b>Double-click:</b> configure parameters<br>"
499
+ "<b>Right-click:</b> show menu")
498
500
  item.setData(Qt.ItemDataRole.UserRole, True)
499
501
  widget_list.addItem(item)
500
502
  html_text = f"✅ <span style='color:#{ColorPalette.DARK_BLUE.hex()};'>{text}</span>" \
@@ -2,6 +2,7 @@
2
2
  import psutil
3
3
  from PySide6.QtWidgets import QWidget, QHBoxLayout, QLabel, QProgressBar, QSizePolicy
4
4
  from PySide6.QtCore import QTimer, Qt
5
+ from .colors import ColorPalette
5
6
 
6
7
 
7
8
  class StatusBarSystemMonitor(QWidget):
@@ -13,7 +14,7 @@ class StatusBarSystemMonitor(QWidget):
13
14
 
14
15
  def setup_ui(self):
15
16
  bar_width = 100
16
- bar_height = 20
17
+ bar_height = 22
17
18
  layout = QHBoxLayout()
18
19
  layout.setSpacing(10)
19
20
  layout.setContentsMargins(0, 2, 0, 0)
@@ -25,27 +26,27 @@ class StatusBarSystemMonitor(QWidget):
25
26
  self.cpu_bar.setRange(0, 100)
26
27
  self.cpu_bar.setTextVisible(False)
27
28
  self.cpu_bar.setGeometry(0, 0, bar_width, bar_height)
28
- self.cpu_bar.setStyleSheet("""
29
- QProgressBar {
29
+ self.cpu_bar.setStyleSheet(f"""
30
+ QProgressBar {{
30
31
  border: 1px solid #cccccc;
31
32
  border-radius: 5px;
32
- background: #f0f0f0;
33
- }
34
- QProgressBar::chunk {
35
- background-color: #3498db;
33
+ background: #F0F0F0;
34
+ }}
35
+ QProgressBar::chunk {{
36
+ background-color: #{ColorPalette.LIGHT_BLUE.hex()};
36
37
  border-radius: 5px;
37
- }
38
+ }}
38
39
  """)
39
40
  self.cpu_label = QLabel("CPU: --%", cpu_widget)
40
41
  self.cpu_label.setAlignment(Qt.AlignCenter)
41
42
  self.cpu_label.setGeometry(0, 0, bar_width, bar_height)
42
- self.cpu_label.setStyleSheet("""
43
- QLabel {
44
- color: #2c3e50;
43
+ self.cpu_label.setStyleSheet(f"""
44
+ QLabel {{
45
+ color: #{ColorPalette.DARK_BLUE.hex()};
45
46
  font-weight: bold;
46
47
  background: transparent;
47
48
  font-size: 12px;
48
- }
49
+ }}
49
50
  """)
50
51
  mem_widget = QWidget()
51
52
  mem_widget.setFixedSize(bar_width, bar_height)
@@ -53,27 +54,27 @@ class StatusBarSystemMonitor(QWidget):
53
54
  self.mem_bar.setRange(0, 100)
54
55
  self.mem_bar.setTextVisible(False)
55
56
  self.mem_bar.setGeometry(0, 0, bar_width, bar_height)
56
- self.mem_bar.setStyleSheet("""
57
- QProgressBar {
58
- border: 1px solid #cccccc;
57
+ self.mem_bar.setStyleSheet(f"""
58
+ QProgressBar {{
59
+ border: 1px solid #CCCCCC;
59
60
  border-radius: 5px;
60
61
  background: #f0f0f0;
61
- }
62
- QProgressBar::chunk {
63
- background-color: #2ecc71;
62
+ }}
63
+ QProgressBar::chunk {{
64
+ background-color: #{ColorPalette.LIGHT_GREEN.hex()};
64
65
  border-radius: 5px;
65
- }
66
+ }}
66
67
  """)
67
68
  self.mem_label = QLabel("MEM: --%", mem_widget)
68
69
  self.mem_label.setAlignment(Qt.AlignCenter)
69
70
  self.mem_label.setGeometry(0, 0, bar_width, bar_height)
70
- self.mem_label.setStyleSheet("""
71
- QLabel {
72
- color: #2c3e50;
71
+ self.mem_label.setStyleSheet(f"""
72
+ QLabel {{
73
+ color: #{ColorPalette.DARK_BLUE.hex()};
73
74
  font-weight: bold;
74
75
  background: transparent;
75
76
  font-size: 12px;
76
- }
77
+ }}
77
78
  """)
78
79
  layout.addWidget(cpu_widget)
79
80
  layout.addWidget(mem_widget)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -1,33 +1,33 @@
1
1
  shinestacker/__init__.py,sha256=uq2fjAw2z_6TpH3mOcWFZ98GoEPRsNhTAK8N0MMm_e8,448
2
- shinestacker/_version.py,sha256=tP8c5-8yPCRUk61qFQy1AQFkbfy99N-tga3OUiJT1MA,21
2
+ shinestacker/_version.py,sha256=U9SSjW6vREFTPVkV-L7VR9upz56SvAyLuYgaMCMvw0E,21
3
3
  shinestacker/algorithms/__init__.py,sha256=1FwVJ3w9GGbFFkjYJRUedTvcdE4j0ieSgaH9RC9iCY4,877
4
- shinestacker/algorithms/align.py,sha256=tVgLzn0vV9sIrFj4fZezBYHxhK2o_xrjCm8k55OoAYQ,23514
5
- shinestacker/algorithms/align_auto.py,sha256=wIv9iSOhzxdQiPo0GG1Dv9WSLgFGjCJM7I2uqMl-cGc,3093
6
- shinestacker/algorithms/align_parallel.py,sha256=3tGhrSr9IPz8fv0FUW-AAq9-e3BEJadwS9DYTZm-Sgo,14812
4
+ shinestacker/algorithms/align.py,sha256=V6JUTk9zTntnlSbltJnlli32Yl7n3ozWg4PBJQOx190,23735
5
+ shinestacker/algorithms/align_auto.py,sha256=pJetw6zZEWQLouzcelkI8gD4cPiOp887ePXzVbm0E6Q,3800
6
+ shinestacker/algorithms/align_parallel.py,sha256=s4BlLRLDcIFOzZIQEM49rhilyu_Uy15-IeyN0nDbdno,16985
7
7
  shinestacker/algorithms/balance.py,sha256=KJ8eXWYyqRVQa7_iZWQhZZ9BfO4wNve5nhZxunK7B5k,23583
8
- shinestacker/algorithms/base_stack_algo.py,sha256=jiqckBGQnP536OPfTW0Kzfawcpk1L-bByhCjoyQyBGw,2841
8
+ shinestacker/algorithms/base_stack_algo.py,sha256=RzxvLDHqxqhnAl83u2onjvfsRea1qGK_blbh2Vo0kxA,2670
9
9
  shinestacker/algorithms/denoise.py,sha256=GL3Z4_6MHxSa7Wo4ZzQECZS87tHBFqO0sIVF_jPuYQU,426
10
- shinestacker/algorithms/depth_map.py,sha256=m0_Qm8FLDeSWyQEMNx29PzXp_VFGar7gY3jWxq_10t8,5713
10
+ shinestacker/algorithms/depth_map.py,sha256=nRBrZQWbdUqFOtYMEQx9UNdnybrBTeAOr1eV91FlN8U,5611
11
11
  shinestacker/algorithms/exif.py,sha256=SM4ZDDe8hCJ3xY6053FNndOiwzEStzdp0WrXurlcHVc,9429
12
12
  shinestacker/algorithms/multilayer.py,sha256=WlB4L5oY9qra3w7Qahg-tqO6S_s3pMB_LmGR8PPR_7w,9904
13
13
  shinestacker/algorithms/noise_detection.py,sha256=KSdMDER5GNOCTD6DIAbjJvRDFvrVorul3xr5maXtCh8,9298
14
- shinestacker/algorithms/pyramid.py,sha256=drGLeGRQ2_QMmbpOFaFI7kSOSuvraOcsWJNTXbBUT6k,8838
15
- shinestacker/algorithms/pyramid_auto.py,sha256=TxIkOrzS2i9Dz994L_YYeL4CNRRjTWkygGL8KDjDuWo,6602
16
- shinestacker/algorithms/pyramid_tiles.py,sha256=mjmvJil0olQJSUWDMR5Hkuu1PbI_TomTUZi8lsC10cU,12356
14
+ shinestacker/algorithms/pyramid.py,sha256=Z7tlp8Hh3ploAXJCr0VNe33d8H9GNrlqHXq_LapgRwo,8205
15
+ shinestacker/algorithms/pyramid_auto.py,sha256=fl_jXNYLWsBiX0M0UghzCLqai0SGXlmKYHU7Z9SUYSo,6173
16
+ shinestacker/algorithms/pyramid_tiles.py,sha256=ZBWIeifkDOIVFF4SCyspRZHSj6K_1P3dk4WLmuo53RU,12213
17
17
  shinestacker/algorithms/sharpen.py,sha256=h7PMJBYxucg194Usp_6pvItPUMFYbT-ebAc_-7XBFUw,949
18
18
  shinestacker/algorithms/stack.py,sha256=V9YX0CbNWrgAo7_uti64rmmuwU6RsRcjDoBpsES4aSE,5137
19
- shinestacker/algorithms/stack_framework.py,sha256=L5fXv07CuO4gHBBnoHS6U9ajWB-nDYCKBroutAQzd2U,13890
20
- shinestacker/algorithms/utils.py,sha256=jImR2XF73gsLRZMic0kv8cyCuO2Zq21tX4kUhaTcfzI,11301
19
+ shinestacker/algorithms/stack_framework.py,sha256=OMrjD5dKquHQXhM7TfLRExDsqN1n938WWhGAfkPYLZM,13883
20
+ shinestacker/algorithms/utils.py,sha256=oyt2sQQsgcTyemlVcU2hJRSza6ntsXQbG7WhHJTP7a0,11808
21
21
  shinestacker/algorithms/vignetting.py,sha256=MwhsTqmNMc6GdQl_Bbuyo8IUQPn1OoeGcWj1L6Jjybc,10274
22
22
  shinestacker/algorithms/white_balance.py,sha256=PMKsBtxOSn5aRr_Gkx1StHS4eN6kBN2EhNnhg4UG24g,501
23
23
  shinestacker/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  shinestacker/app/about_dialog.py,sha256=pkH7nnxUP8yc0D3vRGd1jRb5cwi1nDVbQRk_OC9yLk8,4144
25
- shinestacker/app/gui_utils.py,sha256=08TrCj2gFGsNsF6hG7ySO2y7wcQakM5PzERkeplqNFs,2344
25
+ shinestacker/app/gui_utils.py,sha256=fSpkwPXTON_l676UHdAnJNrGq7BPbSlPOiHpOF_LZaI,2519
26
26
  shinestacker/app/help_menu.py,sha256=g8lKG_xZmXtNQaC3SIRzyROKVWva_PLEgZsQWh6zUcQ,499
27
- shinestacker/app/main.py,sha256=VPZx_qcmFc1YmWicFjKcfQrH1br0VR5ZGuE64nsD3n0,10414
27
+ shinestacker/app/main.py,sha256=XdWYUm1ed1q7aPghxgaFwWJVNijCvZZ_WG0fux8Nisc,10459
28
28
  shinestacker/app/open_frames.py,sha256=bsu32iJSYJQLe_tQQbvAU5DuMDVX6MRuNdE7B5lojZc,1488
29
- shinestacker/app/project.py,sha256=W0u715LZne_PNJvg9msSy27ybIjgDXiEAQdJ7_6BjYI,2774
30
- shinestacker/app/retouch.py,sha256=ZQ-nRKnHo6xurcP34RNqaAWkmuGBjJ5jE05hTQ_ycis,2482
29
+ shinestacker/app/project.py,sha256=oopOiqU6bOK1cQdpot88z49KbKrlB-LAz_q4-8Iui0U,2819
30
+ shinestacker/app/retouch.py,sha256=dpSozNWSxL6wIO0SMjoviDbXZbbfRN_rVLjeL324c54,2527
31
31
  shinestacker/config/__init__.py,sha256=aXxi-LmAvXd0daIFrVnTHE5OCaYeK1uf1BKMr7oaXQs,197
32
32
  shinestacker/config/config.py,sha256=eBko2D3ADhLTIm9X6hB_a_WsIjwgfE-qmBVkhP1XSvc,1636
33
33
  shinestacker/config/constants.py,sha256=EEdr7pZg4JpbIjUWaP7kJQfTuBB85FN739myDNAfn8A,8301
@@ -40,23 +40,23 @@ shinestacker/core/framework.py,sha256=QaTfnzEUHwzlbyFG7KzeyteckTSWHWEEJE4d5Tc8H1
40
40
  shinestacker/core/logging.py,sha256=9SuSSy9Usbh7zqmLYMqkmy-VBkOJW000lwqAR0XQs30,3067
41
41
  shinestacker/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  shinestacker/gui/action_config.py,sha256=BhKssL0xHPdNkE5hDkBy7Uw5rZOLZ8PU8hz-Nt_CdwA,19038
43
- shinestacker/gui/action_config_dialog.py,sha256=SbYL1fxyI-N5Pt_vgkNtJw1s2f-3gd9LlfLnxw4qtDI,41894
43
+ shinestacker/gui/action_config_dialog.py,sha256=IRK0RkGEBjGY351xalRc87cZb1HyWZdufnLa__vYCO0,43787
44
44
  shinestacker/gui/base_form_dialog.py,sha256=KAUQNtmJazttmOIe4E4pFifbtvcByTAhtCmcIYeA4UE,766
45
- shinestacker/gui/colors.py,sha256=m0pQQ-uvtIN1xmb_-N06BvC7pZYZZnq59ZSEJwutHuk,1432
45
+ shinestacker/gui/colors.py,sha256=-HaFprDuzRSKjXoZfX1rdOuvawQAkazqdgLBEiZcFII,1476
46
46
  shinestacker/gui/flow_layout.py,sha256=3yBU_z7VtvHKpx1H97CHVd81eq9pe1Dcja2EZBGGKcI,3791
47
- shinestacker/gui/folder_file_selection.py,sha256=V6Pdu6EtQpBzCmh_yTibJ75by6Nf-4YHgAAWWTYl-VA,3966
47
+ shinestacker/gui/folder_file_selection.py,sha256=IYWfZQFkoD5iO7zJ7BxVVDP9F3Dc0EXLILAhL4q-Cb8,4117
48
48
  shinestacker/gui/gui_images.py,sha256=k39DpdsxcmYoRdHNNZj6OpFAas0GOHS4JSG542wfheg,5728
49
49
  shinestacker/gui/gui_logging.py,sha256=kiZcrC2AFYCWgPZo0O5SKw-E5cFrezwf4anS3HjPuNw,8168
50
50
  shinestacker/gui/gui_run.py,sha256=MQPE7muBPw3KTrGDsg-MBcC6nNFYuvvojfXfq84kR8o,15759
51
- shinestacker/gui/main_window.py,sha256=GUrGhZerYXCMwMeB2K51oSHaJAgtMTPj6AfOgkkmwoc,24521
51
+ shinestacker/gui/main_window.py,sha256=BbGj6JeIpDNICTktYG6F___NXKtMHgVcHsSiqemtw8w,24516
52
52
  shinestacker/gui/menu_manager.py,sha256=ZsND0e-vM263-6unwKUtYAtLbb4YgvIQabh5lCiT2ow,10179
53
- shinestacker/gui/new_project.py,sha256=Gwg57Ze3D5AQeTCbuI2oNLMqrDnpFRIfNOfWAbO3nUk,16145
53
+ shinestacker/gui/new_project.py,sha256=VSUaq1xm9CR0gimKHRKfCdQOQ-ErE1sxGmu6x14nlAQ,16113
54
54
  shinestacker/gui/project_controller.py,sha256=hvSNGrQM-yDHH3e132oouxBtgRv7mUG7lrigUl21BsA,16043
55
55
  shinestacker/gui/project_converter.py,sha256=Gmna0HwbvACcXiX74TaQYumif8ZV8sZ2APLTMM-L1mU,7436
56
- shinestacker/gui/project_editor.py,sha256=j7bBH4u5g6CO8Mv541ceDrs7GKsWZ-eVKpCPTKF6zVY,25368
56
+ shinestacker/gui/project_editor.py,sha256=lSgQ42IoaobHs-NQQWT88Qhg5l7nu5ejxAO5VgIupr8,25498
57
57
  shinestacker/gui/project_model.py,sha256=eRUmH3QmRzDtPtZoxgT6amKzN8_5XzwjHgEJeL-_JOE,4263
58
58
  shinestacker/gui/select_path_widget.py,sha256=HSwgSr702w5Et4c-6nkRXnIpm1KFqKJetAF5xQNa5zI,1017
59
- shinestacker/gui/sys_mon.py,sha256=h_Mg99bceXPSX_oK8t_IuRJoSsVo3uthcTnwe8tOYhM,3378
59
+ shinestacker/gui/sys_mon.py,sha256=zU41YYVeqQ1-v6oGIh2_BFzQWq87keN-398Wdm59-Nk,3526
60
60
  shinestacker/gui/tab_widget.py,sha256=VgRmuktWXCgbXbV7c1Tho0--W5_EmmzXPfzRZgwhGfg,2965
61
61
  shinestacker/gui/time_progress_bar.py,sha256=7_sllrQgayjRh__mwJ0-4lghXIakuRAx8wWucJ6olYs,3028
62
62
  shinestacker/gui/ico/focus_stack_bkg.png,sha256=Q86TgqvKEi_IzKI8m6aZB2a3T40UkDtexf2PdeBM9XE,163151
@@ -90,9 +90,9 @@ shinestacker/retouch/undo_manager.py,sha256=_ekbcOLcPbQLY7t-o8wf-b1uA6OPY9rRyLM-
90
90
  shinestacker/retouch/unsharp_mask_filter.py,sha256=uFnth8fpZFGhdIgJCnS8x5v6lBQgJ3hX0CBke9pFXeM,3510
91
91
  shinestacker/retouch/vignetting_filter.py,sha256=MA97rQkSL0D-Nh-n2L4AiPR064RoTROkvza4tw84g9U,3658
92
92
  shinestacker/retouch/white_balance_filter.py,sha256=glMBYlmrF-i_OrB3sGUpjZE6X4FQdyLC4GBy2bWtaFc,6056
93
- shinestacker-1.3.0.dist-info/licenses/LICENSE,sha256=pWgb-bBdsU2Gd2kwAXxketnm5W_2u8_fIeWEgojfrxs,7651
94
- shinestacker-1.3.0.dist-info/METADATA,sha256=lJFdzbmkUcsMTN05Lyivq-uM3-IuKUyi-PEfR8JptyA,6972
95
- shinestacker-1.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
96
- shinestacker-1.3.0.dist-info/entry_points.txt,sha256=SY6g1LqtMmp23q1DGwLUDT_dhLX9iss8DvWkiWLyo_4,166
97
- shinestacker-1.3.0.dist-info/top_level.txt,sha256=MhijwnBVX5psfsyX8JZjqp3SYiWPsKe69f3Gnyze4Fw,13
98
- shinestacker-1.3.0.dist-info/RECORD,,
93
+ shinestacker-1.3.1.dist-info/licenses/LICENSE,sha256=pWgb-bBdsU2Gd2kwAXxketnm5W_2u8_fIeWEgojfrxs,7651
94
+ shinestacker-1.3.1.dist-info/METADATA,sha256=uKow_yD_ono611Nztz8cszW4tVsMaGieF2Qfongsds0,6972
95
+ shinestacker-1.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
96
+ shinestacker-1.3.1.dist-info/entry_points.txt,sha256=SY6g1LqtMmp23q1DGwLUDT_dhLX9iss8DvWkiWLyo_4,166
97
+ shinestacker-1.3.1.dist-info/top_level.txt,sha256=MhijwnBVX5psfsyX8JZjqp3SYiWPsKe69f3Gnyze4Fw,13
98
+ shinestacker-1.3.1.dist-info/RECORD,,