summaryrefslogtreecommitdiff
path: root/src/gui/widgets/itemshortcutcontainer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/widgets/itemshortcutcontainer.cpp')
-rw-r--r--src/gui/widgets/itemshortcutcontainer.cpp650
1 files changed, 0 insertions, 650 deletions
diff --git a/src/gui/widgets/itemshortcutcontainer.cpp b/src/gui/widgets/itemshortcutcontainer.cpp
deleted file mode 100644
index 9f667caba..000000000
--- a/src/gui/widgets/itemshortcutcontainer.cpp
+++ /dev/null
@@ -1,650 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2007-2009 The Mana World Development Team
- * Copyright (C) 2009-2010 The Mana Developers
- * Copyright (C) 2011-2017 The ManaPlus Developers
- *
- * This file is part of The ManaPlus Client.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "gui/widgets/itemshortcutcontainer.h"
-
-#include "dragdrop.h"
-#include "settings.h"
-#include "spellmanager.h"
-
-#include "being/playerinfo.h"
-
-#include "input/inputmanager.h"
-
-#include "gui/viewport.h"
-
-#include "gui/fonts/font.h"
-
-#include "gui/shortcut/itemshortcut.h"
-#include "gui/shortcut/spellshortcut.h"
-
-#include "gui/popups/itempopup.h"
-#include "gui/popups/popupmenu.h"
-#include "gui/popups/skillpopup.h"
-#include "gui/popups/spellpopup.h"
-
-#include "gui/windows/inventorywindow.h"
-#include "gui/windows/skilldialog.h"
-
-#include "input/inputactionoperators.h"
-
-#include "const/resources/skill.h"
-
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-ItemShortcutContainer::ItemShortcutContainer(Widget2 *const widget,
- const unsigned number) :
- ShortcutContainer(widget),
- mItemClicked(false),
- mNumber(number),
- mEquipedColor(getThemeColor(ThemeColorId::ITEM_EQUIPPED)),
- mEquipedColor2(getThemeColor(ThemeColorId::ITEM_EQUIPPED_OUTLINE)),
- mUnEquipedColor(getThemeColor(ThemeColorId::ITEM_NOT_EQUIPPED)),
- mUnEquipedColor2(getThemeColor(ThemeColorId::ITEM_NOT_EQUIPPED_OUTLINE))
-{
- mMaxItems = ItemShortcut::getItemCount();
-}
-
-ItemShortcutContainer::~ItemShortcutContainer()
-{
-}
-
-void ItemShortcutContainer::setWidget2(const Widget2 *const widget)
-{
- Widget2::setWidget2(widget);
- mEquipedColor = getThemeColor(ThemeColorId::ITEM_EQUIPPED);
- mEquipedColor2 = getThemeColor(ThemeColorId::ITEM_EQUIPPED_OUTLINE);
- mUnEquipedColor = getThemeColor(ThemeColorId::ITEM_NOT_EQUIPPED);
- mUnEquipedColor2 = getThemeColor(ThemeColorId::ITEM_NOT_EQUIPPED_OUTLINE);
- mForegroundColor = getThemeColor(ThemeColorId::TEXT);
- mForegroundColor2 = getThemeColor(ThemeColorId::TEXT_OUTLINE);
-}
-
-void ItemShortcutContainer::draw(Graphics *const graphics)
-{
- BLOCK_START("ItemShortcutContainer::draw")
- const ItemShortcut *const selShortcut = itemShortcut[mNumber];
- if (selShortcut == nullptr)
- {
- BLOCK_END("ItemShortcutContainer::draw")
- return;
- }
-
- if (settings.guiAlpha != mAlpha)
- {
- if (mBackgroundImg != nullptr)
- mBackgroundImg->setAlpha(mAlpha);
- mAlpha = settings.guiAlpha;
- }
-
- Font *const font = getFont();
- drawBackground(graphics);
-
- const Inventory *const inv = PlayerInfo::getInventory();
- if (inv == nullptr)
- {
- BLOCK_END("ItemShortcutContainer::draw")
- return;
- }
-
- // +++ for future usage need reorder drawing images before text or back
- for (unsigned i = 0; i < mMaxItems; i++)
- {
- const int itemX = (i % mGridWidth) * mBoxWidth;
- const int itemY = (i / mGridWidth) * mBoxHeight;
-
- // Draw item keyboard shortcut.
- const std::string key = inputManager.getKeyValueString(
- InputAction::SHORTCUT_1 + i);
- font->drawString(graphics,
- mForegroundColor,
- mForegroundColor,
- key,
- itemX + 2, itemY + 2);
-
- const int itemId = selShortcut->getItem(i);
- const ItemColor itemColor = selShortcut->getItemColor(i);
-
- if (itemId < 0)
- continue;
-
- // this is item
- if (itemId < SPELL_MIN_ID)
- {
- const Item *const item = inv->findItem(itemId, itemColor);
- if (item != nullptr)
- {
- // Draw item icon.
- Image *const image = item->getImage();
- if (image != nullptr)
- {
- std::string caption;
- if (item->getQuantity() > 1)
- caption = toString(item->getQuantity());
- else if (item->isEquipped() == Equipped_true)
- caption = "Eq.";
-
- image->setAlpha(1.0F);
- graphics->drawImage(image, itemX, itemY);
- if (item->isEquipped() == Equipped_true)
- {
- font->drawString(graphics,
- mEquipedColor,
- mEquipedColor2,
- caption,
- itemX + (mBoxWidth - font->getWidth(caption)) / 2,
- itemY + mBoxHeight - 14);
- }
- else
- {
- font->drawString(graphics,
- mUnEquipedColor,
- mUnEquipedColor2,
- caption,
- itemX + (mBoxWidth - font->getWidth(caption)) / 2,
- itemY + mBoxHeight - 14);
- }
- }
- }
- }
- else if (itemId < SKILL_MIN_ID && (spellManager != nullptr))
- { // this is magic shortcut
- const TextCommand *const spell = spellManager
- ->getSpellByItem(itemId);
- if (spell != nullptr)
- {
- if (!spell->isEmpty())
- {
- Image *const image = spell->getImage();
-
- if (image != nullptr)
- {
- image->setAlpha(1.0F);
- graphics->drawImage(image, itemX, itemY);
- }
- }
-
- font->drawString(graphics,
- mForegroundColor,
- mForegroundColor,
- spell->getSymbol(),
- itemX + 2, itemY + mBoxHeight / 2);
- }
- }
- else if (skillDialog != nullptr)
- {
- const SkillInfo *const skill = skillDialog->getSkill(
- itemId - SKILL_MIN_ID);
- if (skill != nullptr)
- {
- Image *const image = skill->data->icon;
-
- if (image != nullptr)
- {
- image->setAlpha(1.0F);
- graphics->drawImage(image, itemX, itemY);
- }
- if (!skill->data->haveIcon)
- {
- font->drawString(graphics,
- mForegroundColor,
- mForegroundColor,
- skill->data->shortName,
- itemX + 2,
- itemY + mBoxHeight / 2);
- }
- }
- }
- }
- BLOCK_END("ItemShortcutContainer::draw")
-}
-
-void ItemShortcutContainer::safeDraw(Graphics *const graphics)
-{
- BLOCK_START("ItemShortcutContainer::draw")
- const ItemShortcut *const selShortcut = itemShortcut[mNumber];
- if (selShortcut == nullptr)
- {
- BLOCK_END("ItemShortcutContainer::draw")
- return;
- }
-
- if (settings.guiAlpha != mAlpha)
- {
- if (mBackgroundImg != nullptr)
- mBackgroundImg->setAlpha(mAlpha);
- mAlpha = settings.guiAlpha;
- }
-
- Font *const font = getFont();
- safeDrawBackground(graphics);
-
- const Inventory *const inv = PlayerInfo::getInventory();
- if (inv == nullptr)
- {
- BLOCK_END("ItemShortcutContainer::draw")
- return;
- }
-
- // +++ for future usage need reorder drawing images before text or back
- for (unsigned i = 0; i < mMaxItems; i++)
- {
- const int itemX = (i % mGridWidth) * mBoxWidth;
- const int itemY = (i / mGridWidth) * mBoxHeight;
-
- // Draw item keyboard shortcut.
- const std::string key = inputManager.getKeyValueString(
- InputAction::SHORTCUT_1 + i);
- font->drawString(graphics,
- mForegroundColor,
- mForegroundColor,
- key,
- itemX + 2, itemY + 2);
-
- const int itemId = selShortcut->getItem(i);
- const ItemColor itemColor = selShortcut->getItemColor(i);
-
- if (itemId < 0)
- continue;
-
- // this is item
- if (itemId < SPELL_MIN_ID)
- {
- const Item *const item = inv->findItem(itemId, itemColor);
- if (item != nullptr)
- {
- // Draw item icon.
- Image *const image = item->getImage();
- if (image != nullptr)
- {
- std::string caption;
- if (item->getQuantity() > 1)
- caption = toString(item->getQuantity());
- else if (item->isEquipped() == Equipped_true)
- caption = "Eq.";
-
- image->setAlpha(1.0F);
- graphics->drawImage(image, itemX, itemY);
- if (item->isEquipped() == Equipped_true)
- {
- font->drawString(graphics,
- mEquipedColor,
- mEquipedColor2,
- caption,
- itemX + (mBoxWidth - font->getWidth(caption)) / 2,
- itemY + mBoxHeight - 14);
- }
- else
- {
- font->drawString(graphics,
- mUnEquipedColor,
- mUnEquipedColor2,
- caption,
- itemX + (mBoxWidth - font->getWidth(caption)) / 2,
- itemY + mBoxHeight - 14);
- }
- }
- }
- }
- else if (itemId < SKILL_MIN_ID && (spellManager != nullptr))
- { // this is magic shortcut
- const TextCommand *const spell = spellManager
- ->getSpellByItem(itemId);
- if (spell != nullptr)
- {
- if (!spell->isEmpty())
- {
- Image *const image = spell->getImage();
-
- if (image != nullptr)
- {
- image->setAlpha(1.0F);
- graphics->drawImage(image, itemX, itemY);
- }
- }
-
- font->drawString(graphics,
- mForegroundColor,
- mForegroundColor,
- spell->getSymbol(),
- itemX + 2, itemY + mBoxHeight / 2);
- }
- }
- else if (skillDialog != nullptr)
- {
- const SkillInfo *const skill = skillDialog->getSkill(
- itemId - SKILL_MIN_ID);
- if (skill != nullptr)
- {
- Image *const image = skill->data->icon;
-
- if (image != nullptr)
- {
- image->setAlpha(1.0F);
- graphics->drawImage(image, itemX, itemY);
- }
- if (!skill->data->haveIcon)
- {
- font->drawString(graphics,
- mForegroundColor,
- mForegroundColor,
- skill->data->shortName,
- itemX + 2,
- itemY + mBoxHeight / 2);
- }
- }
- }
- }
- BLOCK_END("ItemShortcutContainer::draw")
-}
-
-void ItemShortcutContainer::mouseDragged(MouseEvent &event)
-{
- if (mNumber == SHORTCUT_AUTO_TAB)
- return;
- ItemShortcut *const selShortcut = itemShortcut[mNumber];
- if (selShortcut == nullptr)
- return;
-
- if (event.getButton() == MouseButton::LEFT)
- {
- if (dragDrop.isEmpty() && mItemClicked)
- {
- mItemClicked = false;
-
- const int index = getIndexFromGrid(event.getX(), event.getY());
- if (index == -1)
- return;
-
- const int itemId = selShortcut->getItem(index);
- const ItemColor itemColor = selShortcut->getItemColor(index);
-
- if (itemId < 0)
- return;
-
- event.consume();
- if (itemId < SPELL_MIN_ID)
- { // items
- if (PlayerInfo::getInventory() == nullptr)
- return;
-
- const Item *const item = PlayerInfo::getInventory()->findItem(
- itemId, itemColor);
-
- if (item != nullptr)
- {
- selShortcut->removeItem(index);
- dragDrop.dragItem(item, DragDropSource::Shortcuts, index);
- }
- else
- {
- dragDrop.clear();
- }
- }
- else if (itemId < SKILL_MIN_ID)
- { // spells/commands
- if (spellManager == nullptr)
- {
- dragDrop.clear();
- return;
- }
-
- const TextCommand *const spell = spellManager->getSpellByItem(
- itemId);
- if (spell != nullptr)
- {
- selShortcut->removeItem(index);
- dragDrop.dragCommand(spell,
- DragDropSource::Shortcuts, index);
- dragDrop.setItem(itemId);
- }
- else
- {
- dragDrop.clear();
- }
- }
- else
- { // skills
- if (skillDialog == nullptr)
- {
- dragDrop.clear();
- return;
- }
- const SkillInfo *const skill
- = skillDialog->getSkillByItem(itemId);
- if (skill != nullptr)
- {
- const std::string itemData = selShortcut->getItemData(
- index);
- selShortcut->removeItem(index);
- dragDrop.dragSkill(skill,
- DragDropSource::Shortcuts,
- index);
- dragDrop.setItem(itemId);
- dragDrop.setItemColor(itemColor);
- dragDrop.setItemData(itemData);
- }
- else
- {
- dragDrop.clear();
- }
- }
- }
- }
-}
-
-void ItemShortcutContainer::mousePressed(MouseEvent &event)
-{
- ItemShortcut *const selShortcut = itemShortcut[mNumber];
- if (selShortcut == nullptr)
- return;
-
- const int index = getIndexFromGrid(event.getX(), event.getY());
-
- if (index == -1)
- return;
-
- if (event.getButton() == MouseButton::LEFT)
- {
- event.consume();
- // Stores the selected item if theirs one.
- if (selShortcut->isItemSelected() && (inventoryWindow != nullptr) &&
- (inventoryWindow->isWindowVisible()
- || selShortcut->getSelectedItem() >= SPELL_MIN_ID))
- {
- selShortcut->setItem(index);
- selShortcut->setItemSelected(-1);
- if (spellShortcut != nullptr)
- spellShortcut->setItemSelected(-1);
- inventoryWindow->unselectItem();
- }
- else if (selShortcut->getItem(index) != 0)
- {
- mItemClicked = true;
- }
- }
- else if (event.getButton() == MouseButton::RIGHT)
- {
- event.consume();
- if (popupMenu != nullptr &&
- viewport != nullptr)
- {
- popupMenu->showItemPopup(viewport->mMouseX,
- viewport->mMouseY,
- selShortcut->getItem(index),
- selShortcut->getItemColor(index));
- }
- }
-}
-
-void ItemShortcutContainer::mouseReleased(MouseEvent &event)
-{
- ItemShortcut *const selShortcut = itemShortcut[mNumber];
- if (selShortcut == nullptr)
- return;
-
- if (event.getButton() == MouseButton::LEFT)
- {
- if (selShortcut->isItemSelected())
- selShortcut->setItemSelected(-1);
-
- const int index = getIndexFromGrid(event.getX(), event.getY());
- if (index == -1)
- return;
-
- if (dragDrop.isEmpty())
- {
- if ((selShortcut->getItem(index) != 0) && mItemClicked)
- selShortcut->useItem(index);
- }
- else
- {
- if (dragDrop.getSource() == DragDropSource::Shortcuts)
- {
- const int oldIndex = dragDrop.getTag();
- selShortcut->setItem(oldIndex, dragDrop.getItem(),
- dragDrop.getItemColor());
- selShortcut->swap(oldIndex, index);
- }
- else
- {
- selShortcut->setItemData(index,
- dragDrop.getItemData());
- selShortcut->setItem(index, dragDrop.getItem(),
- dragDrop.getItemColor());
- }
- dragDrop.clear();
- dragDrop.deselect();
- }
-
- mItemClicked = false;
- }
-}
-
-void ItemShortcutContainer::mouseMoved(MouseEvent &event)
-{
- const ItemShortcut *const selShortcut = itemShortcut[mNumber];
- if (selShortcut == nullptr)
- return;
-
- const int index = getIndexFromGrid(event.getX(), event.getY());
-
- if (index == -1)
- return;
-
- const int itemId = selShortcut->getItem(index);
- const ItemColor itemColor = selShortcut->getItemColor(index);
-
- if (itemId < 0)
- return;
-
- if (itemId < SPELL_MIN_ID)
- {
- skillPopup->setVisible(Visible_false);
- spellPopup->setVisible(Visible_false);
-
- Inventory *const inv = PlayerInfo::getInventory();
- if (inv == nullptr)
- return;
-
- const Item *const item = inv->findItem(itemId, itemColor);
- if ((item != nullptr) && (viewport != nullptr))
- {
- itemPopup->setItem(item, false);
- itemPopup->position(viewport->mMouseX, viewport->mMouseY);
- }
- else
- {
- itemPopup->setVisible(Visible_false);
- }
- }
- else if (itemId < SKILL_MIN_ID && (spellManager != nullptr))
- {
- skillPopup->setVisible(Visible_false);
- itemPopup->setVisible(Visible_false);
- const TextCommand *const spell = spellManager->getSpellByItem(itemId);
- if ((spell != nullptr) && (viewport != nullptr))
- {
- spellPopup->setItem(spell);
- spellPopup->view(viewport->mMouseX,
- viewport->mMouseY);
- }
- else
- {
- spellPopup->setVisible(Visible_false);
- }
- }
- else if (skillDialog != nullptr)
- {
- itemPopup->setVisible(Visible_false);
- spellPopup->setVisible(Visible_false);
- const SkillInfo *const skill = skillDialog->getSkillByItem(itemId);
- if (skill == nullptr)
- return;
-
- const std::string data = selShortcut->getItemData(index);
- CastTypeT castType = CastType::Default;
- int offsetX = 0;
- int offsetY = 0;
- if (!data.empty())
- {
- STD_VECTOR<int> vect;
- splitToIntVector(vect, data, ' ');
- const size_t sz = vect.size();
- if (sz > 0)
- castType = static_cast<CastTypeT>(vect[0]);
- if (sz > 2)
- {
- offsetX = vect[1];
- offsetY = vect[2];
- }
- }
- skillPopup->show(skill,
- toInt(itemColor, int),
- castType,
- offsetX,
- offsetY);
- skillPopup->position(viewport->mMouseX,
- viewport->mMouseY);
- }
-}
-
-// Hide ItemTooltip
-void ItemShortcutContainer::mouseExited(MouseEvent &event A_UNUSED)
-{
- if (itemPopup != nullptr)
- itemPopup->setVisible(Visible_false);
- if (spellPopup != nullptr)
- spellPopup->setVisible(Visible_false);
- if (skillPopup != nullptr)
- skillPopup->setVisible(Visible_false);
-}
-
-void ItemShortcutContainer::widgetHidden(const Event &event A_UNUSED)
-{
- if (itemPopup != nullptr)
- itemPopup->setVisible(Visible_false);
- if (spellPopup != nullptr)
- spellPopup->setVisible(Visible_false);
-}