diff options
-rw-r--r-- | src/gui/popups/popupmenu.cpp | 29 | ||||
-rw-r--r-- | src/gui/popups/popupmenu.h | 4 | ||||
-rw-r--r-- | src/gui/widgets/skilllistbox.h | 13 |
3 files changed, 46 insertions, 0 deletions
diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp index 5f0676741..a5228e672 100644 --- a/src/gui/popups/popupmenu.cpp +++ b/src/gui/popups/popupmenu.cpp @@ -59,6 +59,7 @@ #include "gui/widgets/createwidget.h" #include "gui/widgets/progressbar.h" #include "gui/widgets/scrollarea.h" +#include "gui/widgets/skillinfo.h" #include "gui/widgets/textfield.h" #include "gui/widgets/tabs/chat/whispertab.h" @@ -2231,6 +2232,34 @@ void PopupMenu::showNpcDialogPopup(const BeingId npcId, showPopup(x, y); } +void PopupMenu::showSkillPopup(const SkillInfo *const info) +{ + if (!info || info->level <= 1) + return; + setMousePos(); + + // using mItemId as skill id + mItemId = info->id; + mBrowserBox->clearRows(); + for(int f = 1; f <= info->level; f ++) + { + mBrowserBox->addRow(strprintf("/selectskilllevel %d %d", mItemId, f), + // TRANSLATORS: popup menu item + // TRANSLATORS: skill level + strprintf(_("Level: %d"), f).c_str()); + } + mBrowserBox->addRow(strprintf("/selectskilllevel %d 0", mItemId), + // TRANSLATORS: popup menu item + // TRANSLATORS: skill level + _("Max level")); + mBrowserBox->addRow("##3---"); + // TRANSLATORS: popup menu item + // TRANSLATORS: close menu + mBrowserBox->addRow("cancel", _("Cancel")); + + showPopup(mX, mY); +} + void PopupMenu::showPopup(int x, int y) { const int pad2 = 2 * mPadding; diff --git a/src/gui/popups/popupmenu.h b/src/gui/popups/popupmenu.h index 0a83c5dd7..9cca08f16 100644 --- a/src/gui/popups/popupmenu.h +++ b/src/gui/popups/popupmenu.h @@ -54,6 +54,8 @@ class TextField; class ProgressBar; class Window; +struct SkillInfo; + /** * Window showing popup menu. */ @@ -152,6 +154,8 @@ class PopupMenu final : public Popup, public LinkHandler void showWindowPopup(Window *const window); + void showSkillPopup(const SkillInfo *const info); + /** * Handles link action. */ diff --git a/src/gui/widgets/skilllistbox.h b/src/gui/widgets/skilllistbox.h index 35d2998a9..fcfeebe62 100644 --- a/src/gui/widgets/skilllistbox.h +++ b/src/gui/widgets/skilllistbox.h @@ -34,6 +34,7 @@ #include "gui/models/skillmodel.h" +#include "gui/popups/popupmenu.h" #include "gui/popups/skillpopup.h" #include "utils/delete2.h" @@ -234,6 +235,18 @@ class SkillListBox final : public ListBox return; event.consume(); mSkillClicked = true; + if (event.getX() > + getWidth() - mPadding - skill->skillLevelWidth) + { + SkillModel *const model = static_cast<SkillModel*>( + mListModel); + if (model && + mSelected >= 0 && + model->getSkillAt(mSelected) == skill) + { + popupMenu->showSkillPopup(skill); + } + } } } |