VirtualBox

Changeset 101693 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Oct 31, 2023 4:46:47 PM (13 months ago)
Author:
vboxsync
Message:

FE/Qt: bugref:10513: Extend tree-view UISettingsSelector to be able to hide items; Hide them for the cases when all related editors are hidden as well.

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

Legend:

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

    r101662 r101693  
    928928            /* Remember page-frame for referencing: */
    929929            m_frames[cId] = pFrame;
     930
     931            /* Notify about frame visibility changes: */
     932            connect(pFrame, &UISettingsPageFrame::sigVisibilityChange,
     933                    this, &UIAdvancedSettingsDialog::sltHandleFrameVisibilityChange);
    930934        }
    931935    }
     
    10911095    foreach (UISettingsPageFrame *pFrame, m_frames.values())
    10921096        pFrame->filterOut(m_pCheckBoxMode->isChecked(), m_pEditorFilter->text());
     1097}
     1098
     1099void UIAdvancedSettingsDialog::sltHandleFrameVisibilityChange(bool fVisible)
     1100{
     1101    /* Acquire frame: */
     1102    UISettingsPageFrame *pFrame = qobject_cast<UISettingsPageFrame*>(sender());
     1103    AssertPtrReturnVoid(pFrame);
     1104
     1105    /* Update selector item visibility: */
     1106    const int iId = m_frames.key(pFrame);
     1107    m_pSelector->setItemVisible(iId, fVisible);
    10931108}
    10941109
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/UIAdvancedSettingsDialog.h

    r101662 r101693  
    200200    /** Handles changes done to mode checkbox or filter editor. */
    201201    void sltHandleModeOrFilterChanged();
     202    /** Handles frame visivility changes. */
     203    void sltHandleFrameVisibilityChange(bool fVisible);
    202204
    203205private:
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.cpp

    r101692 r101693  
    144144    virtual void setText(const QString &strText) { m_strText = strText; }
    145145
     146    /** Returns whether item is hidden. */
     147    virtual bool isHidden() const { return m_fHidden; }
     148    /** Defines item is @a fHidden. */
     149    virtual void setHidden(bool fHidden) { m_fHidden = fHidden; }
     150
    146151    /** Returns the number of children. */
    147152    virtual int childCount() const RT_OVERRIDE { return m_children.size(); }
     
    171176    /** Holds the item text. */
    172177    QString  m_strText;
     178    /** Holds whether item is hidden. */
     179    bool     m_fHidden;
    173180
    174181    /** Holds the list of children. */
     
    213220        R_ItemName,
    214221        R_ItemNamePoint,
     222        R_ItemHidden,
    215223    };
    216224
     
    392400UISelectorTreeViewItem::UISelectorTreeViewItem(QITreeView *pParent)
    393401    : QITreeViewItem(pParent)
     402    , m_fHidden(false)
    394403{
    395404}
     
    403412    , m_icon(icon)
    404413    , m_strLink(strLink)
     414    , m_fHidden(false)
    405415{
    406416    if (pParentItem)
     
    657667                          sizeHint.height() / 2 + fm.ascent() / 2 - 1 /* base line */);
    658668        }
     669        case R_ItemHidden:
     670        {
     671            if (UISelectorTreeViewItem *pItem = indexToItem(specifiedIndex))
     672                return pItem->isHidden() ? "hide" : "show";
     673            return QString();
     674        }
    659675
    660676        default:
     
    678694            {
    679695                pItem->setText(aValue.toString());
     696                emit dataChanged(specifiedIndex, specifiedIndex);
     697                return true;
     698            }
     699            return false;
     700        }
     701        case R_ItemHidden:
     702        {
     703            if (UISelectorTreeViewItem *pItem = indexToItem(specifiedIndex))
     704            {
     705                pItem->setHidden(aValue.toBool());
    680706                emit dataChanged(specifiedIndex, specifiedIndex);
    681707                return true;
     
    941967}
    942968
     969void UISettingsSelectorTreeView::setItemVisible(int iID, bool fVisible)
     970{
     971    /* Look for the tree-view item to assign the text: */
     972    QModelIndex specifiedIndex = m_pModel->findItem(iID);
     973    if (specifiedIndex.isValid())
     974        m_pModel->setData(specifiedIndex, !fVisible, UISelectorModel::R_ItemHidden);
     975}
     976
    943977void UISettingsSelectorTreeView::setItemText(int iID, const QString &strText)
    944978{
     
    10151049                /* Configure proxy-model: */
    10161050                m_pModelProxy->setSortRole(UISelectorModel::R_ItemId);
     1051                m_pModelProxy->setFilterRole(UISelectorModel::R_ItemHidden);
     1052                m_pModelProxy->setFilterFixedString("show");
    10171053                m_pModelProxy->setSourceModel(m_pModel);
    10181054                m_pTreeView->setModel(m_pModelProxy);
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsSelector.h

    r101692 r101693  
    8686                             int iID, const QString &strLink, UISettingsPage *pPage = 0, int iParentID = -1) = 0;
    8787
     88    /** Defines whether section with @a iID is @a fVisible. */
     89    virtual void setItemVisible(int iID, bool fVisible) { Q_UNUSED(iID); Q_UNUSED(fVisible); }
     90
    8891    /** Defines the @a strText for section with @a iID. */
    8992    virtual void setItemText(int iID, const QString &strText);
     
    158161                             int iID, const QString &strLink, UISettingsPage *pPage = 0, int iParentID = -1) RT_OVERRIDE;
    159162
     163    /** Defines whether section with @a iID is @a fVisible. */
     164    virtual void setItemVisible(int iID, bool fVisible) RT_OVERRIDE;
     165
    160166    /** Defines the @a strText for section with @a iID. */
    161167    virtual void setItemText(int iID, const QString &strText) RT_OVERRIDE;
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/editors/UIEditor.cpp

    r101608 r101693  
    105105    /* Otherwise update widget visibility usual way: */
    106106    else
     107    {
     108        const bool fVisibilityChanged = isVisible() != fVisible;
    107109        setVisible(fVisible);
     110        if (fVisibilityChanged)
     111            emit sigVisibilityChange(fVisible);
     112    }
    108113
    109114    /* Finally make sure layouts are freshly
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/editors/UIEditor.h

    r101451 r101693  
    4343    Q_OBJECT;
    4444
     45signals:
     46
     47    /** Notifies listeners about visibility changes. */
     48    void sigVisibilityChange(bool fVisible);
     49
    4550public:
    4651
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