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>
30 setObjectName(
"profileEditorDialog");
34 ui =
new ProfileEditorUI(
this);
45 setLayout(mainLayout);
47 setWindowTitle(
i18nc(
"@title:window",
"Profile Editor"));
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);
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());
109void ProfileEditor::saveProfile()
113 if (ui->profileIN->text().isEmpty())
115 KSNotification::error(
i18n(
"Cannot save an empty profile."));
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);
268void ProfileEditor::setRemoteMode(
bool 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);
299 ui->INDIWebManagerCheck->setChecked(
false);
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;
499 if (driver->getAuxInfo().contains(
"LOCALLY_AVAILABLE"))
500 locallyAvailable = driver->getAuxInfo().value(
"LOCALLY_AVAILABLE",
false).toBool();
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 driver->getLabel(), driver->getName(), driver->getExecutable());
512void ProfileEditor::loadDrivers()
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
581 populateManufacturerCombo(m_FocuserModel, ui->focuserCombo,
selectedFocuser, isLocal,
592 if (driver->getAuxInfo().contains(
"LOCALLY_AVAILABLE"))
593 locallyAvailable = driver->getAuxInfo().value(
"LOCALLY_AVAILABLE",
false).toBool();
596 if (ui->localMode->isChecked())
602 QString toolTipText = getTooltip(driver);
604 switch (driver->getType())
609 case KSTARS_ADAPTIVE_OPTICS:
611 ui->AOCombo->addItem(icon, driver->getLabel());
612 ui->AOCombo->setItemData(ui->AOCombo->count() - 1, toolTipText,
Qt::ToolTipRole);
621 ui->filterCombo->addItem(icon, driver->getLabel());
622 ui->filterCombo->setItemData(ui->filterCombo->count() - 1, toolTipText,
Qt::ToolTipRole);
628 ui->domeCombo->addItem(icon, driver->getLabel());
629 ui->domeCombo->setItemData(ui->domeCombo->count() - 1, toolTipText,
Qt::ToolTipRole);
635 ui->weatherCombo->addItem(icon, driver->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++)
658 if (ui->localMode->isChecked())
659 box->setCurrentIndex(0);
665 box->setCurrentIndex(index);
668 box->model()->sort(0);
672void ProfileEditor::setProfileName(
const QString &name)
674 ui->profileIN->setText(name);
683 ui->aux1Combo->setCurrentText(
auxList.first());
688 ui->aux2Combo->setCurrentText(
auxList.first());
693 ui->aux3Combo->setCurrentText(
auxList.first());
698 ui->aux4Combo->setCurrentText(
auxList.first());
701void ProfileEditor::setHostPort(
const QString &host,
const QString &port)
703 ui->remoteMode->setChecked(
true);
704 ui->remoteHost->setText(host);
705 ui->remotePort->setText(port);
708void ProfileEditor::setWebManager(
bool enabled,
const QString &port)
710 ui->INDIWebManagerCheck->setChecked(
enabled);
711 ui->INDIWebManagerPort->setText(port);
714void ProfileEditor::setGuiderType(
int type)
716 ui->guideTypeCombo->setCurrentIndex(type);
717 if (type != Ekos::Guide::GUIDE_INTERNAL)
726void ProfileEditor::setConnectionOptionsEnabled(
bool enable)
738 ui->INDIWebManagerPortLabel->
setEnabled(enable);
743 updateGuiderSelection(ui->guideTypeCombo->currentIndex());
749void ProfileEditor::updateGuiderSelection(
int id)
752 if (
id == Ekos::Guide::GUIDE_INTERNAL)
754 ui->externalGuideHost->setText(
"localhost");
755 ui->externalGuidePort->clear();
758 ui->externalGuideHostLabel->
setEnabled(
false);
760 ui->externalGuidePortLabel->
setEnabled(
false);
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);
798void 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());
811 ui->remoteDrivers->setText(profile[
"remote"].
toString(ui->remoteDrivers->text()));
813 m_INDIHub = profile[
"indihub"].toInt(m_INDIHub);
818 ui->mountCombo->setCurrentIndex(0);
821 ui->mountCombo->addItem(mount);
822 ui->mountCombo->setCurrentIndex(ui->mountCombo->count() - 1);
825 const QString ccd = profile[
"ccd"].toString(
"--");
827 ui->ccdCombo->setCurrentIndex(0);
830 ui->ccdCombo->addItem(ccd);
831 ui->ccdCombo->setCurrentIndex(ui->ccdCombo->count() - 1);
834 const QString guider = profile[
"guider"].toString(
"--");
836 ui->guiderCombo->setCurrentIndex(0);
839 ui->guiderCombo->addItem(guider);
840 ui->guiderCombo->setCurrentIndex(ui->guiderCombo->count() - 1);
843 const QString focuser = profile[
"focuser"].toString(
"--");
845 ui->focuserCombo->setCurrentIndex(0);
848 ui->focuserCombo->addItem(focuser);
849 ui->focuserCombo->setCurrentIndex(ui->focuserCombo->count() - 1);
852 ui->filterCombo->setCurrentText(profile[
"filter"].
toString(
"--"));
853 ui->AOCombo->setCurrentText(profile[
"ao"].
toString(
"--"));
854 ui->domeCombo->setCurrentText(profile[
"dome"].
toString(
"--"));
855 ui->weatherCombo->setCurrentText(profile[
"weather"].
toString(
"--"));
857 const auto aux1 = profile[
"aux1"].toString(
"--");
858 if (aux1.isEmpty() || aux1 ==
"--")
859 ui->aux1Combo->setCurrentIndex(0);
862 ui->aux1Combo->addItem(aux1);
863 ui->aux1Combo->setCurrentIndex(ui->aux1Combo->count() - 1);
866 const auto aux2 = profile[
"aux2"].toString(
"--");
867 if (aux2.isEmpty() || aux2 ==
"--")
868 ui->aux2Combo->setCurrentIndex(0);
871 ui->aux2Combo->addItem(aux2);
872 ui->aux2Combo->setCurrentIndex(ui->aux2Combo->count() - 1);
875 const auto aux3 = profile[
"aux3"].toString(
"--");
876 if (aux3.isEmpty() || aux3 ==
"--")
877 ui->aux3Combo->setCurrentIndex(0);
880 ui->aux3Combo->addItem(aux3);
881 ui->aux3Combo->setCurrentIndex(ui->aux3Combo->count() - 1);
884 const auto aux4 = profile[
"aux4"].toString(
"--");
885 if (aux4.isEmpty() || aux4 ==
"--")
886 ui->aux4Combo->setCurrentIndex(0);
889 ui->aux4Combo->addItem(aux4);
890 ui->aux4Combo->setCurrentIndex(ui->aux4Combo->count() - 1);
894void ProfileEditor::scanNetwork()
896 delete (m_ProgressDialog);
898 m_ProgressDialog->setWindowTitle(
i18nc(
"@title:window",
"Scanning Network"));
899 m_ProgressDialog->setLabelText(
i18n(
"Scanning network for INDI Web Managers..."));
905 m_ProgressDialog->setMinimum(0);
906 m_ProgressDialog->setMaximum(0);
907 m_ProgressDialog->show();
908 m_ProgressDialog->raise();
910 m_CancelScan =
false;
914 { return a.toString() < b.toString();});
923 if (
ipv4.startsWith(
"10.250"))
925 scanIP(
"10.250.250.1");
932 for (
int i = 1; i <= 254; i++)
941void ProfileEditor::scanIP(
const QString &ip)
943 QUrl url(
QString(
"http://%1:8624/api/server/status").arg(ip));
958 m_ProgressDialog->close();
959 ui->remoteHost->setText(ip);
961 qCDebug(KSTARS_EKOS) <<
"Found Web Manager server at" << ip;
963 KSNotification::info(i18n(
"Found INDI Web Manager at %1", ip));
968void ProfileEditor::clearAllRequests()
979void ProfileEditor::showINDIHub()
983 indihub.setupUi(&
hub);
985 indihub.modeButtonGroup->setId(indihub.offR, 0);
986 indihub.modeButtonGroup->setId(indihub.solorR, 1);
987 indihub.modeButtonGroup->setId(indihub.shareR, 2);
988 indihub.modeButtonGroup->setId(indihub.roboticR, 3);
990 indihub.logoLabel->setPixmap(
QIcon(
":/icons/indihub_logo.svg").pixmap(
QSize(128, 128)));
992 indihub.modeButtonGroup->button(m_INDIHub)->setChecked(
true);
997 m_INDIHub = indihub.modeButtonGroup->checkedId();
1009 if (!families.contains(driver->getType()))
1012 QString manufacturer = driver->manufacturer();
1016 if (model->
findItems(manufacturer).empty())
1031 selectedItem = item;
1036 combo->setView(view);
1037 combo->setModel(model);
1048 combo->setCurrentIndex(index.
row());
1063 if (!families.contains(driver->getType()))
1067 if (driver->getAuxInfo().contains(
"LOCALLY_AVAILABLE"))
1068 locallyAvailable = driver->getAuxInfo().value(
"LOCALLY_AVAILABLE",
false).toBool();
1075 combo->setModel(model);
1080void ProfileEditor::executeScriptEditor()
1092 auto settings = dialog.jsonSettings();
DriverManager is the primary class to handle all operations related to starting and stopping INDI dri...
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
char * toString(const EngineQuery &query)
KIOCORE_EXPORT SimpleJob * mount(bool ro, const QByteArray &fstype, const QString &dev, const QString &point, JobFlags flags=DefaultFlags)
PostalAddress address(const QVariant &location)
void setCurrentIndex(const QModelIndex &index)
QIcon fromTheme(const QString &name)
QByteArray toJson(JsonFormat format) const const
void append(QList< T > &&value)
bool removeOne(const AT &t)
QModelIndex parent() const const
QNetworkReply * get(const QNetworkRequest &request)
QList< QHostAddress > allAddresses()
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QList< T > findChildren(Qt::FindChildOptions options) const const
void setObjectName(QAnyStringView name)
bool isNull() const const
void appendRow(QStandardItem *item)
virtual void setData(const QVariant &value, int role)
void setSelectable(bool selectable)
void appendRow(QStandardItem *item)
QList< QStandardItem * > findItems(const QString &text, Qt::MatchFlags flags, int column) const const
QModelIndex indexFromItem(const QStandardItem *item) const const
bool isEmpty() const const
QString number(double n, char format, int precision)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
virtual void setModel(QAbstractItemModel *model) override
void sortByColumn(int column, Qt::SortOrder order)