diff --git a/Engine/source/gui/editor/guiPopupMenuCtrl.cpp b/Engine/source/gui/editor/guiPopupMenuCtrl.cpp index e405864cf..9b1c9fc66 100644 --- a/Engine/source/gui/editor/guiPopupMenuCtrl.cpp +++ b/Engine/source/gui/editor/guiPopupMenuCtrl.cpp @@ -125,11 +125,13 @@ void GuiPopupMenuTextListCtrl::onRenderCell(Point2I offset, Point2I cell, bool s if (idx != 1) { // there's a bitmap... - U32 index = U32(idx - 2) * 3; + U32 index = U32(idx - 2) * 4; if (!mList[cell.y].active) - index += 2; - else if (selected || mouseOver) + index += 3; + else if (selected) index++; + else if (mouseOver) + index += 2; if (mProfile->mBitmapArrayRects.size() > index) { @@ -137,8 +139,10 @@ void GuiPopupMenuTextListCtrl::onRenderCell(Point2I offset, Point2I cell, bool s Point2I off = maxBitmapSize - rect.extent; off /= 2; + Point2I bitPos = Point2I(offset.x + mCellSize.y / 2, offset.y + mCellSize.y / 2); + GFX->getDrawUtil()->clearBitmapModulation(); - GFX->getDrawUtil()->drawBitmapSR(mProfile->mTextureObject, offset + off, rect); + GFX->getDrawUtil()->drawBitmapSR(mProfile->mTextureObject, bitPos + off, rect); } } diff --git a/Engine/source/gui/editor/popupMenu.cpp b/Engine/source/gui/editor/popupMenu.cpp index b2ba122a7..2f250ece7 100644 --- a/Engine/source/gui/editor/popupMenu.cpp +++ b/Engine/source/gui/editor/popupMenu.cpp @@ -139,7 +139,7 @@ GuiMenuBar* PopupMenu::getMenuBarCtrl() ////////////////////////////////////////////////////////////////////////// // Public Methods ////////////////////////////////////////////////////////////////////////// -S32 PopupMenu::insertItem(S32 pos, const char *title, const char* accelerator, const char* cmd) +S32 PopupMenu::insertItem(S32 pos, const char *title, const char* accelerator, const char* cmd, S32 bitmapIndex) { String titleString = title; @@ -147,6 +147,7 @@ S32 PopupMenu::insertItem(S32 pos, const char *title, const char* accelerator, c newItem.mID = pos; newItem.mText = titleString; newItem.mCMD = cmd; + newItem.mBitmapIndex = bitmapIndex; if (titleString.isEmpty() || titleString == String("-")) newItem.mIsSpacer = true; @@ -269,6 +270,14 @@ void PopupMenu::clearItems() mMenuItems.clear(); } +String PopupMenu::getItemText(S32 pos) +{ + if (mMenuItems.empty() || mMenuItems.size() < pos || pos < 0) + return String::EmptyString; + + return mMenuItems[pos].mText; +} + ////////////////////////////////////////////////////////////////////////// bool PopupMenu::canHandleID(U32 id) { @@ -468,9 +477,9 @@ void PopupMenu::hidePopupSubmenus() //----------------------------------------------------------------------------- // Console Methods //----------------------------------------------------------------------------- -DefineEngineMethod(PopupMenu, insertItem, S32, (S32 pos, const char * title, const char * accelerator, const char* cmd), ("", "", ""), "(pos[, title][, accelerator][, cmd])") +DefineEngineMethod(PopupMenu, insertItem, S32, (S32 pos, const char * title, const char * accelerator, const char* cmd, S32 bitmapIndex), ("", "", "", -1), "(pos[, title][, accelerator][, cmd][, bitmapIndex])") { - return object->insertItem(pos, title, accelerator, cmd); + return object->insertItem(pos, title, accelerator, cmd, bitmapIndex); } DefineEngineMethod(PopupMenu, removeItem, void, (S32 pos), , "(pos)") @@ -506,6 +515,12 @@ DefineEngineMethod(PopupMenu, checkItem, void, (S32 pos, bool checked), , "(pos, object->checkItem(pos, checked); } +DefineEngineMethod(PopupMenu, getItemText, const char*, (S32 pos), , "(pos)") +{ + return object->getItemText(pos).c_str(); +} + + DefineEngineMethod(PopupMenu, checkRadioItem, void, (S32 firstPos, S32 lastPos, S32 checkPos), , "(firstPos, lastPos, checkPos)") { object->checkRadioItem(firstPos, lastPos, checkPos); diff --git a/Engine/source/gui/editor/popupMenu.h b/Engine/source/gui/editor/popupMenu.h index 4750f44d2..2925b8ace 100644 --- a/Engine/source/gui/editor/popupMenu.h +++ b/Engine/source/gui/editor/popupMenu.h @@ -107,7 +107,7 @@ public: /// returns the menu item's ID, or -1 on failure. /// implementd on a per-platform basis. /// TODO: factor out common code - S32 insertItem(S32 pos, const char *title, const char* accelerator, const char* cmd); + S32 insertItem(S32 pos, const char *title, const char* accelerator, const char* cmd, S32 bitmapIndex = -1); /// Sets the name title and accelerator for /// an existing item. @@ -143,6 +143,9 @@ public: ///Clears all items void clearItems(); + ///Gets the text of a given item + String getItemText(S32 pos); + //----------------------------------------------------------------------------- /// Displays this menu as a popup menu and blocks until the user has selected /// an item.