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>
23#include <QDesktopServices>
32 setObjectName(
"profileEditorDialog");
36 ui =
new ProfileEditorUI(
this);
54 {KSTARS_AUXILIARY, KSTARS_CCD, KSTARS_FOCUSER, KSTARS_FILTER, KSTARS_WEATHER, KSTARS_SPECTROGRAPHS, KSTARS_DETECTORS}
60 {KSTARS_AUXILIARY, KSTARS_CCD, KSTARS_FOCUSER, KSTARS_FILTER, KSTARS_WEATHER, KSTARS_SPECTROGRAPHS, KSTARS_DETECTORS}
66 {KSTARS_AUXILIARY, KSTARS_CCD, KSTARS_FOCUSER, KSTARS_FILTER, KSTARS_WEATHER, KSTARS_SPECTROGRAPHS, KSTARS_DETECTORS}
72 {KSTARS_AUXILIARY, KSTARS_CCD, KSTARS_FOCUSER, KSTARS_FILTER, KSTARS_WEATHER, KSTARS_SPECTROGRAPHS, KSTARS_DETECTORS}
79 setLayout(mainLayout);
81 setWindowTitle(
i18nc(
"@title:window",
"Profile Editor"));
88 connect(buttonBox, SIGNAL(rejected()),
this, SLOT(reject()));
89 connect(buttonBox, SIGNAL(accepted()),
this, SLOT(saveProfile()));
95 QUrl url(QString(
"http://" + ui->remoteHost->text() +
":8624"));
96 QDesktopServices::openUrl(url);
101 ui->openWebManagerB->setEnabled(enabled);
102 ui->remoteDrivers->setEnabled(enabled || ui->localMode->isChecked());
103 ui->scriptsB->setEnabled(enabled || ui->localMode->isChecked());
106 connect(ui->guideTypeCombo, SIGNAL(activated(
int)),
this, SLOT(updateGuiderSelection(
int)));
111 ui->remoteMode->setChecked(
true);
112 ui->localMode->setEnabled(
false);
115 connect(ui->remoteMode, SIGNAL(toggled(
bool)),
this, SLOT(setRemoteMode(
bool)));
124 ui->remoteDrivers->setToolTip(ui->remoteDriversLabel->toolTip());
125 ui->aux1Combo->setToolTip(ui->aux1Label->toolTip());
126 ui->aux2Combo->setToolTip(ui->aux2Label->toolTip());
127 ui->aux3Combo->setToolTip(ui->aux3Label->toolTip());
128 ui->aux4Combo->setToolTip(ui->aux4Label->toolTip());
129 ui->filterCombo->setToolTip(ui->filterLabel->toolTip());
130 ui->AOCombo->setToolTip(ui->AOLabel->toolTip());
131 ui->domeCombo->setToolTip(ui->domeLabel->toolTip());
132 ui->weatherCombo->setToolTip(ui->weatherLabel->toolTip());
133 ui->localMode->setToolTip(ui->modeLabel->toolTip());
134 ui->remoteMode->setToolTip(ui->modeLabel->toolTip());
135 ui->remoteHostLabel->setToolTip(ui->remoteHost->toolTip());
136 ui->remotePortLabel->setToolTip(ui->remotePort->toolTip());
137 ui->externalGuidePortLabel->setToolTip(ui->externalGuidePort->toolTip());
138 ui->INDIWebManagerPortLabel->setToolTip(ui->INDIWebManagerPort->toolTip());
139 ui->guideTypeCombo->setToolTip(ui->guidingTypeLabel->toolTip());
140 ui->externalGuideHostLabel->setToolTip(ui->externalGuideHost->toolTip());
143void ProfileEditor::saveProfile()
145 bool newProfile = (pi.isNull());
147 if (ui->profileIN->text().isEmpty())
149 KSNotification::error(
i18n(
"Cannot save an empty profile."));
155 QList<QSharedPointer<ProfileInfo>> existingProfiles;
157 for (
auto &profileInfo : existingProfiles)
159 if (ui->profileIN->text() == profileInfo->name)
161 KSNotification::error(
i18n(
"Profile name already exists."));
165 int id = KStarsData::Instance()->
userdb()->AddProfile(ui->profileIN->text());
166 pi.reset(
new ProfileInfo(
id, ui->profileIN->text()));
169 pi->name = ui->profileIN->text();
172 if (ui->localMode->isChecked())
176 pi->INDIWebManagerPort = -1;
182 pi->host = ui->remoteHost->text().trimmed();
183 pi->port = ui->remotePort->text().toInt();
184 if (ui->INDIWebManagerCheck->isChecked())
185 pi->INDIWebManagerPort = ui->INDIWebManagerPort->text().toInt();
187 pi->INDIWebManagerPort = -1;
192 if (ui->loadSiteCheck->isEnabled() && ui->loadSiteCheck->isChecked())
194 pi->city = KStarsData::Instance()->
geo()->
name();
195 pi->province = KStarsData::Instance()->
geo()->
province();
196 pi->country = KStarsData::Instance()->
geo()->
country();
201 pi->province.clear();
205 pi->indihub = m_INDIHub;
208 pi->autoConnect = ui->autoConnectCheck->isChecked();
210 pi->portSelector = ui->portSelectorCheck->isChecked();
213 pi->guidertype = ui->guideTypeCombo->currentIndex();
214 if (pi->guidertype != Ekos::Guide::GUIDE_INTERNAL)
216 pi->guiderhost = ui->externalGuideHost->text();
217 pi->guiderport = ui->externalGuidePort->text().toInt();
219 if (pi->guidertype == Ekos::Guide::GUIDE_PHD2)
221 Options::setPHD2Host(pi->guiderhost);
222 Options::setPHD2Port(pi->guiderport);
224 else if (pi->guidertype == Ekos::Guide::GUIDE_LINGUIDER)
226 Options::setLinGuiderHost(pi->guiderhost);
227 Options::setLinGuiderPort(pi->guiderport);
231 if (ui->mountCombo->currentText().isEmpty() || ui->mountCombo->currentText() ==
"--")
232 pi->drivers.remove(
"Mount");
234 pi->drivers[
"Mount"] = ui->mountCombo->currentText();
236 if (ui->ccdCombo->currentText().isEmpty() || ui->ccdCombo->currentText() ==
"--")
237 pi->drivers.remove(
"CCD");
239 pi->drivers[
"CCD"] = ui->ccdCombo->currentText();
241 if (ui->guiderCombo->currentText().isEmpty() || ui->guiderCombo->currentText() ==
"--")
242 pi->drivers.remove(
"Guider");
244 pi->drivers[
"Guider"] = ui->guiderCombo->currentText();
246 if (ui->focuserCombo->currentText().isEmpty() || ui->focuserCombo->currentText() ==
"--")
247 pi->drivers.remove(
"Focuser");
249 pi->drivers[
"Focuser"] = ui->focuserCombo->currentText();
251 if (ui->filterCombo->currentText().isEmpty() || ui->filterCombo->currentText() ==
"--")
252 pi->drivers.remove(
"Filter");
254 pi->drivers[
"Filter"] = ui->filterCombo->currentText();
256 if (ui->AOCombo->currentText().isEmpty() || ui->AOCombo->currentText() ==
"--")
257 pi->drivers.remove(
"AO");
259 pi->drivers[
"AO"] = ui->AOCombo->currentText();
261 if (ui->domeCombo->currentText().isEmpty() || ui->domeCombo->currentText() ==
"--")
262 pi->drivers.remove(
"Dome");
264 pi->drivers[
"Dome"] = ui->domeCombo->currentText();
266 if (ui->weatherCombo->currentText().isEmpty() || ui->weatherCombo->currentText() ==
"--")
267 pi->drivers.remove(
"Weather");
269 pi->drivers[
"Weather"] = ui->weatherCombo->currentText();
271 if (ui->aux1Combo->currentText().isEmpty() || ui->aux1Combo->currentText() ==
"--")
272 pi->drivers.remove(
"Aux1");
274 pi->drivers[
"Aux1"] = ui->aux1Combo->currentText();
276 if (ui->aux2Combo->currentText().isEmpty() || ui->aux2Combo->currentText() ==
"--")
277 pi->drivers.remove(
"Aux2");
279 pi->drivers[
"Aux2"] = ui->aux2Combo->currentText();
281 if (ui->aux3Combo->currentText().isEmpty() || ui->aux3Combo->currentText() ==
"--")
282 pi->drivers.remove(
"Aux3");
284 pi->drivers[
"Aux3"] = ui->aux3Combo->currentText();
286 if (ui->aux4Combo->currentText().isEmpty() || ui->aux4Combo->currentText() ==
"--")
287 pi->drivers.remove(
"Aux4");
289 pi->drivers[
"Aux4"] = ui->aux4Combo->currentText();
291 pi->remotedrivers = ui->remoteDrivers->text();
293 KStarsData::Instance()->
userdb()->SaveProfile(pi);
302void ProfileEditor::setRemoteMode(
bool enable)
307 ui->remoteHost->setEnabled(enable);
308 ui->remoteHostLabel->setEnabled(enable);
309 ui->remotePort->setEnabled(enable);
310 ui->remotePortLabel->setEnabled(enable);
315 ui->mountCombo->setEditable(enable);
316 ui->ccdCombo->setEditable(enable);
317 ui->guiderCombo->setEditable(enable);
318 ui->focuserCombo->setEditable(enable);
319 ui->filterCombo->setEditable(enable);
320 ui->AOCombo->setEditable(enable);
321 ui->domeCombo->setEditable(enable);
322 ui->weatherCombo->setEditable(enable);
323 ui->aux1Combo->setEditable(enable);
324 ui->aux2Combo->setEditable(enable);
325 ui->aux3Combo->setEditable(enable);
326 ui->aux4Combo->setEditable(enable);
328 ui->remoteDrivers->setEnabled(!enable);
330 ui->loadSiteCheck->setEnabled(enable);
332 ui->INDIWebManagerCheck->setEnabled(enable);
334 ui->INDIWebManagerCheck->setChecked(
false);
335 ui->INDIWebManagerPort->setEnabled(enable);
337 ui->scriptsB->setEnabled(!enable || ui->INDIWebManagerCheck->isChecked());
344 ui->profileIN->setText(pi->name);
346 ui->loadSiteCheck->setChecked(!pi->city.isEmpty());
347 ui->autoConnectCheck->setChecked(pi->autoConnect);
348 ui->portSelectorCheck->setChecked(pi->portSelector);
350 if (pi->city.isEmpty() ==
false)
352 if (pi->province.isEmpty())
353 ui->loadSiteCheck->setText(ui->loadSiteCheck->text() + QString(
" (%1, %2)").arg(pi->country, pi->city));
355 ui->loadSiteCheck->setText(ui->loadSiteCheck->text() +
356 QString(
" (%1, %2, %3)").arg(pi->country, pi->province, pi->city));
359 if (pi->host.isEmpty() ==
false)
361 ui->remoteHost->setText(pi->host);
364 ui->remoteMode->setChecked(
true);
366 if (pi->INDIWebManagerPort > 0)
368 ui->INDIWebManagerCheck->setChecked(
true);
369 ui->INDIWebManagerPort->setText(
QString::number(pi->INDIWebManagerPort));
373 ui->INDIWebManagerCheck->setChecked(
false);
374 ui->INDIWebManagerPort->setText(
"8624");
378 if (pi->remotedrivers.isEmpty() ==
false)
379 ui->remoteDrivers->setText(pi->remotedrivers);
381 ui->guideTypeCombo->setCurrentIndex(pi->guidertype);
382 updateGuiderSelection(ui->guideTypeCombo->currentIndex());
383 if (pi->guidertype == Ekos::Guide::GUIDE_PHD2)
385 Options::setPHD2Host(pi->guiderhost);
386 Options::setPHD2Port(pi->guiderport);
388 else if (pi->guidertype == Ekos::Guide::GUIDE_LINGUIDER)
390 Options::setLinGuiderHost(pi->guiderhost);
391 Options::setLinGuiderPort(pi->guiderport);
394 QMapIterator<QString, QString> i(pi->drivers);
401 QString key = i.key();
402 QString value = i.value();
407 if ((row = ui->mountCombo->findText(value)) == -1)
409 ui->mountCombo->addItem(value);
410 row = ui->mountCombo->count() - 1;
414 ui->mountCombo->setCurrentIndex(row);
416 else if (key ==
"CCD")
418 if ((row = ui->ccdCombo->findText(value)) == -1)
420 ui->ccdCombo->addItem(value);
421 row = ui->ccdCombo->count() - 1;
424 ui->ccdCombo->setCurrentIndex(row);
426 else if (key ==
"Guider")
428 if ((row = ui->guiderCombo->findText(value)) == -1)
430 ui->guiderCombo->addItem(value);
431 row = ui->guiderCombo->count() - 1;
434 ui->guiderCombo->setCurrentIndex(row);
436 else if (key ==
"Focuser")
438 if ((row = ui->focuserCombo->findText(value)) == -1)
440 ui->focuserCombo->addItem(value);
441 row = ui->focuserCombo->count() - 1;
444 ui->focuserCombo->setCurrentIndex(row);
446 else if (key ==
"Filter")
448 if ((row = ui->filterCombo->findText(value)) == -1)
450 ui->filterCombo->addItem(value);
451 row = ui->filterCombo->count() - 1;
454 ui->filterCombo->setCurrentIndex(row);
456 else if (key ==
"AO")
458 if ((row = ui->AOCombo->findText(value)) == -1)
460 ui->AOCombo->addItem(value);
461 row = ui->AOCombo->count() - 1;
464 ui->AOCombo->setCurrentIndex(row);
466 else if (key ==
"Dome")
468 if ((row = ui->domeCombo->findText(value)) == -1)
470 ui->domeCombo->addItem(value);
471 row = ui->domeCombo->count() - 1;
474 ui->domeCombo->setCurrentIndex(row);
476 else if (key ==
"Weather")
478 if ((row = ui->weatherCombo->findText(value)) == -1)
480 ui->weatherCombo->addItem(value);
481 row = ui->weatherCombo->count() - 1;
484 ui->weatherCombo->setCurrentIndex(row);
486 else if (key ==
"Aux1")
488 if ((row = ui->aux1Combo->findText(value)) == -1)
490 ui->aux1Combo->addItem(value);
491 row = ui->aux1Combo->count() - 1;
494 ui->aux1Combo->setCurrentIndex(row);
496 else if (key ==
"Aux2")
498 if ((row = ui->aux2Combo->findText(value)) == -1)
500 ui->aux2Combo->addItem(value);
501 row = ui->aux2Combo->count() - 1;
504 ui->aux2Combo->setCurrentIndex(row);
506 else if (key ==
"Aux3")
508 if ((row = ui->aux3Combo->findText(value)) == -1)
510 ui->aux3Combo->addItem(value);
511 row = ui->aux3Combo->count() - 1;
514 ui->aux3Combo->setCurrentIndex(row);
516 else if (key ==
"Aux4")
518 if ((row = ui->aux4Combo->findText(value)) == -1)
520 ui->aux4Combo->addItem(value);
521 row = ui->aux4Combo->count() - 1;
524 ui->aux4Combo->setCurrentIndex(row);
528 m_INDIHub = pi->indihub;
533 bool locallyAvailable =
false;
534 if (driver->getAuxInfo().contains(
"LOCALLY_AVAILABLE"))
535 locallyAvailable = driver->getAuxInfo().value(
"LOCALLY_AVAILABLE",
false).toBool();
537 if (!locallyAvailable)
539 "<nobr>Available as <b>Remote</b> Driver. To use locally, install the corresponding driver.<nobr/>");
541 toolTipText =
i18n(
"<nobr><b>Label</b>: %1 ━ <b>Driver</b>: %2 ━ <b>Exec</b>: %3<nobr/>",
542 driver->getLabel(), driver->getName(), driver->getExecutable());
547void ProfileEditor::loadDrivers()
549 const bool isLocal = ui->localMode->isChecked();
552 for (
auto &device : m_Devices)
554 device.selectedDriver = device.combo->currentText();
556 device.model =
new QStandardItemModel(
this);
557 populateManufacturerCombo(device.model, device.combo, device.selectedDriver, isLocal, device.families);
561void ProfileEditor::setProfileName(
const QString &name)
563 ui->profileIN->setText(name);
566void ProfileEditor::setAuxDrivers(
const QStringList &aux)
568 QStringList auxList(aux);
570 if (auxList.isEmpty())
572 ui->aux1Combo->setCurrentText(auxList.first());
573 auxList.removeFirst();
575 if (auxList.isEmpty())
577 ui->aux2Combo->setCurrentText(auxList.first());
578 auxList.removeFirst();
580 if (auxList.isEmpty())
582 ui->aux3Combo->setCurrentText(auxList.first());
583 auxList.removeFirst();
585 if (auxList.isEmpty())
587 ui->aux4Combo->setCurrentText(auxList.first());
590void ProfileEditor::setHostPort(
const QString &host,
const QString &port)
592 ui->remoteMode->setChecked(
true);
593 ui->remoteHost->setText(host);
594 ui->remotePort->setText(port);
597void ProfileEditor::setWebManager(
bool enabled,
const QString &port)
599 ui->INDIWebManagerCheck->setChecked(
enabled);
600 ui->INDIWebManagerPort->setText(port);
603void ProfileEditor::setGuiderType(
int type)
605 ui->guideTypeCombo->setCurrentIndex(type);
606 if (type != Ekos::Guide::GUIDE_INTERNAL)
608 ui->externalGuideHostLabel->setEnabled(
true);
609 ui->externalGuideHost->setEnabled(
true);
610 ui->externalGuidePortLabel->setEnabled(
true);
611 ui->externalGuidePort->setEnabled(
true);
615void ProfileEditor::setConnectionOptionsEnabled(
bool enable)
618 ui->modeLabel->setEnabled(enable);
619 ui->localMode->setEnabled(enable);
620 ui->remoteMode->setEnabled(enable);
621 ui->remoteHostLabel->setEnabled(enable);
622 ui->remoteHost->setEnabled(enable);
623 ui->remotePortLabel->setEnabled(enable);
624 ui->remotePort->setEnabled(enable);
625 ui->INDIWebManagerCheck->setEnabled(enable);
626 ui->INDIWebManagerPort->setEnabled(enable);
627 ui->INDIWebManagerPortLabel->setEnabled(enable);
628 ui->guidingTypeLabel->setEnabled(enable);
629 ui->guideTypeCombo->setEnabled(enable);
630 ui->remoteDrivers->setEnabled(enable);
632 updateGuiderSelection(ui->guideTypeCombo->currentIndex());
635 ui->mountCombo->setFocus();
638void ProfileEditor::updateGuiderSelection(
int id)
641 if (
id == Ekos::Guide::GUIDE_INTERNAL)
643 ui->externalGuideHost->setText(
"localhost");
644 ui->externalGuidePort->clear();
646 ui->externalGuideHost->setEnabled(
false);
647 ui->externalGuideHostLabel->setEnabled(
false);
648 ui->externalGuidePort->setEnabled(
false);
649 ui->externalGuidePortLabel->setEnabled(
false);
656 ui->externalGuideHost->setEnabled(
true);
657 ui->externalGuideHostLabel->setEnabled(
true);
658 ui->externalGuidePort->setEnabled(
true);
659 ui->externalGuidePortLabel->setEnabled(
true);
661 if (pi && pi->guidertype ==
id)
663 host = pi->guiderhost;
664 port = pi->guiderport;
667 if (
id == Ekos::Guide::GUIDE_PHD2)
670 host = Options::pHD2Host();
672 port = Options::pHD2Port();
674 else if (
id == Ekos::Guide::GUIDE_LINGUIDER)
677 host = Options::linGuiderHost();
679 port = Options::linGuiderPort();
682 ui->externalGuideHost->setText(host);
687void ProfileEditor::setSettings(
const QJsonObject &profile)
689 ui->profileIN->setText(profile[
"name"].
toString());
690 ui->autoConnectCheck->setChecked(profile[
"auto_connect"].toBool(
true));
691 ui->portSelectorCheck->setChecked(profile[
"port_selector"].toBool(
false));
692 ui->localMode->setChecked(profile[
"mode"].
toString() ==
"local");
693 ui->remoteMode->setChecked(profile[
"mode"].
toString() ==
"remote");
694 ui->remoteHost->setText(profile[
"remote_host"].
toString(
"localhost"));
695 ui->remotePort->setText(profile[
"remote_port"].
toString(
"7624"));
696 ui->guideTypeCombo->setCurrentText(profile[
"guiding"].
toString(
i18n(
"Internal")));
697 ui->externalGuideHost->setText(profile[
"remote_guiding_host"].
toString((
"localhost")));
698 ui->externalGuidePort->setText(profile[
"remote_guiding_port"].
toString(
"4400"));
699 ui->INDIWebManagerCheck->setChecked(profile[
"use_web_manager"].toBool());
700 ui->remoteDrivers->setText(profile[
"remote"].
toString(ui->remoteDrivers->text()));
702 m_INDIHub = profile[
"indihub"].toInt(m_INDIHub);
704 const bool isLocal = ui->localMode->isChecked();
707 auto setComboValue = [
this, isLocal](QComboBox * combo,
const QString & value)
709 if (value.
isEmpty() || value ==
"--")
718 QAbstractItemModel *model = combo->
model();
720 for (
int i = 0; i < model->
rowCount(); i++)
758 setComboValue(ui->mountCombo, profile[
"mount"].toString(
"--"));
759 setComboValue(ui->ccdCombo, profile[
"ccd"].toString(
"--"));
760 setComboValue(ui->guiderCombo, profile[
"guider"].toString(
"--"));
761 setComboValue(ui->focuserCombo, profile[
"focuser"].toString(
"--"));
762 setComboValue(ui->filterCombo, profile[
"filter"].toString(
"--"));
763 setComboValue(ui->AOCombo, profile[
"ao"].toString(
"--"));
764 setComboValue(ui->domeCombo, profile[
"dome"].toString(
"--"));
765 setComboValue(ui->weatherCombo, profile[
"weather"].toString(
"--"));
766 setComboValue(ui->aux1Combo, profile[
"aux1"].toString(
"--"));
767 setComboValue(ui->aux2Combo, profile[
"aux2"].toString(
"--"));
768 setComboValue(ui->aux3Combo, profile[
"aux3"].toString(
"--"));
769 setComboValue(ui->aux4Combo, profile[
"aux4"].toString(
"--"));
772void ProfileEditor::scanNetwork()
774 delete (m_ProgressDialog);
775 m_ProgressDialog =
new QProgressDialog(
this);
776 m_ProgressDialog->setWindowTitle(
i18nc(
"@title:window",
"Scanning Network"));
777 m_ProgressDialog->setLabelText(
i18n(
"Scanning network for INDI Web Managers..."));
783 m_ProgressDialog->setMinimum(0);
784 m_ProgressDialog->setMaximum(0);
785 m_ProgressDialog->show();
786 m_ProgressDialog->raise();
788 m_CancelScan =
false;
791 std::sort(addresses.
begin(), addresses.
end(), [](
const QHostAddress & a,
const QHostAddress & b) ->
bool
792 { return a.toString() < b.toString();});
794 for(QHostAddress address : addresses)
799 QString ipv4 =
address.toString();
803 scanIP(
"10.250.250.1");
810 for (
int i = 1; i <= 254; i++)
819void ProfileEditor::scanIP(
const QString &ip)
821 QUrl url(QString(
"http://%1:8624/api/server/status").arg(ip));
823 qCDebug(KSTARS_EKOS) <<
"Scanning" << url;
825 QNetworkReply *response = m_Manager.get(QNetworkRequest(url));
826 m_Replies.append(response);
829 m_Replies.removeOne(response);
836 m_ProgressDialog->close();
837 ui->remoteHost->setText(ip);
839 qCDebug(KSTARS_EKOS) <<
"Found Web Manager server at" << ip;
841 KSNotification::info(
i18n(
"Found INDI Web Manager at %1", ip));
846void ProfileEditor::clearAllRequests()
848 for (QNetworkReply *oneReply : m_Replies)
851 oneReply->deleteLater();
857void ProfileEditor::showINDIHub()
861 indihub.setupUi(&hub);
863 indihub.modeButtonGroup->setId(indihub.offR, 0);
864 indihub.modeButtonGroup->setId(indihub.solorR, 1);
865 indihub.modeButtonGroup->setId(indihub.shareR, 2);
866 indihub.modeButtonGroup->setId(indihub.roboticR, 3);
868 indihub.logoLabel->setPixmap(QIcon(
":/icons/indihub_logo.svg").pixmap(QSize(128, 128)));
870 indihub.modeButtonGroup->button(m_INDIHub)->setChecked(
true);
875 m_INDIHub = indihub.modeButtonGroup->checkedId();
883 QStandardItem *selectedItem =
nullptr;
884 model->
appendRow(
new QStandardItem(
"--"));
885 for (QSharedPointer<DriverInfo>driver : DriverManager::Instance()->getDrivers())
887 if (!families.
contains(driver->getType()))
890 QString manufacturer = driver->manufacturer();
891 QList<QStandardItem*> manufacturers = model->
findItems(manufacturer);
893 QStandardItem *parentItem =
nullptr;
894 if (model->
findItems(manufacturer).empty())
896 parentItem =
new QStandardItem(manufacturer);
902 parentItem = manufacturers.
first();
905 QStandardItem *item =
new QStandardItem(driver->getLabel());
908 if (selectedDriver == driver->getLabel())
911 QTreeView *view =
new QTreeView(
this);
936 combo->
setView(
new QListView(
this));
937 model->
appendRow(
new QStandardItem(
"--"));
939 for (QSharedPointer<DriverInfo>driver : DriverManager::Instance()->getDrivers())
941 if (!families.
contains(driver->getType()))
944 bool locallyAvailable =
false;
945 if (driver->getAuxInfo().contains(
"LOCALLY_AVAILABLE"))
946 locallyAvailable = driver->getAuxInfo().value(
"LOCALLY_AVAILABLE",
false).toBool();
947 icon = locallyAvailable ? QIcon() : remoteIcon;
949 QStandardItem *
mount =
new QStandardItem(icon, driver->getLabel());
958void ProfileEditor::executeScriptEditor()
962 QStringList currentDrivers;
963 for (
auto &oneCombo : ui->driversGroupBox->findChildren<QComboBox *>())
964 currentDrivers << oneCombo->currentText();
967 for (
auto &oneDriver : ui->remoteDrivers->text().split(
","))
968 currentDrivers << oneDriver;
969 currentDrivers.
sort();
970 ProfileScriptDialog dialog(currentDrivers, pi->scripts,
this);
972 auto settings = dialog.jsonSettings();
bool GetAllProfiles(QList< QSharedPointer< ProfileInfo > > &profiles)
GetAllProfiles Return all profiles in a QList.
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)
virtual QVariant data(const QModelIndex &index, int role) const const=0
virtual bool hasChildren(const QModelIndex &parent) const const
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const const=0
virtual int rowCount(const QModelIndex &parent) const const=0
void setCurrentIndex(const QModelIndex &index)
void addItem(const QIcon &icon, const QString &text, const QVariant &userData)
void setCurrentIndex(int index)
void setCurrentText(const QString &text)
int findText(const QString &text, Qt::MatchFlags flags) const const
QAbstractItemModel * model() const const
void setModelColumn(int visibleColumn)
virtual void setModel(QAbstractItemModel *model)
void setRootModelIndex(const QModelIndex &index)
void setView(QAbstractItemView *itemView)
QDialog(QWidget *parent, Qt::WindowFlags f)
QIcon fromTheme(const QString &name)
bool contains(const AT &value) const const
qsizetype removeAll(const AT &t)
QModelIndex parent() const const
QList< QHostAddress > allAddresses()
NetworkError error() const const
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QObject * parent() const const
void setObjectName(QAnyStringView name)
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
qsizetype lastIndexOf(QChar ch, Qt::CaseSensitivity cs) const const
QString number(double n, char format, int precision)
QString & remove(QChar ch, Qt::CaseSensitivity cs)
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
void sort(Qt::CaseSensitivity cs)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
virtual void setModel(QAbstractItemModel *model) override
void sortByColumn(int column, Qt::SortOrder order)
QString toString() const const