VirtualBox

Changeset 66559 in vbox


Ignore:
Timestamp:
Apr 13, 2017 2:06:28 PM (7 years ago)
Author:
vboxsync
Message:

FE/Qt: Machine settings: Rework Network, Parallel and Serial pages to use UISettingsCachePool template, which simplifies access to child cache items.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp

    r66555 r66559  
    138138{
    139139    /** Constructs data. */
    140     UIDataSettingsMachineNetwork()
    141         : m_adapters(QList<UIDataSettingsMachineNetworkAdapter>())
    142     {}
     140    UIDataSettingsMachineNetwork() {}
    143141
    144142    /** Returns whether the @a other passed data is equal to this one. */
    145     bool equal(const UIDataSettingsMachineNetwork &other) const
    146     {
    147         return true
    148                && (m_adapters == other.m_adapters)
    149                ;
    150     }
    151 
    152     /** Returns whether the @a other passed data is equal to this one. */
    153     bool operator==(const UIDataSettingsMachineNetwork &other) const { return equal(other); }
     143    bool operator==(const UIDataSettingsMachineNetwork & /* other */) const { return true; }
    154144    /** Returns whether the @a other passed data is different from this one. */
    155     bool operator!=(const UIDataSettingsMachineNetwork &other) const { return !equal(other); }
    156 
    157     /** Holds the adapter list. */
    158     QList<UIDataSettingsMachineNetworkAdapter> m_adapters;
     145    bool operator!=(const UIDataSettingsMachineNetwork & /* other */) const { return false; }
    159146};
    160147
     
    10811068
    10821069        /* Cache old adapter data: */
    1083         oldNetworkData.m_adapters << oldAdapterData;
     1070        m_pCache->child(iSlot).cacheInitialData(oldAdapterData);
    10841071    }
    10851072
     
    11051092
    11061093        /* Load old adapter data from the cache: */
    1107         pTab->loadAdapterData(m_pCache->base().m_adapters.at(iSlot));
     1094        pTab->loadAdapterData(m_pCache->child(iSlot).base());
    11081095
    11091096        /* Setup tab order: */
     
    11391126
    11401127        /* Cache new adapter data: */
    1141         newNetworkData.m_adapters << newAdapterData;
     1128        m_pCache->child(iSlot).cacheCurrentData(newAdapterData);
    11421129    }
    11431130
     
    11941181                                    isMachineOffline() ||
    11951182                                    (isMachineInValidMode() &&
    1196                                      m_pCache->base().m_adapters.size() > iSlot &&
    1197                                      m_pCache->base().m_adapters.at(iSlot).m_fAdapterEnabled));
     1183                                     m_pCache->childCount() > iSlot &&
     1184                                     m_pCache->child(iSlot).base().m_fAdapterEnabled));
    11981185        UIMachineSettingsNetwork *pTab = qobject_cast<UIMachineSettingsNetwork*>(m_pTabWidget->widget(iSlot));
    11991186        pTab->polishTab();
     
    14921479    bool fSuccess = true;
    14931480    /* Save adapter settings from the cache: */
    1494     if (fSuccess)
     1481    if (fSuccess && m_pCache->child(iSlot).wasChanged())
    14951482    {
    14961483        /* Get old network data from the cache: */
    1497         const UIDataSettingsMachineNetworkAdapter &oldAdapterData = m_pCache->base().m_adapters.at(iSlot);
     1484        const UIDataSettingsMachineNetworkAdapter &oldAdapterData = m_pCache->child(iSlot).base();
    14981485        /* Get new network data from the cache: */
    1499         const UIDataSettingsMachineNetworkAdapter &newAdapterData = m_pCache->data().m_adapters.at(iSlot);
    1500 
    1501         /* Make sure adapter data was changed: */
    1502         if (newAdapterData != oldAdapterData)
    1503         {
    1504             /* Get network adapter for further activities: */
    1505             CNetworkAdapter comAdapter = m_machine.GetNetworkAdapter(iSlot);
    1506             fSuccess = m_machine.isOk() && comAdapter.isNotNull();
     1486        const UIDataSettingsMachineNetworkAdapter &newAdapterData = m_pCache->child(iSlot).data();
     1487
     1488        /* Get network adapter for further activities: */
     1489        CNetworkAdapter comAdapter = m_machine.GetNetworkAdapter(iSlot);
     1490        fSuccess = m_machine.isOk() && comAdapter.isNotNull();
     1491
     1492        /* Show error message if necessary: */
     1493        if (!fSuccess)
     1494            msgCenter().cannotSaveNetworkSettings(m_machine, this);
     1495        else
     1496        {
     1497            /* Save whether the adapter is enabled: */
     1498            if (fSuccess && isMachineOffline() && newAdapterData.m_fAdapterEnabled != oldAdapterData.m_fAdapterEnabled)
     1499            {
     1500                comAdapter.SetEnabled(newAdapterData.m_fAdapterEnabled);
     1501                fSuccess = comAdapter.isOk();
     1502            }
     1503            /* Save adapter type: */
     1504            if (fSuccess && isMachineOffline() && newAdapterData.m_adapterType != oldAdapterData.m_adapterType)
     1505            {
     1506                comAdapter.SetAdapterType(newAdapterData.m_adapterType);
     1507                fSuccess = comAdapter.isOk();
     1508            }
     1509            /* Save adapter MAC address: */
     1510            if (fSuccess && isMachineOffline() && newAdapterData.m_strMACAddress != oldAdapterData.m_strMACAddress)
     1511            {
     1512                comAdapter.SetMACAddress(newAdapterData.m_strMACAddress);
     1513                fSuccess = comAdapter.isOk();
     1514            }
     1515            /* Save adapter attachment type: */
     1516            switch (newAdapterData.m_attachmentType)
     1517            {
     1518                case KNetworkAttachmentType_Bridged:
     1519                {
     1520                    if (fSuccess && newAdapterData.m_strBridgedAdapterName != oldAdapterData.m_strBridgedAdapterName)
     1521                    {
     1522                        comAdapter.SetBridgedInterface(newAdapterData.m_strBridgedAdapterName);
     1523                        fSuccess = comAdapter.isOk();
     1524                    }
     1525                    break;
     1526                }
     1527                case KNetworkAttachmentType_Internal:
     1528                {
     1529                    if (fSuccess && newAdapterData.m_strInternalNetworkName != oldAdapterData.m_strInternalNetworkName)
     1530                    {
     1531                        comAdapter.SetInternalNetwork(newAdapterData.m_strInternalNetworkName);
     1532                        fSuccess = comAdapter.isOk();
     1533                    }
     1534                    break;
     1535                }
     1536                case KNetworkAttachmentType_HostOnly:
     1537                {
     1538                    if (fSuccess && newAdapterData.m_strHostInterfaceName != oldAdapterData.m_strHostInterfaceName)
     1539                    {
     1540                        comAdapter.SetHostOnlyInterface(newAdapterData.m_strHostInterfaceName);
     1541                        fSuccess = comAdapter.isOk();
     1542                    }
     1543                    break;
     1544                }
     1545                case KNetworkAttachmentType_Generic:
     1546                {
     1547                    if (fSuccess && newAdapterData.m_strGenericDriverName != oldAdapterData.m_strGenericDriverName)
     1548                    {
     1549                        comAdapter.SetGenericDriver(newAdapterData.m_strGenericDriverName);
     1550                        fSuccess = comAdapter.isOk();
     1551                    }
     1552                    if (fSuccess && newAdapterData.m_strGenericProperties != oldAdapterData.m_strGenericProperties)
     1553                        fSuccess = saveGenericProperties(comAdapter, newAdapterData.m_strGenericProperties);
     1554                    break;
     1555                }
     1556                case KNetworkAttachmentType_NATNetwork:
     1557                {
     1558                    if (fSuccess && newAdapterData.m_strNATNetworkName != oldAdapterData.m_strNATNetworkName)
     1559                    {
     1560                        comAdapter.SetNATNetwork(newAdapterData.m_strNATNetworkName);
     1561                        fSuccess = comAdapter.isOk();
     1562                    }
     1563                    break;
     1564                }
     1565                default:
     1566                    break;
     1567            }
     1568            if (fSuccess && newAdapterData.m_attachmentType != oldAdapterData.m_attachmentType)
     1569            {
     1570                comAdapter.SetAttachmentType(newAdapterData.m_attachmentType);
     1571                fSuccess = comAdapter.isOk();
     1572            }
     1573            /* Save adapter promiscuous mode: */
     1574            if (fSuccess && newAdapterData.m_promiscuousMode != oldAdapterData.m_promiscuousMode)
     1575            {
     1576                comAdapter.SetPromiscModePolicy(newAdapterData.m_promiscuousMode);
     1577                fSuccess = comAdapter.isOk();
     1578            }
     1579            /* Save whether the adapter cable connected: */
     1580            if (fSuccess && newAdapterData.m_fCableConnected != oldAdapterData.m_fCableConnected)
     1581            {
     1582                comAdapter.SetCableConnected(newAdapterData.m_fCableConnected);
     1583                fSuccess = comAdapter.isOk();
     1584            }
     1585            /* Save adapter redirect options: */
     1586            if (   fSuccess && newAdapterData.m_redirects != oldAdapterData.m_redirects
     1587                && (   oldAdapterData.m_attachmentType == KNetworkAttachmentType_NAT
     1588                    || newAdapterData.m_attachmentType == KNetworkAttachmentType_NAT))
     1589            {
     1590                foreach (const QString &strOldRedirect, comAdapter.GetNATEngine().GetRedirects())
     1591                    comAdapter.GetNATEngine().RemoveRedirect(strOldRedirect.section(',', 0, 0));
     1592                foreach (const UIPortForwardingData &newRedirect, newAdapterData.m_redirects)
     1593                    comAdapter.GetNATEngine().AddRedirect(newRedirect.name, newRedirect.protocol,
     1594                                                       newRedirect.hostIp, newRedirect.hostPort.value(),
     1595                                                       newRedirect.guestIp, newRedirect.guestPort.value());
     1596            }
    15071597
    15081598            /* Show error message if necessary: */
    15091599            if (!fSuccess)
    1510                 msgCenter().cannotSaveNetworkSettings(m_machine, this);
    1511             else
    1512             {
    1513                 /* Save whether the adapter is enabled: */
    1514                 if (fSuccess && isMachineOffline() && newAdapterData.m_fAdapterEnabled != oldAdapterData.m_fAdapterEnabled)
    1515                 {
    1516                     comAdapter.SetEnabled(newAdapterData.m_fAdapterEnabled);
    1517                     fSuccess = comAdapter.isOk();
    1518                 }
    1519                 /* Save adapter type: */
    1520                 if (fSuccess && isMachineOffline() && newAdapterData.m_adapterType != oldAdapterData.m_adapterType)
    1521                 {
    1522                     comAdapter.SetAdapterType(newAdapterData.m_adapterType);
    1523                     fSuccess = comAdapter.isOk();
    1524                 }
    1525                 /* Save adapter MAC address: */
    1526                 if (fSuccess && isMachineOffline() && newAdapterData.m_strMACAddress != oldAdapterData.m_strMACAddress)
    1527                 {
    1528                     comAdapter.SetMACAddress(newAdapterData.m_strMACAddress);
    1529                     fSuccess = comAdapter.isOk();
    1530                 }
    1531                 /* Save adapter attachment type: */
    1532                 switch (newAdapterData.m_attachmentType)
    1533                 {
    1534                     case KNetworkAttachmentType_Bridged:
    1535                     {
    1536                         if (fSuccess && newAdapterData.m_strBridgedAdapterName != oldAdapterData.m_strBridgedAdapterName)
    1537                         {
    1538                             comAdapter.SetBridgedInterface(newAdapterData.m_strBridgedAdapterName);
    1539                             fSuccess = comAdapter.isOk();
    1540                         }
    1541                         break;
    1542                     }
    1543                     case KNetworkAttachmentType_Internal:
    1544                     {
    1545                         if (fSuccess && newAdapterData.m_strInternalNetworkName != oldAdapterData.m_strInternalNetworkName)
    1546                         {
    1547                             comAdapter.SetInternalNetwork(newAdapterData.m_strInternalNetworkName);
    1548                             fSuccess = comAdapter.isOk();
    1549                         }
    1550                         break;
    1551                     }
    1552                     case KNetworkAttachmentType_HostOnly:
    1553                     {
    1554                         if (fSuccess && newAdapterData.m_strHostInterfaceName != oldAdapterData.m_strHostInterfaceName)
    1555                         {
    1556                             comAdapter.SetHostOnlyInterface(newAdapterData.m_strHostInterfaceName);
    1557                             fSuccess = comAdapter.isOk();
    1558                         }
    1559                         break;
    1560                     }
    1561                     case KNetworkAttachmentType_Generic:
    1562                     {
    1563                         if (fSuccess && newAdapterData.m_strGenericDriverName != oldAdapterData.m_strGenericDriverName)
    1564                         {
    1565                             comAdapter.SetGenericDriver(newAdapterData.m_strGenericDriverName);
    1566                             fSuccess = comAdapter.isOk();
    1567                         }
    1568                         if (fSuccess && newAdapterData.m_strGenericProperties != oldAdapterData.m_strGenericProperties)
    1569                             fSuccess = saveGenericProperties(comAdapter, newAdapterData.m_strGenericProperties);
    1570                         break;
    1571                     }
    1572                     case KNetworkAttachmentType_NATNetwork:
    1573                     {
    1574                         if (fSuccess && newAdapterData.m_strNATNetworkName != oldAdapterData.m_strNATNetworkName)
    1575                         {
    1576                             comAdapter.SetNATNetwork(newAdapterData.m_strNATNetworkName);
    1577                             fSuccess = comAdapter.isOk();
    1578                         }
    1579                         break;
    1580                     }
    1581                     default:
    1582                         break;
    1583                 }
    1584                 if (fSuccess && newAdapterData.m_attachmentType != oldAdapterData.m_attachmentType)
    1585                 {
    1586                     comAdapter.SetAttachmentType(newAdapterData.m_attachmentType);
    1587                     fSuccess = comAdapter.isOk();
    1588                 }
    1589                 /* Save adapter promiscuous mode: */
    1590                 if (fSuccess && newAdapterData.m_promiscuousMode != oldAdapterData.m_promiscuousMode)
    1591                 {
    1592                     comAdapter.SetPromiscModePolicy(newAdapterData.m_promiscuousMode);
    1593                     fSuccess = comAdapter.isOk();
    1594                 }
    1595                 /* Save whether the adapter cable connected: */
    1596                 if (fSuccess && newAdapterData.m_fCableConnected != oldAdapterData.m_fCableConnected)
    1597                 {
    1598                     comAdapter.SetCableConnected(newAdapterData.m_fCableConnected);
    1599                     fSuccess = comAdapter.isOk();
    1600                 }
    1601                 /* Save adapter redirect options: */
    1602                 if (   fSuccess && newAdapterData.m_redirects != oldAdapterData.m_redirects
    1603                     && (   oldAdapterData.m_attachmentType == KNetworkAttachmentType_NAT
    1604                         || newAdapterData.m_attachmentType == KNetworkAttachmentType_NAT))
    1605                 {
    1606                     foreach (const QString &strOldRedirect, comAdapter.GetNATEngine().GetRedirects())
    1607                         comAdapter.GetNATEngine().RemoveRedirect(strOldRedirect.section(',', 0, 0));
    1608                     foreach (const UIPortForwardingData &newRedirect, newAdapterData.m_redirects)
    1609                         comAdapter.GetNATEngine().AddRedirect(newRedirect.name, newRedirect.protocol,
    1610                                                            newRedirect.hostIp, newRedirect.hostPort.value(),
    1611                                                            newRedirect.guestIp, newRedirect.guestPort.value());
    1612                 }
    1613 
    1614                 /* Show error message if necessary: */
    1615                 if (!fSuccess)
    1616                     msgCenter().cannotSaveNetworkAdapterSettings(comAdapter, this);
    1617             }
     1600                msgCenter().cannotSaveNetworkAdapterSettings(comAdapter, this);
    16181601        }
    16191602    }
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h

    r66497 r66559  
    2727class QITabWidget;
    2828struct UIDataSettingsMachineNetwork;
    29 typedef UISettingsCache<UIDataSettingsMachineNetwork> UISettingsCacheMachineNetwork;
     29struct UIDataSettingsMachineNetworkAdapter;
     30typedef UISettingsCache<UIDataSettingsMachineNetworkAdapter> UISettingsCacheMachineNetworkAdapter;
     31typedef UISettingsCachePool<UIDataSettingsMachineNetwork, UISettingsCacheMachineNetworkAdapter> UISettingsCacheMachineNetwork;
    3032
    3133
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsParallel.cpp

    r66555 r66559  
    8282{
    8383    /** Constructs data. */
    84     UIDataSettingsMachineParallel()
    85         : m_ports(QList<UIDataSettingsMachineParallelPort>())
    86     {}
     84    UIDataSettingsMachineParallel() {}
    8785
    8886    /** Returns whether the @a other passed data is equal to this one. */
    89     bool equal(const UIDataSettingsMachineParallel &other) const
    90     {
    91         return true
    92                && (m_ports == other.m_ports)
    93                ;
    94     }
    95 
    96     /** Returns whether the @a other passed data is equal to this one. */
    97     bool operator==(const UIDataSettingsMachineParallel &other) const { return equal(other); }
     87    bool operator==(const UIDataSettingsMachineParallel & /* other */) const { return true; }
    9888    /** Returns whether the @a other passed data is different from this one. */
    99     bool operator!=(const UIDataSettingsMachineParallel &other) const { return !equal(other); }
    100 
    101     /** Holds the port list. */
    102     QList<UIDataSettingsMachineParallelPort> m_ports;
     89    bool operator!=(const UIDataSettingsMachineParallel & /* other */) const { return false; }
    10390};
    10491
     
    340327
    341328        /* Cache old port data: */
    342         oldParallelData.m_ports << oldPortData;
     329        m_pCache->child(iSlot).cacheInitialData(oldPortData);
    343330    }
    344331
     
    358345
    359346    /* For each port: */
    360     for (int iPort = 0; iPort < m_pTabWidget->count(); ++iPort)
     347    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    361348    {
    362349        /* Get port page: */
    363         UIMachineSettingsParallel *pPage = qobject_cast<UIMachineSettingsParallel*>(m_pTabWidget->widget(iPort));
     350        UIMachineSettingsParallel *pPage = qobject_cast<UIMachineSettingsParallel*>(m_pTabWidget->widget(iSlot));
    364351
    365352        /* Load old port data from the cache: */
    366         pPage->loadPortData(m_pCache->base().m_ports.at(iPort));
     353        pPage->loadPortData(m_pCache->child(iSlot).base());
    367354
    368355        /* Setup tab order: */
     
    386373
    387374    /* For each port: */
    388     for (int iPort = 0; iPort < m_pTabWidget->count(); ++iPort)
     375    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    389376    {
    390377        /* Getting port page: */
    391         UIMachineSettingsParallel *pTab = qobject_cast<UIMachineSettingsParallel*>(m_pTabWidget->widget(iPort));
     378        UIMachineSettingsParallel *pTab = qobject_cast<UIMachineSettingsParallel*>(m_pTabWidget->widget(iSlot));
    392379
    393380        /* Prepare new port data: */
     
    398385
    399386        /* Cache new port data: */
    400         newParallelData.m_ports << newPortData;
     387        m_pCache->child(iSlot).cacheCurrentData(newPortData);
    401388    }
    402389
     
    496483{
    497484    /* Get the count of parallel port tabs: */
    498     for (int iPort = 0; iPort < m_pTabWidget->count(); ++iPort)
    499     {
    500         m_pTabWidget->setTabEnabled(iPort,
     485    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
     486    {
     487        m_pTabWidget->setTabEnabled(iSlot,
    501488                                    isMachineOffline() ||
    502489                                    (isMachineInValidMode() &&
    503                                      m_pCache->base().m_ports.size() > iPort &&
    504                                      m_pCache->base().m_ports.at(iPort).m_fPortEnabled));
    505         UIMachineSettingsParallel *pTab = qobject_cast<UIMachineSettingsParallel*>(m_pTabWidget->widget(iPort));
     490                                     m_pCache->childCount() > iSlot &&
     491                                     m_pCache->child(iSlot).base().m_fPortEnabled));
     492        UIMachineSettingsParallel *pTab = qobject_cast<UIMachineSettingsParallel*>(m_pTabWidget->widget(iSlot));
    506493        pTab->polishTab();
    507494    }
     
    568555}
    569556
    570 bool UIMachineSettingsParallelPage::savePortData(int iPort)
     557bool UIMachineSettingsParallelPage::savePortData(int iSlot)
    571558{
    572559    /* Prepare result: */
    573560    bool fSuccess = true;
    574561    /* Save adapter settings from the cache: */
    575     if (fSuccess)
     562    if (fSuccess && m_pCache->child(iSlot).wasChanged())
    576563    {
    577564        /* Get old parallel data from the cache: */
    578         const UIDataSettingsMachineParallelPort &oldPortData = m_pCache->base().m_ports.at(iPort);
     565        const UIDataSettingsMachineParallelPort &oldPortData = m_pCache->child(iSlot).base();
    579566        /* Get new parallel data from the cache: */
    580         const UIDataSettingsMachineParallelPort &newPortData = m_pCache->data().m_ports.at(iPort);
    581 
    582         /* Make sure port data was changed: */
    583         if (newPortData != oldPortData)
    584         {
    585             /* Get parallel port for further activities: */
    586             CParallelPort comPort = m_machine.GetParallelPort(iPort);
    587             fSuccess = m_machine.isOk() && comPort.isNotNull();
     567        const UIDataSettingsMachineParallelPort &newPortData = m_pCache->child(iSlot).data();
     568
     569        /* Get parallel port for further activities: */
     570        CParallelPort comPort = m_machine.GetParallelPort(iSlot);
     571        fSuccess = m_machine.isOk() && comPort.isNotNull();
     572
     573        /* Show error message if necessary: */
     574        if (!fSuccess)
     575            msgCenter().cannotSaveParallelSettings(m_machine, this);
     576        else
     577        {
     578            /* Save whether the port is enabled: */
     579            if (fSuccess && isMachineOffline() && newPortData.m_fPortEnabled != oldPortData.m_fPortEnabled)
     580            {
     581                comPort.SetEnabled(newPortData.m_fPortEnabled);
     582                fSuccess = comPort.isOk();
     583            }
     584            /* Save port IRQ: */
     585            if (fSuccess && isMachineOffline() && newPortData.m_uIRQ != oldPortData.m_uIRQ)
     586            {
     587                comPort.SetIRQ(newPortData.m_uIRQ);
     588                fSuccess = comPort.isOk();
     589            }
     590            /* Save port IO base: */
     591            if (fSuccess && isMachineOffline() && newPortData.m_uIOBase != oldPortData.m_uIOBase)
     592            {
     593                comPort.SetIOBase(newPortData.m_uIOBase);
     594                fSuccess = comPort.isOk();
     595            }
     596            /* Save port path: */
     597            if (fSuccess && isMachineOffline() && newPortData.m_strPath != oldPortData.m_strPath)
     598            {
     599                comPort.SetPath(newPortData.m_strPath);
     600                fSuccess = comPort.isOk();
     601            }
    588602
    589603            /* Show error message if necessary: */
    590604            if (!fSuccess)
    591                 msgCenter().cannotSaveParallelSettings(m_machine, this);
    592             else
    593             {
    594                 /* Save whether the port is enabled: */
    595                 if (fSuccess && isMachineOffline() && newPortData.m_fPortEnabled != oldPortData.m_fPortEnabled)
    596                 {
    597                     comPort.SetEnabled(newPortData.m_fPortEnabled);
    598                     fSuccess = comPort.isOk();
    599                 }
    600                 /* Save port IRQ: */
    601                 if (fSuccess && isMachineOffline() && newPortData.m_uIRQ != oldPortData.m_uIRQ)
    602                 {
    603                     comPort.SetIRQ(newPortData.m_uIRQ);
    604                     fSuccess = comPort.isOk();
    605                 }
    606                 /* Save port IO base: */
    607                 if (fSuccess && isMachineOffline() && newPortData.m_uIOBase != oldPortData.m_uIOBase)
    608                 {
    609                     comPort.SetIOBase(newPortData.m_uIOBase);
    610                     fSuccess = comPort.isOk();
    611                 }
    612                 /* Save port path: */
    613                 if (fSuccess && isMachineOffline() && newPortData.m_strPath != oldPortData.m_strPath)
    614                 {
    615                     comPort.SetPath(newPortData.m_strPath);
    616                     fSuccess = comPort.isOk();
    617                 }
    618 
    619                 /* Show error message if necessary: */
    620                 if (!fSuccess)
    621                     msgCenter().cannotSaveParallelPortSettings(comPort, this);
    622             }
     605                msgCenter().cannotSaveParallelPortSettings(comPort, this);
    623606        }
    624607    }
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsParallel.h

    r66501 r66559  
    2727class UIMachineSettingsParallelPage;
    2828struct UIDataSettingsMachineParallel;
    29 typedef UISettingsCache<UIDataSettingsMachineParallel> UISettingsCacheMachineParallel;
     29struct UIDataSettingsMachineParallelPort;
     30typedef UISettingsCache<UIDataSettingsMachineParallelPort> UISettingsCacheMachineParallelPort;
     31typedef UISettingsCachePool<UIDataSettingsMachineParallel, UISettingsCacheMachineParallelPort> UISettingsCacheMachineParallel;
    3032
    3133
     
    8082    bool saveParallelData();
    8183    /** Saves existing port data from the cache. */
    82     bool savePortData(int iPort);
     84    bool savePortData(int iSlot);
    8385
    8486    /** Holds the tab-widget instance. */
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSerial.cpp

    r66555 r66559  
    9191{
    9292    /** Constructs data. */
    93     UIDataSettingsMachineSerial()
    94         : m_ports(QList<UIDataSettingsMachineSerialPort>())
    95     {}
     93    UIDataSettingsMachineSerial() {}
    9694
    9795    /** Returns whether the @a other passed data is equal to this one. */
    98     bool equal(const UIDataSettingsMachineSerial &other) const
    99     {
    100         return true
    101                && (m_ports == other.m_ports)
    102                ;
    103     }
    104 
    105     /** Returns whether the @a other passed data is equal to this one. */
    106     bool operator==(const UIDataSettingsMachineSerial &other) const { return equal(other); }
     96    bool operator==(const UIDataSettingsMachineSerial & /* other */) const { return true; }
    10797    /** Returns whether the @a other passed data is different from this one. */
    108     bool operator!=(const UIDataSettingsMachineSerial &other) const { return !equal(other); }
    109 
    110     /** Holds the port list. */
    111     QList<UIDataSettingsMachineSerialPort> m_ports;
     98    bool operator!=(const UIDataSettingsMachineSerial & /* other */) const { return false; }
    11299};
    113100
     
    390377
    391378        /* Cache old port data: */
    392         oldSerialData.m_ports << oldPortData;
     379        m_pCache->child(iSlot).cacheInitialData(oldPortData);
    393380    }
    394381
     
    408395
    409396    /* For each port: */
    410     for (int iPort = 0; iPort < m_pTabWidget->count(); ++iPort)
     397    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    411398    {
    412399        /* Get port page: */
    413         UIMachineSettingsSerial *pPage = qobject_cast<UIMachineSettingsSerial*>(m_pTabWidget->widget(iPort));
     400        UIMachineSettingsSerial *pPage = qobject_cast<UIMachineSettingsSerial*>(m_pTabWidget->widget(iSlot));
    414401
    415402        /* Load old port data from the cache: */
    416         pPage->loadPortData(m_pCache->base().m_ports.at(iPort));
     403        pPage->loadPortData(m_pCache->child(iSlot).base());
    417404
    418405        /* Setup tab order: */
     
    436423
    437424    /* For each port: */
    438     for (int iPort = 0; iPort < m_pTabWidget->count(); ++iPort)
     425    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
    439426    {
    440427        /* Getting port page: */
    441         UIMachineSettingsSerial *pTab = qobject_cast<UIMachineSettingsSerial*>(m_pTabWidget->widget(iPort));
     428        UIMachineSettingsSerial *pTab = qobject_cast<UIMachineSettingsSerial*>(m_pTabWidget->widget(iSlot));
    442429
    443430        /* Prepare new port data: */
     
    448435
    449436        /* Cache new port data: */
    450         newSerialData.m_ports << newPortData;
     437        m_pCache->child(iSlot).cacheCurrentData(newPortData);
    451438    }
    452439
     
    553540{
    554541    /* Get the count of serial port tabs: */
    555     for (int iPort = 0; iPort < m_pTabWidget->count(); ++iPort)
    556     {
    557         m_pTabWidget->setTabEnabled(iPort,
     542    for (int iSlot = 0; iSlot < m_pTabWidget->count(); ++iSlot)
     543    {
     544        m_pTabWidget->setTabEnabled(iSlot,
    558545                                    isMachineOffline() ||
    559546                                    (isMachineInValidMode() &&
    560                                      m_pCache->base().m_ports.size() > iPort &&
    561                                      m_pCache->base().m_ports.at(iPort).m_fPortEnabled));
    562         UIMachineSettingsSerial *pTab = qobject_cast<UIMachineSettingsSerial*>(m_pTabWidget->widget(iPort));
     547                                     m_pCache->childCount() > iSlot &&
     548                                     m_pCache->child(iSlot).base().m_fPortEnabled));
     549        UIMachineSettingsSerial *pTab = qobject_cast<UIMachineSettingsSerial*>(m_pTabWidget->widget(iSlot));
    563550        pTab->polishTab();
    564551    }
     
    625612}
    626613
    627 bool UIMachineSettingsSerialPage::savePortData(int iPort)
     614bool UIMachineSettingsSerialPage::savePortData(int iSlot)
    628615{
    629616    /* Prepare result: */
    630617    bool fSuccess = true;
    631618    /* Save adapter settings from the cache: */
    632     if (fSuccess)
     619    if (fSuccess && m_pCache->child(iSlot).wasChanged())
    633620    {
    634621        /* Get old serial data from the cache: */
    635         const UIDataSettingsMachineSerialPort &oldPortData = m_pCache->base().m_ports.at(iPort);
     622        const UIDataSettingsMachineSerialPort &oldPortData = m_pCache->child(iSlot).base();
    636623        /* Get new serial data from the cache: */
    637         const UIDataSettingsMachineSerialPort &newPortData = m_pCache->data().m_ports.at(iPort);
    638 
    639         /* Make sure port data was changed: */
    640         if (newPortData != oldPortData)
     624        const UIDataSettingsMachineSerialPort &newPortData = m_pCache->child(iSlot).data();
     625
     626        /* Get serial port for further activities: */
     627        CSerialPort comPort = m_machine.GetSerialPort(iSlot);
     628        fSuccess = m_machine.isOk() && comPort.isNotNull();
     629
     630        /* Show error message if necessary: */
     631        if (!fSuccess)
     632            msgCenter().cannotSaveSerialSettings(m_machine, this);
     633        else
    641634        {
    642             /* Get serial port for further activities: */
    643             CSerialPort comPort = m_machine.GetSerialPort(iPort);
    644             fSuccess = m_machine.isOk() && comPort.isNotNull();
     635            // This *must* be first.
     636            // If the requested host mode is changed to disconnected we should do it first.
     637            // That allows to automatically fulfill the requirements for some of the settings below.
     638            /* Save port host mode: */
     639            if (   fSuccess && isMachineOffline()
     640                && newPortData.m_hostMode != oldPortData.m_hostMode
     641                && newPortData.m_hostMode == KPortMode_Disconnected)
     642            {
     643                comPort.SetHostMode(newPortData.m_hostMode);
     644                fSuccess = comPort.isOk();
     645            }
     646            /* Save whether the port is enabled: */
     647            if (fSuccess && isMachineOffline() && newPortData.m_fPortEnabled != oldPortData.m_fPortEnabled)
     648            {
     649                comPort.SetEnabled(newPortData.m_fPortEnabled);
     650                fSuccess = comPort.isOk();
     651            }
     652            /* Save port IRQ: */
     653            if (fSuccess && isMachineOffline() && newPortData.m_uIRQ != oldPortData.m_uIRQ)
     654            {
     655                comPort.SetIRQ(newPortData.m_uIRQ);
     656                fSuccess = comPort.isOk();
     657            }
     658            /* Save port IO base: */
     659            if (fSuccess && isMachineOffline() && newPortData.m_uIOBase != oldPortData.m_uIOBase)
     660            {
     661                comPort.SetIOBase(newPortData.m_uIOBase);
     662                fSuccess = comPort.isOk();
     663            }
     664            /* Save whether the port is server: */
     665            if (fSuccess && isMachineOffline() && newPortData.m_fServer != oldPortData.m_fServer)
     666            {
     667                comPort.SetServer(newPortData.m_fServer);
     668                fSuccess = comPort.isOk();
     669            }
     670            /* Save port path: */
     671            if (fSuccess && isMachineOffline() && newPortData.m_strPath != oldPortData.m_strPath)
     672            {
     673                comPort.SetPath(newPortData.m_strPath);
     674                fSuccess = comPort.isOk();
     675            }
     676            // This *must* be last.
     677            // The host mode will be changed to disconnected if some of the necessary
     678            // settings above will not meet the requirements for the selected mode.
     679            /* Save port host mode: */
     680            if (   fSuccess && isMachineOffline()
     681                && newPortData.m_hostMode != oldPortData.m_hostMode
     682                && newPortData.m_hostMode != KPortMode_Disconnected)
     683            {
     684                comPort.SetHostMode(newPortData.m_hostMode);
     685                fSuccess = comPort.isOk();
     686            }
    645687
    646688            /* Show error message if necessary: */
    647689            if (!fSuccess)
    648                 msgCenter().cannotSaveSerialSettings(m_machine, this);
    649             else
    650             {
    651                 // This *must* be first.
    652                 // If the requested host mode is changed to disconnected we should do it first.
    653                 // That allows to automatically fulfill the requirements for some of the settings below.
    654                 /* Save port host mode: */
    655                 if (   fSuccess && isMachineOffline()
    656                     && newPortData.m_hostMode != oldPortData.m_hostMode
    657                     && newPortData.m_hostMode == KPortMode_Disconnected)
    658                 {
    659                     comPort.SetHostMode(newPortData.m_hostMode);
    660                     fSuccess = comPort.isOk();
    661                 }
    662                 /* Save whether the port is enabled: */
    663                 if (fSuccess && isMachineOffline() && newPortData.m_fPortEnabled != oldPortData.m_fPortEnabled)
    664                 {
    665                     comPort.SetEnabled(newPortData.m_fPortEnabled);
    666                     fSuccess = comPort.isOk();
    667                 }
    668                 /* Save port IRQ: */
    669                 if (fSuccess && isMachineOffline() && newPortData.m_uIRQ != oldPortData.m_uIRQ)
    670                 {
    671                     comPort.SetIRQ(newPortData.m_uIRQ);
    672                     fSuccess = comPort.isOk();
    673                 }
    674                 /* Save port IO base: */
    675                 if (fSuccess && isMachineOffline() && newPortData.m_uIOBase != oldPortData.m_uIOBase)
    676                 {
    677                     comPort.SetIOBase(newPortData.m_uIOBase);
    678                     fSuccess = comPort.isOk();
    679                 }
    680                 /* Save whether the port is server: */
    681                 if (fSuccess && isMachineOffline() && newPortData.m_fServer != oldPortData.m_fServer)
    682                 {
    683                     comPort.SetServer(newPortData.m_fServer);
    684                     fSuccess = comPort.isOk();
    685                 }
    686                 /* Save port path: */
    687                 if (fSuccess && isMachineOffline() && newPortData.m_strPath != oldPortData.m_strPath)
    688                 {
    689                     comPort.SetPath(newPortData.m_strPath);
    690                     fSuccess = comPort.isOk();
    691                 }
    692                 // This *must* be last.
    693                 // The host mode will be changed to disconnected if some of the necessary
    694                 // settings above will not meet the requirements for the selected mode.
    695                 /* Save port host mode: */
    696                 if (   fSuccess && isMachineOffline()
    697                     && newPortData.m_hostMode != oldPortData.m_hostMode
    698                     && newPortData.m_hostMode != KPortMode_Disconnected)
    699                 {
    700                     comPort.SetHostMode(newPortData.m_hostMode);
    701                     fSuccess = comPort.isOk();
    702                 }
    703 
    704                 /* Show error message if necessary: */
    705                 if (!fSuccess)
    706                     msgCenter().cannotSaveSerialPortSettings(comPort, this);
    707             }
     690                msgCenter().cannotSaveSerialPortSettings(comPort, this);
    708691        }
    709692    }
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSerial.h

    r66502 r66559  
    2727class UIMachineSettingsSerialPage;
    2828struct UIDataSettingsMachineSerial;
    29 typedef UISettingsCache<UIDataSettingsMachineSerial> UISettingsCacheMachineSerial;
     29struct UIDataSettingsMachineSerialPort;
     30typedef UISettingsCache<UIDataSettingsMachineSerialPort> UISettingsCacheMachineSerialPort;
     31typedef UISettingsCachePool<UIDataSettingsMachineSerial, UISettingsCacheMachineSerialPort> UISettingsCacheMachineSerial;
    3032
    3133
     
    8082    bool saveSerialData();
    8183    /** Saves existing port data from the cache. */
    82     bool savePortData(int iPort);
     84    bool savePortData(int iSlot);
    8385
    8486    /** Holds the tab-widget instance. */
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