From 770c08beb380bcd626c0aebc2ae0faf790f39d37 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 16 May 2014 21:16:49 +0300 Subject: Move skilllistbox into separate file. --- src/gui/windows/skilldialog.cpp | 182 +--------------------------------------- 1 file changed, 1 insertion(+), 181 deletions(-) (limited to 'src/gui/windows') diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp index 77ea9e959..f930c9b44 100644 --- a/src/gui/windows/skilldialog.cpp +++ b/src/gui/windows/skilldialog.cpp @@ -42,6 +42,7 @@ #include "gui/windows/shortcutwindow.h" #include "gui/widgets/button.h" +#include "gui/widgets/skilllistbox.h" #include "gui/widgets/label.h" #include "gui/widgets/listbox.h" #include "gui/widgets/scrollarea.h" @@ -60,187 +61,6 @@ #include "debug.h" -class SkillListBox final : public ListBox -{ - public: - SkillListBox(const Widget2 *const widget, - SkillModel *const model) : - ListBox(widget, model, "skilllistbox.xml"), - mModel(model), - mPopup(new TextPopup), - mTextColor(getThemeColor(Theme::TEXT)), - mTextColor2(getThemeColor(Theme::TEXT_OUTLINE)), - mTextPadding(mSkin ? mSkin->getOption("textPadding", 34) : 34), - mSpacing(mSkin ? mSkin->getOption("spacing", 0) : 0), - mSkillClicked(false) - { - mRowHeight = getFont()->getHeight() * 2 + mSpacing + 2 * mPadding; - mHighlightColor = getThemeColor(Theme::HIGHLIGHT); - mPopup->postInit(); - - if (mRowHeight < 34) - mRowHeight = 34; - } - - A_DELETE_COPY(SkillListBox) - - ~SkillListBox() - { - delete2(mModel) - delete2(mPopup) - } - - SkillInfo *getSelectedInfo() const - { - const int selected = getSelected(); - if (!mListModel || selected < 0 - || selected > mListModel->getNumberOfElements()) - { - return nullptr; - } - - return static_cast(mListModel)->getSkillAt(selected); - } - - void draw(Graphics *graphics) override - { - if (!mListModel) - return; - - SkillModel *const model = static_cast(mListModel); - updateAlpha(); - - mHighlightColor.a = static_cast(mAlpha * 255.0F); - graphics->setColor(mHighlightColor); - - // Draw filled rectangle around the selected list element - if (mSelected >= 0) - { - graphics->fillRectangle(Rect(mPadding, getRowHeight() - * mSelected + mPadding, getWidth() - 2 * mPadding, - getRowHeight())); - } - - // Draw the list elements - graphics->setColorAll(mTextColor, mTextColor2); - Font *const font = getFont(); - const int space = font->getHeight() + mSpacing; - const int width2 = getWidth() - mPadding; - for (int i = 0, y = 1; - i < model->getNumberOfElements(); - ++i, y += getRowHeight()) - { - SkillInfo *const e = model->getSkillAt(i); - if (e) - { - const SkillData *const data = e->data; - const int yPad = y + mPadding; - const std::string &description = data->description; - graphics->drawImage(data->icon, mPadding, yPad); - font->drawString(graphics, data->name, mTextPadding, yPad); - if (!description.empty()) - { - font->drawString(graphics, description, - mTextPadding, yPad + space); - } - - if (e->skillLevelWidth < 0) - { - // Add one for padding - e->skillLevelWidth = font->getWidth(e->skillLevel) + 1; - } - - font->drawString(graphics, e->skillLevel, width2 - - e->skillLevelWidth, yPad); - } - } - } - - unsigned int getRowHeight() const override - { return mRowHeight; } - - const SkillInfo *getSkillByEvent(const MouseEvent &event) const - { - const int y = (event.getY() + mPadding) / getRowHeight(); - if (!mModel || y >= mModel->getNumberOfElements()) - return nullptr; - const SkillInfo *const skill = mModel->getSkillAt(y); - if (!skill) - return nullptr; - return skill; - } - - void mouseMoved(MouseEvent &event) override - { - ListBox::mouseMoved(event); - if (!viewport || !dragDrop.isEmpty()) - return; - - const SkillInfo *const skill = getSkillByEvent(event); - if (!skill) - return; - - mPopup->show(viewport->getMouseX(), viewport->getMouseY(), - skill->data->dispName, skill->data->description); - } - - void mouseDragged(MouseEvent &event) - { - if (event.getButton() == MouseEvent::LEFT) - { - if (dragDrop.isEmpty()) - { - if (mSkillClicked) - { - mSkillClicked = false; - const SkillInfo *const skill = getSkillByEvent(event); - if (!skill) - return; - dragDrop.dragSkill(skill, DRAGDROP_SOURCE_SKILLS); - dragDrop.setItem(skill->id + SKILL_MIN_ID); - } - ListBox::mouseDragged(event); - } - } - else - { - ListBox::mouseDragged(event); - } - } - - void mousePressed(MouseEvent &event) - { - ListBox::mousePressed(event); - if (event.getButton() == MouseEvent::LEFT) - { - const SkillInfo *const skill = getSkillByEvent(event); - if (!skill) - return; - event.consume(); - mSkillClicked = true; - } - } - - void mouseReleased(MouseEvent &event) - { - ListBox::mouseReleased(event); - } - - void mouseExited(MouseEvent &event A_UNUSED) override - { - mPopup->hide(); - } - - private: - SkillModel *mModel; - TextPopup *mPopup; - Color mTextColor; - Color mTextColor2; - int mTextPadding; - int mSpacing; - bool mSkillClicked; -}; - class SkillTab final : public Tab { public: -- cgit v1.2.3-70-g09d2