summaryrefslogtreecommitdiffstats
path: root/src/variant.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/variant.h')
-rw-r--r--src/variant.h175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/variant.h b/src/variant.h
new file mode 100644
index 0000000..8367026
--- /dev/null
+++ b/src/variant.h
@@ -0,0 +1,175 @@
+/***************************************************************************
+ * Copyright (C) 2003-2004 by David Saxton *
+ * david@bluehaze.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+
+#ifndef VARIANT_H
+#define VARIANT_H
+
+#include <qobject.h>
+#include <qvariant.h>
+
+class QColor;
+class QString;
+
+/**
+For information:
+QVariant::type() returns an enum for the current data type
+contained. e.g. returns QVariant::Color or QVariant::Rect
+@author Daniel Clarke
+@author David Saxton
+*/
+class Variant : public QObject
+{
+Q_OBJECT
+public:
+ class Type
+ {
+ public:
+ enum Value
+ {
+ None,
+ Int, // Integer
+ Raw, // QByteArray
+ Double, // Real number
+ String, // Editable string
+ Multiline, // String that may contain linebreaks
+ Select, // Selection of strings
+ Combo, // Editable combination of strings
+ FileName, // Filename
+ Color, // Color
+ Bool, // Boolean
+ VarName, // Variable name
+ Port, // Port name
+ Pin, // Pin name
+ PenStyle, // Pen Style
+ PenCapStyle, // Pen Cap Style
+ SevenSegment, // Pin Map for Seven Segment Display
+ KeyPad // Pin Map for Keypad
+ };
+ };
+
+ Variant( Type::Value type );
+ virtual ~Variant();
+
+ /**
+ * Returns the type of Variant (see Variant::Type::Value)
+ */
+ Variant::Type::Value type() const { return m_type; }
+ /**
+ * Sets the variant type
+ */
+ void setType( Type::Value type );
+ /**
+ * Returns the filter used for file dialogs (if this is of type Type::FileName)
+ */
+ QString filter() const { return m_filter; }
+ void setFilter( const QString & filter ) { m_filter = filter; }
+ /**
+ * The selection of colours to be used in the combo box - e.g.
+ * ColorCombo::LED.
+ * @see ColorCombo::ColorScheme
+ */
+ int colorScheme() const { return m_colorScheme; }
+ void setColorScheme( int colorScheme ) { m_colorScheme = colorScheme; }
+ /**
+ * This function is for convenience; it sets both the toolbar and editor
+ * caption.
+ */
+ void setCaption( const QString & caption ) { setToolbarCaption(caption); setEditorCaption(caption); }
+ /**
+ * This text is displayed to the left of the entry widget in the toolbar
+ */
+ QString toolbarCaption() const { return m_toolbarCaption; }
+ void setToolbarCaption( const QString & caption ) { m_toolbarCaption = caption; }
+ /**
+ * This text is displayed to the left of the entry widget in the item editor
+ */
+ QString editorCaption() const { return m_editorCaption; }
+ void setEditorCaption( const QString & caption ) { m_editorCaption = caption; }
+ /**
+ * Unit of number, (e.g. V (volts) / F (farads))
+ */
+ QString unit() const { return m_unit; }
+ void setUnit( const QString & unit ) { m_unit = unit; }
+ /**
+ * The smallest (as in negative, not absoluteness) value that the user can
+ * set this to.
+ */
+ double minValue() const { return m_minValue; }
+ void setMinValue( double value );
+ /**
+ * The largest (as in positive, not absoluteness) value that the user can
+ * set this to.
+ */
+ double maxValue() const { return m_maxValue; }
+ void setMaxValue( double value );
+ /**
+ * The smallest absolute value that the user can set this to, before the
+ * value is considered zero.
+ */
+ double minAbsValue() const { return m_minAbsValue; }
+ void setMinAbsValue( double val );
+ QVariant defaultValue() const { return m_defaultValue; }
+ void setDefaultValue( QVariant val );
+ /**
+ * If this data is marked as advanced, it will only display in the item
+ * editor (and not in the toolbar)
+ */
+ void setAdvanced( bool advanced ) { m_bAdvanced = advanced; }
+ bool isAdvanced() const { return m_bAdvanced; }
+ /**
+ * If this data is marked as hidden, it will not be editable from anywhere
+ * in the user interface
+ */
+ void setHidden( bool hidden ) { m_bHidden = hidden; }
+ bool isHidden() const { return m_bHidden; }
+ /**
+ * Returns the best possible attempt at representing the data in a string
+ * for display. Used by the properties list view.
+ */
+ QString displayString() const;
+ /**
+ * The list of values that the data is allowed to take (if it is string)
+ */
+ QStringList allowed() const { return m_allowed; }
+ void setAllowed(QStringList stringList);
+ void appendAllowed(QString string);
+
+ QVariant value() const { return m_value; }
+ void setValue( const QVariant& val );
+ void resetToDefault();
+
+signals:
+ /**
+ * Emitted when the value changes.
+ * NOTE: The order of data given is the new value, and then the old value
+ * This is done so that slots that don't care about the old value don't
+ * have to accept it
+ */
+ void valueChanged( QVariant newValue, QVariant oldValue );
+
+private:
+ QVariant m_value; // the actual data
+ QVariant m_defaultValue;
+ QString m_unit;
+ double m_minAbsValue;
+ double m_minValue;
+ double m_maxValue;
+ QString m_toolbarCaption; // Short description shown in e.g. properties dialog
+ QString m_editorCaption; // Text displayed before the data entry widget in the toolbar
+ bool m_bAdvanced; // If advanced, only display data in item editor
+ bool m_bHidden; // If hidden, do not allow user to change data
+ QString m_filter; // If type() == Type::FileName this is the filter used in file dialogs.
+ bool m_bSetDefault; // If false, then the default will be set to the first thing this variant is set to
+ Type::Value m_type;
+ QStringList m_allowed;
+ int m_colorScheme;
+};
+
+#endif