8 #include "stellarsolverprofileeditor.h"
13 #include "ksmessagebox.h"
14 #include "stellarsolverprofile.h"
16 #include <KConfigDialog>
17 #include <QInputDialog>
18 #include <QFileDialog>
20 #include <stellarsolver.h>
24 StellarSolverProfileEditor::StellarSolverProfileEditor(
QWidget *parent, ProfileGroup group,
31 m_ConfigDialog = dialog;
33 setProfileGroup(group);
34 optionsProfileGroup->setEnabled(
false);
45 connect(openProfile, &
QPushButton::clicked,
this, &StellarSolverProfileEditor::openSingleProfile);
50 connect(saveProfile, &
QPushButton::clicked,
this, &StellarSolverProfileEditor::saveSingleProfile);
57 copyProfile->setVisible(
false);
62 connect(saveBackups, &
QPushButton::clicked,
this, &StellarSolverProfileEditor::saveBackupProfiles);
67 connect(loadBackups, &
QPushButton::clicked,
this, &StellarSolverProfileEditor::openBackupProfiles);
69 reloadProfiles->setIcon(
74 loadDefaults->setIcon(
77 connect(loadDefaults, &
QPushButton::clicked,
this, &StellarSolverProfileEditor::loadDefaultProfiles);
87 disconnectOptionsProfileComboBox();
88 SSolver::Parameters params = getSettingsFromUI();
89 params.listName =
name;
90 optionsList.
append(params);
91 optionsProfile->addItem(
name);
92 optionsProfile->setCurrentText(
name);
93 openOptionsProfileNum = optionsProfile->
count() - 1;
95 connectOptionsProfileComboBox();
101 if(optionsList.count() == 0)
103 int item = optionsProfile->currentIndex();
104 disconnectOptionsProfileComboBox();
105 optionsProfile->removeItem(item);
106 optionsList.removeAt(item);
107 if(optionsProfile->count() > 0)
109 if(item > optionsList.count() - 1)
111 openOptionsProfileNum = item;
112 loadOptionsProfileIgnoreOldSettings(item);
114 settingJustChanged();
115 connectOptionsProfileComboBox();
131 if(combo != optionsProfile)
137 connect(spin, QOverload<int>::of(&
QSpinBox::valueChanged),
this, &StellarSolverProfileEditor::settingJustChanged);
139 if(selectedProfileGroup != AlignProfiles)
140 astrometryOptions->setVisible(
false);
145 void StellarSolverProfileEditor::setProfileGroup(ProfileGroup group)
147 selectedProfileGroup = group;
148 optionsProfileGroup->setCurrentIndex(
static_cast<int>(group));
150 switch(selectedProfileGroup)
153 profileGroupFileName =
"SavedAlignProfiles.ini";
156 profileGroupFileName =
"SavedFocusProfiles.ini";
159 profileGroupFileName =
"SavedGuideProfiles.ini";
162 profileGroupFileName =
"SavedHFRProfiles.ini";
170 void StellarSolverProfileEditor::connectOptionsProfileComboBox()
173 &StellarSolverProfileEditor::loadOptionsProfile);
176 void StellarSolverProfileEditor::disconnectOptionsProfileComboBox()
179 &StellarSolverProfileEditor::loadOptionsProfile);
182 void StellarSolverProfileEditor::settingJustChanged()
184 optionsAreSaved =
false;
188 void StellarSolverProfileEditor::loadProfile(
int profile)
190 optionsProfile->setCurrentIndex(profile);
193 void StellarSolverProfileEditor::loadOptionsProfile()
195 if(optionsProfile->count() == 0)
197 if(openOptionsProfileNum < optionsList.count() && openOptionsProfileNum > 0)
199 SSolver::Parameters editorOptions = getSettingsFromUI();
200 SSolver::Parameters currentProfile = optionsList.at(openOptionsProfileNum);
201 if(!(editorOptions == currentProfile) || editorOptions.description != currentProfile.description)
203 editorOptions.listName = currentProfile.listName;
204 optionsList.replace(openOptionsProfileNum, editorOptions);
207 SSolver::Parameters newProfile = optionsList.at(optionsProfile->currentIndex());
209 for(
QWidget *control : controls)
210 control->blockSignals(
true);
211 sendSettingsToUI(newProfile);
212 for(
QWidget *control : controls)
213 control->blockSignals(
false);
214 openOptionsProfileNum = optionsProfile->currentIndex();
217 void StellarSolverProfileEditor::loadOptionsProfileIgnoreOldSettings(
int index)
219 if(index >= optionsProfile->count())
221 SSolver::Parameters newProfile = optionsList.at(index);
223 for(
QWidget *control : controls)
224 control->blockSignals(
true);
225 sendSettingsToUI(newProfile);
226 optionsProfile->setCurrentIndex(index);
227 openOptionsProfileNum = optionsProfile->currentIndex();
228 for(
QWidget *control : controls)
229 control->blockSignals(
false);
235 SSolver::Parameters StellarSolverProfileEditor::getSettingsFromUI()
237 SSolver::Parameters params;
238 params.description = description->toPlainText();
240 params.apertureShape = (SSolver::Shape) apertureShape->currentIndex();
241 params.kron_fact = kron_fact->text().toDouble();
242 params.subpix = subpix->text().toInt() ;
243 params.r_min = r_min->text().toFloat();
244 params.magzero = magzero->text().toFloat();
245 params.threshold_bg_multiple = threshMultiple->text().toFloat();
246 params.threshold_offset = threshOffset->text().toFloat();
247 params.minarea = minarea->text().toFloat();
248 params.deblend_thresh = deblend_thresh->text().toInt();
249 params.deblend_contrast = deblend_contrast->text().toFloat();
250 params.clean = (cleanCheckBox->isChecked()) ? 1 : 0;
251 params.clean_param = clean_param->text().toDouble();
252 params.convFilterType = (SSolver::ConvFilterType) convFilter->currentIndex();
253 params.fwhm = fwhm->value();
256 params.resort = resort->isChecked();
257 params.maxSize = maxSize->text().toDouble();
258 params.minSize = minSize->text().toDouble();
259 params.maxEllipse = maxEllipse->text().toDouble();
260 params.initialKeep = initialKeep->text().toInt();
261 params.keepNum = keepNum->text().toInt();
262 params.removeBrightest = brightestPercent->text().toDouble();
263 params.removeDimmest = dimmestPercent->text().toDouble();
264 params.saturationLimit = saturationLimit->text().toDouble();
268 params.maxwidth = maxWidth->text().toDouble();
269 params.minwidth = minWidth->text().toDouble();
270 params.inParallel = inParallel->isChecked();
271 params.multiAlgorithm = (SSolver::MultiAlgo)multiAlgo->currentIndex();
272 params.solverTimeLimit = solverTimeLimit->text().toInt();
274 params.resort = resort->isChecked();
275 params.autoDownsample = autoDownsample->isChecked();
276 params.downsample = downsample->value();
277 params.search_radius = radius->text().toDouble();
282 void StellarSolverProfileEditor::sendSettingsToUI(SSolver::Parameters a)
285 description->setText(a.description);
288 apertureShape->setCurrentIndex(a.apertureShape);
299 cleanCheckBox->setChecked(a.clean == 1);
301 convFilter->setCurrentIndex(a.convFilterType);
302 fwhm->setValue(a.fwhm);
317 autoDownsample->setChecked(a.autoDownsample);
318 downsample->setValue(a.downsample);
319 inParallel->setChecked(a.inParallel);
320 multiAlgo->setCurrentIndex(a.multiAlgorithm);
325 resort->setChecked(a.resort);
328 void StellarSolverProfileEditor::copySingleProfile()
333 void StellarSolverProfileEditor::openSingleProfile()
348 settings.beginGroup(group);
352 map.insert(key, settings.value(key));
353 SSolver::Parameters newParams = SSolver::Parameters::convertFromMap(map);
354 optionsList.append(newParams);
355 optionsProfile->addItem(group);
357 if(optionsProfile->count() > 0)
358 loadProfile(optionsProfile->count() - 1);
362 void StellarSolverProfileEditor::loadProfiles()
364 if( !optionsAreSaved )
367 "You made unsaved changes in the settings, do you really wish to overwrite them?") ==
QMessageBox::No)
371 optionsAreSaved =
true;
373 disconnectOptionsProfileComboBox();
374 optionsProfile->clear();
375 if(
QFile(savedOptionsProfiles).exists())
376 optionsList = StellarSolver::loadSavedOptionsProfiles(savedOptionsProfiles);
378 optionsList = getDefaultProfiles();
379 for(SSolver::Parameters params : optionsList)
380 optionsProfile->addItem(params.listName);
381 if(optionsList.count() > 0)
383 sendSettingsToUI(optionsList.at(0));
384 openOptionsProfileNum = 0;
386 connectOptionsProfileComboBox();
390 void StellarSolverProfileEditor::saveSingleProfile()
397 SSolver::Parameters params = optionsList.at(optionsProfile->currentIndex());
398 settings.beginGroup(params.listName);
404 settings.setValue(it.key(), it.value());
409 void StellarSolverProfileEditor::saveProfiles()
412 for(
int i = 0 ; i < optionsList.count(); i++)
414 SSolver::Parameters params = optionsList.at(i);
415 settings.beginGroup(params.listName);
421 settings.setValue(it.key(), it.value());
428 bool groupInList =
false;
429 for(SSolver::Parameters params : optionsList)
431 if(params.listName == group)
435 settings.remove(group);
441 switch(selectedProfileGroup)
444 return getDefaultFocusOptionsProfiles();
446 return getDefaultHFROptionsProfiles();
448 return getDefaultGuideOptionsProfiles();
451 return getDefaultAlignOptionsProfiles();
455 void StellarSolverProfileEditor::loadDefaultProfiles()
457 if( !optionsAreSaved )
460 "You made unsaved changes in the settings, do you really wish to overwrite them?") ==
QMessageBox::No)
464 optionsAreSaved =
true;
466 disconnectOptionsProfileComboBox();
467 optionsList = getDefaultProfiles();
468 optionsProfile->clear();
469 for(SSolver::Parameters param : optionsList)
470 optionsProfile->addItem(param.listName);
471 connectOptionsProfileComboBox();
472 if(optionsProfile->count() > 0)
473 loadOptionsProfileIgnoreOldSettings(0);
477 void StellarSolverProfileEditor::saveBackupProfiles()
484 for(
int i = 0 ; i < optionsList.count(); i++)
486 SSolver::Parameters params = optionsList.at(i);
487 settings.beginGroup(params.listName);
493 settings.setValue(it.key(), it.value());
499 void StellarSolverProfileEditor::openBackupProfiles()
510 disconnectOptionsProfileComboBox();
516 settings.beginGroup(group);
520 map.insert(key, settings.value(key));
521 SSolver::Parameters newParams = SSolver::Parameters::convertFromMap(map);
522 optionsList.append(newParams);
523 optionsProfile->addItem(group);
525 if(optionsProfile->count() > 0)
526 loadOptionsProfileIgnoreOldSettings(0);
527 connectOptionsProfileComboBox();
531 void StellarSolverProfileEditor::slotApply()
533 int index = optionsProfile->currentIndex();
534 SSolver::Parameters currentParams = getSettingsFromUI();
535 SSolver::Parameters savedParams = optionsList.at(index);
536 if(!(currentParams == savedParams) || currentParams.description != savedParams.description)
538 currentParams.listName = savedParams.listName;
539 optionsList.replace(index, currentParams);
541 optionsAreSaved =
true;
544 emit optionsProfilesUpdated();