File indexing completed on 2024-07-21 06:28:22

0001 /*
0002     SPDX-FileCopyrightText: 2003 Jasem Mutlaq <mutlaqja@ikarustech.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006     2004-01-15  INDI element is the most basic unit of the INDI KStars client.
0007 */
0008 
0009 #pragma once
0010 
0011 #include "indicommon.h"
0012 
0013 #include <indiproperty.h>
0014 
0015 #include <QDialog>
0016 #include <QHBoxLayout>
0017 
0018 /* Forward declaration */
0019 class QLineEdit;
0020 class QDoubleSpinBox;
0021 class QPushButton;
0022 
0023 class QHBoxLayout;
0024 class QSpacerItem;
0025 class QCheckBox;
0026 class QButtonGroup;
0027 class QSlider;
0028 
0029 class KLed;
0030 class KSqueezedTextLabel;
0031 
0032 class INDI_P;
0033 
0034 /**
0035  * @class INDI_E
0036  * INDI_E represents an INDI GUI element (Number, Text, Switch, Light, or BLOB) within an INDI property.
0037  * It is the most basic GUI representation of property elements.
0038  *
0039  * @author Jasem Mutlaq
0040  */
0041 class INDI_E : public QWidget
0042 {
0043         Q_OBJECT
0044     public:
0045         INDI_E(INDI_P *gProp, INDI::Property dProp);
0046 
0047         const QString &getLabel()
0048         {
0049             return label;
0050         }
0051         const QString &getName()
0052         {
0053             return name;
0054         }
0055 
0056         QString getWriteField();
0057         QString getReadField();
0058 
0059         void buildSwitch(QButtonGroup *groupB, ISwitch *sw);
0060         void buildMenuItem(ISwitch *sw);
0061         void buildText(IText *itp);
0062         void buildNumber(INumber *inp);
0063         void buildLight(ILight *ilp);
0064         void buildBLOB(IBLOB *ibp);
0065 
0066         // Updates GUI from data in INDI properties
0067         void syncSwitch();
0068         void syncText();
0069         void syncNumber();
0070         void syncLight();
0071 
0072         // Save GUI data in INDI properties
0073         void updateTP();
0074         void updateNP();
0075 
0076         void setText(const QString &newText);
0077         void setValue(double value);
0078 
0079         void setMin();
0080         void setMax();
0081 
0082         void setupElementLabel();
0083         void setupElementRead(int length);
0084         void setupElementWrite(int length);
0085         void setupElementScale(int length);
0086         void setupBrowseButton();
0087 
0088         bool getBLOBDirty()
0089         {
0090             return blobDirty;
0091         }
0092         void setBLOBDirty(bool isDirty)
0093         {
0094             blobDirty = isDirty;
0095         }
0096 
0097     public slots:
0098         void spinChanged(double value);
0099         void sliderChanged(int value);
0100         void browseBlob();
0101 
0102     private:
0103         /// Name
0104         QString name;
0105         /// Label is the name by default, unless specified
0106         QString label;
0107         /// Parent GUI property
0108         INDI_P *guiProp { nullptr };
0109         /// Parent DATA property
0110         INDI::Property dataProp;
0111         /// Horizontal layout
0112         QHBoxLayout *EHBox { nullptr };
0113         /// Label widget
0114         KSqueezedTextLabel *label_w { nullptr };
0115         /// Read field widget
0116         QLineEdit *read_w { nullptr };
0117         /// Write field widget
0118         QLineEdit *write_w { nullptr };
0119         /// Light led widget
0120         KLed *led_w { nullptr };
0121         /// Spinbox widget
0122         QDoubleSpinBox *spin_w { nullptr };
0123         /// Slider widget
0124         QSlider *slider_w { nullptr };
0125         /// Push button widget
0126         QPushButton *push_w { nullptr };
0127         /// Browse button widget
0128         QPushButton *browse_w { nullptr };
0129         /// Check box widget
0130         QCheckBox *check_w { nullptr };
0131         /// Horizontal spacer widget
0132         QSpacerItem *hSpacer { nullptr };
0133 
0134         ISwitch *sp { nullptr };
0135         INumber *np { nullptr };
0136         IText *tp { nullptr };
0137         ILight *lp { nullptr };
0138         IBLOB *bp { nullptr };
0139 
0140         bool blobDirty { false };
0141         /// Current text
0142         QString text;
0143 };