VirtualBox

Changeset 74898 in vbox for trunk


Ignore:
Timestamp:
Oct 18, 2018 12:40:48 AM (6 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9230: A possibility to save profile table changes.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/cloud/UICloudProfileDetailsWidget.cpp

    r74897 r74898  
    8282}
    8383
    84 void UICloudProfileDetailsWidget::sltTableChanged()
    85 {
    86     /// @todo handle profile settings table change!
     84void UICloudProfileDetailsWidget::sltTableChanged(QTableWidgetItem *pItem)
     85{
     86    /* Make sure item is valid: */
     87    AssertPtrReturnVoid(pItem);
     88    const int iRow = pItem->row();
     89    AssertReturnVoid(iRow >= 0);
     90
     91    /* Skip if one of items isn't yet created.
     92     * This can happen when 1st is already while 2nd isn't yet. */
     93    QTableWidgetItem *pItemK = m_pTableWidget->item(iRow, 0);
     94    QTableWidgetItem *pItemV = m_pTableWidget->item(iRow, 1);
     95    if (!pItemK || !pItemV)
     96        return;
     97
     98    /* Push changes back: */
     99    const QString strKey = pItemK->text();
     100    const QString strValue = pItemV->text();
     101    m_newData.m_data[strKey] = qMakePair(strValue, m_newData.m_data.value(strKey).second);
     102
     103    /* Revalidate: */
     104    revalidate(m_pTableWidget);
     105    /* Update button states: */
     106    updateButtonStates();
    87107}
    88108
     
    133153            m_pTableWidget->verticalHeader()->setVisible(false);
    134154            m_pTableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
     155            connect(m_pTableWidget, &QTableWidget::itemChanged, this, &UICloudProfileDetailsWidget::sltTableChanged);
    135156
    136157            /* Add into layout: */
     
    263284void UICloudProfileDetailsWidget::updateButtonStates()
    264285{
    265     /// @todo update that printf as well!
    266286#if 0
    267287    if (m_oldData != m_newData)
    268         printf("Interface: %s, %s, %s, %s;  DHCP server: %d, %s, %s, %s, %s\n",
    269                m_newData.m_interface.m_strAddress.toUtf8().constData(),
    270                m_newData.m_interface.m_strMask.toUtf8().constData(),
    271                m_newData.m_interface.m_strAddress6.toUtf8().constData(),
    272                m_newData.m_interface.m_strPrefixLength6.toUtf8().constData(),
    273                (int)m_newData.m_dhcpserver.m_fEnabled,
    274                m_newData.m_dhcpserver.m_strAddress.toUtf8().constData(),
    275                m_newData.m_dhcpserver.m_strMask.toUtf8().constData(),
    276                m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData(),
    277                m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData());
     288    {
     289        printf("Old data:\n");
     290        foreach (const QString &strKey, m_oldData.m_data.keys())
     291        {
     292            const QString strValue = m_oldData.m_data.value(strKey).first;
     293            const QString strDecription = m_oldData.m_data.value(strKey).second;
     294            printf(" %s: %s, %s\n", strKey.toUtf8().constData(), strValue.toUtf8().constData(), strDecription.toUtf8().constData());
     295        }
     296        printf("New data:\n");
     297        foreach (const QString &strKey, m_newData.m_data.keys())
     298        {
     299            const QString strValue = m_newData.m_data.value(strKey).first;
     300            const QString strDecription = m_newData.m_data.value(strKey).second;
     301            printf(" %s: %s, %s\n", strKey.toUtf8().constData(), strValue.toUtf8().constData(), strDecription.toUtf8().constData());
     302        }
     303        printf("\n");
     304    }
    278305#endif
    279306
  • trunk/src/VBox/Frontends/VirtualBox/src/cloud/UICloudProfileDetailsWidget.h

    r74897 r74898  
    3030class QAbstractButton;
    3131class QTableWidget;
     32class QTableWidgetItem;
    3233class QIDialogButtonBox;
    3334
     
    127128      * @{ */
    128129        /** Handles table change. */
    129         void sltTableChanged();
     130        void sltTableChanged(QTableWidgetItem *pItem);
    130131
    131132        /** Handles button-box button click. */
  • trunk/src/VBox/Frontends/VirtualBox/src/cloud/UICloudProfileManager.cpp

    r74896 r74898  
    183183{
    184184    /* Get profile item: */
    185     UIItemCloudProfile *pItem = static_cast<UIItemCloudProfile*>(m_pTreeWidget->currentItem());
    186     AssertMsgReturnVoid(pItem, ("Current item must not be null!\n"));
    187 
    188     /// @todo apply cloud profile details!
     185    UIItemCloudProfile *pProfileItem = static_cast<UIItemCloudProfile*>(m_pTreeWidget->currentItem());
     186    AssertMsgReturnVoid(pProfileItem, ("Current item must not be null!\n"));
     187
     188    /* Get item data: */
     189    UIDataCloudProfile oldData = *pProfileItem;
     190    UIDataCloudProfile newData = m_pDetailsWidget->data();
     191
     192    /* Get VirtualBox for further activities: */
     193    const CVirtualBox comVBox = vboxGlobal().virtualBox();
     194
     195    /* Get CloudProviderManager for further activities: */
     196    CCloudProviderManager comCloudProviderManager = comVBox.GetCloudProviderManager();
     197    /* Show error message if necessary: */
     198    if (!comVBox.isOk())
     199        msgCenter().cannotAcquireCloudProviderManager(comVBox, this);
     200    else
     201    {
     202        /* Get provider item: */
     203        UIItemCloudProvider *pProviderItem = static_cast<UIItemCloudProvider*>(pProfileItem->parentItem());
     204        /* Acquire provider ID: */
     205        const QUuid uId = pProviderItem->data(Column_Name, Data_ProviderID).toUuid();
     206
     207        /* Look for corresponding provider: */
     208        CCloudProvider comCloudProvider = comCloudProviderManager.GetProviderById(uId);
     209        /* Show error message if necessary: */
     210        if (!comCloudProviderManager.isOk())
     211            msgCenter().cannotFindCloudProvider(comCloudProviderManager, uId, this);
     212        else
     213        {
     214            /* Look for corresponding profile: */
     215            CCloudProfile comCloudProfile = comCloudProvider.GetProfileByName(oldData.m_strName);
     216            /* Show error message if necessary: */
     217            if (!comCloudProvider.isOk())
     218                msgCenter().cannotFindCloudProfile(comCloudProvider, oldData.m_strName, this);
     219            else
     220            {
     221                /* Iterate through old/new data: */
     222                foreach (const QString &strKey, oldData.m_data.keys())
     223                {
     224                    /* Get values: */
     225                    const QString strOldValue = oldData.m_data.value(strKey).first;
     226                    const QString strNewValue = newData.m_data.value(strKey).first;
     227                    if (strNewValue != strOldValue)
     228                    {
     229                        /* Apply property: */
     230                        comCloudProfile.SetProperty(strKey, strNewValue);
     231                        /* Show error message if necessary: */
     232                        if (!comCloudProfile.isOk())
     233                        {
     234                            msgCenter().cannotAssignCloudProfileParameter(comCloudProfile, this);
     235                            break;
     236                        }
     237                    }
     238                }
     239
     240                /* If profile is Ok finally: */
     241                if (comCloudProfile.isOk())
     242                {
     243                    /* Update profile in the tree: */
     244                    UIDataCloudProfile data;
     245                    loadCloudProfile(comCloudProfile, data);
     246                    updateItemForCloudProfile(data, true, pProfileItem);
     247
     248                    /* Make sure current item fetched: */
     249                    sltHandleCurrentItemChange();
     250                }
     251            }
     252        }
     253    }
    189254}
    190255
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp

    r74887 r74898  
    5959# include "CCloudProfile.h"
    6060# include "CCloudProvider.h"
     61# include "CCloudProviderManager.h"
    6162# include "CNATNetwork.h"
    6263# include "CDHCPServer.h"
     
    16191620}
    16201621
     1622void UIMessageCenter::cannotFindCloudProvider(const CCloudProviderManager &comManager, const QUuid &uId, QWidget *pParent /* = 0 */) const
     1623{
     1624    error(pParent, MessageType_Error,
     1625          tr("Failed to find cloud provider with following uuid: <b>%1</b>.").arg(uId.toString()),
     1626          UIErrorString::formatErrorInfo(comManager));
     1627}
     1628
    16211629void UIMessageCenter::cannotAcquireCloudProviderParameter(const CCloudProvider &comProvider, QWidget *pParent /* = 0 */) const
    16221630{
     
    16261634}
    16271635
     1636void UIMessageCenter::cannotFindCloudProfile(const CCloudProvider &comProvider, const QString &strName, QWidget *pParent /* = 0 */) const
     1637{
     1638    error(pParent, MessageType_Error,
     1639          tr("Failed to find cloud profile with following name: <b>%1</b>.").arg(strName),
     1640          UIErrorString::formatErrorInfo(comProvider));
     1641}
     1642
    16281643void UIMessageCenter::cannotAcquireCloudProfileParameter(const CCloudProfile &comProfile, QWidget *pParent /* = 0 */) const
    16291644{
    16301645    error(pParent, MessageType_Error,
    16311646          tr("Failed to acquire cloud profile parameter."),
     1647          UIErrorString::formatErrorInfo(comProfile));
     1648}
     1649
     1650void UIMessageCenter::cannotAssignCloudProfileParameter(const CCloudProfile &comProfile, QWidget *pParent /* = 0 */) const
     1651{
     1652    error(pParent, MessageType_Error,
     1653          tr("Failed to assign cloud profile parameter."),
    16321654          UIErrorString::formatErrorInfo(comProfile));
    16331655}
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.h

    r74887 r74898  
    362362    /* API: Cloud Profile Manager warnings: */
    363363    void cannotAcquireCloudProviderManager(const CVirtualBox &comVBox, QWidget *pParent = 0) const;
     364    void cannotFindCloudProvider(const CCloudProviderManager &comManager, const QUuid &uId, QWidget *pParent = 0) const;
    364365    void cannotAcquireCloudProviderParameter(const CCloudProvider &comProvider, QWidget *pParent = 0) const;
     366    void cannotFindCloudProfile(const CCloudProvider &comProvider, const QString &strName, QWidget *pParent = 0) const;
    365367    void cannotAcquireCloudProfileParameter(const CCloudProfile &comProfile, QWidget *pParent = 0) const;
     368    void cannotAssignCloudProfileParameter(const CCloudProfile &comProfile, QWidget *pParent = 0) const;
    366369
    367370    /* API: Wizards warnings: */
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