File: constraintpanel.h

package info (click to toggle)
sqlitestudio 3.4.21%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,880 kB
  • sloc: ansic: 406,208; cpp: 123,872; yacc: 2,692; tcl: 497; sh: 462; xml: 426; makefile: 19
file content (83 lines) | stat: -rw-r--r-- 3,310 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#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 setCreateTableStmt(SqliteCreateTable* stmt);
        void setColumnStmt(SqliteCreateTable::Column* 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;
        QPointer<SqliteCreateTable> createTableStmt;
        QPointer<SqliteCreateTable::Column> columnStmt;

    public slots:

    signals:
        void updateValidation();

};

#endif // CONSTRAINTPANEL_H