solareclipseworkbench 1.7.0__tar.gz → 1.7.2__tar.gz

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.
Files changed (115) hide show
  1. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/PKG-INFO +1 -1
  2. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/pyproject.toml +1 -1
  3. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/camera.py +3 -3
  4. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/gui.py +54 -9
  5. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench.egg-info/PKG-INFO +1 -1
  6. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/LICENSE +0 -0
  7. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/README.md +0 -0
  8. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/setup.cfg +0 -0
  9. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/__init__.py +0 -0
  10. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/__main__.py +0 -0
  11. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/besselian_element_generator.py +0 -0
  12. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/commands.py +0 -0
  13. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/constants.py +0 -0
  14. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/de421.bsp +0 -0
  15. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/deltat.csv +0 -0
  16. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/eclipse_besselian.csv +0 -0
  17. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/20240408.txt +0 -0
  18. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/20250329.txt +0 -0
  19. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/__init__.py +0 -0
  20. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/test.txt +0 -0
  21. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/testEOS1000D.txt +0 -0
  22. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/testEOS80D.txt +0 -0
  23. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/testEOSR.txt +0 -0
  24. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/testNikon.txt +0 -0
  25. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/testSony.txt +0 -0
  26. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/testVirtualCamera.txt +0 -0
  27. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/voice_prompts.txt +0 -0
  28. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/example_scripts/voice_prompts_basic.txt +0 -0
  29. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/exposure_calculator.py +0 -0
  30. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/__init__.py +0 -0
  31. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/astrowimsara.jpg +0 -0
  32. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/calendar.png +0 -0
  33. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/camera.png +0 -0
  34. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/clock.png +0 -0
  35. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/datetime-format-popup.png +0 -0
  36. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/eclipse-date-popup.png +0 -0
  37. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/folder.png +0 -0
  38. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/location-popup.png +0 -0
  39. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/location.png +0 -0
  40. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/logo-small.jpg +0 -0
  41. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/logo-small.svg +0 -0
  42. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/logo.jpg +0 -0
  43. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/save.png +0 -0
  44. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/settings.png +0 -0
  45. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/simulation-popup.png +0 -0
  46. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/simulator.png +0 -0
  47. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/stop.png +0 -0
  48. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/toolbar.png +0 -0
  49. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/img/ui-top.png +0 -0
  50. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/location.py +0 -0
  51. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/location_ui.py +0 -0
  52. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/notifications.py +0 -0
  53. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/nutation.py +0 -0
  54. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/observer.py +0 -0
  55. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/phone_gps.py +0 -0
  56. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/qt_utils.py +0 -0
  57. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/reference_moments.py +0 -0
  58. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/scripts.py +0 -0
  59. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sew.py +0 -0
  60. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/solar_eclipse.py +0 -0
  61. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/1.wav +0 -0
  62. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/10.wav +0 -0
  63. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/15.wav +0 -0
  64. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/2.wav +0 -0
  65. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/20_seconds.wav +0 -0
  66. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/3.wav +0 -0
  67. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/30_seconds.wav +0 -0
  68. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/4.wav +0 -0
  69. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/40_seconds.wav +0 -0
  70. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/5.wav +0 -0
  71. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/__init__.py +0 -0
  72. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c1.wav +0 -0
  73. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c1_in_60_seconds.wav +0 -0
  74. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2.wav +0 -0
  75. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_10_minutes.wav +0 -0
  76. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_15_minutes.wav +0 -0
  77. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_20_minutes.wav +0 -0
  78. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_20_seconds.wav +0 -0
  79. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_25_minutes.wav +0 -0
  80. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_2_minutes.wav +0 -0
  81. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_30_minutes.wav +0 -0
  82. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_30_seconds.wav +0 -0
  83. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_40_minutes.wav +0 -0
  84. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_40_seconds.wav +0 -0
  85. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_4_minutes.wav +0 -0
  86. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_50_minutes.wav +0 -0
  87. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_5_minutes.wav +0 -0
  88. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_60_seconds.wav +0 -0
  89. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_6_minutes.wav +0 -0
  90. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_in_90_seconds.wav +0 -0
  91. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c2_plus_30_seconds.wav +0 -0
  92. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_in_20_seconds.wav +0 -0
  93. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_in_45_seconds.wav +0 -0
  94. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_in_8_seconds.wav +0 -0
  95. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_plus_10_seconds.wav +0 -0
  96. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_plus_15_seconds.wav +0 -0
  97. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_plus_1_minute.wav +0 -0
  98. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_plus_25_seconds.wav +0 -0
  99. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_plus_2_minutes.wav +0 -0
  100. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_plus_2_seconds.wav +0 -0
  101. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c3_plus_45_seconds.wav +0 -0
  102. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c4.wav +0 -0
  103. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/c4_in_60_seconds.wav +0 -0
  104. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/filters_on.wav +0 -0
  105. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/max.wav +0 -0
  106. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/sound/max_in_10_seconds.wav +0 -0
  107. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/utils.py +0 -0
  108. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/vec.py +0 -0
  109. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench/wizard.py +0 -0
  110. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench.egg-info/SOURCES.txt +0 -0
  111. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench.egg-info/dependency_links.txt +0 -0
  112. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench.egg-info/entry_points.txt +0 -0
  113. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench.egg-info/requires.txt +0 -0
  114. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/src/solareclipseworkbench.egg-info/top_level.txt +0 -0
  115. {solareclipseworkbench-1.7.0 → solareclipseworkbench-1.7.2}/tests/test_solar_eclipse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: solareclipseworkbench
