VirtualBox

Changeset 8338 in vbox


Ignore:
Timestamp:
Apr 23, 2008 5:35:48 PM (17 years ago)
Author:
vboxsync
Message:
  1. Active combo-box now look highlighted & focused as it should be.
  2. Added combo-box button (=scroll-bar for open combo-box) width to column width.
  3. Pressing Ctrl-Up/Down or Space should not now cause the drop-down list to flicker twice (flickering doesn't happen when pressing F2).
Location:
trunk/src/VBox/Frontends/VirtualBox/ui
Files:
2 edited

Legend:

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

    r8282 r8338  
    271271    <variable access="private">CMachine mMachine;</variable>
    272272    <variable access="private">QPopupMenu *mContextMenu;</variable>
     273    <variable access="private">bool mCBFocusOut;</variable>
    273274</variables>
    274275<signals>
  • trunk/src/VBox/Frontends/VirtualBox/ui/VBoxHardDiskSettings.ui.h

    r8319 r8338  
    179179    }
    180180
     181    static int scrollBarWidth()
     182    {
     183        QListBox lb;
     184        lb.setVScrollBarMode (QScrollView::AlwaysOn);
     185        return lb.verticalScrollBar()->width();
     186    }
     187
    181188    void setText (const QString &aText)
    182189    {
     
    475482        cb->resize (wc, hc);
    476483
    477         if (aColumn == mFocusColumn && cb->isHidden())
    478             cb->show();
     484        if (aColumn == mFocusColumn)
     485        {
     486            if (cb->isHidden())
     487                cb->show();
     488            if (!cb->hasFocus())
     489                cb->setFocus();
     490        }
    479491        else if (aColumn != mFocusColumn && !cb->isHidden())
    480492            cb->hide();
     
    515527{
    516528    mPrevItem = 0;
     529    mCBFocusOut = false;
    517530
    518531    /* toolbar */
     
    895908
    896909            QMouseEvent *e = static_cast<QMouseEvent*> (aEvent);
    897             QListViewItem *clickedItem = mLvHD->itemAt (QPoint (e->x(), e->y()));
     910            QListViewItem *clickedItem = mLvHD->itemAt (e->pos());
    898911            HDListItem *item = clickedItem &&
    899912                clickedItem->rtti() == HDListItem::HDListItemType ?
     
    915928
    916929            QMouseEvent *e = static_cast<QMouseEvent*> (aEvent);
    917             QListViewItem *hoveredItem = mLvHD->itemAt (QPoint (e->x(), e->y()));
     930            QListViewItem *hoveredItem = mLvHD->itemAt (e->pos());
    918931            HDListItem *item = hoveredItem &&
    919932                hoveredItem->rtti() == HDListItem::HDListItemType ?
     
    933946        case QEvent::KeyPress:
    934947        {
    935             if (aObject != mLvHD)
     948            if (!mLvHD->queryList (0, 0, false, true)->contains (aObject))
    936949                break;
    937950
     
    947960                    item->focusColumn() > 0)
    948961                {
     962                    mLvHD->setFocus();
    949963                    item->moveFocusToColumn (item->focusColumn() - 1);
    950964                    onAfterCurrentChanged (item);
    951965                }
     966                return true;
    952967            } else
    953968            /* Process cursor-right as "move focus right" action */
     
    957972                    item->focusColumn() < mLvHD->columns() - 1)
    958973                {
     974                    mLvHD->setFocus();
    959975                    item->moveFocusToColumn (item->focusColumn() + 1);
    960976                    onAfterCurrentChanged (item);
    961977                }
     978                return true;
     979            } else
     980            /* Process cursor-up as "move focus up" action */
     981            if (e->key() == Qt::Key_Up && !e->state())
     982            {
     983                if (item && item->focusColumn() != -1 &&
     984                    item->itemAbove())
     985                {
     986                    mLvHD->setFocus();
     987                    mLvHD->setCurrentItem (item->itemAbove());
     988                }
     989                return true;
     990            } else
     991            /* Process cursor-up as "move focus up" action */
     992            if (e->key() == Qt::Key_Down && !e->state())
     993            {
     994                if (item && item->focusColumn() != -1 &&
     995                    item->itemBelow())
     996                {
     997                    mLvHD->setFocus();
     998                    mLvHD->setCurrentItem (item->itemBelow());
     999                }
     1000                return true;
    9621001            } else
    9631002            /* Process F2/Space as "open combo-box" actions */
     
    9671006                if (item)
    9681007                    item->showEditor();
     1008                return true;
    9691009            }
    9701010            /* Process Ctrl/Alt+Up/Down as "open combo-box" actions */
     
    9731013            {
    9741014                if (item)
    975                 {
    9761015                    item->showEditor();
    977                     return true;
    978                 }
     1016                return true;
    9791017            }
    9801018            break;
     
    9831021        case QEvent::FocusIn:
    9841022        {
     1023            if (aObject == mLvHD ||
     1024                aObject->inherits ("HDSlotItem") ||
     1025                aObject->inherits ("HDVdiItem"))
     1026                mCBFocusOut = false;
     1027            else if (mCBFocusOut)
     1028            {
     1029                mCBFocusOut = false;
     1030                mLvHD->setFocus();
     1031                focusNextPrevChild (true);
     1032                return true;
     1033            }
     1034
    9851035            if (aObject == mLvHD)
    9861036                onAfterCurrentChanged (mLvHD->currentItem());
     
    9891039            break;
    9901040        }
     1041        case QEvent::FocusOut:
     1042        {
     1043            if (aObject->className() == "HDSlotItem" ||
     1044                aObject->className() == "HDVdiItem")
     1045                mCBFocusOut = true;
     1046
     1047            break;
     1048        }
    9911049        default:
    9921050            break;
     
    10101068                (int) (mLvHD->viewport()->width() * 0.4) : minLength;
    10111069
    1012     mLvHD->setColumnWidth (0, minLength + 10 /* little spacing */);
     1070    mLvHD->setColumnWidth (0,
     1071                           minLength /* maximum string width */ +
     1072                           6 * 2 /* 2 combo-box margin */ +
     1073                           HDSlotItem::scrollBarWidth() /* scrollbar */);
    10131074    mLvHD->setColumnWidth (1, mLvHD->viewport()->width() - mLvHD->columnWidth (0));
    10141075}
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