7 #include "profileeditor.h"
9 #include "geolocation.h"
10 #include "kstarsdata.h"
11 #include "ksnotification.h"
13 #include "guide/guide.h"
14 #include "indi/driverinfo.h"
15 #include "indi/drivermanager.h"
16 #include "profilescriptdialog.h"
17 #include "ui_indihub.h"
19 #include "ekos_debug.h"
21 #include <QNetworkInterface>
34 ui =
new ProfileEditorUI(
this);
61 QUrl url(QString(
"http://" + ui->remoteHost->text() +
":8624"));
62 QDesktopServices::openUrl(url);
67 ui->openWebManagerB->setEnabled(enabled);
68 ui->remoteDrivers->setEnabled(enabled || ui->localMode->isChecked());
69 ui->scriptsB->setEnabled(enabled || ui->localMode->isChecked());
72 connect(ui->guideTypeCombo, SIGNAL(activated(
int)),
this, SLOT(updateGuiderSelection(
int)));
77 ui->remoteMode->setChecked(
true);
78 ui->localMode->setEnabled(
false);
81 connect(ui->remoteMode, SIGNAL(toggled(
bool)),
this, SLOT(setRemoteMode(
bool)));
90 ui->remoteDrivers->setToolTip(ui->remoteDriversLabel->toolTip());
91 ui->aux1Combo->setToolTip(ui->aux1Label->toolTip());
92 ui->aux2Combo->setToolTip(ui->aux2Label->toolTip());
93 ui->aux3Combo->setToolTip(ui->aux3Label->toolTip());
94 ui->aux4Combo->setToolTip(ui->aux4Label->toolTip());
95 ui->filterCombo->setToolTip(ui->filterLabel->toolTip());
96 ui->AOCombo->setToolTip(ui->AOLabel->toolTip());
97 ui->domeCombo->setToolTip(ui->domeLabel->toolTip());
98 ui->weatherCombo->setToolTip(ui->weatherLabel->toolTip());
99 ui->localMode->setToolTip(ui->modeLabel->toolTip());
100 ui->remoteMode->setToolTip(ui->modeLabel->toolTip());
101 ui->remoteHostLabel->setToolTip(ui->remoteHost->toolTip());
102 ui->remotePortLabel->setToolTip(ui->remotePort->toolTip());
103 ui->externalGuidePortLabel->setToolTip(ui->externalGuidePort->toolTip());
104 ui->INDIWebManagerPortLabel->setToolTip(ui->INDIWebManagerPort->toolTip());
105 ui->guideTypeCombo->setToolTip(ui->guidingTypeLabel->toolTip());
106 ui->externalGuideHostLabel->setToolTip(ui->externalGuideHost->toolTip());
109 void ProfileEditor::saveProfile()
111 bool newProfile = (pi.isNull());
113 if (ui->profileIN->text().isEmpty())
115 KSNotification::error(
i18n(
"Cannot save an empty profile."));
123 for (
auto &profileInfo : existingProfiles)
125 if (ui->profileIN->text() == profileInfo->name)
127 KSNotification::error(
i18n(
"Profile name already exists."));
131 int id = KStarsData::Instance()->
userdb()->AddProfile(ui->profileIN->text());
132 pi.reset(
new ProfileInfo(
id, ui->profileIN->text()));
135 pi->name = ui->profileIN->text();
138 if (ui->localMode->isChecked())
142 pi->INDIWebManagerPort = -1;
148 pi->host = ui->remoteHost->text().trimmed();
149 pi->port = ui->remotePort->text().toInt();
150 if (ui->INDIWebManagerCheck->isChecked())
151 pi->INDIWebManagerPort = ui->INDIWebManagerPort->text().toInt();
153 pi->INDIWebManagerPort = -1;
158 if (ui->loadSiteCheck->isEnabled() && ui->loadSiteCheck->isChecked())
160 pi->city = KStarsData::Instance()->
geo()->
name();
161 pi->province = KStarsData::Instance()->
geo()->
province();
162 pi->country = KStarsData::Instance()->
geo()->
country();
167 pi->province.clear();
171 pi->indihub = m_INDIHub;
174 pi->autoConnect = ui->autoConnectCheck->isChecked();
176 pi->portSelector = ui->portSelectorCheck->isChecked();
179 pi->guidertype = ui->guideTypeCombo->currentIndex();
180 if (pi->guidertype != Ekos::Guide::GUIDE_INTERNAL)
182 pi->guiderhost = ui->externalGuideHost->text();
183 pi->guiderport = ui->externalGuidePort->text().toInt();
185 if (pi->guidertype == Ekos::Guide::GUIDE_PHD2)
187 Options::setPHD2Host(pi->guiderhost);
188 Options::setPHD2Port(pi->guiderport);
190 else if (pi->guidertype == Ekos::Guide::GUIDE_LINGUIDER)
192 Options::setLinGuiderHost(pi->guiderhost);
193 Options::setLinGuiderPort(pi->guiderport);
197 if (ui->mountCombo->currentText().isEmpty() || ui->mountCombo->currentText() ==
"--")
198 pi->drivers.remove(
"Mount");
200 pi->drivers[
"Mount"] = ui->mountCombo->currentText();
202 if (ui->ccdCombo->currentText().isEmpty() || ui->ccdCombo->currentText() ==
"--")
203 pi->drivers.remove(
"CCD");
205 pi->drivers[
"CCD"] = ui->ccdCombo->currentText();
207 if (ui->guiderCombo->currentText().isEmpty() || ui->guiderCombo->currentText() ==
"--")
208 pi->drivers.remove(
"Guider");
210 pi->drivers[
"Guider"] = ui->guiderCombo->currentText();
212 if (ui->focuserCombo->currentText().isEmpty() || ui->focuserCombo->currentText() ==
"--")
213 pi->drivers.remove(
"Focuser");
215 pi->drivers[
"Focuser"] = ui->focuserCombo->currentText();
217 if (ui->filterCombo->currentText().isEmpty() || ui->filterCombo->currentText() ==
"--")
218 pi->drivers.remove(
"Filter");
220 pi->drivers[
"Filter"] = ui->filterCombo->currentText();
222 if (ui->AOCombo->currentText().isEmpty() || ui->AOCombo->currentText() ==
"--")
223 pi->drivers.remove(
"AO");
225 pi->drivers[
"AO"] = ui->AOCombo->currentText();
227 if (ui->domeCombo->currentText().isEmpty() || ui->domeCombo->currentText() ==
"--")
228 pi->drivers.remove(
"Dome");
230 pi->drivers[
"Dome"] = ui->domeCombo->currentText();
232 if (ui->weatherCombo->currentText().isEmpty() || ui->weatherCombo->currentText() ==
"--")
233 pi->drivers.remove(
"Weather");
235 pi->drivers[
"Weather"] = ui->weatherCombo->currentText();
237 if (ui->aux1Combo->currentText().isEmpty() || ui->aux1Combo->currentText() ==
"--")
238 pi->drivers.remove(
"Aux1");
240 pi->drivers[
"Aux1"] = ui->aux1Combo->currentText();
242 if (ui->aux2Combo->currentText().isEmpty() || ui->aux2Combo->currentText() ==
"--")
243 pi->drivers.remove(
"Aux2");
245 pi->drivers[
"Aux2"] = ui->aux2Combo->currentText();
247 if (ui->aux3Combo->currentText().isEmpty() || ui->aux3Combo->currentText() ==
"--")
248 pi->drivers.remove(
"Aux3");
250 pi->drivers[
"Aux3"] = ui->aux3Combo->currentText();
252 if (ui->aux4Combo->currentText().isEmpty() || ui->aux4Combo->currentText() ==
"--")
253 pi->drivers.remove(
"Aux4");
255 pi->drivers[
"Aux4"] = ui->aux4Combo->currentText();
257 pi->remotedrivers = ui->remoteDrivers->text();
259 KStarsData::Instance()->
userdb()->SaveProfile(pi);
268 void ProfileEditor::setRemoteMode(
bool enable)
272 ui->remoteHost->setEnabled(enable);
273 ui->remoteHostLabel->setEnabled(enable);
274 ui->remotePort->setEnabled(enable);
275 ui->remotePortLabel->setEnabled(enable);
280 ui->mountCombo->setEditable(enable);
281 ui->ccdCombo->setEditable(enable);
282 ui->guiderCombo->setEditable(enable);
283 ui->focuserCombo->setEditable(enable);
284 ui->filterCombo->setEditable(enable);
285 ui->AOCombo->setEditable(enable);
286 ui->domeCombo->setEditable(enable);
287 ui->weatherCombo->setEditable(enable);
288 ui->aux1Combo->setEditable(enable);
289 ui->aux2Combo->setEditable(enable);
290 ui->aux3Combo->setEditable(enable);
291 ui->aux4Combo->setEditable(enable);
293 ui->remoteDrivers->setEnabled(!enable);
295 ui->loadSiteCheck->setEnabled(enable);
297 ui->INDIWebManagerCheck->setEnabled(enable);
299 ui->INDIWebManagerCheck->setChecked(
false);
300 ui->INDIWebManagerPort->setEnabled(enable);
302 ui->scriptsB->setEnabled(!enable || ui->INDIWebManagerCheck->isChecked());
309 ui->profileIN->setText(pi->name);
311 ui->loadSiteCheck->setChecked(!pi->city.isEmpty());
312 ui->autoConnectCheck->setChecked(pi->autoConnect);
313 ui->portSelectorCheck->setChecked(pi->portSelector);
315 if (pi->city.isEmpty() ==
false)
317 if (pi->province.isEmpty())
318 ui->loadSiteCheck->setText(ui->loadSiteCheck->text() +
QString(
" (%1, %2)").arg(pi->country, pi->city));
320 ui->loadSiteCheck->setText(ui->loadSiteCheck->text() +
321 QString(
" (%1, %2, %3)").arg(pi->country, pi->province, pi->city));
324 if (pi->host.isEmpty() ==
false)
326 ui->remoteHost->setText(pi->host);
329 ui->remoteMode->setChecked(
true);
331 if (pi->INDIWebManagerPort > 0)
333 ui->INDIWebManagerCheck->setChecked(
true);
334 ui->INDIWebManagerPort->setText(
QString::number(pi->INDIWebManagerPort));
338 ui->INDIWebManagerCheck->setChecked(
false);
339 ui->INDIWebManagerPort->setText(
"8624");
343 if (pi->remotedrivers.isEmpty() ==
false)
344 ui->remoteDrivers->setText(pi->remotedrivers);
346 ui->guideTypeCombo->setCurrentIndex(pi->guidertype);
347 updateGuiderSelection(ui->guideTypeCombo->currentIndex());
348 if (pi->guidertype == Ekos::Guide::GUIDE_PHD2)
350 Options::setPHD2Host(pi->guiderhost);
351 Options::setPHD2Port(pi->guiderport);
353 else if (pi->guidertype == Ekos::Guide::GUIDE_LINGUIDER)
355 Options::setLinGuiderHost(pi->guiderhost);
356 Options::setLinGuiderPort(pi->guiderport);
372 if ((row = ui->mountCombo->findText(value)) == -1)
374 ui->mountCombo->addItem(value);
375 row = ui->mountCombo->
count() - 1;
379 ui->mountCombo->setCurrentIndex(row);
381 else if (key ==
"CCD")
383 if ((row = ui->ccdCombo->findText(value)) == -1)
385 ui->ccdCombo->addItem(value);
386 row = ui->ccdCombo->count() - 1;
389 ui->ccdCombo->setCurrentIndex(row);
391 else if (key ==
"Guider")
393 if ((row = ui->guiderCombo->findText(value)) == -1)
395 ui->guiderCombo->addItem(value);
396 row = ui->guiderCombo->count() - 1;
399 ui->guiderCombo->setCurrentIndex(row);
401 else if (key ==
"Focuser")
403 if ((row = ui->focuserCombo->findText(value)) == -1)
405 ui->focuserCombo->addItem(value);
406 row = ui->focuserCombo->count() - 1;
409 ui->focuserCombo->setCurrentIndex(row);
411 else if (key ==
"Filter")
413 if ((row = ui->filterCombo->findText(value)) == -1)
415 ui->filterCombo->addItem(value);
416 row = ui->filterCombo->count() - 1;
419 ui->filterCombo->setCurrentIndex(row);
421 else if (key ==
"AO")
423 if ((row = ui->AOCombo->findText(value)) == -1)
425 ui->AOCombo->addItem(value);
426 row = ui->AOCombo->count() - 1;
429 ui->AOCombo->setCurrentIndex(row);
431 else if (key ==
"Dome")
433 if ((row = ui->domeCombo->findText(value)) == -1)
435 ui->domeCombo->addItem(value);
436 row = ui->domeCombo->count() - 1;
439 ui->domeCombo->setCurrentIndex(row);
441 else if (key ==
"Weather")
443 if ((row = ui->weatherCombo->findText(value)) == -1)
445 ui->weatherCombo->addItem(value);
446 row = ui->weatherCombo->count() - 1;
449 ui->weatherCombo->setCurrentIndex(row);
451 else if (key ==
"Aux1")
453 if ((row = ui->aux1Combo->findText(value)) == -1)
455 ui->aux1Combo->addItem(value);
456 row = ui->aux1Combo->count() - 1;
459 ui->aux1Combo->setCurrentIndex(row);
461 else if (key ==
"Aux2")
463 if ((row = ui->aux2Combo->findText(value)) == -1)
465 ui->aux2Combo->addItem(value);
466 row = ui->aux2Combo->count() - 1;
469 ui->aux2Combo->setCurrentIndex(row);
471 else if (key ==
"Aux3")
473 if ((row = ui->aux3Combo->findText(value)) == -1)
475 ui->aux3Combo->addItem(value);
476 row = ui->aux3Combo->count() - 1;
479 ui->aux3Combo->setCurrentIndex(row);
481 else if (key ==
"Aux4")
483 if ((row = ui->aux4Combo->findText(value)) == -1)
485 ui->aux4Combo->addItem(value);
486 row = ui->aux4Combo->count() - 1;
489 ui->aux4Combo->setCurrentIndex(row);
493 m_INDIHub = pi->indihub;
498 bool locallyAvailable =
false;
499 if (dv->getAuxInfo().contains(
"LOCALLY_AVAILABLE"))
500 locallyAvailable = dv->getAuxInfo().value(
"LOCALLY_AVAILABLE",
false).toBool();
502 if (!locallyAvailable)
504 "<nobr>Available as <b>Remote</b> Driver. To use locally, install the corresponding driver.<nobr/>");
506 toolTipText =
i18n(
"<nobr><b>Label</b>: %1 ━ <b>Driver</b>: %2 ━ <b>Exec</b>: %3<nobr/>",
507 dv->getLabel(), dv->getName(), dv->getExecutable());
512 void ProfileEditor::loadDrivers()
515 QString selectedMount = ui->mountCombo->currentText();
516 QString selectedCamera = ui->ccdCombo->currentText();
517 QString selectedGuider = ui->guiderCombo->currentText();
518 QString selectedFocuser = ui->focuserCombo->currentText();
519 QString selectedAux1 = ui->aux1Combo->currentText();
520 QString selectedAux2 = ui->aux2Combo->currentText();
521 QString selectedAux3 = ui->aux3Combo->currentText();
522 QString selectedAux4 = ui->aux4Combo->currentText();
525 boxes.
append(ui->mountCombo);
526 boxes.
append(ui->ccdCombo);
527 boxes.
append(ui->guiderCombo);
528 boxes.
append(ui->AOCombo);
529 boxes.
append(ui->focuserCombo);
530 boxes.
append(ui->filterCombo);
531 boxes.
append(ui->domeCombo);
532 boxes.
append(ui->weatherCombo);
533 boxes.
append(ui->aux1Combo);
534 boxes.
append(ui->aux2Combo);
535 boxes.
append(ui->aux3Combo);
536 boxes.
append(ui->aux4Combo);
542 selectedItems.
append(box->currentText());
545 box->setMaxVisibleItems(20);
551 delete (m_MountModel);
553 delete (m_CameraModel);
555 delete (m_GuiderModel);
557 delete (m_FocuserModel);
559 delete (m_Aux1Model);
561 delete (m_Aux2Model);
563 delete (m_Aux3Model);
565 delete (m_Aux4Model);
568 const bool isLocal = ui->localMode->isChecked();
575 << KSTARS_SPECTROGRAPHS
578 populateManufacturerCombo(m_MountModel, ui->mountCombo, selectedMount, isLocal,
QList<DeviceFamily>() << KSTARS_TELESCOPE);
579 populateManufacturerCombo(m_CameraModel, ui->ccdCombo, selectedCamera, isLocal,
QList<DeviceFamily>() << KSTARS_CCD);
580 populateManufacturerCombo(m_GuiderModel, ui->guiderCombo, selectedGuider, isLocal,
QList<DeviceFamily>() << KSTARS_CCD);
581 populateManufacturerCombo(m_FocuserModel, ui->focuserCombo, selectedFocuser, isLocal,
583 populateManufacturerCombo(m_Aux1Model, ui->aux1Combo, selectedAux1, isLocal, auxFamily);
584 populateManufacturerCombo(m_Aux2Model, ui->aux2Combo, selectedAux2, isLocal, auxFamily);
585 populateManufacturerCombo(m_Aux3Model, ui->aux3Combo, selectedAux3, isLocal, auxFamily);
586 populateManufacturerCombo(m_Aux4Model, ui->aux4Combo, selectedAux4, isLocal, auxFamily);
588 for (
DriverInfo *dv : DriverManager::Instance()->getDrivers())
590 bool locallyAvailable =
false;
592 if (dv->getAuxInfo().contains(
"LOCALLY_AVAILABLE"))
593 locallyAvailable = dv->getAuxInfo().value(
"LOCALLY_AVAILABLE",
false).toBool();
594 if (!locallyAvailable)
596 if (ui->localMode->isChecked())
602 QString toolTipText = getTooltip(dv);
604 switch (dv->getType())
609 case KSTARS_ADAPTIVE_OPTICS:
611 ui->AOCombo->addItem(icon, dv->getLabel());
612 ui->AOCombo->setItemData(ui->AOCombo->count() - 1, toolTipText,
Qt::ToolTipRole);
621 ui->filterCombo->addItem(icon, dv->getLabel());
622 ui->filterCombo->setItemData(ui->filterCombo->count() - 1, toolTipText,
Qt::ToolTipRole);
628 ui->domeCombo->addItem(icon, dv->getLabel());
629 ui->domeCombo->setItemData(ui->domeCombo->count() - 1, toolTipText,
Qt::ToolTipRole);
635 ui->weatherCombo->addItem(icon, dv->getLabel());
636 ui->weatherCombo->setItemData(ui->weatherCombo->count() - 1, toolTipText,
Qt::ToolTipRole);
640 case KSTARS_AUXILIARY:
641 case KSTARS_SPECTROGRAPHS:
642 case KSTARS_DETECTORS:
651 for (
int i = 4; i < boxes.count(); i++)
654 QString selectedItemText = selectedItems.
at(i);
655 int index = box->
findText(selectedItemText);
658 if (ui->localMode->isChecked())
661 box->
addItem(remoteIcon, selectedItemText);
672 void ProfileEditor::setProfileName(
const QString &name)
674 ui->profileIN->setText(name);
677 void ProfileEditor::setAuxDrivers(
const QStringList &aux)
681 if (auxList.isEmpty())
683 ui->aux1Combo->setCurrentText(auxList.first());
684 auxList.removeFirst();
686 if (auxList.isEmpty())
688 ui->aux2Combo->setCurrentText(auxList.first());
689 auxList.removeFirst();
691 if (auxList.isEmpty())
693 ui->aux3Combo->setCurrentText(auxList.first());
694 auxList.removeFirst();
696 if (auxList.isEmpty())
698 ui->aux4Combo->setCurrentText(auxList.first());
703 ui->remoteMode->setChecked(
true);
704 ui->remoteHost->setText(
host);
705 ui->remotePort->setText(port);
708 void ProfileEditor::setWebManager(
bool enabled,
const QString &port)
710 ui->INDIWebManagerCheck->setChecked(enabled);
711 ui->INDIWebManagerPort->setText(port);
714 void ProfileEditor::setGuiderType(
int type)
716 ui->guideTypeCombo->setCurrentIndex(type);
717 if (type != Ekos::Guide::GUIDE_INTERNAL)
719 ui->externalGuideHostLabel->setEnabled(
true);
720 ui->externalGuideHost->setEnabled(
true);
721 ui->externalGuidePortLabel->setEnabled(
true);
722 ui->externalGuidePort->setEnabled(
true);
726 void ProfileEditor::setConnectionOptionsEnabled(
bool enable)
729 ui->modeLabel->setEnabled(enable);
730 ui->localMode->setEnabled(enable);
731 ui->remoteMode->setEnabled(enable);
732 ui->remoteHostLabel->setEnabled(enable);
733 ui->remoteHost->setEnabled(enable);
734 ui->remotePortLabel->setEnabled(enable);
735 ui->remotePort->setEnabled(enable);
736 ui->INDIWebManagerCheck->setEnabled(enable);
737 ui->INDIWebManagerPort->setEnabled(enable);
738 ui->INDIWebManagerPortLabel->setEnabled(enable);
739 ui->guidingTypeLabel->setEnabled(enable);
740 ui->guideTypeCombo->setEnabled(enable);
741 ui->remoteDrivers->setEnabled(enable);
743 updateGuiderSelection(ui->guideTypeCombo->currentIndex());
746 ui->mountCombo->setFocus();
749 void ProfileEditor::updateGuiderSelection(
int id)
752 if (
id == Ekos::Guide::GUIDE_INTERNAL)
754 ui->externalGuideHost->setText(
"localhost");
755 ui->externalGuidePort->clear();
757 ui->externalGuideHost->setEnabled(
false);
758 ui->externalGuideHostLabel->setEnabled(
false);
759 ui->externalGuidePort->setEnabled(
false);
760 ui->externalGuidePortLabel->setEnabled(
false);
767 ui->externalGuideHost->setEnabled(
true);
768 ui->externalGuideHostLabel->setEnabled(
true);
769 ui->externalGuidePort->setEnabled(
true);
770 ui->externalGuidePortLabel->setEnabled(
true);
772 if (pi && pi->guidertype ==
id)
774 host = pi->guiderhost;
775 port = pi->guiderport;
778 if (
id == Ekos::Guide::GUIDE_PHD2)
781 host = Options::pHD2Host();
783 port = Options::pHD2Port();
785 else if (
id == Ekos::Guide::GUIDE_LINGUIDER)
788 host = Options::linGuiderHost();
790 port = Options::linGuiderPort();
793 ui->externalGuideHost->setText(
host);
798 void ProfileEditor::setSettings(
const QJsonObject &profile)
800 ui->profileIN->setText(profile[
"name"].
toString());
801 ui->autoConnectCheck->setChecked(profile[
"auto_connect"].toBool(
true));
802 ui->portSelectorCheck->setChecked(profile[
"port_selector"].toBool(
false));
803 ui->localMode->setChecked(profile[
"mode"].
toString() ==
"local");
804 ui->remoteMode->setChecked(profile[
"mode"].
toString() ==
"remote");
805 ui->remoteHost->setText(profile[
"remote_host"].
toString(
"localhost"));
806 ui->remotePort->setText(profile[
"remote_port"].
toString(
"7624"));
807 ui->guideTypeCombo->setCurrentText(profile[
"guiding"].
toString(
i18n(
"Internal")));
808 ui->externalGuideHost->setText(profile[
"remote_guiding_host"].
toString((
"localhost")));
809 ui->externalGuideHost->setText(profile[
"remote_guiding_port"].
toString());
810 ui->INDIWebManagerCheck->setChecked(profile[
"use_web_manager"].toBool());
812 m_INDIHub = profile[
"indihub"].toInt(m_INDIHub);
817 ui->mountCombo->setCurrentIndex(0);
820 ui->mountCombo->addItem(mount);
821 ui->mountCombo->setCurrentIndex(ui->mountCombo->count() - 1);
824 const QString ccd = profile[
"ccd"].toString(
"--");
826 ui->ccdCombo->setCurrentIndex(0);
829 ui->ccdCombo->addItem(ccd);
830 ui->ccdCombo->setCurrentIndex(ui->ccdCombo->count() - 1);
833 const QString guider = profile[
"guider"].toString(
"--");
835 ui->guiderCombo->setCurrentIndex(0);
838 ui->guiderCombo->addItem(guider);
839 ui->guiderCombo->setCurrentIndex(ui->guiderCombo->count() - 1);
842 const QString focuser = profile[
"focuser"].toString(
"--");
844 ui->focuserCombo->setCurrentIndex(0);
847 ui->focuserCombo->addItem(focuser);
848 ui->focuserCombo->setCurrentIndex(ui->focuserCombo->count() - 1);
851 ui->filterCombo->setCurrentText(profile[
"filter"].
toString(
"--"));
852 ui->AOCombo->setCurrentText(profile[
"ao"].
toString(
"--"));
853 ui->domeCombo->setCurrentText(profile[
"dome"].
toString(
"--"));
854 ui->weatherCombo->setCurrentText(profile[
"weather"].
toString(
"--"));
856 const auto aux1 = profile[
"aux1"].toString(
"--");
857 if (aux1.isEmpty() || aux1 ==
"--")
858 ui->aux1Combo->setCurrentIndex(0);
861 ui->aux1Combo->addItem(aux1);
862 ui->aux1Combo->setCurrentIndex(ui->aux1Combo->count() - 1);
865 const auto aux2 = profile[
"aux2"].toString(
"--");
866 if (aux2.isEmpty() || aux2 ==
"--")
867 ui->aux2Combo->setCurrentIndex(0);
870 ui->aux2Combo->addItem(aux2);
871 ui->aux2Combo->setCurrentIndex(ui->aux2Combo->count() - 1);
874 const auto aux3 = profile[
"aux3"].toString(
"--");
875 if (aux3.isEmpty() || aux3 ==
"--")
876 ui->aux3Combo->setCurrentIndex(0);
879 ui->aux3Combo->addItem(aux3);
880 ui->aux3Combo->setCurrentIndex(ui->aux3Combo->count() - 1);
883 const auto aux4 = profile[
"aux4"].toString(
"--");
884 if (aux4.isEmpty() || aux4 ==
"--")
885 ui->aux4Combo->setCurrentIndex(0);
888 ui->aux4Combo->addItem(aux4);
889 ui->aux4Combo->setCurrentIndex(ui->aux4Combo->count() - 1);
893 void ProfileEditor::scanNetwork()
895 delete (m_ProgressDialog);
897 m_ProgressDialog->setWindowTitle(
i18nc(
"@title:window",
"Scanning Network"));
898 m_ProgressDialog->setLabelText(
i18n(
"Scanning network for INDI Web Managers..."));
904 m_ProgressDialog->setMinimum(0);
905 m_ProgressDialog->setMaximum(0);
906 m_ProgressDialog->show();
907 m_ProgressDialog->raise();
909 m_CancelScan =
false;
913 { return a.toString() < b.toString();});
924 scanIP(
"10.250.250.1");
931 for (
int i = 1; i <= 254; i++)
940 void ProfileEditor::scanIP(
const QString &ip)
942 QUrl url(
QString(
"http://%1:8624/api/server/status").arg(ip));
944 qCDebug(KSTARS_EKOS) <<
"Scanning" << url;
947 m_Replies.append(response);
950 m_Replies.removeOne(response);
957 m_ProgressDialog->close();
958 ui->remoteHost->setText(ip);
960 qCDebug(KSTARS_EKOS) <<
"Found Web Manager server at" << ip;
962 KSNotification::info(i18n(
"Found INDI Web Manager at %1", ip));
967 void ProfileEditor::clearAllRequests()
972 oneReply->deleteLater();
978 void ProfileEditor::showINDIHub()
984 indihub.modeButtonGroup->setId(indihub.offR, 0);
985 indihub.modeButtonGroup->setId(indihub.solorR, 1);
986 indihub.modeButtonGroup->setId(indihub.shareR, 2);
987 indihub.modeButtonGroup->setId(indihub.roboticR, 3);
989 indihub.logoLabel->setPixmap(
QIcon(
":/icons/indihub_logo.svg").pixmap(
QSize(128, 128)));
991 indihub.modeButtonGroup->button(m_INDIHub)->setChecked(
true);
996 m_INDIHub = indihub.modeButtonGroup->checkedId();
1006 for (
DriverInfo *dv : DriverManager::Instance()->getDrivers())
1008 if (!families.
contains(dv->getType()))
1011 QString manufacturer = dv->manufacturer();
1015 if (model->
findItems(manufacturer).empty())
1023 parentItem = manufacturers.
first();
1029 if (selectedDriver == dv->getLabel())
1030 selectedItem = item;
1060 for (
DriverInfo *dv : DriverManager::Instance()->getDrivers())
1062 if (!families.
contains(dv->getType()))
1065 bool locallyAvailable =
false;
1066 if (dv->getAuxInfo().contains(
"LOCALLY_AVAILABLE"))
1067 locallyAvailable = dv->getAuxInfo().value(
"LOCALLY_AVAILABLE",
false).toBool();
1068 icon = locallyAvailable ?
QIcon() : remoteIcon;
1079 void ProfileEditor::executeScriptEditor()
1084 for (
auto &oneCombo : ui->driversGroupBox->findChildren<
QComboBox *>())
1085 currentDrivers << oneCombo->currentText();
1088 currentDrivers.
sort();
1089 ProfileScriptDialog dialog(currentDrivers, pi->scripts,
this);
1091 auto settings = dialog.jsonSettings();