setiastrosuitepro 1.6.10__py3-none-any.whl → 1.7.0__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.
- setiastro/images/colorwheel.svg +97 -0
- setiastro/images/narrowbandnormalization.png +0 -0
- setiastro/images/planetarystacker.png +0 -0
- setiastro/saspro/__main__.py +1 -1
- setiastro/saspro/_generated/build_info.py +2 -2
- setiastro/saspro/aberration_ai.py +49 -11
- setiastro/saspro/aberration_ai_preset.py +29 -3
- setiastro/saspro/backgroundneutral.py +73 -33
- setiastro/saspro/blink_comparator_pro.py +116 -71
- setiastro/saspro/convo.py +9 -6
- setiastro/saspro/curve_editor_pro.py +72 -22
- setiastro/saspro/curves_preset.py +249 -47
- setiastro/saspro/doc_manager.py +178 -11
- setiastro/saspro/gui/main_window.py +218 -66
- setiastro/saspro/gui/mixins/dock_mixin.py +245 -24
- setiastro/saspro/gui/mixins/file_mixin.py +35 -16
- setiastro/saspro/gui/mixins/menu_mixin.py +31 -1
- setiastro/saspro/gui/mixins/toolbar_mixin.py +132 -10
- setiastro/saspro/histogram.py +179 -7
- setiastro/saspro/imageops/narrowband_normalization.py +816 -0
- setiastro/saspro/imageops/serloader.py +769 -0
- setiastro/saspro/imageops/starbasedwhitebalance.py +23 -52
- setiastro/saspro/imageops/stretch.py +66 -15
- setiastro/saspro/legacy/numba_utils.py +25 -48
- setiastro/saspro/live_stacking.py +24 -4
- setiastro/saspro/multiscale_decomp.py +30 -17
- setiastro/saspro/narrowband_normalization.py +1618 -0
- setiastro/saspro/numba_utils.py +0 -55
- setiastro/saspro/ops/script_editor.py +5 -0
- setiastro/saspro/ops/scripts.py +119 -0
- setiastro/saspro/remove_green.py +1 -1
- setiastro/saspro/resources.py +4 -0
- setiastro/saspro/ser_stack_config.py +68 -0
- setiastro/saspro/ser_stacker.py +2245 -0
- setiastro/saspro/ser_stacker_dialog.py +1481 -0
- setiastro/saspro/ser_tracking.py +206 -0
- setiastro/saspro/serviewer.py +1242 -0
- setiastro/saspro/sfcc.py +602 -214
- setiastro/saspro/shortcuts.py +35 -16
- setiastro/saspro/stacking_suite.py +332 -87
- setiastro/saspro/star_alignment.py +243 -122
- setiastro/saspro/stat_stretch.py +220 -31
- setiastro/saspro/subwindow.py +2 -4
- setiastro/saspro/whitebalance.py +24 -0
- setiastro/saspro/widgets/resource_monitor.py +122 -74
- {setiastrosuitepro-1.6.10.dist-info → setiastrosuitepro-1.7.0.dist-info}/METADATA +2 -2
- {setiastrosuitepro-1.6.10.dist-info → setiastrosuitepro-1.7.0.dist-info}/RECORD +51 -40
- {setiastrosuitepro-1.6.10.dist-info → setiastrosuitepro-1.7.0.dist-info}/WHEEL +0 -0
- {setiastrosuitepro-1.6.10.dist-info → setiastrosuitepro-1.7.0.dist-info}/entry_points.txt +0 -0
- {setiastrosuitepro-1.6.10.dist-info → setiastrosuitepro-1.7.0.dist-info}/licenses/LICENSE +0 -0
- {setiastrosuitepro-1.6.10.dist-info → setiastrosuitepro-1.7.0.dist-info}/licenses/license.txt +0 -0
setiastro/saspro/shortcuts.py
CHANGED
|
@@ -503,7 +503,6 @@ class DraggableToolBar(QToolBar):
|
|
|
503
503
|
|
|
504
504
|
m.exec(gpos)
|
|
505
505
|
|
|
506
|
-
|
|
507
506
|
def contextMenuEvent(self, ev):
|
|
508
507
|
# Right-click on empty toolbar area
|
|
509
508
|
m = QMenu(self)
|
|
@@ -513,12 +512,12 @@ class DraggableToolBar(QToolBar):
|
|
|
513
512
|
act_lock = m.addAction(self.tr("Lock Toolbar Icons"))
|
|
514
513
|
act_lock.setCheckable(True)
|
|
515
514
|
act_lock.setChecked(is_locked)
|
|
516
|
-
|
|
515
|
+
|
|
517
516
|
def _toggle_lock(checked):
|
|
518
517
|
self._set_locked(checked)
|
|
519
|
-
|
|
518
|
+
|
|
520
519
|
act_lock.triggered.connect(_toggle_lock)
|
|
521
|
-
|
|
520
|
+
|
|
522
521
|
m.addSeparator()
|
|
523
522
|
|
|
524
523
|
# Submenu listing hidden actions for this toolbar
|
|
@@ -529,12 +528,13 @@ class DraggableToolBar(QToolBar):
|
|
|
529
528
|
any_hidden = False
|
|
530
529
|
if tb_hidden:
|
|
531
530
|
for act in tb_hidden.actions():
|
|
532
|
-
# Skip separators
|
|
533
531
|
if act.isSeparator():
|
|
534
532
|
continue
|
|
535
533
|
any_hidden = True
|
|
536
|
-
sub.addAction(
|
|
537
|
-
|
|
534
|
+
sub.addAction(
|
|
535
|
+
act.text() or (act.property("command_id") or act.objectName() or "item"),
|
|
536
|
+
lambda a=act: mw._unhide_action_from_hidden_toolbar(a)
|
|
537
|
+
)
|
|
538
538
|
|
|
539
539
|
if not any_hidden:
|
|
540
540
|
sub.setEnabled(False)
|
|
@@ -542,8 +542,15 @@ class DraggableToolBar(QToolBar):
|
|
|
542
542
|
m.addSeparator()
|
|
543
543
|
m.addAction(self.tr("Reset hidden icons"), self._reset_hidden_icons)
|
|
544
544
|
|
|
545
|
+
# ✅ NEW: Factory reset for all toolbars
|
|
546
|
+
m.addSeparator()
|
|
547
|
+
reset_all = m.addAction(self.tr("Reset ALL Toolbars (Factory Layout)"))
|
|
548
|
+
reset_all.setStatusTip(self.tr("Clears saved toolbar positions/orders/hidden state and restores defaults"))
|
|
549
|
+
reset_all.triggered.connect(lambda: getattr(self.window(), "_reset_all_toolbars_to_factory", lambda: None)())
|
|
550
|
+
|
|
545
551
|
m.exec(ev.globalPos())
|
|
546
552
|
|
|
553
|
+
|
|
547
554
|
def _reset_hidden_icons(self):
|
|
548
555
|
mw = self.window()
|
|
549
556
|
tb_hidden = getattr(mw, "_hidden_toolbar", lambda: None)()
|
|
@@ -1033,17 +1040,14 @@ class ShortcutCanvas(QWidget):
|
|
|
1033
1040
|
return False
|
|
1034
1041
|
sw = self._top_subwindow_at(e.position().toPoint())
|
|
1035
1042
|
if sw is None:
|
|
1036
|
-
|
|
1037
|
-
QApplication.processEvents()
|
|
1043
|
+
|
|
1038
1044
|
return False
|
|
1039
1045
|
try:
|
|
1040
1046
|
raw = bytes(md.data(MIME_CMD))
|
|
1041
1047
|
payload = _unpack_cmd_payload(raw) # your existing helper
|
|
1042
|
-
|
|
1043
|
-
QApplication.processEvents()
|
|
1048
|
+
|
|
1044
1049
|
except Exception as ex:
|
|
1045
|
-
|
|
1046
|
-
QApplication.processEvents()
|
|
1050
|
+
|
|
1047
1051
|
return False
|
|
1048
1052
|
self._mgr.apply_command_to_subwindow(sw, payload)
|
|
1049
1053
|
e.acceptProposedAction()
|
|
@@ -1545,6 +1549,7 @@ class ShortcutManager:
|
|
|
1545
1549
|
|
|
1546
1550
|
# ---- persistence (QSettings JSON blob) ----
|
|
1547
1551
|
def save_shortcuts(self):
|
|
1552
|
+
|
|
1548
1553
|
data = []
|
|
1549
1554
|
for sid, w in list(self.widgets.items()):
|
|
1550
1555
|
if _is_dead(w):
|
|
@@ -1845,6 +1850,7 @@ class ShortcutManager:
|
|
|
1845
1850
|
|
|
1846
1851
|
|
|
1847
1852
|
def clear(self):
|
|
1853
|
+
|
|
1848
1854
|
for sid, w in list(self.widgets.items()):
|
|
1849
1855
|
try:
|
|
1850
1856
|
if not _is_dead(w):
|
|
@@ -1936,6 +1942,7 @@ class _StatStretchPresetDialog(QDialog):
|
|
|
1936
1942
|
hdr_knee: float # 0..1
|
|
1937
1943
|
luma_only: bool
|
|
1938
1944
|
luma_mode: str # e.g. "rec709"
|
|
1945
|
+
luma_blend: float #0..1 (0=normal linked, 1=pure luma-only)
|
|
1939
1946
|
"""
|
|
1940
1947
|
def __init__(self, parent=None, initial: dict | None = None):
|
|
1941
1948
|
super().__init__(parent)
|
|
@@ -2014,8 +2021,19 @@ class _StatStretchPresetDialog(QDialog):
|
|
|
2014
2021
|
if idx >= 0:
|
|
2015
2022
|
self.cmb_luma.setCurrentIndex(idx)
|
|
2016
2023
|
|
|
2017
|
-
self.
|
|
2018
|
-
self.
|
|
2024
|
+
self.spin_luma_blend = QDoubleSpinBox()
|
|
2025
|
+
self.spin_luma_blend.setRange(0.0, 1.0)
|
|
2026
|
+
self.spin_luma_blend.setDecimals(2)
|
|
2027
|
+
self.spin_luma_blend.setSingleStep(0.05)
|
|
2028
|
+
self.spin_luma_blend.setValue(float(init.get("luma_blend", 0.70)))
|
|
2029
|
+
|
|
2030
|
+
def _set_luma_enabled(on: bool):
|
|
2031
|
+
on = bool(on)
|
|
2032
|
+
self.cmb_luma.setEnabled(on)
|
|
2033
|
+
self.spin_luma_blend.setEnabled(on)
|
|
2034
|
+
|
|
2035
|
+
_set_luma_enabled(self.chk_luma_only.isChecked())
|
|
2036
|
+
self.chk_luma_only.toggled.connect(_set_luma_enabled)
|
|
2019
2037
|
|
|
2020
2038
|
# --- Layout ---
|
|
2021
2039
|
form = QFormLayout()
|
|
@@ -2039,7 +2057,7 @@ class _StatStretchPresetDialog(QDialog):
|
|
|
2039
2057
|
form.addRow("", QLabel("— Luma mode —"))
|
|
2040
2058
|
form.addRow("", self.chk_luma_only)
|
|
2041
2059
|
form.addRow("Luma mode:", self.cmb_luma)
|
|
2042
|
-
|
|
2060
|
+
form.addRow("Luma blend (0–1):", self.spin_luma_blend)
|
|
2043
2061
|
btns = QDialogButtonBox(
|
|
2044
2062
|
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel,
|
|
2045
2063
|
parent=self
|
|
@@ -2072,6 +2090,7 @@ class _StatStretchPresetDialog(QDialog):
|
|
|
2072
2090
|
|
|
2073
2091
|
"luma_only": luma_on,
|
|
2074
2092
|
"luma_mode": str(self.cmb_luma.currentText()) if luma_on else "rec709",
|
|
2093
|
+
"luma_blend": float(self.spin_luma_blend.value()) if luma_on else 0.0,
|
|
2075
2094
|
}
|
|
2076
2095
|
|
|
2077
2096
|
class _StarStretchPresetDialog(QDialog):
|