3
- Version: 1.7.0
3
+ Version: 1.7.2
4
4
  Summary: Tools to photograph solar eclipses
5
5
  Author-email: Sara Regibo <sararegibo@gmail.com>, Wim De Meester <deepskywim@gmail.com>
6
6
  License: GPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "solareclipseworkbench"
3
- version = "1.7.0"
3
+ version = "1.7.2"
4
4
  description = "Tools to photograph solar eclipses"
5
5
  readme = "README.md"
6
6
  license = { text = "GPL-3.0-or-later" }
@@ -676,7 +676,7 @@ def take_picture(camera: Camera, camera_settings: CameraSettings) -> None:
676
676
  except gphoto2.GPhoto2Error:
677
677
  try:
678
678
  capture_mode_widget = gp.check_result(gp.gp_widget_get_child_by_name(config, 'stillcapturemode'))
679
- gp.gp_widget_set_value(capture_mode_widget, '0') # 0 = Single Frame
679
+ gp.gp_widget_set_value(capture_mode_widget, 0) # 0 = Single Frame
680
680
  _set_gp_config(camera, config, context)
681
681
  logging.debug('Ensured Nikon stillcapturemode is Single Frame (0) before take_picture')
682
682
  except gphoto2.GPhoto2Error as e:
@@ -987,14 +987,14 @@ def take_burst(camera: Camera, camera_settings: CameraSettings, duration: float)
987
987
  except gphoto2.GPhoto2Error:
988
988
  try:
989
989
  capture_mode_reset = gp.check_result(gp.gp_widget_get_child_by_name(config_reset, 'stillcapturemode'))
990
- gp.gp_widget_set_value(capture_mode_reset, '0') # 0 = Single Frame
990
+ gp.gp_widget_set_value(capture_mode_reset, 0) # 0 = Single Frame
991
991
  _set_gp_config(camera, config_reset, context)
992
992
  logging.debug('Reset Nikon stillcapturemode to Single Frame (0) after burst')
993
993
  except gphoto2.GPhoto2Error as e:
994
994
  logging.warning('Could not reset Nikon capture mode to single after burst: %s', e)
995
995
  try:
996
996
  burst_number_reset = gp.check_result(gp.gp_widget_get_child_by_name(config_reset, 'burstnumber'))
997
- gp.gp_widget_set_value(burst_number_reset, '1')
997
+ gp.gp_widget_set_value(burst_number_reset, 1)
998
998
  _set_gp_config(camera, config_reset, context)
999
999
  logging.debug('Reset Nikon burstnumber to 1 after burst')
1000
1000
  except gphoto2.GPhoto2Error as e:
@@ -913,6 +913,13 @@ class SolarEclipseController(Observer):
913
913
  self.time_display_timer.setInterval(1000)
914
914
  self.time_display_timer.start()
915
915
 
916
+ # Update the eclipse visualization less frequently to save CPU/battery.
917
+ # The main time display remains at 1 Hz; the plot updates every 5 seconds.
918
+ self.visualization_timer = QTimer()
919
+ self.visualization_timer.timeout.connect(self.update_visualization)
920
+ self.visualization_timer.setInterval(5000)
921
+ self.visualization_timer.start()
922
+
916
923
  self.load_settings()
917
924
 
918
925
  def update_time(self):
@@ -939,14 +946,28 @@ class SolarEclipseController(Observer):
939
946
 
940
947
  self.update_jobs_countdown()
941
948
 
942
- self.view.eclipse_visualization.plot(current_time_utc)
943
-
944
949
  def update_jobs_countdown(self):
