VirtualBox

Changeset 100812 in vbox


Ignore:
Timestamp:
Aug 6, 2023 12:02:52 PM (20 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158706
Message:

FE/Qt: ​bugref:10496, bugref:9080. A first pass on VISO creator's settings dialog/panel.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/medium/viso
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp

    r100640 r100812  
    2929#include <QCheckBox>
    3030#include <QGridLayout>
    31 #include <QGraphicsBlurEffect>
    3231#include <QGroupBox>
    3332#include <QMenuBar>
     
    3534#include <QPushButton>
    3635#include <QStyle>
    37 #include <QStackedLayout>
    3836#include <QTextStream>
    3937
     
    6664*********************************************************************************************************************************/
    6765
    68 class SHARED_LIBRARY_STUFF UIVisoSettingWidget : public QIWithRetranslateUI<QGroupBox>
     66class SHARED_LIBRARY_STUFF UIVisoSettingWidget : public QIWithRetranslateUI<QWidget>
    6967{
    7068    Q_OBJECT;
     
    7270signals:
    7371
    74     void sigClosed(bool fWithAccept);
     72    void sigSettingsChanged();
    7573
    7674public:
     
    8280
    8381private slots:
    84 
    85     void sltButtonBoxOk();
    86     void sltButtonBoxCancel();
    8782
    8883private:
     
    9893    QCheckBox    *m_pShowHiddenObjectsCheckBox;
    9994    QILabel      *m_pShowHiddenObjectsLabel;
    100     QIDialogButtonBox *m_pButtonBox;
    10195};
    10296
     
    107101
    108102UIVisoSettingWidget::UIVisoSettingWidget(QWidget *pParent)
    109     :QIWithRetranslateUI<QGroupBox>(pParent)
     103    :QIWithRetranslateUI<QWidget>(pParent)
    110104    , m_pTabWidget(0)
    111105    , m_pVisoNameLabel(0)
     
    115109    , m_pShowHiddenObjectsCheckBox(0)
    116110    , m_pShowHiddenObjectsLabel(0)
    117     , m_pButtonBox(0)
    118111{
    119112    prepareObjects();
     
    159152    pVisoOptionsGridLayout->addWidget(m_pCustomOptionsLineEdit, iRow, 1, 1, 1, Qt::AlignTop);
    160153
    161 
    162154    ++iRow;
    163155    pVisoOptionsGridLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding), iRow, 0, 1, 2);
     
    172164    iRow = 0;
    173165    m_pShowHiddenObjectsCheckBox = new QCheckBox;
    174     m_pShowHiddenObjectsLabel = new QILabel(QApplication::translate("UIVisoCreatorWidget", "Show Hidden Objects"));
     166    m_pShowHiddenObjectsLabel = new QILabel(QApplication::translate("UIVisoCreatorWidget", "Show Hidden Objects:"));
    175167    m_pShowHiddenObjectsLabel->setBuddy(m_pShowHiddenObjectsCheckBox);
    176168    pDialogSettingsContainerLayout->addWidget(m_pShowHiddenObjectsLabel,    iRow, 0, 1, 1, Qt::AlignTop);
     
    179171    ++iRow;
    180172    pDialogSettingsContainerLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding), iRow, 0, 1, 2);
    181 
    182     m_pButtonBox = new QIDialogButtonBox;
    183     AssertReturnVoid(m_pButtonBox);
    184     m_pButtonBox->setDoNotPickDefaultButton(true);
    185     m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
    186     m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(QKeySequence(Qt::Key_Escape));
    187     pMainLayout->addWidget(m_pButtonBox);
    188 
    189173    retranslateUi();
    190174}
     
    202186        m_pCustomOptionsLineEdit->setToolTip(QApplication::translate("UIVisoCreatorWidget", "The list of suctom options delimited with ';'."));
    203187    if (m_pShowHiddenObjectsLabel)
    204         m_pShowHiddenObjectsLabel->setText(QApplication::translate("UIVisoCreatorWidget", "Show Hidden Objects"));
     188        m_pShowHiddenObjectsLabel->setText(QApplication::translate("UIVisoCreatorWidget", "Show Hidden Objects:"));
    205189    if (m_pShowHiddenObjectsCheckBox)
    206190        m_pShowHiddenObjectsCheckBox->setToolTip(QApplication::translate("UIVisoCreatorWidget", "When checked, "
     
    210194void UIVisoSettingWidget::prepareConnections()
    211195{
    212     if (m_pButtonBox)
    213     {
    214         connect(m_pButtonBox, &QIDialogButtonBox::rejected, this, &UIVisoSettingWidget::sltButtonBoxCancel);
    215         connect(m_pButtonBox, &QIDialogButtonBox::accepted, this, &UIVisoSettingWidget::sltButtonBoxOk);
    216     }
    217 }
    218 
    219 void UIVisoSettingWidget::sltButtonBoxOk()
    220 {
    221     emit sigClosed(true);
    222 }
    223 
    224 void UIVisoSettingWidget::sltButtonBoxCancel()
    225 {
    226     emit sigClosed(false);
     196    if (m_pVisoNameLineEdit)
     197        connect(m_pVisoNameLineEdit, &QILineEdit::textChanged, this, &UIVisoSettingWidget::sigSettingsChanged);
     198    if (m_pCustomOptionsLineEdit)
     199        connect(m_pCustomOptionsLineEdit, &QILineEdit::textChanged, this, &UIVisoSettingWidget::sigSettingsChanged);
     200    if (m_pShowHiddenObjectsCheckBox)
     201        connect(m_pShowHiddenObjectsCheckBox, &QCheckBox::toggled, this, &UIVisoSettingWidget::sigSettingsChanged);
    227202}
    228203
     
    271246    , m_pActionPool(pActionPool)
    272247    , m_fShowToolBar(fShowToolBar)
    273     , m_fShowSettingsDialog(false)
    274248    , m_pSettingsWidget(0)
    275249    , m_pBrowserContainerWidget(0)
    276     , m_pStackedLayout(0)
    277250    , m_strVisoFilePath(strVisoFilePath)
    278 {
    279     m_visoOptions.m_strVisoName = !strMachineName.isEmpty() ? strMachineName : "ad-hoc";
     251    , m_fShowSettingsDialog(false)
     252{
     253    m_settings.m_strVisoName = !strMachineName.isEmpty() ? strMachineName : "ad-hoc";
    280254    prepareWidgets();
    281255    populateMenuMainToolbar();
    282256    prepareConnections();
    283257    retranslateUi();
     258    if (m_pActionSettings)
     259        sltSettingsActionToggled(m_pActionSettings->isChecked());
    284260}
    285261
     
    300276const QString &UIVisoCreatorWidget::visoName() const
    301277{
    302     return m_visoOptions.m_strVisoName;
     278    return m_settings.m_strVisoName;
    303279}
    304280
    305281void UIVisoCreatorWidget::setVisoName(const QString& strName)
    306282{
    307     if (m_visoOptions.m_strVisoName == strName)
     283    if (m_settings.m_strVisoName == strName)
    308284        return;
    309     m_visoOptions.m_strVisoName = strName;
    310     emit sigVisoNameChanged(m_visoOptions.m_strVisoName);
     285    m_settings.m_strVisoName = strName;
     286    emit sigVisoNameChanged(m_settings.m_strVisoName);
    311287}
    312288
     
    321297const QStringList &UIVisoCreatorWidget::customOptions() const
    322298{
    323     return m_visoOptions.m_customOptions;
     299    return m_settings.m_customOptions;
    324300}
    325301
     
    345321void UIVisoCreatorWidget::retranslateUi()
    346322{
    347     if (m_pSettingsWidget)
    348         m_pSettingsWidget->setTitle(tr("Settings"));
    349 }
    350 
    351 void UIVisoCreatorWidget::resizeEvent(QResizeEvent *pEvent)
    352 {
    353     Q_UNUSED(pEvent);
    354     if (m_pOverlayWidget && m_fShowSettingsDialog)
    355     {
    356 #ifndef VBOX_IS_QT6_OR_LATER
    357         const QPixmap *pLabelPixmap = m_pOverlayWidget->pixmap();
    358         if (pLabelPixmap)
    359         {
    360             QPixmap newPixmap = pLabelPixmap->scaled(m_pOverlayWidget->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    361             if (!newPixmap.isNull())
    362                 m_pOverlayWidget->setPixmap(newPixmap);
    363         }
    364 #else
    365         QPixmap labelPixmap = m_pOverlayWidget->pixmap();
    366         QPixmap newPixmap = labelPixmap.scaled(m_pOverlayWidget->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    367         if (!newPixmap.isNull())
    368             m_pOverlayWidget->setPixmap(newPixmap);
    369 #endif
    370     }
    371323}
    372324
     
    379331void UIVisoCreatorWidget::sltSettingsActionToggled(bool fChecked)
    380332{
    381     if (m_fShowSettingsDialog == fChecked)
    382         return;
    383333    toggleSettingsWidget(fChecked);
    384 }
    385 
    386 void UIVisoCreatorWidget::sltSettingsDialogClosed(bool fAccepted)
    387 {
    388     toggleSettingsWidget(false);
    389     if (m_pActionSettings)
    390         m_pActionSettings->setChecked(false);
    391     /* Update settings:*/
    392     if (fAccepted && m_pSettingsWidget)
    393     {
    394         Settings newSettings = m_pSettingsWidget->settings();
    395         setVisoName(newSettings.m_strVisoName);
    396         if (m_visoOptions.m_customOptions != newSettings.m_customOptions)
    397             m_visoOptions.m_customOptions = newSettings.m_customOptions;
    398         if (m_visoOptions.m_fShowHiddenObjects != newSettings.m_fShowHiddenObjects)
    399             m_visoOptions.m_fShowHiddenObjects = newSettings.m_fShowHiddenObjects;
    400     }
    401 }
    402 
    403 void UIVisoCreatorWidget::sltBrowserTreeViewVisibilityChanged(bool fVisible)
    404 {
    405     Q_UNUSED(fVisible);
    406334}
    407335
     
    473401    if (m_pRemoveISOAction)
    474402        m_pRemoveISOAction->setEnabled(fImported);
     403}
     404
     405void UIVisoCreatorWidget::sltSettingsChanged()
     406{
     407    AssertReturnVoid(m_pSettingsWidget);
     408    const Settings &settings = m_pSettingsWidget->settings();
     409    setVisoName(settings.m_strVisoName);
     410    if (m_settings.m_customOptions != settings.m_customOptions)
     411        m_settings.m_customOptions = settings.m_customOptions;
     412    if (m_settings.m_fShowHiddenObjects != settings.m_fShowHiddenObjects)
     413        m_settings.m_fShowHiddenObjects = settings.m_fShowHiddenObjects;
    475414}
    476415
     
    506445        m_pToolBar->setIconSize(QSize(iIconMetric, iIconMetric));
    507446        m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    508         m_pMainLayout->addWidget(m_pToolBar);
    509     }
    510 
    511     m_pStackedLayout = new QStackedLayout;
    512     AssertPtrReturnVoid(m_pStackedLayout);
    513     m_pMainLayout->addLayout(m_pStackedLayout);
     447    }
    514448
    515449    m_pBrowserContainerWidget = new QWidget;
     
    532466    pContainerLayout->addWidget(m_pVISOContentBrowser, 0, 5, 1, 4);
    533467
    534     m_pOverlayWidget = new QLabel(this);
    535     AssertPtrReturnVoid(m_pOverlayWidget);
    536     m_pOverlayBlurEffect = new QGraphicsBlurEffect(this);
    537     AssertPtrReturnVoid(m_pOverlayBlurEffect);
    538     m_pOverlayWidget->setGraphicsEffect(m_pOverlayBlurEffect);
    539     m_pOverlayBlurEffect->setEnabled(false);
    540     m_pOverlayBlurEffect->setBlurRadius(4);
    541 
    542468    m_pSettingsWidget = new UIVisoSettingWidget(this);
     469
    543470    AssertPtrReturnVoid(m_pSettingsWidget);
    544     m_pSettingsWidget->setMinimumWidth(300);
    545     m_pSettingsWidget->setMinimumHeight(300);
    546     m_pStackedLayout->addWidget(m_pOverlayWidget);
    547     m_pStackedLayout->addWidget(m_pBrowserContainerWidget);
    548 
    549     m_pStackedLayout->setCurrentWidget(m_pBrowserContainerWidget);
     471
     472    if (m_pToolBar)
     473        m_pMainLayout->addWidget(m_pToolBar);
     474    m_pMainLayout->addWidget(m_pBrowserContainerWidget);
     475    m_pMainLayout->addWidget(m_pSettingsWidget);
     476    m_pBrowserContainerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
     477    m_pSettingsWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
    550478    m_pSettingsWidget->hide();
    551479}
     
    574502    if (m_pSettingsWidget)
    575503    {
    576         connect(m_pSettingsWidget, &UIVisoSettingWidget::sigClosed,
    577                 this, &UIVisoCreatorWidget::sltSettingsDialogClosed);
     504        connect(m_pSettingsWidget, &UIVisoSettingWidget::sigSettingsChanged,
     505                this, &UIVisoCreatorWidget::sltSettingsChanged);
    578506    }
    579507
     
    672600void UIVisoCreatorWidget::toggleSettingsWidget(bool fShown)
    673601{
     602    AssertReturnVoid(m_pSettingsWidget);
     603    m_pSettingsWidget->setVisible(fShown);
    674604    m_fShowSettingsDialog = fShown;
     605
     606    if (fShown)
     607        m_pSettingsWidget->setSettings(m_settings);
     608
    675609    emit sigSettingDialogToggle(fShown);
    676 
    677     if (m_pSettingsWidget && m_pSettingsWidget->isVisible() != m_fShowSettingsDialog /*&& m_pOverlayWidget*/ && m_pOverlayBlurEffect)
    678     {
    679         QPixmap shot = m_pBrowserContainerWidget->grab();
    680         m_pOverlayWidget->setPixmap(shot);
    681 
    682         if (m_fShowSettingsDialog)
    683             m_pStackedLayout->setCurrentWidget(m_pOverlayWidget);
    684         else
    685             m_pStackedLayout->setCurrentWidget(m_pBrowserContainerWidget);
    686 
    687         m_pSettingsWidget->setVisible(m_fShowSettingsDialog);
    688 
    689         m_pOverlayBlurEffect->setEnabled(m_fShowSettingsDialog);
    690         m_pSettingsWidget->raise();
    691         if (m_fShowSettingsDialog)
    692         {
    693             int x = 0.5 * (m_pBrowserContainerWidget->width() - m_pSettingsWidget->width());
    694             int y = 0.5 * (m_pBrowserContainerWidget->height() - m_pSettingsWidget->height());
    695             m_pSettingsWidget->move(m_pBrowserContainerWidget->x() + x, m_pBrowserContainerWidget->y() + y);
    696         }
    697         if (m_pMainMenu)
    698             m_pMainMenu->setEnabled(!m_fShowSettingsDialog);
    699         if (m_fShowSettingsDialog)
    700             m_pSettingsWidget->setSettings(m_visoOptions);
    701     }
    702610}
    703611
     
    809717        connect(m_pVisoCreatorWidget, &UIVisoCreatorWidget::sigVisoFilePathChanged,
    810718                this, &UIVisoCreatorDialog::sltVisoFilePathChanged);
    811         connect(m_pVisoCreatorWidget, &UIVisoCreatorWidget::sigSettingDialogToggle,
    812                 this, &UIVisoCreatorDialog::sltSettingDialogToggle);
    813719        connect(m_pVisoCreatorWidget, &UIVisoCreatorWidget::sigSave,
    814720                this, &UIVisoCreatorDialog::sltSave);
     
    886792    Q_UNUSED(strPath);
    887793    updateWindowTitle();
    888 }
    889 
    890 void UIVisoCreatorDialog::sltSettingDialogToggle(bool fIsShown)
    891 {
    892     if (m_pButtonBox)
    893         m_pButtonBox->setEnabled(!fIsShown);
    894794}
    895795
     
    984884            stream << "\n";
    985885            stream << customOptions().join("\n");
     886            printf("%s\n", qPrintable(customOptions().join("\n")));
    986887        }
    987888        file.close();
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h

    r100640 r100812  
    4444/* Forward declarations: */
    4545class QGridLayout;
    46 class QGraphicsBlurEffect;
    4746class QLabel;
    48 class QStackedLayout;
    4947class QVBoxLayout;
    5048class QILabel;
     
    108106
    109107    virtual void retranslateUi() final override;
    110     virtual void resizeEvent(QResizeEvent *pEvent) final override;
    111108
    112109private slots:
     
    114111    void sltAddObjectsToViso(QStringList pathList);
    115112    void sltSettingsActionToggled(bool fChecked);
    116     void sltSettingsDialogClosed(bool fAccepted);
    117     void sltBrowserTreeViewVisibilityChanged(bool fVisible);
    118113    void sltHostBrowserTableSelectionChanged(QStringList pathList);
    119114    void sltContentBrowserTableSelectionChanged(bool fIsSelectionEmpty);
     
    123118    void sltISORemoveAction();
    124119    void sltISOContentImportedOrRemoved(bool fImported);
     120    void sltSettingsChanged();
    125121
    126122private:
     
    129125    void prepareConnections();
    130126    void prepareActions();
     127    void setVisoName(const QString& strName);
     128
    131129    /** Creates and configures the vertical toolbar. Should be called after prepareActions() */
    132130    void prepareVerticalToolBar();
     
    137135    void toggleSettingsWidget(bool fShown);
    138136    QStringList findISOFiles(const QStringList &pathList) const;
    139     void setVisoName(const QString& strName);
    140137    void setVisoFilePath(const QString& strPath);
    141138
     
    160157    QIToolBar             *m_pToolBar;
    161158    QIToolBar             *m_pVerticalToolBar;
    162     Settings            m_visoOptions;
     159    Settings               m_settings;
    163160    QMenu                 *m_pMainMenu;
    164161    QPointer<UIActionPool> m_pActionPool;
    165162    bool                   m_fShowToolBar;
    166     bool                   m_fShowSettingsDialog;
    167163    UIVisoSettingWidget   *m_pSettingsWidget;
    168164    QWidget               *m_pBrowserContainerWidget;
    169     QLabel                *m_pOverlayWidget;
    170     QGraphicsBlurEffect   *m_pOverlayBlurEffect;
    171     QStackedLayout        *m_pStackedLayout;
    172165    QString                m_strVisoFilePath;
     166    bool                   m_fShowSettingsDialog;
    173167};
    174168
     
    207201    void sltVisoNameChanged(const QString &strName);
    208202    void sltVisoFilePathChanged(const QString &strPath);
    209     void sltSettingDialogToggle(bool fIsShown);
    210203    void sltSave();
    211204
Note: See TracChangeset for help on using the changeset viewer.

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