VirtualBox

Changeset 51813 in vbox


Ignore:
Timestamp:
Jul 2, 2014 2:17:56 PM (11 years ago)
Author:
vboxsync
Message:

FE/Qt: Widget Validation Framework: Extending framework with classes which able to validate QObject groups.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/extensions
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.cpp

    r47846 r51813  
    1818 */
    1919
     20/* GUI includes: */
    2021#include "QIWidgetValidator.h"
     22#include "UISettingsPage.h"
    2123
    22 /* GUI includes: */
    23 #include "UISettingsPage.h"
     24
     25QObjectValidator::QObjectValidator(QValidator *pValidator, QObject *pParent /* = 0 */)
     26    : QObject(pParent)
     27    , m_pValidator(pValidator)
     28    , m_state(QValidator::Invalid)
     29{
     30    /* Prepare: */
     31    prepare();
     32}
     33
     34void QObjectValidator::sltValidate(QString strInput /* = QString() */)
     35{
     36    /* Make sure validator assigned: */
     37    AssertPtrReturnVoid(m_pValidator);
     38
     39    /* Validate: */
     40    int iPosition = 0;
     41    const QValidator::State state = m_pValidator->validate(strInput, iPosition);
     42
     43    /* If validity state changed: */
     44    if (m_state != state)
     45    {
     46        /* Update last validity state: */
     47        m_state = state;
     48
     49        /* Notifies listener(s) about validity change: */
     50        emit sigValidityChange(m_state);
     51    }
     52}
     53
     54void QObjectValidator::prepare()
     55{
     56    /* Make sure validator assigned: */
     57    AssertPtrReturnVoid(m_pValidator);
     58
     59    /* Register validator as child: */
     60    m_pValidator->setParent(this);
     61
     62    /* Validate: */
     63    sltValidate();
     64}
     65
     66
     67QObjectValidatorGroup::QObjectValidatorGroup(QObject *pParent)
     68    : QObject(pParent)
     69    , m_fResult(false)
     70{
     71}
     72
     73void QObjectValidatorGroup::addObjectValidator(QObjectValidator *pObjectValidator)
     74{
     75    /* Make sure object-validator passed: */
     76    AssertPtrReturnVoid(pObjectValidator);
     77
     78    /* Register object-validator as child: */
     79    pObjectValidator->setParent(this);
     80
     81    /* Insert object-validator to internal map: */
     82    m_group.insert(pObjectValidator, toResult(pObjectValidator->state()));
     83
     84    /* Attach object-validator to group: */
     85    connect(pObjectValidator, SIGNAL(sigValidityChange(QValidator::State)),
     86            this, SLOT(sltValidate(QValidator::State)));
     87}
     88
     89void QObjectValidatorGroup::sltValidate(QValidator::State state)
     90{
     91    /* Determine sender object-validator: */
     92    QObjectValidator *pObjectValidatorSender = qobject_cast<QObjectValidator*>(sender());
     93    /* Make sure that is one of our senders: */
     94    AssertReturnVoid(pObjectValidatorSender && m_group.contains(pObjectValidatorSender));
     95
     96    /* Update internal map: */
     97    m_group[pObjectValidatorSender] = toResult(state);
     98
     99    /* Enumerate all the registered object-validators: */
     100    bool fResult = true;
     101    foreach (QObjectValidator *pObjectValidator, m_group.keys())
     102        if (!toResult(pObjectValidator->state()))
     103        {
     104            fResult = false;
     105            break;
     106        }
     107
     108    /* If validity state changed: */
     109    if (m_fResult != fResult)
     110    {
     111        /* Update last validity state: */
     112        m_fResult = fResult;
     113
     114        /* Notifies listener(s) about validity change: */
     115        emit sigValidityChange(m_fResult);
     116    }
     117}
     118
     119/* static */
     120bool QObjectValidatorGroup::toResult(QValidator::State state)
     121{
     122    return state == QValidator::Acceptable;
     123}
    24124
    25125
  • trunk/src/VBox/Frontends/VirtualBox/src/extensions/QIWidgetValidator.h

    r47846 r51813  
    3131/* Forward declarations: */
    3232class UISettingsPage;
     33
     34/** QObject reimplementation,
     35  * providing passed QObject with validation routine. */
     36class QObjectValidator : public QObject
     37{
     38    Q_OBJECT;
     39
     40signals:
     41
     42    /** Notifies listener(s) about validity change. */
     43    void sigValidityChange(QValidator::State state);
     44
     45public:
     46
     47    /** Constructor.
     48      * @param pParent    is passed on to the QObject constructor,
     49      * @param pValidator is passed on to the OObject children
     50      *                   and used to perform validation itself. */
     51    QObjectValidator(QValidator *pValidator, QObject *pParent = 0);
     52
     53    /** Returns last validation state. */
     54    QValidator::State state() const { return m_state; }
     55
     56private slots:
     57
     58    /** Performs validation: */
     59    void sltValidate(QString strInput = QString());
     60
     61private:
     62
     63    /** Prepare routine. */
     64    void prepare();
     65
     66    /** Holds validator. */
     67    QValidator *m_pValidator;
     68    /** Holds validation state. */
     69    QValidator::State m_state;
     70};
     71
     72/** QObject reimplementation,
     73  * which can group various QObjectValidator instances to operate on. */
     74class QObjectValidatorGroup : public QObject
     75{
     76    Q_OBJECT;
     77
     78signals:
     79
     80    /** Notifies listener(s) about validity change. */
     81    void sigValidityChange(bool fValid);
     82
     83public:
     84
     85    /** Constructor.
     86      * @param pParent is passed on to the QObject constructor. */
     87    QObjectValidatorGroup(QObject *pParent);
     88
     89    /** Adds object-validator.
     90      * @note The ownership of @a pObjectValidator is transferred to the group,
     91      *       and it's the group's responsibility to delete it. */
     92    void addObjectValidator(QObjectValidator *pObjectValidator);
     93
     94    /** Returns last validation result. */
     95    bool result() const { return m_fResult; }
     96
     97private slots:
     98
     99    /** Performs validation: */
     100    void sltValidate(QValidator::State state);
     101
     102private:
     103
     104    /** Converts QValidator::State to bool result. */
     105    static bool toResult(QValidator::State state);
     106
     107    /** Holds object-validators and their states. */
     108    QMap<QObjectValidator*, bool> m_group;
     109    /** Holds validation result. */
     110    bool m_fResult;
     111};
    33112
    34113/* Page validator prototype: */
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette