Changeset 96972 in vbox
- Timestamp:
- Oct 3, 2022 5:13:49 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 153893
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserHandlerMouse.cpp
r96407 r96972 121 121 /* Calculate positions: */ 122 122 UIChooserItem *pFirstItem = model()->firstSelectedItem(); 123 int iFirstPosition = model()->navigationItems().indexOf(pFirstItem); 124 int iClickedPosition = model()->navigationItems().indexOf(pClickedItem); 123 AssertPtrReturn(pFirstItem, false); // is failure possible? 124 const int iFirstPosition = model()->navigationItems().indexOf(pFirstItem); 125 const int iClickedPosition = model()->navigationItems().indexOf(pClickedItem); 125 126 /* Populate list of items from 'first' to 'clicked': */ 126 127 QList<UIChooserItem*> items; … … 131 132 for (int i = iFirstPosition; i >= iClickedPosition; --i) 132 133 items << model()->navigationItems().at(i); 134 /* Wipe out items of inconsistent types: */ 135 QList<UIChooserItem*> filteredItems; 136 foreach (UIChooserItem *pIteratedItem, items) 137 { 138 /* So, the logic is to add intermediate item if 139 * - first and intermediate selected items are global or 140 * - first and intermediate selected items are NOT global. */ 141 if ( ( pFirstItem->type() == UIChooserNodeType_Global 142 && pIteratedItem->type() == UIChooserNodeType_Global) 143 || ( pFirstItem->type() != UIChooserNodeType_Global 144 && pIteratedItem->type() != UIChooserNodeType_Global)) 145 filteredItems << pIteratedItem; 146 } 133 147 /* Make that list selected: */ 134 model()->setSelectedItems(items); 135 /* Make clicked item current one: */ 136 model()->setCurrentItem(pClickedItem); 148 model()->setSelectedItems(filteredItems); 149 /* Make item closest to clicked the current one: */ 150 if (!filteredItems.isEmpty()) 151 model()->setCurrentItem(filteredItems.last()); 137 152 } 138 153 /* Was 'control' modifier pressed? */ … … 143 158 model()->removeFromSelectedItems(pClickedItem); 144 159 else 145 model()->addToSelectedItems(pClickedItem); 160 { 161 /* So, the logic is to add newly clicked item if 162 * - previously and newly selected items are global or 163 * - previously and newly selected items are NOT global. */ 164 UIChooserItem *pFirstItem = model()->firstSelectedItem(); 165 AssertPtrReturn(pFirstItem, false); // is failure possible? 166 if ( ( pFirstItem->type() == UIChooserNodeType_Global 167 && pClickedItem->type() == UIChooserNodeType_Global) 168 || ( pFirstItem->type() != UIChooserNodeType_Global 169 && pClickedItem->type() != UIChooserNodeType_Global)) 170 model()->addToSelectedItems(pClickedItem); 171 } 146 172 /* Make clicked item current one: */ 147 173 model()->setCurrentItem(pClickedItem);
Note:
See TracChangeset
for help on using the changeset viewer.