VirtualBox

Ignore:
Timestamp:
May 28, 2019 1:47:30 PM (6 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9434: Import Appliance wizard: Form Editor widget: Adding data/editor for IRangedIntegerFormValue interface.

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp

    r78542 r78819  
    5959#include "CCloudProvider.h"
    6060#include "CCloudProviderManager.h"
    61 #include "CNATNetwork.h"
    6261#include "CDHCPServer.h"
    6362#include "CNATEngine.h"
     63#include "CNATNetwork.h"
     64#include "CRangedIntegerFormValue.h"
    6465#include "CSerialPort.h"
    6566#include "CSharedFolder.h"
     
    17501751}
    17511752
     1753void UIMessageCenter::cannotAssignFormValue(const CRangedIntegerFormValue &comValue, QWidget *pParent /* = 0 */) const
     1754{
     1755    error(pParent, MessageType_Error,
     1756          tr("Failed to assign form value."),
     1757          UIErrorString::formatErrorInfo(comValue));
     1758}
     1759
    17521760void UIMessageCenter::cannotAssignFormValue(const CProgress &comProgress, QWidget *pParent /* = 0 */) const
    17531761{
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h

    r78542 r78819  
    384384    void cannotAssignFormValue(const CStringFormValue &comValue, QWidget *pParent = 0) const;
    385385    void cannotAssignFormValue(const CChoiceFormValue &comValue, QWidget *pParent = 0) const;
     386    void cannotAssignFormValue(const CRangedIntegerFormValue &comValue, QWidget *pParent = 0) const;
    386387    void cannotAssignFormValue(const CProgress &comProgress, QWidget *pParent = 0) const;
    387388
  • trunk/src/VBox/Frontends/VirtualBox/src/wizards/importappliance/UIFormEditorWidget.cpp

    r78818 r78819  
    2222#include <QItemEditorFactory>
    2323#include <QSortFilterProxyModel>
     24#include <QSpinBox>
    2425#include <QStyledItemDelegate>
    2526#include <QVBoxLayout>
     
    3435#include "CChoiceFormValue.h"
    3536#include "CFormValue.h"
     37#include "CRangedIntegerFormValue.h"
    3638#include "CStringFormValue.h"
    3739#include "CVirtualSystemDescriptionForm.h"
     
    9395
    9496
     97/** Class used to hold ranged-integer data. */
     98class RangedIntegerData
     99{
     100public:
     101
     102    /** Constructs null ranged-integer data. */
     103    RangedIntegerData() {}
     104    /** Constructs ranged-integer data on the basis of passed @a iMinimum, @a iMaximum and @a iInteger. */
     105    RangedIntegerData(int iMinimum, int iMaximum, int iInteger)
     106        : m_iMinimum(iMinimum), m_iMaximum(iMaximum), m_iInteger(iInteger) {}
     107    /** Constructs ranged-integer data on the basis of @a another ranged-integer data. */
     108    RangedIntegerData(const RangedIntegerData &another)
     109        : m_iMinimum(another.minimum()), m_iMaximum(another.maximum()), m_iInteger(another.integer()) {}
     110
     111    /** Assigns values of @a another ranged-integer to this one. */
     112    RangedIntegerData &operator=(const RangedIntegerData &another)
     113    {
     114        m_iMinimum = another.minimum();
     115        m_iMaximum = another.maximum();
     116        m_iInteger = another.integer();
     117        return *this;
     118    }
     119
     120    /** Returns minimum value. */
     121    int minimum() const { return m_iMinimum; }
     122    /** Returns maximum value. */
     123    int maximum() const { return m_iMaximum; }
     124    /** Returns current value. */
     125    int integer() const { return m_iInteger; }
     126
     127private:
     128
     129    /** Holds minimum value. */
     130    int  m_iMinimum;
     131    /** Holds maximum value. */
     132    int  m_iMaximum;
     133    /** Holds current value. */
     134    int  m_iInteger;
     135};
     136Q_DECLARE_METATYPE(RangedIntegerData);
     137
     138
    95139/** QComboBox extension used as ChoiceData editor. */
    96140class ChoiceEditor : public QComboBox
     
    125169
    126170
     171/** QSpinBox extension used as RangedIntegerData editor. */
     172class RangedIntegerEditor : public QSpinBox
     173{
     174    Q_OBJECT;
     175    Q_PROPERTY(RangedIntegerData rangedInteger READ rangedInteger WRITE setRangedInteger USER true);
     176
     177public:
     178
     179    /** Constructs RangedIntegerData editor passing @a pParent to the base-class. */
     180    RangedIntegerEditor(QWidget *pParent = 0)
     181        : QSpinBox(pParent) {}
     182
     183private:
     184
     185    /** Defines @a rangedInteger. */
     186    void setRangedInteger(const RangedIntegerData &rangedInteger)
     187    {
     188        setMinimum(rangedInteger.minimum());
     189        setMaximum(rangedInteger.maximum());
     190        setValue(rangedInteger.integer());
     191    }
     192
     193    /** Returns ranged-integer. */
     194    RangedIntegerData rangedInteger() const
     195    {
     196        return RangedIntegerData(minimum(), maximum(), value());
     197    }
     198};
     199
     200
    127201/** QITableViewCell extension used as Form Editor table-view cell. */
    128202class UIFormEditorCell : public QITableViewCell
     
    186260    void setChoice(const ChoiceData &choice);
    187261
     262    /** Returns value cast to ranged-integer. */
     263    RangedIntegerData toRangedInteger() const;
     264    /** Defines @a rangedInteger value. */
     265    void setRangedInteger(const RangedIntegerData &rangedInteger);
     266
    188267    /** Updates value cells. */
    189268    void updateValueCells();
     
    216295
    217296    /** Holds cached bool value. */
    218     bool        m_fBool;
     297    bool               m_fBool;
    219298    /** Holds cached string value. */
    220     QString     m_strString;
     299    QString            m_strString;
    221300    /** Holds cached choice value. */
    222     ChoiceData  m_choice;
     301    ChoiceData         m_choice;
     302    /** Holds cached ranged-integer value. */
     303    RangedIntegerData  m_rangedInteger;
    223304
    224305    /** Holds the cell instances. */
     
    338419    , m_strString(QString())
    339420    , m_choice(ChoiceData())
     421    , m_rangedInteger(RangedIntegerData())
    340422{
    341423    prepare();
     
    453535}
    454536
     537RangedIntegerData UIFormEditorRow::toRangedInteger() const
     538{
     539    AssertReturn(valueType() == KFormValueType_RangedInteger, RangedIntegerData());
     540    return m_rangedInteger;
     541}
     542
     543void UIFormEditorRow::setRangedInteger(const RangedIntegerData &rangedInteger)
     544{
     545    AssertReturnVoid(valueType() == KFormValueType_RangedInteger);
     546    CRangedIntegerFormValue comValue(m_comValue);
     547    CProgress comProgress = comValue.SetInteger(rangedInteger.integer());
     548
     549    /* Show error message if necessary: */
     550    if (!comValue.isOk())
     551        msgCenter().cannotAssignFormValue(comValue);
     552    else
     553    {
     554        /* Show "Acquire export form" progress: */
     555        msgCenter().showModalProgressDialog(comProgress, UIFormEditorWidget::tr("Assign value..."),
     556                                            ":/progress_reading_appliance_90px.png");
     557
     558        /* Show error message if necessary: */
     559        if (!comProgress.isOk() || comProgress.GetResultCode() != 0)
     560            msgCenter().cannotAssignFormValue(comProgress);
     561        else
     562            updateValueCells();
     563    }
     564}
     565
    455566void UIFormEditorRow::updateValueCells()
    456567{
     
    483594            m_choice = ChoiceData(values, iSelectedIndex);
    484595            m_cells[UIFormEditorDataType_Value]->setText(m_choice.selectedValue());
     596            /// @todo check for errors
     597            break;
     598        }
     599        case KFormValueType_RangedInteger:
     600        {
     601            CRangedIntegerFormValue comValue(m_comValue);
     602            const int iMinimum = comValue.GetMinimum();
     603            const int iMaximum = comValue.GetMaximum();
     604            const int iInteger = comValue.GetInteger();
     605            m_rangedInteger = RangedIntegerData(iMinimum, iMaximum, iInteger);
     606            m_cells[UIFormEditorDataType_Value]->setText(QString::number(m_rangedInteger.integer()));
    485607            /// @todo check for errors
    486608            break;
     
    687809                            updateGeneration();
    688810                            return true;
     811                        case KFormValueType_RangedInteger:
     812                            m_dataList[index.row()]->setRangedInteger(value.value<RangedIntegerData>());
     813                            emit dataChanged(index, index);
     814                            updateGeneration();
     815                            return true;
    689816                        default:
    690817                            return false;
     
    754881                        case KFormValueType_Choice:
    755882                            return QVariant::fromValue(m_dataList[index.row()]->toChoice());
     883                        case KFormValueType_RangedInteger:
     884                            return QVariant::fromValue(m_dataList[index.row()]->toRangedInteger());
    756885                        default:
    757886                            return QVariant();
     
    9431072                        pNewItemEditorFactory->registerEditor((QVariant::Type)iChoiceId, pChoiceEditorItemCreator);
    9441073
     1074                        /* Register RangedIntegerEditor as the RangedIntegerData editor: */
     1075                        int iRangedIntegerId = qRegisterMetaType<RangedIntegerData>();
     1076                        QStandardItemEditorCreator<RangedIntegerEditor> *pRangedIntegerEditorItemCreator = new QStandardItemEditorCreator<RangedIntegerEditor>();
     1077                        pNewItemEditorFactory->registerEditor((QVariant::Type)iRangedIntegerId, pRangedIntegerEditorItemCreator);
     1078
    9451079                        /* Set newly created item editor factory for table delegate: */
    9461080                        pStyledItemDelegate->setItemEditorFactory(pNewItemEditorFactory);
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