945
950
  """ Update the countdown of the scheduled jobs. """
946
951
 
947
952
  if self.jobs_model:
948
953
  self.jobs_model.update_countdown()
949
954
 
955
+ def update_visualization(self):
956
+ """Update the eclipse visualization at a reduced frequency.
957
+
958
+ Uses the controller's current UTC time if available; falls back to
959
+ computing the current UTC time if needed.
960
+ """
961
+ try:
962
+ t = getattr(self.model, 'utc_time', None)
963
+ if t is None:
964
+ current_time_local = datetime.datetime.now()
965
+ t = current_time_local.astimezone(tz=datetime.timezone.utc)
966
+
967
+ self.view.eclipse_visualization.plot(t)
968
+ except Exception:
969
+ logging.exception("Error updating eclipse visualization")
970
+
950
971
  def do(self, actions):
951
972
  pass
952
973
 
@@ -982,13 +1003,13 @@ class SolarEclipseController(Observer):
982
1003
  return
983
1004
 
984
1005
  elif isinstance(changed_object, EclipsePopup):
985
- eclipse_date = changed_object.eclipse_combobox.currentText()
986
- # Only take the first 10 characters of the date string
987
- eclipse_date = eclipse_date[:11]
1006
+ # Extract the date portion from the combobox entry (format: "<date> - <type> - ...").
1007
+ eclipse_text = changed_object.eclipse_combobox.currentText()
1008
+ eclipse_date_str = eclipse_text.split(" - ", 1)[0]
988
1009
  self.model.set_eclipse_date(
989
- Time(datetime.datetime.strptime(eclipse_date, DATE_FORMATS[self.view.date_format])))
1010
+ Time(datetime.datetime.strptime(eclipse_date_str, DATE_FORMATS[self.view.date_format])))
990
1011
 
991
- self.view.eclipse_date.setText(changed_object.eclipse_combobox.currentText()[:11])
1012
+ self.view.eclipse_date.setText(eclipse_date_str)
992
1013
  return
993
1014
 
994
1015
  elif isinstance(changed_object, SimulatorPopup):
@@ -1507,10 +1528,34 @@ class SimulatorPopup(QWidget, Observable):
1507
1528
  self.before_after_combobox.setCurrentText("before")
1508
1529
 
1509
1530
  self.reference_moment_combobox = QComboBox()
1510
- self.reference_moment_combobox.addItems(REFERENCE_MOMENTS)
1511
1531
 
1532
+ # Populate the reference-moment combobox based on the model's computed reference moments.
1533
+ # If a moment is not present in the model (e.g. no C2/C3 for partial eclipses, or no C1/C4/MAX
1534
+ # for no-eclipse), it will not be offered as a simulation start point.
1535
+ model_ref = getattr(observer.model, 'reference_moments', None)
1536
+ if model_ref:
1537
+ options = []
1538
+ for key in ["C1", "C2", "MAX", "C3", "C4", "sunset", "sunrise"]:
1539
+ if key in model_ref:
1540
+ options.append(key)
1541
+ # If nothing was detected (defensive), fall back to the full list
1542
+ if not options:
1543
+ options = list(REFERENCE_MOMENTS)
1544
+ self.reference_moment_combobox.addItems(options)
1545
+ else:
1546
+ # No reference moments computed yet; show full list so the user can pick (or compute moments first)
1547
+ self.reference_moment_combobox.addItems(REFERENCE_MOMENTS)
1548
+
1549
+ # Restore previously chosen simulator reference moment if still available, otherwise choose a sensible default
1512
1550
  if observer.sim_reference_moment:
1513
- self.reference_moment_combobox.setCurrentText(observer.sim_reference_moment)
1551
+ available = [self.reference_moment_combobox.itemText(i) for i in range(self.reference_moment_combobox.count())]
1552
+ if observer.sim_reference_moment in available:
1553
+ self.reference_moment_combobox.setCurrentText(observer.sim_reference_moment)
1554
+ else:
1555
+ if "MAX" in available:
1556
+ self.reference_moment_combobox.setCurrentText("MAX")
1557
+ elif available:
1558
+ self.reference_moment_combobox.setCurrentIndex(0)
1514
1559
 
1515
1560
  layout = QVBoxLayout()
1516
1561
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: solareclipseworkbench
3
- Version: 1.7.0
3
+ Version: 1.7.2
4
4
  Summary: Tools to photograph solar eclipses
5
5
  Author-email: Sara Regibo <sararegibo@gmail.com>, Wim De Meester <deepskywim@gmail.com>
6
6
  License: GPL-3.0-or-later