setiastrosuitepro 1.6.1.post1__py3-none-any.whl → 1.6.4__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 setiastrosuitepro might be problematic. Click here for more details.
- setiastro/images/Background_startup.jpg +0 -0
- setiastro/images/rotatearbitrary.png +0 -0
- setiastro/qml/ResourceMonitor.qml +126 -0
- setiastro/saspro/__main__.py +162 -25
- setiastro/saspro/_generated/build_info.py +2 -1
- setiastro/saspro/abe.py +62 -11
- setiastro/saspro/aberration_ai.py +3 -3
- setiastro/saspro/add_stars.py +5 -2
- setiastro/saspro/astrobin_exporter.py +3 -0
- setiastro/saspro/astrospike_python.py +3 -1
- setiastro/saspro/autostretch.py +4 -2
- setiastro/saspro/backgroundneutral.py +60 -9
- setiastro/saspro/batch_convert.py +3 -0
- setiastro/saspro/batch_renamer.py +3 -0
- setiastro/saspro/blemish_blaster.py +3 -0
- setiastro/saspro/blink_comparator_pro.py +474 -251
- setiastro/saspro/cheat_sheet.py +50 -15
- setiastro/saspro/clahe.py +27 -1
- setiastro/saspro/comet_stacking.py +103 -38
- setiastro/saspro/convo.py +3 -0
- setiastro/saspro/copyastro.py +3 -0
- setiastro/saspro/cosmicclarity.py +70 -45
- setiastro/saspro/crop_dialog_pro.py +28 -1
- setiastro/saspro/curve_editor_pro.py +18 -0
- setiastro/saspro/debayer.py +3 -0
- setiastro/saspro/doc_manager.py +40 -17
- setiastro/saspro/fitsmodifier.py +3 -0
- setiastro/saspro/frequency_separation.py +8 -2
- setiastro/saspro/function_bundle.py +18 -16
- setiastro/saspro/generate_translations.py +715 -1
- setiastro/saspro/ghs_dialog_pro.py +3 -0
- setiastro/saspro/graxpert.py +3 -0
- setiastro/saspro/gui/main_window.py +364 -92
- setiastro/saspro/gui/mixins/dock_mixin.py +119 -7
- setiastro/saspro/gui/mixins/file_mixin.py +7 -0
- setiastro/saspro/gui/mixins/geometry_mixin.py +105 -5
- setiastro/saspro/gui/mixins/menu_mixin.py +29 -0
- setiastro/saspro/gui/mixins/toolbar_mixin.py +33 -10
- setiastro/saspro/gui/statistics_dialog.py +47 -0
- setiastro/saspro/halobgon.py +29 -3
- setiastro/saspro/histogram.py +3 -0
- setiastro/saspro/history_explorer.py +2 -0
- setiastro/saspro/i18n.py +22 -10
- setiastro/saspro/image_combine.py +3 -0
- setiastro/saspro/image_peeker_pro.py +3 -0
- setiastro/saspro/imageops/stretch.py +5 -13
- setiastro/saspro/isophote.py +3 -0
- setiastro/saspro/legacy/numba_utils.py +64 -47
- setiastro/saspro/linear_fit.py +3 -0
- setiastro/saspro/live_stacking.py +13 -2
- setiastro/saspro/mask_creation.py +3 -0
- setiastro/saspro/mfdeconv.py +5 -0
- setiastro/saspro/morphology.py +30 -5
- setiastro/saspro/multiscale_decomp.py +713 -256
- setiastro/saspro/nbtorgb_stars.py +12 -2
- setiastro/saspro/numba_utils.py +148 -47
- setiastro/saspro/ops/scripts.py +77 -17
- setiastro/saspro/ops/settings.py +1 -43
- setiastro/saspro/perfect_palette_picker.py +1 -0
- setiastro/saspro/pixelmath.py +6 -2
- setiastro/saspro/plate_solver.py +1 -0
- setiastro/saspro/remove_green.py +18 -1
- setiastro/saspro/remove_stars.py +136 -162
- setiastro/saspro/remove_stars_preset.py +55 -13
- setiastro/saspro/resources.py +36 -10
- setiastro/saspro/rgb_combination.py +1 -0
- setiastro/saspro/rgbalign.py +4 -4
- setiastro/saspro/save_options.py +1 -0
- setiastro/saspro/selective_color.py +79 -20
- setiastro/saspro/sfcc.py +50 -8
- setiastro/saspro/shortcuts.py +94 -21
- setiastro/saspro/signature_insert.py +3 -0
- setiastro/saspro/stacking_suite.py +924 -446
- setiastro/saspro/star_alignment.py +291 -331
- setiastro/saspro/star_spikes.py +116 -32
- setiastro/saspro/star_stretch.py +38 -1
- setiastro/saspro/stat_stretch.py +35 -3
- setiastro/saspro/status_log_dock.py +1 -1
- setiastro/saspro/subwindow.py +63 -2
- setiastro/saspro/supernovaasteroidhunter.py +3 -0
- setiastro/saspro/swap_manager.py +77 -42
- setiastro/saspro/translations/all_source_strings.json +4726 -0
- setiastro/saspro/translations/ar_translations.py +4096 -0
- setiastro/saspro/translations/de_translations.py +441 -446
- setiastro/saspro/translations/es_translations.py +278 -32
- setiastro/saspro/translations/fr_translations.py +280 -32
- setiastro/saspro/translations/hi_translations.py +3803 -0
- setiastro/saspro/translations/integrate_translations.py +38 -1
- setiastro/saspro/translations/it_translations.py +1211 -145
- setiastro/saspro/translations/ja_translations.py +556 -307
- setiastro/saspro/translations/pt_translations.py +3316 -3322
- setiastro/saspro/translations/ru_translations.py +3082 -0
- setiastro/saspro/translations/saspro_ar.qm +0 -0
- setiastro/saspro/translations/saspro_ar.ts +16019 -0
- setiastro/saspro/translations/saspro_de.qm +0 -0
- setiastro/saspro/translations/saspro_de.ts +14428 -133
- setiastro/saspro/translations/saspro_es.qm +0 -0
- setiastro/saspro/translations/saspro_es.ts +11503 -7821
- setiastro/saspro/translations/saspro_fr.qm +0 -0
- setiastro/saspro/translations/saspro_fr.ts +11168 -7812
- setiastro/saspro/translations/saspro_hi.qm +0 -0
- setiastro/saspro/translations/saspro_hi.ts +14855 -0
- setiastro/saspro/translations/saspro_it.qm +0 -0
- setiastro/saspro/translations/saspro_it.ts +14347 -7821
- setiastro/saspro/translations/saspro_ja.qm +0 -0
- setiastro/saspro/translations/saspro_ja.ts +14860 -137
- setiastro/saspro/translations/saspro_pt.qm +0 -0
- setiastro/saspro/translations/saspro_pt.ts +14904 -137
- setiastro/saspro/translations/saspro_ru.qm +0 -0
- setiastro/saspro/translations/saspro_ru.ts +11835 -0
- setiastro/saspro/translations/saspro_sw.qm +0 -0
- setiastro/saspro/translations/saspro_sw.ts +15237 -0
- setiastro/saspro/translations/saspro_uk.qm +0 -0
- setiastro/saspro/translations/saspro_uk.ts +15248 -0
- setiastro/saspro/translations/saspro_zh.qm +0 -0
- setiastro/saspro/translations/saspro_zh.ts +10581 -7812
- setiastro/saspro/translations/sw_translations.py +3897 -0
- setiastro/saspro/translations/uk_translations.py +3929 -0
- setiastro/saspro/translations/zh_translations.py +283 -32
- setiastro/saspro/versioning.py +36 -5
- setiastro/saspro/view_bundle.py +20 -17
- setiastro/saspro/wavescale_hdr.py +22 -1
- setiastro/saspro/wavescalede.py +23 -1
- setiastro/saspro/whitebalance.py +39 -3
- setiastro/saspro/widgets/minigame/game.js +991 -0
- setiastro/saspro/widgets/minigame/index.html +53 -0
- setiastro/saspro/widgets/minigame/style.css +241 -0
- setiastro/saspro/widgets/resource_monitor.py +263 -0
- setiastro/saspro/widgets/spinboxes.py +18 -0
- setiastro/saspro/widgets/wavelet_utils.py +52 -20
- setiastro/saspro/wimi.py +100 -80
- setiastro/saspro/wims.py +33 -33
- setiastro/saspro/window_shelf.py +2 -2
- {setiastrosuitepro-1.6.1.post1.dist-info → setiastrosuitepro-1.6.4.dist-info}/METADATA +15 -4
- {setiastrosuitepro-1.6.1.post1.dist-info → setiastrosuitepro-1.6.4.dist-info}/RECORD +139 -115
- {setiastrosuitepro-1.6.1.post1.dist-info → setiastrosuitepro-1.6.4.dist-info}/WHEEL +0 -0
- {setiastrosuitepro-1.6.1.post1.dist-info → setiastrosuitepro-1.6.4.dist-info}/entry_points.txt +0 -0
- {setiastrosuitepro-1.6.1.post1.dist-info → setiastrosuitepro-1.6.4.dist-info}/licenses/LICENSE +0 -0
- {setiastrosuitepro-1.6.1.post1.dist-info → setiastrosuitepro-1.6.4.dist-info}/licenses/license.txt +0 -0
|
@@ -199,6 +199,9 @@ class WaveScaleHDRDialogPro(QDialog):
|
|
|
199
199
|
import logging
|
|
200
200
|
logging.debug(f"Exception suppressed: {type(e).__name__}: {e}")
|
|
201
201
|
self.resize(980, 700)
|
|
202
|
+
self.setWindowFlag(Qt.WindowType.Window, True)
|
|
203
|
+
self.setWindowModality(Qt.WindowModality.NonModal)
|
|
204
|
+
self.setModal(False)
|
|
202
205
|
|
|
203
206
|
self._doc = doc
|
|
204
207
|
base = getattr(doc, "image", None)
|
|
@@ -606,8 +609,26 @@ class WaveScaleHDRDialogPro(QDialog):
|
|
|
606
609
|
except Exception:
|
|
607
610
|
pass
|
|
608
611
|
|
|
609
|
-
|
|
612
|
+
# Dialog stays open so user can apply to other images
|
|
613
|
+
# Refresh document reference for next operation
|
|
614
|
+
self._refresh_document_from_active()
|
|
610
615
|
|
|
616
|
+
def _refresh_document_from_active(self):
|
|
617
|
+
"""
|
|
618
|
+
Refresh the dialog's document reference to the currently active document.
|
|
619
|
+
This allows reusing the same dialog on different images.
|
|
620
|
+
"""
|
|
621
|
+
try:
|
|
622
|
+
main = self.parent()
|
|
623
|
+
if main and hasattr(main, "_active_doc"):
|
|
624
|
+
new_doc = main._active_doc()
|
|
625
|
+
if new_doc is not None and new_doc is not self._doc:
|
|
626
|
+
self._doc = new_doc
|
|
627
|
+
# Reset L channel and refresh preview for new document
|
|
628
|
+
self._L_original = None
|
|
629
|
+
self._last_preview = None
|
|
630
|
+
except Exception:
|
|
631
|
+
pass
|
|
611
632
|
|
|
612
633
|
|
|
613
634
|
def _schedule_mask_refresh(self, _value):
|
setiastro/saspro/wavescalede.py
CHANGED
|
@@ -201,6 +201,9 @@ class WaveScaleDarkEnhancerDialogPro(QDialog):
|
|
|
201
201
|
import logging
|
|
202
202
|
logging.debug(f"Exception suppressed: {type(e).__name__}: {e}")
|
|
203
203
|
self.resize(980, 700)
|
|
204
|
+
self.setWindowFlag(Qt.WindowType.Window, True)
|
|
205
|
+
self.setWindowModality(Qt.WindowModality.NonModal)
|
|
206
|
+
self.setModal(False)
|
|
204
207
|
|
|
205
208
|
self._doc = doc
|
|
206
209
|
base = getattr(doc, "image", None)
|
|
@@ -581,7 +584,26 @@ class WaveScaleDarkEnhancerDialogPro(QDialog):
|
|
|
581
584
|
# Never let replay wiring break the apply
|
|
582
585
|
pass
|
|
583
586
|
|
|
584
|
-
|
|
587
|
+
# Dialog stays open so user can apply to other images
|
|
588
|
+
# Refresh document reference for next operation
|
|
589
|
+
self._refresh_document_from_active()
|
|
590
|
+
|
|
591
|
+
def _refresh_document_from_active(self):
|
|
592
|
+
"""
|
|
593
|
+
Refresh the dialog's document reference to the currently active document.
|
|
594
|
+
This allows reusing the same dialog on different images.
|
|
595
|
+
"""
|
|
596
|
+
try:
|
|
597
|
+
main = self.parent()
|
|
598
|
+
if main and hasattr(main, "_active_doc"):
|
|
599
|
+
new_doc = main._active_doc()
|
|
600
|
+
if new_doc is not None and new_doc is not self._doc:
|
|
601
|
+
self._doc = new_doc
|
|
602
|
+
# Reset state and refresh for new document
|
|
603
|
+
self._L_original = None
|
|
604
|
+
self._last_preview = None
|
|
605
|
+
except Exception:
|
|
606
|
+
pass
|
|
585
607
|
|
|
586
608
|
|
|
587
609
|
# ─────────────────────────────────────────────────────────────────────────────
|
setiastro/saspro/whitebalance.py
CHANGED
|
@@ -191,10 +191,18 @@ def apply_white_balance_to_doc(doc, preset: Optional[Dict] = None):
|
|
|
191
191
|
class WhiteBalanceDialog(QDialog):
|
|
192
192
|
def __init__(self, parent, doc, icon: QIcon | None = None):
|
|
193
193
|
super().__init__(parent)
|
|
194
|
+
self._main = parent
|
|
194
195
|
self.doc = doc
|
|
196
|
+
|
|
197
|
+
# Connect to active document change signal
|
|
198
|
+
if hasattr(self._main, "currentDocumentChanged"):
|
|
199
|
+
self._main.currentDocumentChanged.connect(self._on_active_doc_changed)
|
|
195
200
|
if icon:
|
|
196
201
|
self.setWindowIcon(icon)
|
|
197
202
|
self.setWindowTitle(self.tr("White Balance"))
|
|
203
|
+
self.setWindowFlag(Qt.WindowType.Window, True)
|
|
204
|
+
self.setWindowModality(Qt.WindowModality.NonModal)
|
|
205
|
+
self.setModal(False)
|
|
198
206
|
self.resize(900, 600)
|
|
199
207
|
|
|
200
208
|
self._build_ui()
|
|
@@ -291,6 +299,18 @@ class WhiteBalanceDialog(QDialog):
|
|
|
291
299
|
self.manual_group.setVisible(t == "Manual")
|
|
292
300
|
self.star_group.setVisible(t == "Star-Based")
|
|
293
301
|
|
|
302
|
+
# ---- active document change ------------------------------------
|
|
303
|
+
def _on_active_doc_changed(self, doc):
|
|
304
|
+
"""Called when user clicks a different image window."""
|
|
305
|
+
if doc is None or getattr(doc, "image", None) is None:
|
|
306
|
+
return
|
|
307
|
+
self.doc = doc
|
|
308
|
+
# Force fresh star detection by temporarily disabling cache
|
|
309
|
+
old_reuse = self.chk_reuse.isChecked()
|
|
310
|
+
self.chk_reuse.setChecked(False)
|
|
311
|
+
self._update_star_preview()
|
|
312
|
+
self.chk_reuse.setChecked(old_reuse)
|
|
313
|
+
|
|
294
314
|
# ---- preview --------------------------------------------------------
|
|
295
315
|
def _update_star_preview(self):
|
|
296
316
|
if self.type_combo.currentText() != "Star-Based":
|
|
@@ -373,7 +393,8 @@ class WhiteBalanceDialog(QDialog):
|
|
|
373
393
|
|
|
374
394
|
# Use the headless helper so doc metadata is consistent
|
|
375
395
|
apply_white_balance_to_doc(self.doc, preset)
|
|
376
|
-
|
|
396
|
+
# Dialog stays open - refresh document for next operation
|
|
397
|
+
self._refresh_document_from_active()
|
|
377
398
|
|
|
378
399
|
elif mode == "Auto":
|
|
379
400
|
preset = {"mode": "auto"}
|
|
@@ -382,7 +403,8 @@ class WhiteBalanceDialog(QDialog):
|
|
|
382
403
|
_record_preset_for_replay(preset)
|
|
383
404
|
|
|
384
405
|
apply_white_balance_to_doc(self.doc, preset)
|
|
385
|
-
|
|
406
|
+
# Dialog stays open - refresh document for next operation
|
|
407
|
+
self._refresh_document_from_active()
|
|
386
408
|
|
|
387
409
|
else: # --- Star-Based: compute here so we can plot like SASv2 ---
|
|
388
410
|
thr = float(self.thr_slider.value())
|
|
@@ -449,8 +471,22 @@ class WhiteBalanceDialog(QDialog):
|
|
|
449
471
|
self.tr("White Balance"),
|
|
450
472
|
self.tr("Star-Based WB applied.\nDetected {0} stars.").format(int(star_count)),
|
|
451
473
|
)
|
|
452
|
-
|
|
474
|
+
# Dialog stays open - refresh document for next operation
|
|
475
|
+
self._refresh_document_from_active()
|
|
453
476
|
|
|
454
477
|
except Exception as e:
|
|
455
478
|
QMessageBox.critical(self, self.tr("White Balance"), self.tr("Failed to apply White Balance:\n{0}").format(e))
|
|
456
479
|
|
|
480
|
+
def _refresh_document_from_active(self):
|
|
481
|
+
"""
|
|
482
|
+
Refresh the dialog's document reference to the currently active document.
|
|
483
|
+
This allows reusing the same dialog on different images.
|
|
484
|
+
"""
|
|
485
|
+
try:
|
|
486
|
+
main = self.parent()
|
|
487
|
+
if main and hasattr(main, "_active_doc"):
|
|
488
|
+
new_doc = main._active_doc()
|
|
489
|
+
if new_doc is not None and new_doc is not self.doc:
|
|
490
|
+
self.doc = new_doc
|
|
491
|
+
except Exception:
|
|
492
|
+
pass
|