7#include "scriptbuilder.h"
10#include "scriptfunction.h"
12#include "kstarsdata.h"
14#include "ksnotification.h"
15#include "kstarsdatetime.h"
16#include "dialogs/finddialog.h"
17#include "dialogs/locationdialog.h"
18#include "widgets/dmsbox.h"
19#include "widgets/timespinbox.h"
20#include "widgets/timestepbox.h"
22#include <KLocalizedString>
24#include <KIO/StoredTransferJob>
28#include <QApplication>
29#include <QFontMetrics>
33#include <QStandardPaths>
34#include <QTemporaryFile>
40OptionsTreeViewWidget::OptionsTreeViewWidget(
QWidget *p) :
QFrame(p)
47 otvw.reset(
new OptionsTreeViewWidget(
this));
52 setLayout(mainLayout);
54 setWindowTitle(
i18nc(
"@title:window",
"Options"));
64void OptionsTreeView::resizeColumns()
75 for (
int j = 0;
j <
topitem->childCount(); ++
j)
83 int w =
qfm.horizontalAdvance(child->
text(
icol)) + 4;
117 snw =
new ScriptNameWidget(
this);
122 setLayout(mainLayout);
124 setWindowTitle(
i18nc(
"@title:window",
"Script Data"));
136ScriptNameDialog::~ScriptNameDialog()
141void ScriptNameDialog::slotEnableOkButton()
143 okB->
setEnabled(!snw->ScriptName->text().isEmpty());
151ScriptBuilder::ScriptBuilder(
QWidget *parent)
152 :
QDialog(parent), UnsavedChanges(
false), checkForChanges(
true), currentFileURL(), currentDir(
QDir::homePath()),
153 currentScriptName(), currentAuthor()
158 sb =
new ScriptBuilderUI(
this);
163 setLayout(mainLayout);
165 setWindowTitle(
i18nc(
"@title:window",
"Script Builder"));
175 i18n(
"Point the display at the specified location. %1 can be the name "
176 "of an object, a cardinal point on the compass, or 'zenith'.",
178 false,
"QString",
"dir"));
180 "addLabel",
i18n(
"Add a name label to the object named %1.",
QString(
"name")),
false,
"QString",
"name"));
181 KStarsFunctionList.append(
183 false,
"QString",
"name"));
185 "addTrail",
i18n(
"Add a trail to the solar system body named %1.",
QString(
"name")),
false,
"QString",
"name"));
187 "removeTrail",
i18n(
"Remove the trail from the solar system body named %1.",
QString(
"name")),
false,
"QString",
190 i18n(
"Point the display at the specified RA/Dec coordinates. RA is "
191 "expressed in Hours; Dec is expressed in Degrees."),
192 false,
"double",
"ra",
"double",
"dec"));
195 i18n(
"Point the display at the specified Alt/Az coordinates. Alt and Az are expressed in Degrees."),
false,
196 "double",
"alt",
"double",
"az"));
197 KStarsFunctionList.append(
new ScriptFunction(
"zoomIn",
i18n(
"Increase the display Zoom Level."),
false));
198 KStarsFunctionList.append(
new ScriptFunction(
"zoomOut",
i18n(
"Decrease the display Zoom Level."),
false));
199 KStarsFunctionList.append(
200 new ScriptFunction(
"defaultZoom",
i18n(
"Set the display Zoom Level to its default value."),
false));
201 KStarsFunctionList.append(
202 new ScriptFunction(
"zoom",
i18n(
"Set the display Zoom Level manually."),
false,
"double",
"z"));
203 KStarsFunctionList.append(
204 new ScriptFunction(
"setLocalTime",
i18n(
"Set the system clock to the specified Local Time."),
false,
"int",
205 "year",
"int",
"month",
"int",
"day",
"int",
"hour",
"int",
"minute",
"int",
"second"));
207 "waitFor",
i18n(
"Pause script execution for specified number of seconds."),
false,
"double",
"sec"));
209 i18n(
"Halt script execution until the specified key is pressed. Only "
210 "single-key strokes are possible; use 'space' for the spacebar."),
211 false,
"QString",
"key"));
213 "setTracking",
i18n(
"Set whether the display is tracking the current location."),
false,
"bool",
"track"));
215 "changeViewOption",
i18n(
"Change view option named %1 to value %2.",
QString(
"opName"),
QString(
"opValue")),
216 false,
"QString",
"opName",
"QString",
"opValue"));
218 "setGeoLocation",
i18n(
"Set the geographic location to the city specified by city, province and country."),
219 false,
"QString",
"cityName",
"QString",
"provinceName",
"QString",
"countryName"));
221 "setColor",
i18n(
"Set the color named %1 to the value %2.",
QString(
"colorName"),
QString(
"value")),
false,
222 "QString",
"colorName",
"QString",
"value"));
223 KStarsFunctionList.append(
new ScriptFunction(
"loadColorScheme",
i18n(
"Load the color scheme specified by name."),
224 false,
"QString",
"name"));
225 KStarsFunctionList.append(
226 new ScriptFunction(
"exportImage",
i18n(
"Export the sky image to the file, with specified width and height."),
227 false,
"QString",
"fileName",
"int",
"width",
"int",
"height"));
228 KStarsFunctionList.append(
230 i18n(
"Print the sky image to a printer or file. If %1 is true, it will show the print "
231 "dialog. If %2 is true, it will use the Star Chart color scheme for printing.",
233 false,
"bool",
"usePrintDialog",
"bool",
"useChartColors"));
234 SimClockFunctionList.append(
new ScriptFunction(
"stop",
i18n(
"Halt the simulation clock."),
true));
235 SimClockFunctionList.append(
new ScriptFunction(
"start",
i18n(
"Start the simulation clock."),
true));
237 i18n(
"Set the timescale of the simulation clock to specified scale. "
238 " 1.0 means real-time; 2.0 means twice real-time; etc."),
239 true,
"double",
"scale"));
245 for (
auto &item : KStarsFunctionList)
248 for (
auto &item : SimClockFunctionList)
254 sb->FunctionTree->setColumnCount(1);
256 sb->FunctionTree->setSortingEnabled(
false);
262 sb->SaveAsButton->setIcon(
284 argLookToward =
new ArgLookToward(sb->ArgStack);
285 argFindObject =
new ArgFindObject(sb->ArgStack);
286 argSetRaDec =
new ArgSetRaDec(sb->ArgStack);
287 argSetAltAz =
new ArgSetAltAz(sb->ArgStack);
288 argSetLocalTime =
new ArgSetLocalTime(sb->ArgStack);
289 argWaitFor =
new ArgWaitFor(sb->ArgStack);
290 argWaitForKey =
new ArgWaitForKey(sb->ArgStack);
291 argSetTracking =
new ArgSetTrack(sb->ArgStack);
292 argChangeViewOption =
new ArgChangeViewOption(sb->ArgStack);
293 argSetGeoLocation =
new ArgSetGeoLocation(sb->ArgStack);
294 argTimeScale =
new ArgTimeScale(sb->ArgStack);
295 argZoom =
new ArgZoom(sb->ArgStack);
296 argExportImage =
new ArgExportImage(sb->ArgStack);
297 argPrintImage =
new ArgPrintImage(sb->ArgStack);
298 argSetColor =
new ArgSetColor(sb->ArgStack);
299 argLoadColorScheme =
new ArgLoadColorScheme(sb->ArgStack);
301 sb->ArgStack->addWidget(argBlank);
302 sb->ArgStack->addWidget(argLookToward);
303 sb->ArgStack->addWidget(argFindObject);
304 sb->ArgStack->addWidget(argSetRaDec);
305 sb->ArgStack->addWidget(argSetAltAz);
306 sb->ArgStack->addWidget(argSetLocalTime);
307 sb->ArgStack->addWidget(argWaitFor);
308 sb->ArgStack->addWidget(argWaitForKey);
309 sb->ArgStack->addWidget(argSetTracking);
310 sb->ArgStack->addWidget(argChangeViewOption);
311 sb->ArgStack->addWidget(argSetGeoLocation);
312 sb->ArgStack->addWidget(argTimeScale);
313 sb->ArgStack->addWidget(argZoom);
314 sb->ArgStack->addWidget(argExportImage);
315 sb->ArgStack->addWidget(argPrintImage);
316 sb->ArgStack->addWidget(argSetColor);
317 sb->ArgStack->addWidget(argLoadColorScheme);
319 sb->ArgStack->setCurrentIndex(0);
324 otv->resize(sb->width(), 0.5 * sb->height());
327 otv->resizeColumns();
345 connect(argSetGeoLocation->FindCityButton,
SIGNAL(clicked()),
this,
SLOT(slotFindCity()));
346 connect(argLookToward->FindButton,
SIGNAL(clicked()),
this,
SLOT(slotFindObject()));
347 connect(argChangeViewOption->TreeButton,
SIGNAL(clicked()),
this,
SLOT(slotShowOptions()));
348 connect(argFindObject->FindButton,
SIGNAL(clicked()),
this,
SLOT(slotFindObject()));
358 connect(argWaitFor->DelayBox,
SIGNAL(valueChanged(
int)),
this,
SLOT(slotWaitFor()));
360 connect(argSetTracking->CheckTrack,
SIGNAL(stateChanged(
int)),
this,
SLOT(slotTracking()));
366 connect(argTimeScale->TimeScale,
SIGNAL(scaleChanged(
float)),
this,
SLOT(slotTimeScale()));
369 connect(argExportImage->ExportWidth,
SIGNAL(valueChanged(
int)),
this,
SLOT(slotExportImage()));
370 connect(argExportImage->ExportHeight,
SIGNAL(valueChanged(
int)),
this,
SLOT(slotExportImage()));
371 connect(argPrintImage->UsePrintDialog,
SIGNAL(toggled(
bool)),
this,
SLOT(slotPrintImage()));
372 connect(argPrintImage->UseChartColors,
SIGNAL(toggled(
bool)),
this,
SLOT(slotPrintImage()));
378 sb->CopyButton->setEnabled(
false);
379 sb->AddButton->setEnabled(
false);
380 sb->RemoveButton->setEnabled(
false);
381 sb->UpButton->setEnabled(
false);
382 sb->DownButton->setEnabled(
false);
383 sb->SaveButton->setEnabled(
false);
384 sb->SaveAsButton->setEnabled(
false);
385 sb->RunButton->setEnabled(
false);
388ScriptBuilder::~ScriptBuilder()
390 while (!KStarsFunctionList.
isEmpty())
393 while (!SimClockFunctionList.
isEmpty())
400void ScriptBuilder::initViewOptions()
407 fields <<
"ShowInfoBoxes" <<
i18n(
"Toggle display of all InfoBoxes") <<
i18n(
"bool");
410 fields <<
"ShowTimeBox" <<
i18n(
"Toggle display of Time InfoBox") <<
i18n(
"bool");
413 fields <<
"ShowGeoBox" <<
i18n(
"Toggle display of Geographic InfoBox") <<
i18n(
"bool");
416 fields <<
"ShowFocusBox" <<
i18n(
"Toggle display of Focus InfoBox") <<
i18n(
"bool");
419 fields <<
"ShadeTimeBox" <<
i18n(
"(un)Shade Time InfoBox") <<
i18n(
"bool");
422 fields <<
"ShadeGeoBox" <<
i18n(
"(un)Shade Geographic InfoBox") <<
i18n(
"bool");
425 fields <<
"ShadeFocusBox" <<
i18n(
"(un)Shade Focus InfoBox") <<
i18n(
"bool");
429 argChangeViewOption->OptionName->addItem(
"ShowInfoBoxes");
430 argChangeViewOption->OptionName->addItem(
"ShowTimeBox");
431 argChangeViewOption->OptionName->addItem(
"ShowGeoBox");
432 argChangeViewOption->OptionName->addItem(
"ShowFocusBox");
433 argChangeViewOption->OptionName->addItem(
"ShadeTimeBox");
434 argChangeViewOption->OptionName->addItem(
"ShadeGeoBox");
435 argChangeViewOption->OptionName->addItem(
"ShadeFocusBox");
439 fields <<
"ShowMainToolBar" <<
i18n(
"Toggle display of main toolbar") <<
i18n(
"bool");
442 fields <<
"ShowViewToolBar" <<
i18n(
"Toggle display of view toolbar") <<
i18n(
"bool");
446 argChangeViewOption->OptionName->addItem(
"ShowMainToolBar");
447 argChangeViewOption->OptionName->addItem(
"ShowViewToolBar");
451 fields <<
"ShowStars" <<
i18n(
"Toggle display of Stars") <<
i18n(
"bool");
454 fields <<
"ShowDeepSky" <<
i18n(
"Toggle display of all deep-sky objects") <<
i18n(
"bool");
461 fields <<
"ShowSolarSystem" <<
i18n(
"Toggle display of all solar system bodies") <<
i18n(
"bool");
464 fields <<
"ShowSun" <<
i18n(
"Toggle display of Sun") <<
i18n(
"bool");
467 fields <<
"ShowMoon" <<
i18n(
"Toggle display of Moon") <<
i18n(
"bool");
470 fields <<
"ShowMercury" <<
i18n(
"Toggle display of Mercury") <<
i18n(
"bool");
473 fields <<
"ShowVenus" <<
i18n(
"Toggle display of Venus") <<
i18n(
"bool");
476 fields <<
"ShowMars" <<
i18n(
"Toggle display of Mars") <<
i18n(
"bool");
479 fields <<
"ShowJupiter" <<
i18n(
"Toggle display of Jupiter") <<
i18n(
"bool");
482 fields <<
"ShowSaturn" <<
i18n(
"Toggle display of Saturn") <<
i18n(
"bool");
485 fields <<
"ShowUranus" <<
i18n(
"Toggle display of Uranus") <<
i18n(
"bool");
488 fields <<
"ShowNeptune" <<
i18n(
"Toggle display of Neptune") <<
i18n(
"bool");
494 fields <<
"ShowAsteroids" <<
i18n(
"Toggle display of Asteroids") <<
i18n(
"bool");
497 fields <<
"ShowComets" <<
i18n(
"Toggle display of Comets") <<
i18n(
"bool");
501 argChangeViewOption->OptionName->addItem(
"ShowStars");
502 argChangeViewOption->OptionName->addItem(
"ShowDeepSky");
503 argChangeViewOption->OptionName->addItem(
"ShowSolarSystem");
504 argChangeViewOption->OptionName->addItem(
"ShowSun");
505 argChangeViewOption->OptionName->addItem(
"ShowMoon");
506 argChangeViewOption->OptionName->addItem(
"ShowMercury");
507 argChangeViewOption->OptionName->addItem(
"ShowVenus");
508 argChangeViewOption->OptionName->addItem(
"ShowMars");
509 argChangeViewOption->OptionName->addItem(
"ShowJupiter");
510 argChangeViewOption->OptionName->addItem(
"ShowSaturn");
511 argChangeViewOption->OptionName->addItem(
"ShowUranus");
512 argChangeViewOption->OptionName->addItem(
"ShowNeptune");
514 argChangeViewOption->OptionName->addItem(
"ShowAsteroids");
515 argChangeViewOption->OptionName->addItem(
"ShowComets");
518 fields <<
"ShowCLines" <<
i18n(
"Toggle display of constellation lines") <<
i18n(
"bool");
521 fields <<
"ShowCBounds" <<
i18n(
"Toggle display of constellation boundaries") <<
i18n(
"bool");
524 fields <<
"ShowCNames" <<
i18n(
"Toggle display of constellation names") <<
i18n(
"bool");
527 fields <<
"ShowMilkyWay" <<
i18n(
"Toggle display of Milky Way") <<
i18n(
"bool");
530 fields <<
"ShowGrid" <<
i18n(
"Toggle display of the coordinate grid") <<
i18n(
"bool");
533 fields <<
"ShowEquator" <<
i18n(
"Toggle display of the celestial equator") <<
i18n(
"bool");
536 fields <<
"ShowEcliptic" <<
i18n(
"Toggle display of the ecliptic") <<
i18n(
"bool");
539 fields <<
"ShowHorizon" <<
i18n(
"Toggle display of the horizon line") <<
i18n(
"bool");
542 fields <<
"ShowGround" <<
i18n(
"Toggle display of the opaque ground") <<
i18n(
"bool");
545 fields <<
"ShowStarNames" <<
i18n(
"Toggle display of star name labels") <<
i18n(
"bool");
548 fields <<
"ShowStarMagnitudes" <<
i18n(
"Toggle display of star magnitude labels") <<
i18n(
"bool");
551 fields <<
"ShowAsteroidNames" <<
i18n(
"Toggle display of asteroid name labels") <<
i18n(
"bool");
554 fields <<
"ShowCometNames" <<
i18n(
"Toggle display of comet name labels") <<
i18n(
"bool");
557 fields <<
"ShowPlanetNames" <<
i18n(
"Toggle display of planet name labels") <<
i18n(
"bool");
560 fields <<
"ShowPlanetImages" <<
i18n(
"Toggle display of planet images") <<
i18n(
"bool");
564 argChangeViewOption->OptionName->addItem(
"ShowCLines");
565 argChangeViewOption->OptionName->addItem(
"ShowCBounds");
566 argChangeViewOption->OptionName->addItem(
"ShowCNames");
567 argChangeViewOption->OptionName->addItem(
"ShowMilkyWay");
568 argChangeViewOption->OptionName->addItem(
"ShowGrid");
569 argChangeViewOption->OptionName->addItem(
"ShowEquator");
570 argChangeViewOption->OptionName->addItem(
"ShowEcliptic");
571 argChangeViewOption->OptionName->addItem(
"ShowHorizon");
572 argChangeViewOption->OptionName->addItem(
"ShowGround");
573 argChangeViewOption->OptionName->addItem(
"ShowStarNames");
574 argChangeViewOption->OptionName->addItem(
"ShowStarMagnitudes");
575 argChangeViewOption->OptionName->addItem(
"ShowAsteroidNames");
576 argChangeViewOption->OptionName->addItem(
"ShowCometNames");
577 argChangeViewOption->OptionName->addItem(
"ShowPlanetNames");
578 argChangeViewOption->OptionName->addItem(
"ShowPlanetImages");
581 fields <<
"UseLatinConstellNames" <<
i18n(
"Show Latin constellation names") <<
i18n(
"bool");
584 fields <<
"UseLocalConstellNames" <<
i18n(
"Show constellation names in local language") <<
i18n(
"bool");
587 fields <<
"UseAbbrevConstellNames" <<
i18n(
"Show IAU-standard constellation abbreviations") <<
i18n(
"bool");
591 argChangeViewOption->OptionName->addItem(
"UseLatinConstellNames");
592 argChangeViewOption->OptionName->addItem(
"UseLocalConstellNames");
593 argChangeViewOption->OptionName->addItem(
"UseAbbrevConstellNames");
596 fields <<
"HideOnSlew" <<
i18n(
"Toggle whether objects hidden while slewing display") <<
i18n(
"bool");
599 fields <<
"SlewTimeScale" <<
i18n(
"Timestep threshold (in seconds) for hiding objects") <<
i18n(
"double");
602 fields <<
"HideStars" <<
i18n(
"Hide faint stars while slewing?") <<
i18n(
"bool");
605 fields <<
"HidePlanets" <<
i18n(
"Hide solar system bodies while slewing?") <<
i18n(
"bool");
608 fields <<
"HideMilkyWay" <<
i18n(
"Hide Milky Way while slewing?") <<
i18n(
"bool");
611 fields <<
"HideCNames" <<
i18n(
"Hide constellation names while slewing?") <<
i18n(
"bool");
614 fields <<
"HideCLines" <<
i18n(
"Hide constellation lines while slewing?") <<
i18n(
"bool");
617 fields <<
"HideCBounds" <<
i18n(
"Hide constellation boundaries while slewing?") <<
i18n(
"bool");
620 fields <<
"HideGrid" <<
i18n(
"Hide coordinate grid while slewing?") <<
i18n(
"bool");
624 argChangeViewOption->OptionName->addItem(
"HideOnSlew");
625 argChangeViewOption->OptionName->addItem(
"SlewTimeScale");
626 argChangeViewOption->OptionName->addItem(
"HideStars");
627 argChangeViewOption->OptionName->addItem(
"HidePlanets");
628 argChangeViewOption->OptionName->addItem(
"HideMilkyWay");
629 argChangeViewOption->OptionName->addItem(
"HideCNames");
630 argChangeViewOption->OptionName->addItem(
"HideCLines");
631 argChangeViewOption->OptionName->addItem(
"HideCBounds");
632 argChangeViewOption->OptionName->addItem(
"HideGrid");
635 fields <<
"UseAltAz" <<
i18n(
"Use Horizontal coordinates? (otherwise, use Equatorial)") <<
i18n(
"bool");
638 fields <<
"ZoomFactor" <<
i18n(
"Set the Zoom Factor") <<
i18n(
"double");
641 fields <<
"FOVName" <<
i18n(
"Select angular size for the FOV symbol (in arcmin)") <<
i18n(
"double");
644 fields <<
"FOVShape" <<
i18n(
"Select shape for the FOV symbol (0=Square, 1=Circle, 2=Crosshairs, 4=Bullseye)")
648 fields <<
"FOVColor" <<
i18n(
"Select color for the FOV symbol") <<
i18n(
"string");
651 fields <<
"UseAnimatedSlewing" <<
i18n(
"Use animated slewing? (otherwise, \"snap\" to new focus)") <<
i18n(
"bool");
654 fields <<
"UseRefraction" <<
i18n(
"Correct for atmospheric refraction?") <<
i18n(
"bool");
657 fields <<
"UseAutoLabel" <<
i18n(
"Automatically attach name label to centered object?") <<
i18n(
"bool");
660 fields <<
"UseHoverLabel" <<
i18n(
"Attach temporary name label when hovering mouse over an object?")
664 fields <<
"UseAutoTrail" <<
i18n(
"Automatically add trail to centered solar system body?") <<
i18n(
"bool");
667 fields <<
"FadePlanetTrails" <<
i18n(
"Planet trails fade to sky color? (otherwise color is constant)")
672 argChangeViewOption->OptionName->addItem(
"UseAltAz");
673 argChangeViewOption->OptionName->addItem(
"ZoomFactor");
674 argChangeViewOption->OptionName->addItem(
"FOVName");
675 argChangeViewOption->OptionName->addItem(
"FOVSize");
676 argChangeViewOption->OptionName->addItem(
"FOVShape");
677 argChangeViewOption->OptionName->addItem(
"FOVColor");
678 argChangeViewOption->OptionName->addItem(
"UseRefraction");
679 argChangeViewOption->OptionName->addItem(
"UseAutoLabel");
680 argChangeViewOption->OptionName->addItem(
"UseHoverLabel");
681 argChangeViewOption->OptionName->addItem(
"UseAutoTrail");
682 argChangeViewOption->OptionName->addItem(
"AnimateSlewing");
683 argChangeViewOption->OptionName->addItem(
"FadePlanetTrails");
706 fields <<
"starLabelDensity" <<
i18n(
"magnitude of faintest star labeled on map") <<
i18n(
"double");
709 fields <<
"magLimitHideStar" <<
i18n(
"magnitude of brightest star hidden while slewing") <<
i18n(
"double");
712 fields <<
"magLimitAsteroid" <<
i18n(
"magnitude of faintest asteroid drawn on map") <<
i18n(
"double");
716 fields <<
"asteroidLabelDensity" <<
i18n(
"magnitude of faintest asteroid labeled on map") <<
i18n(
"double");
719 fields <<
"maxRadCometName" <<
i18n(
"comets nearer to the Sun than this (in AU) are labeled on map")
726 argChangeViewOption->OptionName->addItem(
"magLimitDrawDeepSky");
727 argChangeViewOption->OptionName->addItem(
"magLimitDrawDeepSkyZoomOut");
728 argChangeViewOption->OptionName->addItem(
"starLabelDensity");
729 argChangeViewOption->OptionName->addItem(
"magLimitHideStar");
730 argChangeViewOption->OptionName->addItem(
"magLimitAsteroid");
731 argChangeViewOption->OptionName->addItem(
"asteroidLabelDensity");
732 argChangeViewOption->OptionName->addItem(
"maxRadCometName");
735 for (
unsigned int i = 0; i < KStarsData::Instance()->colorScheme()->numberOfColors(); ++i)
737 argSetColor->ColorName->addItem(KStarsData::Instance()->colorScheme()->nameAt(i));
741 argLoadColorScheme->SchemeList->addItem(
i18nc(
"use default color scheme",
"Default Colors"));
742 argLoadColorScheme->SchemeList->addItem(
i18nc(
"use 'star chart' color scheme",
"Star Chart"));
743 argLoadColorScheme->SchemeList->addItem(
i18nc(
"use 'night vision' color scheme",
"Night Vision"));
744 argLoadColorScheme->SchemeList->addItem(
i18nc(
"use 'moonless night' color scheme",
"Moonless Night"));
754 while (!stream.atEnd())
756 line = stream.readLine();
757 argLoadColorScheme->SchemeList->addItem(line.
left(line.
indexOf(
':')));
764void ScriptBuilder::slotNew()
770 sb->ScriptListBox->clear();
771 sb->ArgStack->setCurrentWidget(argBlank);
778 currentFileURL.
clear();
779 currentScriptName.
clear();
783void ScriptBuilder::slotOpen()
795 "*.kstars|" +
i18nc(
"Filter by file type: KStars Scripts.",
"KStars Scripts (*.kstars)"));
802 sb->ScriptListBox->clear();
803 sb->ArgStack->setCurrentWidget(argBlank);
814 KSNotification::sorry(
i18n(
"Could not download remote file."),
i18n(
"Download Error"));
820 KSNotification::sorry(
i18n(
"Could not open file %1.", f.fileName()),
i18n(
"Could Not Open File"));
821 currentFileURL.
clear();
832 KSNotification::sorry(
i18n(
"Invalid URL: %1", currentFileURL.
url()),
i18n(
"Invalid URL"));
833 currentFileURL.
clear();
838void ScriptBuilder::slotSave()
844 if (currentScriptName.
isEmpty())
849 currentScriptName = snd->scriptName();
850 currentAuthor = snd->authorName();
863 "*.kstars|" +
i18nc(
"Filter by file type: KStars Scripts.",
"KStars Scripts (*.kstars)"));
879 i18n(
"A file named \"%1\" already exists. "
893 if (
fname.right(7).toLower() !=
".kstars")
899 QString message =
i18n(
"Could not open file %1.", f.fileName());
900 KSNotification::sorry(message,
i18n(
"Could Not Open File"));
901 currentFileURL.
clear();
920 QString message =
i18n(
"Could not upload image to remote location: %1", currentFileURL.
url());
921 KSNotification::sorry(message,
i18n(
"Could not upload file"));
925 setUnsavedChanges(
false);
930 KSNotification::sorry(message,
i18n(
"Invalid URL"));
931 currentFileURL.
clear();
935void ScriptBuilder::slotSaveAs()
937 currentFileURL.
clear();
938 currentScriptName.
clear();
942void ScriptBuilder::saveWarning()
947 QString message =
i18n(
"The current script has unsaved changes. Would you like to save before closing it?");
950 if (
ans == KMessageBox::Yes)
953 setUnsavedChanges(
false);
955 else if (
ans == KMessageBox::No)
957 setUnsavedChanges(
false);
964void ScriptBuilder::slotRunScript()
982 QString message =
i18n(
"Could not open file %1.", f.fileName());
983 KSNotification::sorry(message,
i18n(
"Could Not Open File"));
984 currentFileURL.
clear();
1005 p.
start(f.fileName(), arguments);
1012 qApp->processEvents();
1036 ostream <<
"#KStars DBus script: " << currentScriptName <<
'\n';
1037 ostream <<
"#by " << currentAuthor <<
'\n';
1046 if (
sf->isClockFunction())
1072 if (line.
contains(
"#KStars DBus script: "))
1080 if (line.
left(4) ==
"dbus")
1102 if (parseFunction(
fn_name, line))
1104 sb->ScriptListBox->addItem(ScriptList.
last()->name());
1106 ScriptList.
last()->setValid(
true);
1109 qWarning() <<
i18n(
"Could not parse script. Line was: %1", line);
1115 if (sb->ScriptListBox->count())
1117 sb->ScriptListBox->setCurrentItem(
nullptr);
1173 fn <<
match.captured(0).remove(
"\"");
1177 for (
auto &
sf : KStarsFunctionList)
1193 for (
int i = 0; i <
sf->numArgs(); ++i)
1194 ScriptList.
last()->setArg(i,
fn[i]);
1203 if (
fn.count() !=
sf->numArgs())
1208 for (
int i = 0; i <
sf->numArgs(); ++i)
1209 ScriptList.
last()->setArg(i,
fn[i]);
1220void ScriptBuilder::setUnsavedChanges(
bool b)
1222 if (checkForChanges)
1229void ScriptBuilder::slotCopyFunction()
1231 if (!UnsavedChanges)
1232 setUnsavedChanges(
true);
1234 int Pos = sb->ScriptListBox->currentRow() + 1;
1237 for (
int i = 0; i < ScriptList[Pos - 1]->numArgs(); ++i)
1238 ScriptList[Pos]->setArg(i, ScriptList[Pos - 1]->argVal(i));
1240 sb->ScriptListBox->insertItem(Pos, ScriptList[Pos]->
name());
1242 sb->ScriptListBox->setCurrentRow(Pos);
1246void ScriptBuilder::slotRemoveFunction()
1248 setUnsavedChanges(
true);
1250 int Pos = sb->ScriptListBox->currentRow();
1252 sb->ScriptListBox->takeItem(Pos);
1253 if (sb->ScriptListBox->count() == 0)
1255 sb->ArgStack->setCurrentWidget(argBlank);
1264 if (Pos == sb->ScriptListBox->count())
1268 sb->ScriptListBox->setCurrentRow(Pos);
1273void ScriptBuilder::slotAddFunction()
1278 if (currentItem ==
nullptr || currentItem->
parent() ==
nullptr)
1281 for (
auto &
sc : KStarsFunctionList)
1283 if (
sc->prototype() == currentItem->
text(0))
1290 for (
auto &
sc : SimClockFunctionList)
1292 if (
sc->prototype() == currentItem->
text(0))
1299 if (found ==
nullptr)
1302 setUnsavedChanges(
true);
1304 int Pos = sb->ScriptListBox->currentRow() + 1;
1307 sb->ScriptListBox->insertItem(Pos, ScriptList[Pos]->
name());
1308 sb->ScriptListBox->setCurrentRow(Pos);
1312void ScriptBuilder::slotMoveFunctionUp()
1314 if (sb->ScriptListBox->currentRow() > 0)
1316 setUnsavedChanges(
true);
1319 QString t = sb->ScriptListBox->currentItem()->text();
1320 unsigned int n = sb->ScriptListBox->currentRow();
1325 sb->ScriptListBox->takeItem(n);
1326 sb->ScriptListBox->insertItem(n - 1, t);
1327 sb->ScriptListBox->setCurrentRow(n - 1);
1332void ScriptBuilder::slotMoveFunctionDown()
1334 if (sb->ScriptListBox->currentRow() > -1 && sb->ScriptListBox->currentRow() < ((
int)sb->ScriptListBox->count()) - 1)
1336 setUnsavedChanges(
true);
1338 QString t = sb->ScriptListBox->currentItem()->text();
1339 unsigned int n = sb->ScriptListBox->currentRow();
1344 sb->ScriptListBox->takeItem(n);
1345 sb->ScriptListBox->insertItem(n + 1, t);
1346 sb->ScriptListBox->setCurrentRow(n + 1);
1351void ScriptBuilder::slotArgWidget()
1354 if (sb->ScriptListBox->currentRow() == -1)
1361 else if (sb->ScriptListBox->count() == 1)
1368 else if (sb->ScriptListBox->currentRow() == 0)
1375 else if (sb->ScriptListBox->currentRow() == ((
int)sb->ScriptListBox->count()) - 1)
1391 if (sb->ScriptListBox->count())
1400 setUnsavedChanges(
false);
1404 if (sb->ScriptListBox->currentRow() > -1 && sb->ScriptListBox->currentRow() < ((
int)sb->ScriptListBox->count()))
1406 unsigned int n = sb->ScriptListBox->currentRow();
1409 checkForChanges =
false;
1411 if (
sf->name() ==
"lookTowards")
1413 sb->ArgStack->setCurrentWidget(argLookToward);
1415 argLookToward->FocusEdit->setEditText(s);
1417 else if (
sf->name() ==
"addLabel" ||
sf->name() ==
"removeLabel" ||
sf->name() ==
"addTrail" ||
1418 sf->name() ==
"removeTrail")
1420 sb->ArgStack->setCurrentWidget(argFindObject);
1422 argFindObject->NameEdit->setText(s);
1424 else if (
sf->name() ==
"setRaDec")
1427 double r(0.0), d(0.0);
1430 sb->ArgStack->setCurrentWidget(argSetRaDec);
1432 ok = !
sf->argVal(0).isEmpty();
1434 r =
sf->argVal(0).toDouble(&ok);
1436 argSetRaDec->RABox->clear();
1440 argSetRaDec->RABox->
show(ra);
1443 ok = !
sf->argVal(1).isEmpty();
1445 d =
sf->argVal(1).toDouble(&ok);
1447 argSetRaDec->DecBox->clear();
1449 argSetRaDec->DecBox->
show(
dms(d));
1451 else if (
sf->name() ==
"setAltAz")
1454 double x(0.0),
y(0.0);
1456 sb->ArgStack->setCurrentWidget(argSetAltAz);
1458 ok = !
sf->argVal(0).isEmpty();
1460 y =
sf->argVal(0).toDouble(&ok);
1462 argSetAltAz->AzBox->clear();
1466 argSetAltAz->AltBox->clear();
1468 ok = !
sf->argVal(1).isEmpty();
1469 x =
sf->argVal(1).toDouble(&ok);
1473 else if (
sf->name() ==
"zoomIn")
1475 sb->ArgStack->setCurrentWidget(argBlank);
1478 else if (
sf->name() ==
"zoomOut")
1480 sb->ArgStack->setCurrentWidget(argBlank);
1483 else if (
sf->name() ==
"defaultZoom")
1485 sb->ArgStack->setCurrentWidget(argBlank);
1488 else if (
sf->name() ==
"zoom")
1490 sb->ArgStack->setCurrentWidget(argZoom);
1492 sf->argVal(0).toDouble(&ok);
1494 argZoom->ZoomBox->setText(
sf->argVal(0));
1496 argZoom->ZoomBox->setText(
"2000.");
1498 else if (
sf->name() ==
"exportImage")
1500 sb->ArgStack->setCurrentWidget(argExportImage);
1509 argExportImage->ExportWidth->setValue(w);
1510 argExportImage->ExportHeight->setValue(h);
1514 argExportImage->ExportWidth->setValue(SkyMap::Instance()->
width());
1515 argExportImage->ExportHeight->setValue(SkyMap::Instance()->
height());
1518 else if (
sf->name() ==
"printImage")
1520 if (
sf->argVal(0) ==
i18n(
"true"))
1521 argPrintImage->UsePrintDialog->setChecked(
true);
1523 argPrintImage->UsePrintDialog->setChecked(
false);
1524 if (
sf->argVal(1) ==
i18n(
"true"))
1525 argPrintImage->UseChartColors->setChecked(
true);
1527 argPrintImage->UseChartColors->setChecked(
false);
1529 else if (
sf->name() ==
"setLocalTime")
1531 sb->ArgStack->setCurrentWidget(argSetLocalTime);
1533 int year = 0, month = 0, day = 0, hour = 0, min = 0,
sec = 0;
1535 year =
sf->argVal(0).
toInt(&ok);
1537 month =
sf->argVal(1).
toInt(&ok);
1539 day =
sf->argVal(2).
toInt(&ok);
1541 argSetLocalTime->DateWidget->setDate(
QDate(year, month, day));
1545 hour =
sf->argVal(3).
toInt(&ok);
1546 if (
sf->argVal(3).isEmpty())
1549 min =
sf->argVal(4).
toInt(&ok);
1553 argSetLocalTime->TimeBox->setTime(
QTime(hour, min,
sec));
1557 else if (
sf->name() ==
"waitFor")
1559 sb->ArgStack->setCurrentWidget(argWaitFor);
1563 argWaitFor->DelayBox->setValue(
sec);
1565 argWaitFor->DelayBox->setValue(0);
1567 else if (
sf->name() ==
"waitForKey")
1569 sb->ArgStack->setCurrentWidget(argWaitForKey);
1570 if (
sf->argVal(0).length() == 1 ||
sf->argVal(0).toLower() ==
"space")
1571 argWaitForKey->WaitKeyEdit->setText(
sf->argVal(0));
1573 argWaitForKey->WaitKeyEdit->setText(
QString());
1575 else if (
sf->name() ==
"setTracking")
1577 sb->ArgStack->setCurrentWidget(argSetTracking);
1578 if (
sf->argVal(0) ==
i18n(
"true"))
1579 argSetTracking->CheckTrack->setChecked(
true);
1581 argSetTracking->CheckTrack->setChecked(
false);
1583 else if (
sf->name() ==
"changeViewOption")
1585 sb->ArgStack->setCurrentWidget(argChangeViewOption);
1586 argChangeViewOption->OptionName->setCurrentIndex(argChangeViewOption->OptionName->findText(
sf->argVal(0)));
1587 argChangeViewOption->OptionValue->setText(
sf->argVal(1));
1589 else if (
sf->name() ==
"setGeoLocation")
1591 sb->ArgStack->setCurrentWidget(argSetGeoLocation);
1592 argSetGeoLocation->CityName->setText(
sf->argVal(0));
1593 argSetGeoLocation->ProvinceName->setText(
sf->argVal(1));
1594 argSetGeoLocation->CountryName->setText(
sf->argVal(2));
1596 else if (
sf->name() ==
"setColor")
1598 sb->ArgStack->setCurrentWidget(argSetColor);
1599 if (
sf->argVal(0).isEmpty())
1600 sf->setArg(0,
"SkyColor");
1601 argSetColor->ColorName->setCurrentIndex(
1602 argSetColor->ColorName->findText(KStarsData::Instance()->colorScheme()->nameFromKey(
sf->argVal(0))));
1603 argSetColor->ColorValue->setColor(
QColor(
sf->argVal(1).remove(
'\\')));
1605 else if (
sf->name() ==
"loadColorScheme")
1607 sb->ArgStack->setCurrentWidget(argLoadColorScheme);
1608 argLoadColorScheme->SchemeList->setCurrentItem(
1609 argLoadColorScheme->SchemeList->findItems(
sf->argVal(0).remove(
'\"'),
Qt::MatchExactly).at(0));
1611 else if (
sf->name() ==
"stop")
1613 sb->ArgStack->setCurrentWidget(argBlank);
1616 else if (
sf->name() ==
"start")
1618 sb->ArgStack->setCurrentWidget(argBlank);
1621 else if (
sf->name() ==
"setClockScale")
1623 sb->ArgStack->setCurrentWidget(argTimeScale);
1625 double ts =
sf->argVal(0).toDouble(&ok);
1627 argTimeScale->TimeScale->tsbox()->changeScale(
float(
ts));
1629 argTimeScale->TimeScale->tsbox()->changeScale(0.0);
1632 checkForChanges =
true;
1636void ScriptBuilder::slotShowDoc()
1641 if (currentItem ==
nullptr || currentItem->
parent() ==
nullptr)
1644 for (
auto &
sc : KStarsFunctionList)
1646 if (
sc->prototype() == currentItem->
text(0))
1653 for (
auto &
sc : SimClockFunctionList)
1655 if (
sc->prototype() == currentItem->
text(0))
1662 if (found ==
nullptr)
1670 sb->FuncDoc->setHtml(found->description());
1674void ScriptBuilder::slotFindCity()
1680 if (ld->selectedCity())
1683 argSetGeoLocation->CityName->setText(ld->selectedCityName());
1684 if (!ld->selectedProvinceName().isEmpty())
1686 argSetGeoLocation->ProvinceName->setText(ld->selectedProvinceName());
1690 argSetGeoLocation->ProvinceName->clear();
1692 argSetGeoLocation->CountryName->setText(ld->selectedCountryName());
1695 if (
sf->name() ==
"setGeoLocation")
1697 setUnsavedChanges(
true);
1699 sf->setArg(0, ld->selectedCityName());
1700 sf->setArg(1, ld->selectedProvinceName());
1701 sf->setArg(2, ld->selectedCountryName());
1705 warningMismatch(
"setGeoLocation");
1712void ScriptBuilder::slotFindObject()
1716 setUnsavedChanges(
true);
1718 if (
sender() == argLookToward->FindButton)
1719 argLookToward->FocusEdit->setEditText(FindDialog::Instance()->targetObject()->
name());
1721 argFindObject->NameEdit->setText(FindDialog::Instance()->targetObject()->
name());
1725void ScriptBuilder::slotShowOptions()
1730 argChangeViewOption->OptionName->setCurrentIndex(
1731 argChangeViewOption->OptionName->findText(otv->optionsList()->
currentItem()->
text(0)));
1735void ScriptBuilder::slotLookToward()
1739 if (
sf->name() ==
"lookTowards")
1741 setUnsavedChanges(
true);
1743 sf->setArg(0, argLookToward->FocusEdit->currentText());
1748 warningMismatch(
"lookTowards");
1752void ScriptBuilder::slotArgFindObject()
1756 if (
sf->name() ==
"addLabel" ||
sf->name() ==
"removeLabel" ||
sf->name() ==
"addTrail" ||
1757 sf->name() ==
"removeTrail")
1759 setUnsavedChanges(
true);
1761 sf->setArg(0, argFindObject->NameEdit->text());
1766 warningMismatch(
sf->name());
1770void ScriptBuilder::slotRa()
1774 if (
sf->name() ==
"setRaDec")
1777 if (argSetRaDec->RABox->text().isEmpty())
1781 dms ra = argSetRaDec->RABox->createDms(&ok);
1784 setUnsavedChanges(
true);
1787 if (!
sf->argVal(1).isEmpty())
1793 sf->setValid(
false);
1798 warningMismatch(
"setRaDec");
1802void ScriptBuilder::slotDec()
1806 if (
sf->name() ==
"setRaDec")
1809 if (argSetRaDec->DecBox->text().isEmpty())
1813 dms dec = argSetRaDec->DecBox->createDms(&ok);
1816 setUnsavedChanges(
true);
1819 if (!
sf->argVal(0).isEmpty())
1825 sf->setValid(
false);
1830 warningMismatch(
"setRaDec");
1834void ScriptBuilder::slotAz()
1838 if (
sf->name() ==
"setAltAz")
1841 if (argSetAltAz->AzBox->text().isEmpty())
1845 dms az = argSetAltAz->AzBox->createDms(&ok);
1848 setUnsavedChanges(
true);
1850 if (!
sf->argVal(0).isEmpty())
1856 sf->setValid(
false);
1861 warningMismatch(
"setAltAz");
1865void ScriptBuilder::slotAlt()
1869 if (
sf->name() ==
"setAltAz")
1872 if (argSetAltAz->AltBox->text().isEmpty())
1876 dms alt = argSetAltAz->AltBox->createDms(&ok);
1879 setUnsavedChanges(
true);
1882 if (!
sf->argVal(1).isEmpty())
1888 sf->setValid(
false);
1893 warningMismatch(
"setAltAz");
1897void ScriptBuilder::slotChangeDate()
1901 if (
sf->name() ==
"setLocalTime")
1903 setUnsavedChanges(
true);
1905 QDate date = argSetLocalTime->DateWidget->date();
1910 if (!
sf->argVal(3).isEmpty())
1915 warningMismatch(
"setLocalTime");
1919void ScriptBuilder::slotChangeTime()
1923 if (
sf->name() ==
"setLocalTime")
1925 setUnsavedChanges(
true);
1927 QTime time = argSetLocalTime->TimeBox->time();
1932 if (!
sf->argVal(0).isEmpty())
1937 warningMismatch(
"setLocalTime");
1941void ScriptBuilder::slotWaitFor()
1945 if (
sf->name() ==
"waitFor")
1948 int delay = argWaitFor->DelayBox->text().toInt(&ok);
1952 setUnsavedChanges(
true);
1954 sf->setArg(0,
QString(
"%1").arg(delay));
1959 sf->setValid(
false);
1964 warningMismatch(
"waitFor");
1968void ScriptBuilder::slotWaitForKey()
1972 if (
sf->name() ==
"waitForKey")
1974 QString sKey = argWaitForKey->WaitKeyEdit->text().trimmed();
1978 if (
sKey.length() == 1 ||
sKey ==
"space")
1980 setUnsavedChanges(
true);
1987 sf->setValid(
false);
1992 warningMismatch(
"waitForKey");
1996void ScriptBuilder::slotTracking()
2000 if (
sf->name() ==
"setTracking")
2002 setUnsavedChanges(
true);
2004 sf->setArg(0, (argSetTracking->CheckTrack->isChecked() ?
i18n(
"true") :
i18n(
"false")));
2009 warningMismatch(
"setTracking");
2013void ScriptBuilder::slotViewOption()
2017 if (
sf->name() ==
"changeViewOption")
2019 if (argChangeViewOption->OptionName->currentIndex() >= 0 && argChangeViewOption->OptionValue->text().length())
2021 setUnsavedChanges(
true);
2023 sf->setArg(0, argChangeViewOption->OptionName->currentText());
2024 sf->setArg(1, argChangeViewOption->OptionValue->text());
2029 sf->setValid(
false);
2034 warningMismatch(
"changeViewOption");
2038void ScriptBuilder::slotChangeCity()
2042 if (
sf->name() ==
"setGeoLocation")
2044 QString city = argSetGeoLocation->CityName->text();
2048 setUnsavedChanges(
true);
2050 sf->setArg(0, city);
2051 if (
sf->argVal(2).length())
2057 sf->setValid(
false);
2062 warningMismatch(
"setGeoLocation");
2066void ScriptBuilder::slotChangeProvince()
2070 if (
sf->name() ==
"setGeoLocation")
2072 QString province = argSetGeoLocation->ProvinceName->text();
2076 setUnsavedChanges(
true);
2078 sf->setArg(1, province);
2079 if (
sf->argVal(0).length() &&
sf->argVal(2).length())
2090 warningMismatch(
"setGeoLocation");
2094void ScriptBuilder::slotChangeCountry()
2098 if (
sf->name() ==
"setGeoLocation")
2104 setUnsavedChanges(
true);
2106 sf->setArg(2, country);
2107 if (
sf->argVal(0).length())
2113 sf->setValid(
false);
2118 warningMismatch(
"setGeoLocation");
2122void ScriptBuilder::slotTimeScale()
2126 if (
sf->name() ==
"setClockScale")
2128 setUnsavedChanges(
true);
2130 sf->setArg(0,
QString(
"%1").arg(argTimeScale->TimeScale->tsbox()->timeScale()));
2135 warningMismatch(
"setClockScale");
2139void ScriptBuilder::slotZoom()
2143 if (
sf->name() ==
"zoom")
2145 setUnsavedChanges(
true);
2148 argZoom->ZoomBox->text().toDouble(&ok);
2151 sf->setArg(0, argZoom->ZoomBox->text());
2157 warningMismatch(
"zoom");
2161void ScriptBuilder::slotExportImage()
2165 if (
sf->name() ==
"exportImage")
2167 setUnsavedChanges(
true);
2169 sf->setArg(0, argExportImage->ExportFileName->url().url());
2170 sf->setArg(1,
QString(
"%1").arg(argExportImage->ExportWidth->value()));
2171 sf->setArg(2,
QString(
"%1").arg(argExportImage->ExportHeight->value()));
2176 warningMismatch(
"exportImage");
2180void ScriptBuilder::slotPrintImage()
2184 if (
sf->name() ==
"printImage")
2186 setUnsavedChanges(
true);
2188 sf->setArg(0, (argPrintImage->UsePrintDialog->isChecked() ?
i18n(
"true") :
i18n(
"false")));
2189 sf->setArg(1, (argPrintImage->UseChartColors->isChecked() ?
i18n(
"true") :
i18n(
"false")));
2194 warningMismatch(
"exportImage");
2198void ScriptBuilder::slotChangeColorName()
2202 if (
sf->name() ==
"setColor")
2204 setUnsavedChanges(
true);
2206 argSetColor->ColorValue->setColor(KStarsData::Instance()->colorScheme()->colorAt(argSetColor->ColorName->currentIndex()));
2207 sf->setArg(0, KStarsData::Instance()->colorScheme()->keyAt(argSetColor->ColorName->currentIndex()));
2208 QString cname(argSetColor->ColorValue->color().name());
2215 warningMismatch(
"setColor");
2219void ScriptBuilder::slotChangeColor()
2223 if (
sf->name() ==
"setColor")
2225 setUnsavedChanges(
true);
2227 sf->setArg(0, KStarsData::Instance()->colorScheme()->keyAt(argSetColor->ColorName->currentIndex()));
2228 QString cname(argSetColor->ColorValue->color().name());
2235 warningMismatch(
"setColor");
2239void ScriptBuilder::slotLoadColorScheme()
2243 if (
sf->name() ==
"loadColorScheme")
2245 setUnsavedChanges(
true);
2247 sf->setArg(0,
'\"' + argLoadColorScheme->SchemeList->currentItem()->text() +
'\"');
2252 warningMismatch(
"loadColorScheme");
2256void ScriptBuilder::slotClose()
2260 if (!UnsavedChanges)
2263 sb->ScriptListBox->clear();
2264 sb->ArgStack->setCurrentWidget(argBlank);
2272void ScriptBuilder::slotINDIStartDeviceName()
2276 if (
sf->name() ==
"startINDI" )
2278 setUnsavedChanges(
true );
2281 sf->setArg(1,
argStartINDI->LocalButton->isChecked() ?
"true" :
"false");
2286 warningMismatch(
"startINDI" );
2291void ScriptBuilder::slotINDIStartDeviceMode()
2296 if (
sf->name() ==
"startINDI" )
2298 setUnsavedChanges(
true );
2300 sf->setArg(1,
argStartINDI->LocalButton->isChecked() ?
"true" :
"false");
2305 warningMismatch(
"startINDI" );
2310void ScriptBuilder::slotINDISetDevice()
2315 if (
sf->name() ==
"setINDIDevice" )
2317 setUnsavedChanges(
true );
2324 warningMismatch(
"startINDI" );
2328void ScriptBuilder::slotINDIShutdown()
2333 if (
sf->name() ==
"shutdownINDI" )
2337 sf->setValid(
false);
2342 setUnsavedChanges(
true );
2349 warningMismatch(
"shutdownINDI" );
2354void ScriptBuilder::slotINDISwitchDeviceConnection()
2359 if (
sf->name() ==
"switchINDI" )
2362 if (
sf->argVal(0) != (
argSwitchINDI->OnButton->isChecked() ?
"true" :
"false"))
2363 setUnsavedChanges(
true );
2365 sf->setArg(0,
argSwitchINDI->OnButton->isChecked() ?
"true" :
"false");
2370 warningMismatch(
"switchINDI" );
2375void ScriptBuilder::slotINDISetPortDevicePort()
2379 if (
sf->name() ==
"setINDIPort" )
2384 sf->setValid(
false);
2389 setUnsavedChanges(
true );
2396 warningMismatch(
"setINDIPort" );
2401void ScriptBuilder::slotINDISetTargetCoordDeviceRA()
2405 if (
sf->name() ==
"setINDITargetCoord" )
2410 sf->setValid(
false);
2420 setUnsavedChanges(
true );
2423 if ( ( !
sf->argVal(1).isEmpty() ))
2424 sf->setValid(
true );
2426 sf->setValid(
false);
2432 sf->setValid(
false );
2437 warningMismatch(
"setINDITargetCoord" );
2442void ScriptBuilder::slotINDISetTargetCoordDeviceDEC()
2446 if (
sf->name() ==
"setINDITargetCoord" )
2451 sf->setValid(
false);
2460 if (
sf->argVal(1) !=
QString(
"%1" ).arg(
dec.Degrees() ))
2461 setUnsavedChanges(
true );
2464 if ( ( !
sf->argVal(0).isEmpty() ))
2465 sf->setValid(
true );
2467 sf->setValid(
false);
2473 sf->setValid(
false );
2478 warningMismatch(
"setINDITargetCoord" );
2483void ScriptBuilder::slotINDIsetCoreProperty(SequenceJob::SJ_TargetName,
TargetName()
2488 if (
sf->name() ==
"setINDITargetName" )
2490 if (argsetCoreProperty(SequenceJob::SJ_TargetName,INDI->targetName->text().isEmpty())
2492 sf->setValid(false);
2497 setUnsavedChanges(
true );
2504 warningMismatch(
"setINDITargetName" );
2509void ScriptBuilder::slotINDISetActionName()
2513 if (
sf->name() ==
"setINDIAction" )
2517 sf->setValid(
false);
2522 setUnsavedChanges(
true );
2529 warningMismatch(
"setINDIAction" );
2534void ScriptBuilder::slotINDIWaitForActionName()
2538 if (
sf->name() ==
"waitForINDIAction" )
2542 sf->setValid(
false);
2547 setUnsavedChanges(
true );
2554 warningMismatch(
"waitForINDIAction" );
2559void ScriptBuilder::slotINDISetFocusSpeed()
2563 if (
sf->name() ==
"setINDIFocusSpeed" )
2567 setUnsavedChanges(
true );
2574 warningMismatch(
"setINDIFocusSpeed" );
2579void ScriptBuilder::slotINDIStartFocusDirection()
2583 if (
sf->name() ==
"startINDIFocus" )
2586 setUnsavedChanges(
true );
2593 warningMismatch(
"startINDIFocus" );
2598void ScriptBuilder::slotINDISetFocusTimeout()
2602 if (
sf->name() ==
"setINDIFocusTimeout" )
2605 setUnsavedChanges(
true );
2612 warningMismatch(
"setINDIFocusTimeout" );
2617void ScriptBuilder::slotINDISetGeoLocationDeviceLong()
2621 if (
sf->name() ==
"setINDIGeoLocation" )
2626 sf->setValid(
false);
2636 setUnsavedChanges(
true );
2639 if ( !
sf->argVal(1).isEmpty() )
2640 sf->setValid(
true );
2642 sf->setValid(
false);
2648 sf->setValid(
false );
2653 warningMismatch(
"setINDIGeoLocation" );
2658void ScriptBuilder::slotINDISetGeoLocationDeviceLat()
2662 if (
sf->name() ==
"setINDIGeoLocation" )
2667 sf->setValid(
false);
2677 setUnsavedChanges(
true );
2680 if ( !
sf->argVal(0).isEmpty() )
2681 sf->setValid(
true );
2683 sf->setValid(
false);
2689 sf->setValid(
false );
2694 warningMismatch(
"setINDIGeoLocation" );
2699void ScriptBuilder::slotINDIStartExposureTimeout()
2703 if (
sf->name() ==
"startINDIExposure" )
2707 setUnsavedChanges(
true );
2714 warningMismatch(
"startINDIExposure" );
2719void ScriptBuilder::slotINDISetUTC()
2723 if (
sf->name() ==
"setINDIUTC" )
2728 sf->setValid(
false);
2733 setUnsavedChanges(
true );
2740 warningMismatch(
"setINDIUTC" );
2745void ScriptBuilder::slotINDISetScopeAction()
2749 if (
sf->name() ==
"setINDIScopeAction" )
2753 setUnsavedChanges(
true );
2756 sf->setINDIProperty(
"CHECK");
2761 warningMismatch(
"setINDIScopeAction" );
2766void ScriptBuilder::slotINDISetFrameType()
2770 if (
sf->name() ==
"setINDIFrameType" )
2774 setUnsavedChanges(
true );
2781 warningMismatch(
"setINDIFrameType" );
2786void ScriptBuilder::slotINDISetCCDTemp()
2790 if (
sf->name() ==
"setINDICCDTemp" )
2794 setUnsavedChanges(
true );
2801 warningMismatch(
"setINDICCDTemp" );
2806void ScriptBuilder::slotINDISetFilterNum()
2811 if (
sf->name() ==
"setINDIFilterNum" )
2815 setUnsavedChanges(
true );
2822 warningMismatch(
"setINDIFilterNum" );
static KStarsDateTime currentDateTime()
static KStars * Instance()
Dialog for changing the geographic location of the observer.
An angle, stored as degrees, but expressible in many ways.
const double & Degrees() const
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
KCOREADDONS_EXPORT Result match(QStringView pattern, QStringView str)
KIOCORE_EXPORT ChmodJob * chmod(const KFileItemList &lstItems, int permissions, int mask, const QString &newOwner, const QString &newGroup, bool recursive, JobFlags flags=DefaultFlags)
KIOCORE_EXPORT StoredTransferJob * storedHttpPost(const QByteArray &arr, const QUrl &url, JobFlags flags=DefaultFlags)
KIOCORE_EXPORT CopyJob * copy(const QList< QUrl > &src, const QUrl &dest, JobFlags flags=DefaultFlags)
QString path(const QString &relativePath)
ButtonCode warningContinueCancel(QWidget *parent, const QString &text, const QString &title=QString(), const KGuiItem &buttonContinue=KStandardGuiItem::cont(), const KGuiItem &buttonCancel=KStandardGuiItem::cancel(), const QString &dontAskAgainName=QString(), Options options=Notify)
QString name(StandardShortcut id)
KI18NLOCALEDATA_EXPORT KCountry country(const char *ianaId)
QString applicationDirPath()
QByteArray encodeName(const QString &fileName)
bool exists() const const
bool open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags)
void setFileName(const QString &name)
virtual void close() override
QUrl getOpenFileUrl(QWidget *parent, const QString &caption, const QUrl &dir, const QString &filter, QString *selectedFilter, Options options, const QStringList &supportedSchemes)
QUrl getSaveFileUrl(QWidget *parent, const QString &caption, const QUrl &dir, const QString &filter, QString *selectedFilter, Options options, const QStringList &supportedSchemes)
QIcon fromTheme(const QString &name)
void append(QList< T > &&value)
const_reference at(qsizetype i) const const
iterator insert(const_iterator before, parameter_type value)
bool isEmpty() const const
void removeAt(qsizetype i)
QObject * parent() const const
QObject * sender() const const
void setProcessEnvironment(const QProcessEnvironment &environment)
void start(OpenMode mode)
QProcess::ProcessState state() const const
bool waitForFinished(int msecs)
bool waitForStarted(int msecs)
void insert(const QProcessEnvironment &e)
QProcessEnvironment systemEnvironment()
QString value(const QString &name, const QString &defaultValue) const const
bool hasNext() const const
QRegularExpressionMatch next()
QString arg(Args &&... args) const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
qsizetype indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
qsizetype lastIndexOf(QChar ch, Qt::CaseSensitivity cs) const const
QString left(qsizetype n) const const
qsizetype length() const const
QString mid(qsizetype position, qsizetype n) const const
QString trimmed() const const
QTextStream & dec(QTextStream &stream)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
void setRootIsDecorated(bool show)
void setColumnWidth(int column, int width)
QString text(int column) const const
QString fileName(ComponentFormattingOptions options) const const
bool isEmpty() const const
bool isLocalFile() const const
bool isValid() const const
QString toLocalFile() const const
QString url(FormattingOptions options) const const