| @@ -93,10 +93,10 @@ void ComboBox::addItem (const String& newItemText, int newItemId) | |||
| currentMenu.addItem (newItemId, newItemText, true, false); | |||
| } | |||
| void ComboBox::addItemList (const StringArray& itemsToAdd, int firstItemIdOffset) | |||
| void ComboBox::addItemList (const StringArray& itemsToAdd, int firstItemID) | |||
| { | |||
| for (int i = 0; i < itemsToAdd.size(); ++i) | |||
| currentMenu.addItem (i + firstItemIdOffset, itemsToAdd[i]); | |||
| for (auto& i : itemsToAdd) | |||
| currentMenu.addItem (firstItemID++, i); | |||
| } | |||
| void ComboBox::addSeparator() | |||
| @@ -529,14 +529,13 @@ static void comboBoxPopupMenuFinishedCallback (int result, ComboBox* combo) | |||
| void ComboBox::showPopup() | |||
| { | |||
| PopupMenu noChoicesMenu; | |||
| const bool hasItems = (currentMenu.getNumItems() > 0); | |||
| auto menu = currentMenu; | |||
| if (hasItems) | |||
| if (menu.getNumItems() > 0) | |||
| { | |||
| auto selectedId = getSelectedId(); | |||
| for (PopupMenu::MenuItemIterator iterator (currentMenu, true); iterator.next();) | |||
| for (PopupMenu::MenuItemIterator iterator (menu, true); iterator.next();) | |||
| { | |||
| auto& item = iterator.getItem(); | |||
| @@ -546,17 +545,16 @@ void ComboBox::showPopup() | |||
| } | |||
| else | |||
| { | |||
| noChoicesMenu.addItem (1, noChoicesMessage, false, false); | |||
| menu.addItem (1, noChoicesMessage, false, false); | |||
| } | |||
| auto& menuToShow = (hasItems ? currentMenu : noChoicesMenu); | |||
| menuToShow.setLookAndFeel (&getLookAndFeel()); | |||
| menuToShow.showMenuAsync (PopupMenu::Options().withTargetComponent (this) | |||
| .withItemThatMustBeVisible (getSelectedId()) | |||
| .withMinimumWidth (getWidth()) | |||
| .withMaximumNumColumns (1) | |||
| .withStandardItemHeight (label->getHeight()), | |||
| ModalCallbackFunction::forComponent (comboBoxPopupMenuFinishedCallback, this)); | |||
| menu.setLookAndFeel (&getLookAndFeel()); | |||
| menu.showMenuAsync (PopupMenu::Options().withTargetComponent (this) | |||
| .withItemThatMustBeVisible (getSelectedId()) | |||
| .withMinimumWidth (getWidth()) | |||
| .withMaximumNumColumns (1) | |||
| .withStandardItemHeight (label->getHeight()), | |||
| ModalCallbackFunction::forComponent (comboBoxPopupMenuFinishedCallback, this)); | |||
| } | |||
| //============================================================================== | |||
| @@ -599,11 +597,19 @@ void ComboBox::mouseWheelMove (const MouseEvent& e, const MouseWheelDetails& whe | |||
| { | |||
| if (! menuActive && scrollWheelEnabled && e.eventComponent == this && wheel.deltaY != 0.0f) | |||
| { | |||
| auto oldPos = (int) mouseWheelAccumulator; | |||
| mouseWheelAccumulator += wheel.deltaY * 5.0f; | |||
| if (auto delta = oldPos - (int) mouseWheelAccumulator) | |||
| nudgeSelectedItem (delta); | |||
| while (mouseWheelAccumulator > 1.0f) | |||
| { | |||
| mouseWheelAccumulator -= 1.0f; | |||
| nudgeSelectedItem (-1); | |||
| } | |||
| while (mouseWheelAccumulator < -1.0f) | |||
| { | |||
| mouseWheelAccumulator += 1.0f; | |||
| nudgeSelectedItem (1); | |||
| } | |||
| } | |||
| else | |||
| { | |||