summaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.h
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.h')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.h b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.h
new file mode 100644
index 0000000..9f875a9
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.h
@@ -0,0 +1,79 @@
+#ifndef CONSTRAINTPANEL_H
+#define CONSTRAINTPANEL_H
+
+#include "db/db.h"
+#include "parser/ast/sqlitecreatetable.h"
+#include "guiSQLiteStudio_global.h"
+#include <QWidget>
+#include <QPointer>
+
+class GUI_API_EXPORT ConstraintPanel : public QWidget
+{
+ Q_OBJECT
+
+ public:
+ explicit ConstraintPanel(QWidget *parent = 0);
+ virtual ~ConstraintPanel();
+
+ void setConstraint(SqliteStatement* stmt);
+ void storeDefinition();
+ virtual void setDb(Db* value);
+
+ /**
+ * @brief validate Validates panel for correct data filled in.
+ * @return true if the data is valid, or false otherwise.
+ * Apart from returning boolean result it also marks
+ * invalid fields with red color. See validateOnly() description
+ * for details on differences between those two methods.
+ */
+ virtual bool validate() = 0;
+
+ /**
+ * @brief validateOnly Validates panel for correct data filled in.
+ * @return true if the data is valid, or false otherwise.
+ * The difference between validateOnly() and validate() is that validateOnly()
+ * will run all validations immediately (ie. SQL syntax checking
+ * in DEFAULT constraint, etc), while the validate() will wait for
+ * SqlEditor to do the validation in its scheduled time and return
+ * false until the validation isn't done yet.
+ * The validate() should be used when user actually edits the panel,
+ * while validateOnly() is to be used when using ConstraintPanel for validation
+ * of a Constraint object, but not displayed - in that case the validation
+ * result is needed immediately and that's where validateOnly() does its job.
+ * Not every constraint panel has to reimplement this. Most of the constraints
+ * don't work asynchronously and return proper result just from a validate() call.
+ * In that case the default implementation of validateOnly() will do the job.
+ */
+ virtual bool validateOnly();
+
+ static ConstraintPanel* produce(SqliteCreateTable::Constraint* constr);
+ static ConstraintPanel* produce(SqliteCreateTable::Column::Constraint* constr);
+
+ protected:
+ /**
+ * @brief constraintAvailable
+ * This method is called once the constraint object (the member variable)
+ * is available to the panel as well, as the database (the db member).
+ * The implementation should read values from constraint object and put them
+ * to panel's fields, but also initialise any database related data,
+ * like existing collations, etc.
+ */
+ virtual void constraintAvailable() = 0;
+
+ /**
+ * @brief storeConfiguration
+ * The implementation should store all field valies into the constraint object.
+ */
+ virtual void storeConfiguration() = 0;
+
+ Db* db = nullptr;
+ QPointer<SqliteStatement> constraint;
+
+ public slots:
+
+ signals:
+ void updateValidation();
+
+};
+
+#endif // CONSTRAINTPANEL_H