File indexing completed on 2024-04-14 03:43:25

0001 /*
0002     SPDX-FileCopyrightText: 2003 Jason Harris <kstars@30doradus.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "scriptargwidgets.h"
0010 #include "ui_scriptbuilder.h"
0011 #include "ui_scriptnamedialog.h"
0012 #include "ui_optionstreeview.h"
0013 
0014 #include <QDialog>
0015 #include <QUrl>
0016 
0017 #include <memory>
0018 
0019 class QTreeWidget;
0020 class QTreeWidgetItem;
0021 class QTextStream;
0022 
0023 class ScriptFunction;
0024 
0025 class OptionsTreeViewWidget : public QFrame, public Ui::OptionsTreeView
0026 {
0027         Q_OBJECT
0028     public:
0029         explicit OptionsTreeViewWidget(QWidget *p);
0030 };
0031 
0032 class OptionsTreeView : public QDialog
0033 {
0034         Q_OBJECT
0035     public:
0036         explicit OptionsTreeView(QWidget *p);
0037         virtual ~OptionsTreeView() override = default;
0038 
0039         QTreeWidget *optionsList()
0040         {
0041             return otvw->OptionsList;
0042         }
0043         void resizeColumns();
0044 
0045     private:
0046         std::unique_ptr<OptionsTreeViewWidget> otvw;
0047 };
0048 
0049 class ScriptNameWidget : public QFrame, public Ui::ScriptNameDialog
0050 {
0051         Q_OBJECT
0052     public:
0053         explicit ScriptNameWidget(QWidget *p);
0054 };
0055 
0056 class ScriptNameDialog : public QDialog
0057 {
0058         Q_OBJECT
0059     public:
0060         explicit ScriptNameDialog(QWidget *p);
0061         ~ScriptNameDialog() override;
0062         QString scriptName() const
0063         {
0064             return snw->ScriptName->text();
0065         }
0066         QString authorName() const
0067         {
0068             return snw->AuthorName->text();
0069         }
0070 
0071     private slots:
0072         void slotEnableOkButton();
0073 
0074     private:
0075         ScriptNameWidget *snw { nullptr };
0076         QPushButton *okB { nullptr };
0077 };
0078 
0079 class ScriptBuilderUI : public QFrame, public Ui::ScriptBuilder
0080 {
0081         Q_OBJECT
0082     public:
0083         explicit ScriptBuilderUI(QWidget *p);
0084 };
0085 
0086 /**
0087  * @class ScriptBuilder
0088  * A GUI tool for building behavioral DBus scripts for KStars.
0089  *
0090  * @author Jason Harris
0091  * @version 1.0
0092  */
0093 class ScriptBuilder : public QDialog
0094 {
0095         Q_OBJECT
0096     public:
0097         explicit ScriptBuilder(QWidget *parent);
0098         ~ScriptBuilder() override;
0099 
0100         bool unsavedChanges() const
0101         {
0102             return UnsavedChanges;
0103         }
0104         void setUnsavedChanges(bool b = true);
0105         void saveWarning();
0106         void readScript(QTextStream &istream);
0107         void writeScript(QTextStream &ostream);
0108         bool parseFunction(const QString &fn_name, const QString &fn_args);
0109 
0110     public slots:
0111         void slotAddFunction();
0112         void slotMoveFunctionUp();
0113         void slotMoveFunctionDown();
0114         void slotArgWidget();
0115         void slotShowDoc();
0116 
0117         void slotNew();
0118         void slotOpen();
0119         void slotSave();
0120         void slotSaveAs();
0121         void slotRunScript();
0122         void slotClose();
0123 
0124         void slotCopyFunction();
0125         void slotRemoveFunction();
0126 
0127         void slotFindCity();
0128         void slotFindObject();
0129         void slotShowOptions();
0130         void slotLookToward();
0131         void slotArgFindObject();
0132         void slotRa();
0133         void slotDec();
0134         void slotAz();
0135         void slotAlt();
0136         void slotChangeDate();
0137         void slotChangeTime();
0138         void slotWaitFor();
0139         void slotWaitForKey();
0140         void slotTracking();
0141         void slotViewOption();
0142         void slotChangeCity();
0143         void slotChangeProvince();
0144         void slotChangeCountry();
0145         void slotTimeScale();
0146         void slotZoom();
0147         void slotExportImage();
0148         void slotPrintImage();
0149         void slotChangeColor();
0150         void slotChangeColorName();
0151         void slotLoadColorScheme();
0152 
0153 #if 0
0154         void slotINDIWaitCheck(bool toggleState);
0155         void slotINDIFindObject();
0156         void slotINDIStartDeviceName();
0157         void slotINDIStartDeviceMode();
0158         void slotINDISetDevice();
0159         void slotINDIShutdown();
0160         void slotINDISwitchDeviceConnection();
0161         void slotINDISetPortDevicePort();
0162         void slotINDISetTargetCoordDeviceRA();
0163         void slotINDISetTargetCoordDeviceDEC();
0164         void slotINDISetTargetNameTargetName();
0165         void slotINDISetActionName();
0166         void slotINDIWaitForActionName();
0167         void slotINDISetFocusSpeed();
0168         void slotINDIStartFocusDirection();
0169         void slotINDISetFocusTimeout();
0170         void slotINDISetGeoLocationDeviceLong();
0171         void slotINDISetGeoLocationDeviceLat();
0172         void slotINDIStartExposureTimeout();
0173         void slotINDISetUTC();
0174         void slotINDISetScopeAction();
0175         void slotINDISetFrameType();
0176         void slotINDISetCCDTemp();
0177         void slotINDISetFilterNum();
0178 #endif
0179 
0180     private:
0181         void initViewOptions();
0182         void warningMismatch(const QString &expected) const;
0183 
0184         ScriptBuilderUI *sb { nullptr };
0185 
0186         QList<ScriptFunction *> KStarsFunctionList;
0187         QList<ScriptFunction *> SimClockFunctionList;
0188 
0189 #if 0
0190         QList<ScriptFunction *> INDIFunctionList;
0191 #endif
0192 
0193         QList<ScriptFunction *> ScriptList;
0194 
0195         QWidget *argBlank { nullptr };
0196         ArgLookToward *argLookToward { nullptr };
0197         ArgFindObject *argFindObject { nullptr };
0198         ArgSetRaDec *argSetRaDec { nullptr };
0199         ArgSetAltAz *argSetAltAz { nullptr };
0200         ArgSetLocalTime *argSetLocalTime { nullptr };
0201         ArgWaitFor *argWaitFor { nullptr };
0202         ArgWaitForKey *argWaitForKey { nullptr };
0203         ArgSetTrack *argSetTracking { nullptr };
0204         ArgChangeViewOption *argChangeViewOption { nullptr };
0205         ArgSetGeoLocation *argSetGeoLocation { nullptr };
0206         ArgTimeScale *argTimeScale { nullptr };
0207         ArgZoom *argZoom { nullptr };
0208         ArgExportImage *argExportImage { nullptr };
0209         ArgPrintImage *argPrintImage { nullptr };
0210         ArgSetColor *argSetColor { nullptr };
0211         ArgLoadColorScheme *argLoadColorScheme { nullptr };
0212 
0213 #if 0
0214         ArgStartINDI * argStartINDI;
0215         ArgSetDeviceINDI * argSetDeviceINDI;
0216         ArgShutdownINDI * argShutdownINDI;
0217         ArgSwitchINDI * argSwitchINDI;
0218         ArgSetPortINDI * argSetPortINDI;
0219         ArgSetTargetCoordINDI * argSetTargetCoordINDI;
0220         ArgSetTargetNameINDI * argSetTargetNameINDI;
0221         ArgSetActionINDI * argSetActionINDI;
0222         ArgSetActionINDI * argWaitForActionINDI;
0223         ArgSetFocusSpeedINDI * argSetFocusSpeedINDI;
0224         ArgStartFocusINDI * argStartFocusINDI;
0225         ArgSetFocusTimeoutINDI * argSetFocusTimeoutINDI;
0226         ArgSetGeoLocationINDI * argSetGeoLocationINDI;
0227         ArgStartExposureINDI * argStartExposureINDI;
0228         ArgSetUTCINDI * argSetUTCINDI;
0229         ArgSetScopeActionINDI * argSetScopeActionINDI;
0230         ArgSetFrameTypeINDI * argSetFrameTypeINDI;
0231         ArgSetCCDTempINDI * argSetCCDTempINDI;
0232         ArgSetFilterNumINDI * argSetFilterNumINDI;
0233 #endif
0234 
0235         ScriptNameDialog *snd { nullptr };
0236         OptionsTreeView *otv { nullptr };
0237 
0238         QTreeWidgetItem *opsGUI { nullptr };
0239         QTreeWidgetItem *opsToolbar { nullptr };
0240         QTreeWidgetItem *opsShowObj { nullptr };
0241         QTreeWidgetItem *opsShowOther { nullptr };
0242         QTreeWidgetItem *opsCName { nullptr };
0243         QTreeWidgetItem *opsHide { nullptr };
0244         QTreeWidgetItem *opsSkymap { nullptr };
0245         QTreeWidgetItem *opsLimit { nullptr };
0246 
0247         bool UnsavedChanges { false };
0248         bool checkForChanges { false };
0249         QUrl currentFileURL;
0250         QString currentDir;
0251         QString currentScriptName, currentAuthor;
0252 };