VirtualBox

Changeset 6724 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Feb 1, 2008 4:58:20 PM (17 years ago)
Author:
vboxsync
Message:

2626 "FE/Qt support for readonly shared folders":

  1. Shared Folders List got it's third column called "Access" which represents the full/read-only access status for the shared folder related.
  2. Shared Folders List Tool-Tip reworked to QListView auto-tool-tip behavior. It appears about partially visible list-view items and contains only the hovered list-view column's text.
Location:
trunk/src/VBox/Frontends/VirtualBox/ui
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxSharedFoldersSettings.ui

    r6384 r6724  
    7575                        <property name="text">
    7676                            <string>Path</string>
     77                        </property>
     78                        <property name="clickable">
     79                            <bool>true</bool>
     80                        </property>
     81                        <property name="resizable">
     82                            <bool>true</bool>
     83                        </property>
     84                    </column>
     85                    <column>
     86                        <property name="text">
     87                            <string>Access</string>
    7788                        </property>
    7889                        <property name="clickable">
     
    227238    <variable access="private">CMachine mMachine;</variable>
    228239    <variable access="private">CConsole mConsole;</variable>
     240    <variable access="private">QString mTrFull;</variable>
     241    <variable access="private">QString mTrReadOnly;</variable>
    229242</variables>
    230243<slots>
     
    232245    <slot>tbEditPressed()</slot>
    233246    <slot>tbRemovePressed()</slot>
    234     <slot>processOnItem( QListViewItem* )</slot>
    235247    <slot>processCurrentChanged( QListViewItem* )</slot>
    236248    <slot>processDoubleClick( QListViewItem* )</slot>
     
    238250<functions>
    239251    <function access="private">init()</function>
     252    <function returnType="bool" access="private">eventFilter( QObject*, QEvent* )</function>
    240253    <function>setDialogType( int )</function>
    241254    <function returnType="int">dialogType() {return mDialogType;}</function>
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxSharedFoldersSettings.ui.h

    r6656 r6724  
    5050
    5151    VBoxRichListItem (FormatType aFormat, QListView *aParent,
    52                       const QString& aName, const QString& aNull,
    53                       const QString& aKey) :
    54         QListViewItem (aParent, aName, aNull, aKey), mFormat (aFormat)
     52                      const QString& aName, const QString& aNull1,
     53                      const QString& aNull2, const QString& aKey) :
     54        QListViewItem (aParent, aName, aNull1, aNull2, aKey), mFormat (aFormat)
    5555    {
    5656    }
     
    5858    VBoxRichListItem (FormatType aFormat, QListViewItem *aParent,
    5959                      const QString& aName, const QString& aPath,
    60                       const QString& aEdited, const QString& aWritable) :
    61         QListViewItem (aParent, aName, aPath, aEdited, aWritable), mFormat (aFormat)
    62     {
    63         mTextList << aName << aPath << aEdited << aWritable;
     60                      const QString& aAccess, const QString& aEdited) :
     61        QListViewItem (aParent, aName, aPath, aAccess, aEdited), mFormat (aFormat)
     62    {
     63        mTextList << aName << aPath << aAccess << aEdited;
    6464    }
    6565
     
    7373        /* Sorting the root items always by key: */
    7474        else if (!parent() && !aItem->parent())
    75             return QListViewItem::compare (aItem, 2, aAscending);
     75            return QListViewItem::compare (aItem, 3, aAscending);
    7676        else
    7777            return QListViewItem::compare (aItem, aColumn, aAscending);
     
    223223        inputLayout->addMultiCellWidget (mLeName, 1, 1, 1, 2);
    224224
    225                 QHBoxLayout *cbLayout = new QHBoxLayout (0, "cbLayout");
     225        QHBoxLayout *cbLayout = new QHBoxLayout (0, "cbLayout");
    226226        inputLayout->addMultiCellLayout (cbLayout, 2, 2, 0, 2);
    227                 mCbReadonly = new QCheckBox (tr ("&Read-only"), this);
     227        mCbReadonly = new QCheckBox (tr ("&Read-only"), this);
    228228        QWhatsThis::add (mCbReadonly,
    229229            tr ("When checked, the guest OS will not be able to write to the "
     
    244244        QHBoxLayout *buttonLayout = new QHBoxLayout (mainLayout, 10, "buttonLayout");
    245245        mBtOk = new QPushButton (tr ("&OK"), this, "btOk");
    246         QSpacerItem *spacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
     246        QSpacerItem *spacer = new QSpacerItem (0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
    247247        QPushButton *btCancel = new QPushButton (tr ("Cancel"), this, "btCancel");
    248248        connect (mBtOk, SIGNAL (clicked()), this, SLOT (accept()));
     
    265265        return mCbPermanent ? mCbPermanent->isChecked() : true;
    266266    }
    267         bool getWritable() { return !mCbReadonly->isChecked(); }
     267    bool getWritable() { return !mCbReadonly->isChecked(); }
    268268
    269269    void setPath (const QString &aPath) { mLePath->setText (aPath); }
     
    277277        }
    278278    }
    279         void setWritable (bool aWritable) { mCbReadonly->setChecked (!aWritable); }
     279    void setWritable (bool aWritable) { mCbReadonly->setChecked (!aWritable); }
    280280
    281281private slots:
     
    365365    connect (listView, SIGNAL (currentChanged (QListViewItem *)),
    366366             this, SLOT (processCurrentChanged (QListViewItem *)));
    367     connect (listView, SIGNAL (onItem (QListViewItem *)),
    368              this, SLOT (processOnItem (QListViewItem *)));
    369367
    370368    mIsListViewChanged = false;
     369
     370    listView->viewport()->installEventFilter (this);
     371
     372    mTrFull = tr ("Full");
     373    mTrReadOnly = tr ("Read-only");
     374}
     375
     376bool VBoxSharedFoldersSettings::eventFilter (QObject *aObject, QEvent *aEvent)
     377{
     378    /* Process & show auto Tool-Tip for partially hidden listview items. */
     379    if (aObject == listView->viewport() && aEvent->type() == QEvent::MouseMove)
     380    {
     381        QMouseEvent *e = static_cast<QMouseEvent*> (aEvent);
     382        QListViewItem *i = listView->itemAt (e->pos());
     383        VBoxRichListItem *item = i && i->rtti() == VBoxRichListItem::QIRichListItemId ?
     384            static_cast<VBoxRichListItem*> (i) : 0;
     385        if (item)
     386        {
     387            int delta = e->pos().x();
     388            int id = 0;
     389            for (; id < listView->columns(); ++ id)
     390            {
     391                if (delta < listView->columnWidth (id))
     392                    break;
     393                delta -= listView->columnWidth (id);
     394            }
     395
     396            QString curText = QToolTip::textFor (listView->viewport());
     397            QString newText = item->text (id) != item->getText (id) ?
     398                              item->getText (id) : QString::null;
     399
     400            if (newText != curText)
     401            {
     402                QToolTip::remove (listView->viewport());
     403                QToolTip::add (listView->viewport(), newText);
     404            }
     405        }
     406        else
     407            QToolTip::remove (listView->viewport());
     408    }
     409
     410    return QWidget::eventFilter (aObject, aEvent);
    371411}
    372412
     
    462502    QString key (QString::number (GlobalType));
    463503    VBoxRichListItem *root = new VBoxRichListItem (VBoxRichListItem::EllipsisEnd,
    464                                                    listView, name, QString::null, key);
     504        listView, name, QString::null, QString::null, key);
    465505    getFrom (vboxGlobal().virtualBox().GetSharedFolders().Enumerate(), root);
    466506    */
     
    473513    QString key (QString::number (MachineType));
    474514    VBoxRichListItem *root = new VBoxRichListItem (VBoxRichListItem::EllipsisEnd,
    475                                                    listView, name, QString::null, key);
     515        listView, name, QString::null, QString::null, key);
    476516    getFrom (mMachine.GetSharedFolders().Enumerate(), root);
    477517}
     
    483523    QString key (QString::number (ConsoleType));
    484524    VBoxRichListItem *root = new VBoxRichListItem (VBoxRichListItem::EllipsisEnd,
    485                                                    listView, name, QString::null, key);
     525        listView, name, QString::null, QString::null, key);
    486526    getFrom (mConsole.GetSharedFolders().Enumerate(), root);
    487527}
     
    495535        CSharedFolder sf = aEn.GetNext();
    496536        new VBoxRichListItem (VBoxRichListItem::EllipsisFile, aRoot,
    497                               sf.GetName(), sf.GetHostPath(), "not edited",
    498                               sf.GetWritable() ? "writable" : "readonly");
     537                              sf.GetName(), sf.GetHostPath(),
     538                              sf.GetWritable() ? mTrFull : mTrReadOnly,
     539                              "not edited");
    499540    }
    500541    listView->setOpen (aRoot, true);
     
    514555    Assert (mDialogType == GlobalType);
    515556    // Searching for GlobalType item's root
    516     QListViewItem *root = listView->findItem (QString::number (GlobalType), 2);
     557    QListViewItem *root = listView->findItem (QString::number (GlobalType), 3);
    517558    Assert (root);
    518559    CSharedFolderEnumerator en = vboxGlobal().virtualBox().GetSharedFolders().Enumerate();
     
    529570    Assert (mDialogType & MachineType);
    530571    /* Searching for MachineType item's root */
    531     QListViewItem *root = listView->findItem (QString::number (MachineType), 2);
     572    QListViewItem *root = listView->findItem (QString::number (MachineType), 3);
    532573    Assert (root);
    533574    CSharedFolderEnumerator en = mMachine.GetSharedFolders().Enumerate();
     
    543584    Assert (mDialogType & ConsoleType);
    544585    /* Searching for ConsoleType item's root */
    545     QListViewItem *root = listView->findItem (QString::number (ConsoleType), 2);
     586    QListViewItem *root = listView->findItem (QString::number (ConsoleType), 3);
    546587    Assert (root);
    547588    CSharedFolderEnumerator en = mConsole.GetSharedFolders().Enumerate();
     
    552593                                           QListViewItem *aRoot)
    553594{
    554     Assert (!aRoot->text (2).isNull());
    555     SFDialogType type = (SFDialogType)aRoot->text (2).toInt();
     595    Assert (!aRoot->text (3).isNull());
     596    SFDialogType type = (SFDialogType)aRoot->text (3).toInt();
    556597
    557598    /* deleting all changed folders of the list */
     
    569610            if (item->getText (0) == sf.GetName() &&
    570611                item->getText (1) == sf.GetHostPath() &&
    571                 item->getText (2) == "not edited")
     612                item->getText (3) == "not edited")
    572613                break;
    573614            item = item->nextSibling();
     
    586627            item = static_cast<VBoxRichListItem*> (iterator);
    587628        if (item && !item->getText (0).isNull() && !item->getText (1).isNull()
    588             && item->getText (2) == "edited")
     629            && item->getText (3) == "edited")
    589630            createSharedFolder (item->getText (0), item->getText (1),
    590                                                 item->getText (3) == "writable" ? true : false, type);
     631                                item->getText (2) == mTrFull ? true : false, type);
    591632        iterator = iterator->nextSibling();
    592633    }
     
    597638{
    598639    if (!aIsPermanent)
    599         return listView->findItem (QString::number (ConsoleType), 2);
     640        return listView->findItem (QString::number (ConsoleType), 3);
    600641    else if (mDialogType & MachineType)
    601         return listView->findItem (QString::number (MachineType), 2);
     642        return listView->findItem (QString::number (MachineType), 3);
    602643    else
    603         return listView->findItem (QString::number (GlobalType), 2);
     644        return listView->findItem (QString::number (GlobalType), 3);
    604645}
    605646
     
    614655        {
    615656            VBoxRichListItem *item = static_cast<VBoxRichListItem*> (*it);
    616             SFDialogType type = (SFDialogType)item->parent()->text (2).toInt();
     657            SFDialogType type = (SFDialogType)item->parent()->text (3).toInt();
    617658            usedList << qMakePair (item->getText (0), type);
    618659        }
     
    635676    /* Appending a new listview item to the root */
    636677    VBoxRichListItem *item = new VBoxRichListItem (
    637         VBoxRichListItem::EllipsisFile, root, name, path, "edited",
    638         dlg.getWritable() ? "writable" : "readonly");
     678        VBoxRichListItem::EllipsisFile, root, name, path,
     679        dlg.getWritable() ? mTrFull : mTrReadOnly, "edited");
    639680    /* Make the created item selected */
    640681    listView->ensureItemVisible (item);
     
    657698        {
    658699            VBoxRichListItem *item = static_cast<VBoxRichListItem*> (*it);
    659             SFDialogType type = (SFDialogType)item->parent()->text (2).toInt();
     700            SFDialogType type = (SFDialogType)item->parent()->text (3).toInt();
    660701            usedList << qMakePair (item->getText (0), type);
    661702        }
     
    675716    dlg.setPath (item->getText (1));
    676717    dlg.setName (item->getText (0));
    677     dlg.setPermanent ((SFDialogType)item->parent()->text (2).toInt()
     718    dlg.setPermanent ((SFDialogType)item->parent()->text (3).toInt()
    678719                      != ConsoleType);
    679     dlg.setWritable (item->getText (3) == "writable");
     720    dlg.setWritable (item->getText (2) == mTrFull);
    680721    if (dlg.exec() != QDialog::Accepted)
    681722        return;
     
    689730    Assert (root);
    690731    /* Updating an edited listview item */
    691     item->updateText (3, dlg.getWritable() ? "writable" : "readonly");
    692     item->updateText (2, "edited");
     732    item->updateText (3, "edited");
     733    item->updateText (2, dlg.getWritable() ? mTrFull : mTrReadOnly);
    693734    item->updateText (1, path);
    694735    item->updateText (0, name);
     
    705746        listView->setFocus();
    706747    }
     748    item->repaint();
    707749
    708750    mIsListViewChanged = true;
     
    717759
    718760
    719 void VBoxSharedFoldersSettings::processOnItem (QListViewItem *aItem)
    720 {
    721     VBoxRichListItem *item = 0;
    722     if (aItem->rtti() == VBoxRichListItem::QIRichListItemId)
    723         item = static_cast<VBoxRichListItem*> (aItem);
    724     Assert (item);
    725     QString tip = tr ("<nobr>Name:&nbsp;&nbsp;%1</nobr><br>"
    726                 "<nobr>Path:&nbsp;&nbsp;%2</nobr><br>"
    727                 "<nobr>Access:&nbsp;&nbsp;%3</nobr>")
    728                 .arg (item->getText (0)).arg (item->getText (1)).arg (item->getText (3));
    729     if (!item->getText (0).isNull() && !item->getText (1).isNull())
    730         QToolTip::add (listView->viewport(), listView->itemRect (aItem), tip);
    731     else
    732         QToolTip::remove (listView->viewport());
    733 }
    734 
    735761void VBoxSharedFoldersSettings::processCurrentChanged (QListViewItem *aItem)
    736762{
     
    738764        listView->setSelected (aItem, true);
    739765    bool addEnabled = aItem &&
    740                       (isEditable (aItem->text (2)) ||
    741                        (aItem->parent() && isEditable (aItem->parent()->text (2))));
     766                      (isEditable (aItem->text (3)) ||
     767                       (aItem->parent() && isEditable (aItem->parent()->text (3))));
    742768    bool removeEnabled = aItem && aItem->parent() &&
    743                          isEditable (aItem->parent()->text (2));
     769                         isEditable (aItem->parent()->text (3));
    744770    tbAdd->setEnabled (addEnabled);
    745771    tbEdit->setEnabled (removeEnabled);
     
    750776{
    751777    bool editEnabled = aItem && aItem->parent() &&
    752         isEditable (aItem->parent()->text (2));
     778        isEditable (aItem->parent()->text (3));
    753779    if (editEnabled)
    754780        tbEditPressed();
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