/kstars/indi/opsindi.cpp

https://github.com/KDE/kstars · C++ · 135 lines · 101 code · 27 blank · 7 comment · 12 complexity · 0acbb7008eb62b1286d3cfb1dca728f7 MD5 · raw file

  1. /*
  2. SPDX-FileCopyrightText: 2003 Jasem Mutlaq <mutlaqja@ikarustech.com>
  3. SPDX-License-Identifier: GPL-2.0-or-later
  4. */
  5. #include "opsindi.h"
  6. #include "ksnotification.h"
  7. #include "kstars.h"
  8. #include "Options.h"
  9. #include <KConfigDialog>
  10. #include <QCheckBox>
  11. #include <QComboBox>
  12. #include <QDesktopServices>
  13. #include <QFileDialog>
  14. #include <QPushButton>
  15. #include <QStringList>
  16. OpsINDI::OpsINDI() : QFrame(KStars::Instance())
  17. {
  18. setupUi(this);
  19. //Get a pointer to the KConfigDialog
  20. m_ConfigDialog = KConfigDialog::exists("settings");
  21. selectFITSDirB->setIcon(
  22. QIcon::fromTheme("document-open-folder"));
  23. selectFITSDirB->setAttribute(Qt::WA_LayoutUsesWidgetRect);
  24. selectDriversDirB->setIcon(
  25. QIcon::fromTheme("document-open-folder"));
  26. selectDriversDirB->setAttribute(Qt::WA_LayoutUsesWidgetRect);
  27. selectINDIHubB->setIcon(
  28. QIcon::fromTheme("document-open"));
  29. selectINDIHubB->setAttribute(Qt::WA_LayoutUsesWidgetRect);
  30. #ifdef Q_OS_OSX
  31. connect(kcfg_indiServerIsInternal, SIGNAL(clicked()), this, SLOT(toggleINDIInternal()));
  32. kcfg_indiServerIsInternal->setToolTip(i18n("Internal or external INDI server?"));
  33. connect(kcfg_indiDriversAreInternal, SIGNAL(clicked()), this, SLOT(toggleDriversInternal()));
  34. kcfg_indiDriversAreInternal->setToolTip(i18n("Internal or external INDI drivers?"));
  35. if (Options::indiServerIsInternal())
  36. kcfg_indiServer->setEnabled(false);
  37. if (Options::indiDriversAreInternal())
  38. kcfg_indiDriversDir->setEnabled(false);
  39. #else
  40. kcfg_indiServerIsInternal->setVisible(false);
  41. kcfg_indiDriversAreInternal->setVisible(false);
  42. #endif
  43. connect(selectFITSDirB, SIGNAL(clicked()), this, SLOT(saveFITSDirectory()));
  44. connect(selectDriversDirB, SIGNAL(clicked()), this, SLOT(saveDriversDirectory()));
  45. connect(showLogsB, SIGNAL(clicked()), this, SLOT(slotShowLogFiles()));
  46. connect(kcfg_indiServer, SIGNAL(editingFinished()), this, SLOT(verifyINDIServer()));
  47. connect(selectINDIHubB, &QPushButton::clicked, this, &OpsINDI::saveINDIHubAgent);
  48. #ifdef Q_OS_WIN
  49. kcfg_indiServer->setEnabled(false);
  50. #endif
  51. }
  52. void OpsINDI::toggleINDIInternal()
  53. {
  54. kcfg_indiServer->setEnabled(!kcfg_indiServerIsInternal->isChecked());
  55. if (kcfg_indiServerIsInternal->isChecked())
  56. kcfg_indiServer->setText("*Internal INDI Server*");
  57. else
  58. kcfg_indiServer->setText(KSUtils::getDefaultPath("indiServer"));
  59. }
  60. void OpsINDI::toggleDriversInternal()
  61. {
  62. kcfg_indiDriversDir->setEnabled(!kcfg_indiDriversAreInternal->isChecked());
  63. if (kcfg_indiDriversAreInternal->isChecked())
  64. kcfg_indiDriversDir->setText("*Internal INDI Drivers*");
  65. else
  66. kcfg_indiDriversDir->setText(KSUtils::getDefaultPath("indiDriversDir"));
  67. KSNotification::info(i18n("You need to restart KStars for this change to take effect."));
  68. }
  69. void OpsINDI::saveFITSDirectory()
  70. {
  71. QString dir =
  72. QFileDialog::getExistingDirectory(KStars::Instance(), i18nc("@title:window", "FITS Default Directory"), kcfg_fitsDir->text());
  73. if (!dir.isEmpty())
  74. kcfg_fitsDir->setText(dir);
  75. }
  76. void OpsINDI::saveDriversDirectory()
  77. {
  78. QString dir = QFileDialog::getExistingDirectory(KStars::Instance(), i18nc("@title:window", "INDI Drivers Directory"),
  79. kcfg_indiDriversDir->text());
  80. if (!dir.isEmpty())
  81. {
  82. kcfg_indiDriversDir->setText(dir);
  83. KSNotification::info(i18n("You need to restart KStars for this change to take effect."));
  84. }
  85. }
  86. void OpsINDI::saveINDIHubAgent()
  87. {
  88. QUrl url = QFileDialog::getOpenFileUrl(this, i18nc("@title:window", "Select INDIHub Agent"), QUrl(), "indihub-agent");
  89. if (url.isEmpty())
  90. return;
  91. kcfg_INDIHubAgent->setText(url.toLocalFile());
  92. }
  93. void OpsINDI::slotShowLogFiles()
  94. {
  95. QUrl path = QUrl::fromLocalFile(QDir::homePath() + "/.indi/logs");
  96. QDesktopServices::openUrl(path);
  97. }
  98. void OpsINDI::verifyINDIServer()
  99. {
  100. // Do not verify internal
  101. if (kcfg_indiServerIsInternal->isChecked())
  102. return;
  103. QFileInfo indiserver(kcfg_indiServer->text());
  104. if (indiserver.exists() && indiserver.isFile() && indiserver.baseName() == "indiserver")
  105. return;
  106. KSNotification::error(i18n("%1 is not a valid INDI server binary.", kcfg_indiServer->text()));
  107. }