Changeset 34063 in vbox
- Timestamp:
- Nov 15, 2010 10:59:13 AM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 67745
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 4 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
r33882 r34063 325 325 src/widgets/UISpecialControls.h \ 326 326 src/widgets/VBoxApplianceEditorWgt.h \ 327 src/widgets/ VBoxBootTable.h \327 src/widgets/UIBootTable.h \ 328 328 src/widgets/VBoxExportApplianceWgt.h \ 329 329 src/widgets/VBoxFilePathSelectorWidget.h \ … … 339 339 src/selector/UIVMListView.h \ 340 340 src/selector/UIVMPreviewWindow.h \ 341 src/selector/UIVMItem.h \ 341 342 src/selector/UIVirtualBoxEventHandler.h \ 342 343 src/selector/VBoxSelectorWnd.h \ … … 486 487 src/widgets/UIToolBar.cpp \ 487 488 src/widgets/VBoxApplianceEditorWgt.cpp \ 488 src/widgets/ VBoxBootTable.cpp \489 src/widgets/UIBootTable.cpp \ 489 490 src/widgets/VBoxExportApplianceWgt.cpp \ 490 491 src/widgets/VBoxFilePathSelectorWidget.cpp \ -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
r34007 r34063 27 27 #include <iprt/cdefs.h> 28 28 #include <QHeaderView> 29 30 #define ITEM_TYPE_ROLE Qt::UserRole + 131 29 32 30 UIMachineSettingsSystem::UIMachineSettingsSystem() … … 78 76 for (int i = 0; i < m_possibleBootItems.size(); ++i) 79 77 { 80 QString name = vboxGlobal().toString(m_possibleBootItems[i]); 81 QTreeWidgetItem *pItem = new QTreeWidgetItem(QStringList(name)); 82 pItem->setData(0, ITEM_TYPE_ROLE, QVariant(m_possibleBootItems[i])); 83 pItem->setCheckState(0, Qt::Unchecked); 84 mTwBootOrder->addTopLevelItem(pItem); 78 QListWidgetItem *pItem = new UIBootTableItem(m_possibleBootItems[i]); 79 mTwBootOrder->addItem(pItem); 85 80 } 86 81 … … 96 91 97 92 connect (mTbBootItemUp, SIGNAL (clicked()), 98 this, SLOT (moveBootItemUp()));93 mTwBootOrder, SLOT(sltMoveItemUp())); 99 94 connect (mTbBootItemDown, SIGNAL (clicked()), 100 this, SLOT (moveBootItemDown())); 101 connect (mTwBootOrder, SIGNAL (moveItemUp()), 102 this, SLOT (moveBootItemUp())); 103 connect (mTwBootOrder, SIGNAL (moveItemDown()), 104 this, SLOT (moveBootItemDown())); 105 connect (mTwBootOrder, SIGNAL (itemToggled()), 106 this, SIGNAL (tableChanged())); 107 connect (mTwBootOrder, SIGNAL (currentItemChanged (QTreeWidgetItem*, 108 QTreeWidgetItem*)), 109 this, SLOT (onCurrentBootItemChanged (QTreeWidgetItem*, 110 QTreeWidgetItem*))); 95 mTwBootOrder, SLOT(sltMoveItemDown())); 96 connect (mTwBootOrder, SIGNAL (sigRowChanged(int)), 97 this, SLOT (onCurrentBootItemChanged (int))); 111 98 112 99 connect (mSlCPU, SIGNAL (valueChanged (int)), … … 238 225 { 239 226 UIBootItemData data = m_cache.m_bootItems[i]; 240 QString name = vboxGlobal().toString(data.m_type); 241 QTreeWidgetItem *pItem = new QTreeWidgetItem(QStringList(name)); 242 pItem->setData(0, ITEM_TYPE_ROLE, QVariant(data.m_type)); 243 pItem->setCheckState(0, data.m_fEnabled ? Qt::Checked : Qt::Unchecked); 244 mTwBootOrder->addTopLevelItem(pItem); 227 QListWidgetItem *pItem = new UIBootTableItem(data.m_type); 228 pItem->setCheckState(data.m_fEnabled ? Qt::Checked : Qt::Unchecked); 229 mTwBootOrder->addItem(pItem); 245 230 } 246 231 mCbApic->setChecked(m_cache.m_fIoApicEnabled); … … 273 258 /* Gather internal variables data from QWidget(s): */ 274 259 m_cache.m_bootItems.clear(); 275 for (int i = 0; i < mTwBootOrder-> topLevelItemCount(); ++i)276 { 277 Q TreeWidgetItem *pItem = mTwBootOrder->topLevelItem(i);260 for (int i = 0; i < mTwBootOrder->count(); ++i) 261 { 262 QListWidgetItem *pItem = mTwBootOrder->item(i); 278 263 UIBootItemData data; 279 data.m_type = (KDeviceType)pItem->data(0, ITEM_TYPE_ROLE).toInt();280 data.m_fEnabled = pItem->checkState( 0) == Qt::Checked;264 data.m_type = static_cast<UIBootTableItem*>(pItem)->type(); 265 data.m_fEnabled = pItem->checkState() == Qt::Checked; 281 266 m_cache.m_bootItems << data; 282 267 } … … 450 435 Ui::UIMachineSettingsSystem::retranslateUi (this); 451 436 452 /* Adjust the boot order tree widget */453 mTwBootOrder->header()->setResizeMode (QHeaderView::ResizeToContents);454 mTwBootOrder->resizeColumnToContents (0);455 mTwBootOrder->updateGeometry();456 /* Retranslate the boot order items */457 QTreeWidgetItemIterator it (mTwBootOrder);458 while (*it)459 {460 QTreeWidgetItem *item = (*it);461 item->setText (0, vboxGlobal().toString (462 static_cast <KDeviceType> (item->data (0, ITEM_TYPE_ROLE).toInt())));463 ++ it;464 }465 437 /* Readjust the tree widget items size */ 466 438 adjustBootOrderTWSize(); … … 487 459 } 488 460 489 void UIMachineSettingsSystem::moveBootItemUp() 490 { 491 QTreeWidgetItem *item = mTwBootOrder->currentItem(); 492 Assert (item); 493 if (!mTwBootOrder->itemAbove (item)) 494 return; 495 496 int index = mTwBootOrder->indexOfTopLevelItem (item); 497 QTreeWidgetItem *takenItem = mTwBootOrder->takeTopLevelItem (index); 498 Assert (takenItem == item); 499 500 mTwBootOrder->insertTopLevelItem (index - 1, takenItem); 501 mTwBootOrder->setCurrentItem (item); 502 503 emit tableChanged(); 504 } 505 506 void UIMachineSettingsSystem::moveBootItemDown() 507 { 508 QTreeWidgetItem *item = mTwBootOrder->currentItem(); 509 Assert (item); 510 if (!mTwBootOrder->itemBelow (item)) 511 return; 512 513 int index = mTwBootOrder->indexOfTopLevelItem (item); 514 QTreeWidgetItem *takenItem = mTwBootOrder->takeTopLevelItem (index); 515 Assert (takenItem == item); 516 517 mTwBootOrder->insertTopLevelItem (index + 1, takenItem); 518 mTwBootOrder->setCurrentItem (item); 519 520 emit tableChanged(); 521 } 522 523 void UIMachineSettingsSystem::onCurrentBootItemChanged (QTreeWidgetItem *aItem, 524 QTreeWidgetItem *) 525 { 526 bool upEnabled = aItem && mTwBootOrder->itemAbove (aItem); 527 bool downEnabled = aItem && mTwBootOrder->itemBelow (aItem); 461 void UIMachineSettingsSystem::onCurrentBootItemChanged (int i) 462 { 463 bool upEnabled = i > 0; 464 bool downEnabled = i < mTwBootOrder->count() - 1; 528 465 if ((mTbBootItemUp->hasFocus() && !upEnabled) || 529 466 (mTbBootItemDown->hasFocus() && !downEnabled)) … … 535 472 void UIMachineSettingsSystem::adjustBootOrderTWSize() 536 473 { 537 /* Calculate the optimal size of the tree widget & set it as fixed 538 * size. */ 539 540 QAbstractItemView *iv = qobject_cast <QAbstractItemView*> (mTwBootOrder); 541 542 int h = 2 * mTwBootOrder->frameWidth(); 543 int w = h; 544 #if QT_VERSION < 0x040700 545 # ifdef Q_WS_MAC 546 int left, top, right, bottom; 547 mTwBootOrder->getContentsMargins (&left, &top, &right, &bottom); 548 h += top + bottom; 549 w += left + right; 550 # else /* Q_WS_MAC */ 551 w += 4; 552 # endif /* !Q_WS_MAC */ 553 #endif /* QT_VERSION < 0x040700 */ 554 mTwBootOrder->setFixedSize( 555 iv->sizeHintForColumn(0) + w, 556 iv->sizeHintForRow(0) * mTwBootOrder->topLevelItemCount() + h); 474 mTwBootOrder->adjustSizeToFitContent(); 557 475 558 476 /* Update the layout system */ … … 591 509 { 592 510 if (!mTwBootOrder->currentItem()) 593 mTwBootOrder->setCurrentItem (mTwBootOrder-> topLevelItem (0));511 mTwBootOrder->setCurrentItem (mTwBootOrder->item (0)); 594 512 else 595 onCurrentBootItemChanged (mTwBootOrder->current Item());513 onCurrentBootItemChanged (mTwBootOrder->currentRow()); 596 514 mTwBootOrder->currentItem()->setSelected (true); 597 515 } -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.h
r33932 r34063 96 96 void textChangedRAM (const QString &aText); 97 97 98 void moveBootItemUp(); 99 void moveBootItemDown(); 100 void onCurrentBootItemChanged (QTreeWidgetItem *aItem, 101 QTreeWidgetItem *aPrev = 0); 98 void onCurrentBootItemChanged (int); 102 99 103 100 void valueChangedCPU (int aVal); -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.ui
r33882 r34063 172 172 </property> 173 173 <item> 174 <widget class=" VBoxBootTable" name="mTwBootOrder">174 <widget class="UIBootTable" name="mTwBootOrder"> 175 175 <property name="sizePolicy"> 176 176 <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> … … 189 189 </property> 190 190 <property name="alternatingRowColors"> 191 <bool>true</bool>192 </property>193 <property name="rootIsDecorated">194 <bool>false</bool>195 </property>196 <property name="uniformRowHeights">197 191 <bool>true</bool> 198 192 </property> … … 639 633 <customwidgets> 640 634 <customwidget> 641 <class> VBoxBootTable</class>642 <extends>Q TreeWidget</extends>643 <header> VBoxBootTable.h</header>635 <class>UIBootTable</class> 636 <extends>QListWidget</extends> 637 <header>UIBootTable.h</header> 644 638 </customwidget> 645 639 <customwidget> -
trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.cpp
r34018 r34063 3 3 * 4 4 * VBox frontends: Qt4 GUI ("VirtualBox"): 5 * VBoxBootTable class implementation5 * UIBootTable class implementation 6 6 */ 7 7 … … 19 19 20 20 /* Global include */ 21 #include <QHeaderView> 22 #include <QKeyEvent> 21 #include <QScrollBar> 23 22 24 23 /* Local includes */ 25 #include " VBoxBootTable.h"24 #include "UIBootTable.h" 26 25 #include "VBoxGlobal.h" 27 26 28 VBoxBootTable::VBoxBootTable(QWidget *pParent)29 : QTreeWidget(pParent)27 UIBootTableItem::UIBootTableItem(KDeviceType type) 28 : m_type(type) 30 29 { 31 header()->hide(); 32 connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)), this, SLOT(onItemChanged())); 30 setCheckState(Qt::Unchecked); 31 switch(type) 32 { 33 case KDeviceType_Floppy: 34 { 35 setIcon(QIcon(":fd_16px.png")); 36 break; 37 } 38 case KDeviceType_DVD: 39 { 40 setIcon(QIcon(":cd_16px.png")); 41 break; 42 } 43 case KDeviceType_HardDisk: 44 { 45 setIcon(QIcon(":hd_16px.png")); 46 break; 47 } 48 case KDeviceType_Network: 49 { 50 setIcon(QIcon(":nw_16px.png")); 51 break; 52 } 53 } 54 retranslateUi(); 33 55 } 34 56 35 void VBoxBootTable::onItemChanged() 57 KDeviceType UIBootTableItem::type() const 36 58 { 37 emit itemToggled();59 return m_type; 38 60 } 39 61 40 void VBoxBootTable::keyPressEvent(QKeyEvent *pEvent)62 void UIBootTableItem::retranslateUi() 41 63 { 42 if (pEvent->QInputEvent::modifiers() == Qt::ControlModifier) 64 setText(vboxGlobal().toString(m_type)); 65 } 66 67 UIBootTable::UIBootTable(QWidget *pParent /* = 0 */) 68 : QIWithRetranslateUI<QListWidget>(pParent) 69 { 70 setDragDropMode(QAbstractItemView::InternalMove); 71 setSelectionMode(QAbstractItemView::SingleSelection); 72 setDropIndicatorShown(true); 73 setUniformItemSizes(true); 74 connect(this, SIGNAL(currentRowChanged(int)), 75 this, SIGNAL(sigRowChanged(int))); 76 } 77 78 void UIBootTable::adjustSizeToFitContent() 79 { 80 int h = 2 * frameWidth(); 81 int w = h; 82 #if QT_VERSION < 0x040700 83 # ifdef Q_WS_MAC 84 int left, top, right, bottom; 85 getContentsMargins(&left, &top, &right, &bottom); 86 h += top + bottom; 87 w += left + right; 88 # else /* Q_WS_MAC */ 89 w += 4; 90 # endif /* !Q_WS_MAC */ 91 #endif /* QT_VERSION < 0x040700 */ 92 setFixedSize(sizeHintForColumn(0) + w, 93 sizeHintForRow(0) * count() + h); 94 } 95 96 void UIBootTable::sltMoveItemUp() 97 { 98 QModelIndex index = currentIndex(); 99 moveItemTo(index, index.row() - 1); 100 } 101 102 void UIBootTable::sltMoveItemDown() 103 { 104 QModelIndex index = currentIndex(); 105 moveItemTo(index, index.row() + 2); 106 } 107 108 void UIBootTable::retranslateUi() 109 { 110 for (int i = 0; i < count(); ++i) 111 static_cast<UIBootTableItem*>(item(i))->retranslateUi(); 112 113 adjustSizeToFitContent(); 114 } 115 116 void UIBootTable::dropEvent(QDropEvent *pEvent) 117 { 118 QListWidget::dropEvent(pEvent); 119 emit sigRowChanged(currentRow()); 120 } 121 122 QModelIndex UIBootTable::moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers) 123 { 124 if (modifiers.testFlag(Qt::ControlModifier)) 43 125 { 44 switch ( pEvent->key())126 switch (cursorAction) 45 127 { 46 case Qt::Key_Up: 47 emit moveItemUp(); 48 return; 49 case Qt::Key_Down: 50 emit moveItemDown(); 51 return; 128 case QAbstractItemView::MoveUp: 129 { 130 QModelIndex index = currentIndex(); 131 return moveItemTo(index, index.row() - 1); 132 } 133 case QAbstractItemView::MoveDown: 134 { 135 QModelIndex index = currentIndex(); 136 return moveItemTo(index, index.row() + 2); 137 } 138 case QAbstractItemView::MovePageUp: 139 { 140 QModelIndex index = currentIndex(); 141 return moveItemTo(index, qMax(0, index.row() - verticalScrollBar()->pageStep())); 142 } 143 case QAbstractItemView::MovePageDown: 144 { 145 QModelIndex index = currentIndex(); 146 return moveItemTo(index, qMin(model()->rowCount(), index.row() + verticalScrollBar()->pageStep() + 1)); 147 } 148 case QAbstractItemView::MoveHome: 149 return moveItemTo(currentIndex(), 0); 150 case QAbstractItemView::MoveEnd: 151 return moveItemTo(currentIndex(), model()->rowCount()); 52 152 default: 53 153 break; 54 154 } 55 155 } 56 QTreeWidget::keyPressEvent(pEvent);156 return QListWidget::moveCursor(cursorAction, modifiers); 57 157 } 58 158 159 QModelIndex UIBootTable::moveItemTo(const QModelIndex &index, int row) 160 { 161 if (!index.isValid()) 162 return QModelIndex(); 163 164 if (row < 0 || row > model()->rowCount()) 165 return QModelIndex(); 166 167 QPersistentModelIndex oldIndex(index); 168 UIBootTableItem *pItem = static_cast<UIBootTableItem*>(itemFromIndex(oldIndex)); 169 insertItem(row, new UIBootTableItem(*pItem)); 170 QPersistentModelIndex newIndex = model()->index(row, 0); 171 delete takeItem(oldIndex.row()); 172 setCurrentRow(newIndex.row()); 173 return newIndex; 174 } 175 -
trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIBootTable.h
r34018 r34063 2 2 * 3 3 * VBox frontends: Qt4 GUI ("VirtualBox"): 4 * VBoxBootTable class declaration4 * UIBootTable class declaration 5 5 */ 6 6 7 7 /* 8 * Copyright (C) 2009 Oracle Corporation8 * Copyright (C) 2009-2010 Oracle Corporation 9 9 * 10 10 * This file is part of VirtualBox Open Source Edition (OSE), as … … 17 17 */ 18 18 19 #ifndef __VBoxBootTable_h__ 20 #define __VBoxBootTable_h__ 19 #ifndef __UIBootTable_h__ 20 #define __UIBootTable_h__ 21 22 /* Local includes */ 23 #include <COMDefs.h> 24 #include "QIWithRetranslateUI.h" 21 25 22 26 /* Global includes */ 23 #include <Q TreeWidget>27 #include <QListWidget> 24 28 25 /** 26 * QTreeWidget class reimplementation to use as boot items table. 27 * It has one unsorted column without header. 28 * Keymapping handlers for ctrl-up & ctrl-down are translated into 29 * boot-items up/down moving signals. 30 * Emits itemToggled() signal when the item changed. 31 */ 32 class VBoxBootTable : public QTreeWidget 29 class UIBootTableItem : public QListWidgetItem 30 { 31 public: 32 33 UIBootTableItem(KDeviceType type); 34 35 KDeviceType type() const; 36 37 void retranslateUi(); 38 39 private: 40 41 /* Private member vars */ 42 KDeviceType m_type; 43 44 }; 45 46 class UIBootTable : public QIWithRetranslateUI<QListWidget> 33 47 { 34 48 Q_OBJECT; … … 36 50 public: 37 51 38 VBoxBootTable(QWidget *pParent); 52 UIBootTable(QWidget *pParent = 0); 53 54 void adjustSizeToFitContent(); 55 56 public slots: 57 58 void sltMoveItemUp(); 59 void sltMoveItemDown(); 39 60 40 61 signals: 41 62 42 void moveItemUp(); 43 void moveItemDown(); 44 void itemToggled(); 63 void sigRowChanged(int); 45 64 46 65 protected: 47 66 48 void keyPressEvent(QKeyEvent *pEvent); 49 50 private slots: 51 52 void onItemChanged(); 67 void retranslateUi(); 68 void dropEvent(QDropEvent *pEvent); 69 QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, Qt::KeyboardModifiers modifiers); 70 QModelIndex moveItemTo(const QModelIndex &index, int row); 53 71 }; 54 72 55 #endif // __ VBoxBootTable_h__73 #endif // __UIBootTable_h__ 56 74
Note:
See TracChangeset
for help on using the changeset viewer.