summaryrefslogtreecommitdiff
path: root/src/gui/popups
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/popups')
-rw-r--r--src/gui/popups/beingpopup.cpp337
-rw-r--r--src/gui/popups/beingpopup.h68
-rw-r--r--src/gui/popups/itempopup.cpp465
-rw-r--r--src/gui/popups/itempopup.h103
-rw-r--r--src/gui/popups/popupmenu.cpp3613
-rw-r--r--src/gui/popups/popupmenu.h321
-rw-r--r--src/gui/popups/skillpopup.cpp250
-rw-r--r--src/gui/popups/skillpopup.h84
-rw-r--r--src/gui/popups/speechbubble.cpp98
-rw-r--r--src/gui/popups/speechbubble.h67
-rw-r--r--src/gui/popups/spellpopup.cpp123
-rw-r--r--src/gui/popups/spellpopup.h71
-rw-r--r--src/gui/popups/statuspopup.cpp171
-rw-r--r--src/gui/popups/statuspopup.h72
-rw-r--r--src/gui/popups/textboxpopup.cpp83
-rw-r--r--src/gui/popups/textboxpopup.h64
-rw-r--r--src/gui/popups/textpopup.cpp112
-rw-r--r--src/gui/popups/textpopup.h83
18 files changed, 0 insertions, 6185 deletions
diff --git a/src/gui/popups/beingpopup.cpp b/src/gui/popups/beingpopup.cpp
deleted file mode 100644
index 299683f6d..000000000
--- a/src/gui/popups/beingpopup.cpp
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 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/popups/beingpopup.h"
-
-#include "being/being.h"
-#include "being/homunculusinfo.h"
-#include "being/petinfo.h"
-#include "being/playerinfo.h"
-#include "being/playerrelations.h"
-
-#include "gui/gui.h"
-
-#include "gui/fonts/font.h"
-
-#include "gui/widgets/label.h"
-
-#include "resources/chatobject.h"
-
-#include "resources/db/groupdb.h"
-
-#include "utils/gettext.h"
-#include "utils/foreach.h"
-#include "utils/stringutils.h"
-
-#include "debug.h"
-
-BeingPopup *beingPopup = nullptr;
-
-BeingPopup::BeingPopup() :
- Popup("BeingPopup", "beingpopup.xml"),
- mBeingName(new Label(this, "A")),
- mLabels()
-{
- // Being Name
- mBeingName->setFont(boldFont);
- mBeingName->setPosition(0, 0);
-
- const int fontHeight = mBeingName->getHeight();
- setMinHeight(fontHeight);
- addLabels(fontHeight);
-}
-
-BeingPopup::~BeingPopup()
-{
-}
-
-void BeingPopup::postInit()
-{
- Popup::postInit();
- add(mBeingName);
- FOR_EACH (STD_VECTOR<Label*>::iterator, it, mLabels)
- {
- add(*it);
- }
-}
-
-void BeingPopup::addLabels(const int fontHeight)
-{
- for (int f = 0; f < 11; f ++)
- {
- Label *const label = new Label(this, "A");
- label->setPosition(0, fontHeight * (f + 1));
- label->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
- mLabels.push_back(label);
- }
-}
-
-void BeingPopup::show(const int x, const int y, Being *const b)
-{
- if (b == nullptr)
- {
- setVisible(Visible_false);
- return;
- }
-
- int num = 0;
- Label *ptr = nullptr;
- b->updateComment();
-
- if (b->getType() == ActorType::Npc && b->getComment().empty())
- {
- setVisible(Visible_false);
- return;
- }
-
- mBeingName->setCaption(b->getName() + b->getGenderSignWithSpace());
- if (gui != nullptr)
- {
- if (playerRelations.isGoodName(b))
- mBeingName->setFont(boldFont);
- else
- mBeingName->setFont(gui->getSecureFont());
- }
- if (b->isAdvanced())
- {
- mBeingName->setForegroundColorAll(getThemeColor(
- ThemeColorId::PLAYER_ADVANCED), getThemeColor(
- ThemeColorId::PLAYER_ADVANCED_OUTLINE));
- }
- else
- {
- mBeingName->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
- }
-
- mBeingName->adjustSize();
- FOR_EACH (STD_VECTOR<Label*>::iterator, it, mLabels)
- {
- (*it)->setCaption(std::string());
- }
-
- const ActorTypeT type = b->getType();
- if (type == ActorType::Pet)
- {
- const PetInfo *const info = PlayerInfo::getPet();
- if ((info != nullptr) && info->id == b->getId())
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Hungry: %d"),
- info->hungry));
- ptr->adjustSize();
- num ++;
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Intimacy: %d"),
- info->intimacy));
- ptr->adjustSize();
- num ++;
- }
- }
- else if (type == ActorType::Homunculus)
- {
- const HomunculusInfo *const info = PlayerInfo::getHomunculus();
- if ((info != nullptr) && info->id == b->getId())
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Hungry: %d"),
- info->hungry));
- ptr->adjustSize();
- num ++;
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Intimacy: %d"),
- info->intimacy));
- ptr->adjustSize();
- num ++;
- }
- }
- else
- {
- const int groupId = b->getGroupId();
- const std::string &groupName = GroupDb::getLongName(groupId);
- if (!groupName.empty())
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Group: %s (%d)"),
- groupName.c_str(),
- groupId));
- ptr->adjustSize();
- num ++;
- }
-
- if (!(b->getPartyName().empty()))
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Party: %s"),
- b->getPartyName().c_str()));
- ptr->adjustSize();
- num ++;
- }
-
- if (!(b->getGuildName().empty()))
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Guild: %s"),
- b->getGuildName().c_str()));
- ptr->adjustSize();
- num ++;
- }
-
- if (b->getPvpRank() > 0)
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Pvp rank: %u"),
- b->getPvpRank()));
- ptr->adjustSize();
- num ++;
- }
-
- if (!b->getBuyBoard().empty())
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Buy shop: %s"),
- b->getBuyBoard().c_str()));
- ptr->adjustSize();
- num ++;
- }
-
- if (!b->getSellBoard().empty())
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Sell shop: %s"),
- b->getSellBoard().c_str()));
- ptr->adjustSize();
- num ++;
- }
-
- if (!b->getComment().empty())
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Comment: %s"),
- b->getComment().c_str()));
- ptr->adjustSize();
- num ++;
- }
-
- const std::string effects = b->getStatusEffectsString();
- if (!effects.empty())
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Effects: %s"),
- effects.c_str()));
- ptr->adjustSize();
- num ++;
- }
-
- const ChatObject *const chat = b->getChat();
- if (chat != nullptr)
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Chat room: %s"),
- chat->title.c_str()));
- ptr->adjustSize();
- num ++;
- }
- }
-
- const int level = b->getLevel();
- if (level > 1)
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Level: %d"),
- level));
- ptr->adjustSize();
- num ++;
- }
-
- const int maxHp = b->getMaxHP();
- if (maxHp > 0)
- {
- int hp = b->getHP();
- if (hp == 0)
- hp = maxHp - b->getDamageTaken();
- if (hp > 0)
- {
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Hp: %d/%d"),
- hp,
- maxHp));
- ptr->adjustSize();
- num ++;
- }
- }
-
- ptr = mLabels[num];
- // TRANSLATORS: being popup label
- ptr->setCaption(strprintf(_("Particles: %u"),
- CAST_U32(b->getParticlesCount())));
- ptr->adjustSize();
- num ++;
-
- const size_t sz = mLabels.size();
- for (size_t f = num; f < sz; f ++)
- {
- mLabels[f]->setCaption(std::string());
- }
-
- int minWidth = mBeingName->getWidth();
- const int height1 = getFont()->getHeight();
- int height = height1;
- FOR_EACH (STD_VECTOR<Label*>::iterator, it, mLabels)
- {
- const Label *const label = *it;
- if (label != nullptr)
- {
- if (label->getWidth() > minWidth)
- minWidth = label->getWidth();
- if (!label->getCaption().empty())
- height += height1;
- }
- }
-
- setContentSize(minWidth, height);
- position(x, y);
-}
-
-#ifdef USE_PROFILER
-void BeingPopup::logic()
-{
- BLOCK_START("BeingPopup::logic")
- logicChildren();
- BLOCK_END("BeingPopup::logic")
-}
-#endif // USE_PROFILER
diff --git a/src/gui/popups/beingpopup.h b/src/gui/popups/beingpopup.h
deleted file mode 100644
index a14f44568..000000000
--- a/src/gui/popups/beingpopup.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 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/>.
- */
-
-#ifndef GUI_POPUPS_BEINGPOPUP_H
-#define GUI_POPUPS_BEINGPOPUP_H
-
-#include "gui/widgets/popup.h"
-
-class Being;
-class Label;
-
-/**
- * A popup that displays information about a being.
- */
-class BeingPopup final : public Popup
-{
- public:
- /**
- * Constructor. Initializes the being popup.
- */
- BeingPopup();
-
- A_DELETE_COPY(BeingPopup)
-
- /**
- * Destructor. Cleans up the being popup on deletion.
- */
- ~BeingPopup();
-
- /**
- * Sets the info to be displayed given a particular player.
- */
- void show(const int x, const int y, Being *const b);
-
- void postInit() override final;
-
-#ifdef USE_PROFILER
- void logic();
-#endif // USE_PROFILER
-
- private:
- void addLabels(const int fontHeight);
-
- Label *mBeingName A_NONNULLPOINTER;
- STD_VECTOR<Label*> mLabels;
-};
-
-extern BeingPopup *beingPopup;
-
-#endif // GUI_POPUPS_BEINGPOPUP_H
diff --git a/src/gui/popups/itempopup.cpp b/src/gui/popups/itempopup.cpp
deleted file mode 100644
index 28de3b641..000000000
--- a/src/gui/popups/itempopup.cpp
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/popups/itempopup.h"
-
-#include "actormanager.h"
-#include "configuration.h"
-
-#include "gui/gui.h"
-
-#include "gui/fonts/font.h"
-
-#include "gui/widgets/icon.h"
-#include "gui/widgets/label.h"
-#include "gui/widgets/textbox.h"
-
-#include "net/beinghandler.h"
-#ifdef TMWA_SUPPORT
-#include "net/net.h"
-#endif // TMWA_SUPPORT
-
-#include "utils/foreach.h"
-#include "utils/gettext.h"
-#include "utils/stdmove.h"
-
-#include "utils/translation/podict.h"
-
-#include "resources/iteminfo.h"
-
-#include "resources/db/itemoptiondb.h"
-#include "resources/db/unitsdb.h"
-
-#include "resources/image/image.h"
-
-#include "resources/item/item.h"
-#include "resources/item/itemfieldtype.h"
-#include "resources/item/itemoptionslist.h"
-
-#include "resources/loaders/imageloader.h"
-
-#include "debug.h"
-
-ItemPopup *itemPopup = nullptr;
-
-ItemPopup::ItemPopup() :
- Popup("ItemPopup", "itempopup.xml"),
- mItemName(new Label(this)),
- mItemDesc(new TextBox(this)),
- mItemEffect(new TextBox(this)),
- mItemWeight(new TextBox(this)),
- mItemCards(new TextBox(this)),
- mItemOptions(new TextBox(this)),
- mItemType(ItemDbType::UNUSABLE),
- mIcon(new Icon(this, nullptr)),
- mLastName(),
- mCardsStr(),
- mItemOptionsStr(),
- mLastId(0),
- mLastColor(ItemColor_one)
-{
- // Item name
- mItemName->setFont(boldFont);
- mItemName->setPosition(0, 0);
-
- const int fontHeight = getFont()->getHeight();
-
- // Item description
- mItemDesc->setEditable(false);
- mItemDesc->setPosition(0, fontHeight);
- mItemDesc->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-
- // Item effect
- mItemEffect->setEditable(false);
- mItemEffect->setPosition(0, 2 * fontHeight);
- mItemEffect->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-
- // Item weight
- mItemWeight->setEditable(false);
- mItemWeight->setPosition(0, 3 * fontHeight);
- mItemWeight->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-
- // Item cards
- mItemCards->setEditable(false);
- mItemCards->setPosition(0, 4 * fontHeight);
- mItemCards->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-
- // Item options
- mItemOptions->setEditable(false);
- mItemOptions->setPosition(0, 5 * fontHeight);
- mItemOptions->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-}
-
-void ItemPopup::postInit()
-{
- Popup::postInit();
- add(mItemName);
- add(mItemDesc);
- add(mItemEffect);
- add(mItemWeight);
- add(mItemCards);
- add(mItemOptions);
- add(mIcon);
-
- addMouseListener(this);
-}
-
-ItemPopup::~ItemPopup()
-{
- if (mIcon != nullptr)
- {
- Image *const image = mIcon->getImage();
- if (image != nullptr)
- image->decRef();
- }
-}
-
-void ItemPopup::setItem(const Item *const item,
- const bool showImage)
-{
- if (item == nullptr)
- return;
-
- const ItemInfo &ii = item->getInfo();
- setItem(ii,
- item->getColor(),
- showImage,
- item->getId(),
- item->getCards(),
- item->getOptions());
- if (item->getRefine() > 0)
- {
- mLastName = ii.getName();
- mLastColor = item->getColor();
- mLastId = item->getId();
-#ifdef TMWA_SUPPORT
- if (Net::getNetworkType() == ServerType::TMWATHENA)
- {
- mItemName->setCaption(strprintf("%s (+%u), %d",
- ii.getName().c_str(),
- CAST_U32(item->getRefine()),
- ii.getId()));
- }
- else
-#endif // TMWA_SUPPORT
- {
- mItemName->setCaption(strprintf("%s (+%u), %d",
- ii.getName(item->getColor()).c_str(),
- CAST_U32(item->getRefine()),
- ii.getId()));
- }
- mItemName->adjustSize();
- const unsigned minWidth = mItemName->getWidth() + 8;
- if (CAST_U32(getWidth()) < minWidth)
- setWidth(minWidth);
- }
-}
-
-void ItemPopup::setItem(const ItemInfo &item,
- const ItemColor color,
- const bool showImage,
- int id,
- const int *const cards,
- const ItemOptionsList *const options)
-{
- if (mIcon == nullptr)
- return;
-
- std::string cardsStr;
- std::string optionsStr;
-
- if (item.getName() == mLastName &&
- color == mLastColor &&
- id == mLastId)
- {
- cardsStr = getCardsString(cards);
- optionsStr = getOptionsString(options);
- if (mItemOptionsStr == optionsStr &&
- mCardsStr == cardsStr)
- {
- return;
- }
- }
- else
- {
- cardsStr = getCardsString(cards);
- optionsStr = getOptionsString(options);
- }
- mItemOptionsStr = STD_MOVE(optionsStr);
- mCardsStr = STD_MOVE(cardsStr);
-
- if (id == -1)
- id = item.getId();
-
- int space = 0;
-
- Image *const oldImage = mIcon->getImage();
- if (oldImage != nullptr)
- oldImage->decRef();
-
- if (showImage)
- {
- Image *const image = Loader::getImage(combineDye2(
- pathJoin(paths.getStringValue("itemIcons"),
- item.getDisplay().image),
- item.getDyeIconColorsString(color)));
-
- mIcon->setImage(image);
- if (image != nullptr)
- {
- mIcon->setPosition(0, 0);
- space = mIcon->getWidth();
- }
- }
- else
- {
- mIcon->setImage(nullptr);
- }
-
- mItemType = item.getType();
-
- mLastName = item.getName();
- mLastColor = color;
- mLastId = id;
-
-#ifdef TMWA_SUPPORT
- if (Net::getNetworkType() == ServerType::TMWATHENA)
- {
- mItemName->setCaption(strprintf("%s, %d",
- item.getName().c_str(), id));
- mItemDesc->setTextWrapped(item.getDescription(), 196);
- }
- else
-#endif // TMWA_SUPPORT
- {
- mItemName->setCaption(strprintf("%s, %d",
- item.getName(color).c_str(), id));
- mItemDesc->setTextWrapped(item.getDescription(color), 196);
- }
-
- mItemName->adjustSize();
- setLabelColor(mItemName, mItemType);
- mItemName->setPosition(space, 0);
-
- mItemEffect->setTextWrapped(item.getEffect(), 196);
- // TRANSLATORS: popup label
- mItemWeight->setTextWrapped(strprintf(_("Weight: %s"),
- UnitsDb::formatWeight(item.getWeight()).c_str()), 196);
- mItemCards->setTextWrapped(mCardsStr, 196);
- mItemOptions->setTextWrapped(mItemOptionsStr, 196);
-
- int minWidth = mItemName->getWidth() + space;
-
- if (mItemName->getWidth() + space > minWidth)
- minWidth = mItemName->getWidth() + space;
- if (mItemDesc->getMinWidth() > minWidth)
- minWidth = mItemDesc->getMinWidth();
- if (mItemEffect->getMinWidth() > minWidth)
- minWidth = mItemEffect->getMinWidth();
- if (mItemWeight->getMinWidth() > minWidth)
- minWidth = mItemWeight->getMinWidth();
- if (mItemCards->getMinWidth() > minWidth)
- minWidth = mItemCards->getMinWidth();
- if (mItemOptions->getMinWidth() > minWidth)
- minWidth = mItemOptions->getMinWidth();
-
- const int numRowsDesc = mItemDesc->getNumberOfRows();
- const int numRowsEffect = mItemEffect->getNumberOfRows();
- const int numRowsWeight = mItemWeight->getNumberOfRows();
- const int numRowsCards = mItemCards->getNumberOfRows();
- const int numRowsOptions = mItemOptions->getNumberOfRows();
- const int height = getFont()->getHeight();
-
- if (item.getEffect().empty())
- {
- setContentSize(minWidth,
- (numRowsDesc + 2 + numRowsWeight + numRowsCards + numRowsOptions) *
- height);
- mItemWeight->setPosition(0, (numRowsDesc + 2) * height);
- mItemCards->setPosition(0, (numRowsDesc + numRowsWeight + 2) * height);
- mItemOptions->setPosition(0,
- (numRowsDesc + numRowsWeight + numRowsCards + 2) * height);
- }
- else
- {
- setContentSize(minWidth, (numRowsDesc + numRowsEffect + 2
- + numRowsWeight + numRowsCards + numRowsOptions) * height);
- mItemEffect->setPosition(0, (numRowsDesc + 2) * height);
- mItemWeight->setPosition(0, (numRowsDesc + numRowsEffect + 2)
- * height);
- mItemCards->setPosition(0, (numRowsDesc + numRowsEffect
- + numRowsWeight + 2) * height);
- mItemOptions->setPosition(0, (numRowsDesc + numRowsEffect
- + numRowsWeight + numRowsCards + 2) * height);
- }
-
- mItemDesc->setPosition(0, 2 * height);
-}
-
-std::string ItemPopup::getCardsString(const int *const cards)
-{
- if (cards == nullptr)
- return std::string();
-
- std::string label;
-
- switch (cards[0])
- {
- case 0xfe: // named item
- {
- const int32_t charId = cards[2] + 65536 * cards[3];
- std::string name = actorManager->findCharById(charId);
- if (name.empty())
- {
- name = toString(charId);
- beingHandler->requestNameByCharId(charId);
- mLastId = 0; // allow recreate popup with same data
- }
- // TRANSLATORS: named item description
- label.append(strprintf(_("Item named: %s"), name.c_str()));
- return label;
- }
- case 0x00FFU: // forged item
- {
- return label;
- }
- case 0xFF00U:
- {
- return label;
- }
- default:
- {
- for (int f = 0; f < maxCards; f ++)
- {
- const int id = cards[f];
- if (id != 0)
- {
- if (!label.empty())
- label.append(" / ");
- const ItemInfo &info = ItemDB::get(id);
- label.append(info.getName());
- }
- }
- if (label.empty())
- return label;
- // TRANSLATORS: popup label
- return _("Cards: ") + label;
- }
- }
-}
-
-std::string ItemPopup::getOptionsString(const ItemOptionsList *const options)
-{
- if (options == nullptr || translator == nullptr)
- return std::string();
- const size_t sz = options->size();
- std::string effect;
- for (size_t f = 0; f < sz; f ++)
- {
- const ItemOption &option = options->get(f);
- if (option.index == 0)
- continue;
- const STD_VECTOR<ItemFieldType*> &fields = ItemOptionDb::getFields(
- option.index);
- if (fields.empty())
- continue;
- const std::string valueStr = toString(option.value);
- FOR_EACH (STD_VECTOR<ItemFieldType*>::const_iterator, it, fields)
- {
- const ItemFieldType *const field = *it;
- std::string value = valueStr;
- if (!effect.empty())
- effect.append(" / ");
- if (field->sign && value[0] != '-')
- value = std::string("+").append(value);
- const std::string format = translator->getStr(field->description);
- effect.append(strprintf(format.c_str(),
- value.c_str()));
- }
- }
- if (effect.empty())
- return effect;
- // TRANSLATORS: popup label
- return _("Options: ") + effect;
-}
-
-#define caseSetColor(name1, name2) \
- case name1: \
- { \
- return label->setForegroundColorAll(getThemeColor(name2), \
- getThemeColor(name2##_OUTLINE)); \
- }
-void ItemPopup::setLabelColor(Label *label,
- const ItemDbTypeT type) const
-{
- switch (type)
- {
- caseSetColor(ItemDbType::UNUSABLE, ThemeColorId::GENERIC)
- caseSetColor(ItemDbType::USABLE, ThemeColorId::USABLE)
- caseSetColor(ItemDbType::EQUIPMENT_ONE_HAND_WEAPON,
- ThemeColorId::ONEHAND)
- caseSetColor(ItemDbType::EQUIPMENT_TWO_HANDS_WEAPON,
- ThemeColorId::TWOHAND)
- caseSetColor(ItemDbType::EQUIPMENT_TORSO, ThemeColorId::TORSO)
- caseSetColor(ItemDbType::EQUIPMENT_ARMS, ThemeColorId::ARMS)
- caseSetColor(ItemDbType::EQUIPMENT_HEAD, ThemeColorId::HEAD)
- caseSetColor(ItemDbType::EQUIPMENT_LEGS, ThemeColorId::LEGS)
- caseSetColor(ItemDbType::EQUIPMENT_SHIELD, ThemeColorId::SHIELD)
- caseSetColor(ItemDbType::EQUIPMENT_RING, ThemeColorId::RING)
- caseSetColor(ItemDbType::EQUIPMENT_NECKLACE, ThemeColorId::NECKLACE)
- caseSetColor(ItemDbType::EQUIPMENT_FEET, ThemeColorId::FEET)
- caseSetColor(ItemDbType::EQUIPMENT_AMMO, ThemeColorId::AMMO)
- caseSetColor(ItemDbType::EQUIPMENT_CHARM, ThemeColorId::CHARM)
- caseSetColor(ItemDbType::SPRITE_RACE, ThemeColorId::UNKNOWN_ITEM)
- caseSetColor(ItemDbType::SPRITE_HAIR, ThemeColorId::UNKNOWN_ITEM)
- caseSetColor(ItemDbType::CARD, ThemeColorId::CARD)
- default:
- {
- return label->setForegroundColorAll(getThemeColor(
- ThemeColorId::UNKNOWN_ITEM), getThemeColor(
- ThemeColorId::UNKNOWN_ITEM_OUTLINE));
- }
- }
-}
-#undef caseSetColor
-
-void ItemPopup::mouseMoved(MouseEvent &event)
-{
- Popup::mouseMoved(event);
-
- // When the mouse moved on top of the popup, hide it
- setVisible(Visible_false);
- resetPopup();
-}
-
-void ItemPopup::resetPopup()
-{
- mLastName.clear();
- mLastColor = ItemColor_one;
- mLastId = 0;
-}
diff --git a/src/gui/popups/itempopup.h b/src/gui/popups/itempopup.h
deleted file mode 100644
index fff3b817d..000000000
--- a/src/gui/popups/itempopup.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/>.
- */
-
-#ifndef GUI_POPUPS_ITEMPOPUP_H
-#define GUI_POPUPS_ITEMPOPUP_H
-
-#include "enums/resources/item/itemdbtype.h"
-
-#include "enums/simpletypes/itemcolor.h"
-
-#include "gui/widgets/popup.h"
-
-class Icon;
-class Item;
-class ItemInfo;
-class Label;
-class TextBox;
-
-struct ItemOptionsList;
-
-/**
- * A popup that displays information about an item.
- */
-class ItemPopup final : public Popup
-{
- public:
- /**
- * Constructor. Initializes the item popup.
- */
- ItemPopup();
-
- A_DELETE_COPY(ItemPopup)
-
- /**
- * Destructor. Cleans up the item popup on deletion.
- */
- ~ItemPopup();
-
- void postInit() override final;
-
- /**
- * Sets the info to be displayed given a particular item.
- */
- void setItem(const ItemInfo &item,
- const ItemColor color,
- const bool showImage,
- int id,
- const int *const cards,
- const ItemOptionsList *const options);
-
- void setItem(const Item *const item,
- const bool showImage);
-
- void mouseMoved(MouseEvent &event) override final;
-
- void resetPopup();
-
- private:
- std::string getCardsString(const int *const cards);
-
- std::string getOptionsString(const ItemOptionsList *const options);
-
- Label *mItemName A_NONNULLPOINTER;
- TextBox *mItemDesc A_NONNULLPOINTER;
- TextBox *mItemEffect A_NONNULLPOINTER;
- TextBox *mItemWeight A_NONNULLPOINTER;
- TextBox *mItemCards A_NONNULLPOINTER;
- TextBox *mItemOptions A_NONNULLPOINTER;
- ItemDbTypeT mItemType;
- Icon *mIcon A_NONNULLPOINTER;
- std::string mLastName;
- std::string mCardsStr;
- std::string mItemOptionsStr;
- int mLastId;
- ItemColor mLastColor;
-
- void setLabelColor(Label *label,
- const ItemDbTypeT type) const A_NONNULL(2);
-};
-
-extern ItemPopup *itemPopup;
-
-#endif // GUI_POPUPS_ITEMPOPUP_H
diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp
deleted file mode 100644
index 752caff72..000000000
--- a/src/gui/popups/popupmenu.cpp
+++ /dev/null
@@ -1,3613 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-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/popups/popupmenu.h"
-
-#include "actormanager.h"
-#include "configuration.h"
-#include "party.h"
-#include "settings.h"
-
-#include "being/flooritem.h"
-#include "being/localplayer.h"
-#include "being/playerinfo.h"
-#include "being/playerrelation.h"
-#include "being/playerrelations.h"
-
-#include "const/spells.h"
-
-#include "enums/resources/map/mapitemtype.h"
-
-#include "input/inputmanager.h"
-
-#include "gui/buttontext.h"
-#include "gui/gui.h"
-#include "gui/popupmanager.h"
-#include "gui/viewport.h"
-#include "gui/windowmenu.h"
-
-#include "gui/windows/chatwindow.h"
-#include "gui/windows/inventorywindow.h"
-#include "gui/windows/minimap.h"
-#include "gui/windows/ministatuswindow.h"
-#include "gui/windows/npcdialog.h"
-#include "gui/windows/outfitwindow.h"
-#include "gui/windows/socialwindow.h"
-#include "gui/windows/textcommandeditor.h"
-#include "gui/windows/textdialog.h"
-#include "gui/windows/tradewindow.h"
-
-#include "gui/widgets/button.h"
-#include "gui/widgets/createwidget.h"
-#include "gui/widgets/progressbar.h"
-#include "gui/widgets/scrollarea.h"
-#include "gui/widgets/staticbrowserbox.h"
-#include "gui/widgets/textfield.h"
-
-#include "gui/widgets/tabs/chat/whispertab.h"
-
-#include "net/adminhandler.h"
-#include "net/chathandler.h"
-#include "net/guildhandler.h"
-#include "net/npchandler.h"
-#include "net/net.h"
-
-#ifdef TMWA_SUPPORT
-#include "net/tmwa/guildmanager.h"
-#endif // TMWA_SUPPORT
-
-#include "resources/chatobject.h"
-#include "resources/groupinfo.h"
-#include "resources/iteminfo.h"
-#include "resources/itemmenuitem.h"
-
-#include "resources/db/groupdb.h"
-#include "resources/db/npcdb.h"
-
-#include "resources/item/item.h"
-
-#include "resources/map/map.h"
-#include "resources/map/mapitem.h"
-#include "resources/map/speciallayer.h"
-
-#include "resources/skill/skillinfo.h"
-
-#include "utils/checkutils.h"
-#include "utils/foreach.h"
-#include "utils/gettext.h"
-
-#include "debug.h"
-
-std::string tradePartnerName;
-
-PopupMenu *popupMenu = nullptr;
-
-PopupMenu::PopupMenu() :
- Popup("PopupMenu", "popupmenu.xml"),
- mBrowserBox(new StaticBrowserBox(this, Opaque_true,
- "popupbrowserbox.xml")),
- mScrollArea(nullptr),
- mBeingId(BeingId_zero),
- mFloorItemId(BeingId_zero),
- mItemId(0),
- mItemIndex(-1),
- mItemColor(ItemColor_one),
- mMapItem(nullptr),
- mTab(nullptr),
- mSpell(nullptr),
- mCallerWindow(nullptr),
- mRenameListener(),
- mPlayerListener(),
- mDialog(nullptr),
- mButton(nullptr),
- mGroup(nullptr),
- mName(),
- mExtName(),
- mTextField(nullptr),
- mType(ActorType::Unknown),
- mSubType(BeingTypeId_zero),
- mX(0),
- mY(0),
- mAllowCleanMenu(true)
-{
- mBrowserBox->setOpaque(Opaque_false);
- mBrowserBox->setLinkHandler(this);
- mRenameListener.setMapItem(nullptr);
- mRenameListener.setDialog(nullptr);
- mPlayerListener.setNick("");
- mPlayerListener.setDialog(nullptr);
- mPlayerListener.setType(ActorType::Unknown);
- mScrollArea = new ScrollArea(this, mBrowserBox, Opaque_false);
- mScrollArea->setVerticalScrollPolicy(ScrollArea::SHOW_AUTO);
- addMouseListener(this);
-}
-
-void PopupMenu::postInit()
-{
- Popup::postInit();
- add(mScrollArea);
-}
-
-void PopupMenu::initPopup()
-{
- if (localPlayer == nullptr)
- return;
- const int groupId = localPlayer->getGroupId();
- mGroup = GroupDb::getGroup(groupId);
-}
-
-bool PopupMenu::isAllowCommand(const ServerCommandTypeT command)
-{
- if (mGroup == nullptr)
- return false;
-#ifdef TMWA_SUPPORT
- // allow any commands for legacy if group > 0
- if (Net::getNetworkType() == ServerType::TMWATHENA &&
- localPlayer != nullptr &&
- localPlayer->isGM())
- {
- return true;
- }
-#endif
- if (mGroup->mPermissions[CAST_SIZE(ServerPermissionType::all_commands)] ==
- Enable_true)
- {
- return true;
- }
- const ServerCommandEnable::Type enabled =
- mGroup->mCommands[CAST_SIZE(command)];
- return (enabled & ServerCommandEnable::Self) != 0;
-}
-
-bool PopupMenu::isAllowOtherCommand(const ServerCommandTypeT command)
-{
- if (mGroup == nullptr ||
- localPlayer == nullptr)
- return false;
-#ifdef TMWA_SUPPORT
- // allow any commands for legacy if group > 0
- if (Net::getNetworkType() == ServerType::TMWATHENA &&
- localPlayer->isGM())
- {
- return true;
- }
-#endif
- const ServerCommandEnable::Type enabled =
- mGroup->mCommands[CAST_SIZE(command)];
- if (mName == localPlayer->getName())
- return (enabled & ServerCommandEnable::Self) != 0;
- return (enabled & ServerCommandEnable::Other) != 0;
-}
-
-void PopupMenu::showPopup(const int x, const int y, const Being *const being)
-{
- if (being == nullptr ||
- localPlayer == nullptr ||
- actorManager == nullptr)
- {
- return;
- }
-
- initPopup();
- mBeingId = being->getId();
- mName = being->getName();
- mExtName = being->getExtName();
- mType = being->getType();
- mSubType = being->getSubType();
- mBrowserBox->clearRows();
- mX = x;
- mY = y;
-
- const std::string &name = mName;
- if (being->getType() != ActorType::SkillUnit)
- {
- mBrowserBox->addRow(name + being->getGenderSignWithSpace());
- }
-
- switch (being->getType())
- {
- case ActorType::Player:
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: trade with player
- mBrowserBox->addRow("/trade 'NAME'", _("Trade"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: trade attack player
- mBrowserBox->addRow("/attack 'NAME'", _("Attack"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: send whisper to player
- mBrowserBox->addRow("/whispertext 'NAME'", _("Whisper"));
- addMailCommands();
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
-
-#ifdef TMWA_SUPPORT
- if (Net::getNetworkType() == ServerType::TMWATHENA)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: heal player
- mBrowserBox->addRow("/heal :'BEINGID'", _("Heal"));
- mBrowserBox->addSeparator("##3---");
- }
-#endif // TMWA_SUPPORT
-
- addPlayerRelation(name);
- mBrowserBox->addSeparator("##3---");
-
- addFollow();
- addPartyName(being->getPartyName());
-
- const Guild *const guild1 = being->getGuild();
- const Guild *const guild2 = localPlayer->getGuild();
- if (guild2 != nullptr)
- {
- if (guild1 != nullptr)
- {
- if (guild1->getId() == guild2->getId())
- {
- mBrowserBox->addRow("/kickguild 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player from guild
- _("Kick from guild"));
- if (guild2->getServerGuild())
- {
- mBrowserBox->addRow(strprintf(
- "@@guild-pos|%s >@@",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: change player position in guild
- _("Change pos in guild")));
- }
- }
- }
- else if (guild2->getMember(mName) != nullptr)
- {
- mBrowserBox->addRow("/kickguild 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player from guild
- _("Kick from guild"));
- if (guild2->getServerGuild())
- {
- mBrowserBox->addRow(strprintf(
- "@@guild-pos|%s >@@",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: change player position in guild
- _("Change pos in guild")));
- }
- }
- else
- {
-#ifdef TMWA_SUPPORT
- if (guild2->getServerGuild() ||
- (guildManager != nullptr && guildManager->havePower()))
-#endif // TMWA_SUPPORT
- {
- mBrowserBox->addRow("/guild 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: invite player to guild
- _("Invite to guild"));
- }
- }
- }
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: set player invisible for self by id
- mBrowserBox->addRow("/nuke 'NAME'", _("Nuke"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move to player location
- mBrowserBox->addRow("/navigateto 'NAME'", _("Move"));
- addPlayerMisc();
- addBuySell(being);
- addChat(being);
- break;
- }
-
- case ActorType::Npc:
- if (!addBeingMenu())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: talk with npc
- mBrowserBox->addRow("/talk 'NAME'", _("Talk"));
-#ifdef TMWA_SUPPORT
- if (Net::getNetworkType() != ServerType::TMWATHENA)
-#endif
- {
- mBrowserBox->addRow("/whispertext NPC:'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: whisper to npc
- _("Whisper"));
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: buy from npc
- mBrowserBox->addRow("/buy 'NAME'", _("Buy"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: sell to npc
- mBrowserBox->addRow("/sell 'NAME'", _("Sell"));
- }
-
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move to npc location
- mBrowserBox->addRow("/navigateto 'NAME'", _("Move"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add comment to npc
- mBrowserBox->addRow("addcomment", _("Add comment"));
- addChat(being);
- break;
-
- case ActorType::Monster:
- {
- // Monsters can be attacked
- // TRANSLATORS: popup menu item
- // TRANSLATORS: attack monster
- mBrowserBox->addRow("/attack :'BEINGID'", _("Attack"));
- addCatchPetCommands();
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
-
- if (config.getBoolValue("enableAttackFilter"))
- {
- mBrowserBox->addSeparator("##3---");
- if (actorManager->isInAttackList(name)
- || actorManager->isInIgnoreAttackList(name)
- || actorManager->isInPriorityAttackList(name))
- {
- mBrowserBox->addRow("/removeattack 'NAME'",
- // TRANSLATORS: remove monster from attack list
- // TRANSLATORS: popup menu item
- _("Remove from attack list"));
- }
- else
- {
- mBrowserBox->addRow("/addpriorityattack 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add monster to priotiry attack list
- _("Add to priority attack list"));
- mBrowserBox->addRow("/addattack 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add monster to attack list
- _("Add to attack list"));
- mBrowserBox->addRow("/addignoreattack 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add monster to ignore list
- _("Add to ignore list"));
- }
- }
- break;
- }
-
- case ActorType::Mercenary:
- // TRANSLATORS: popup menu item
- // TRANSLATORS: Mercenary move to master
- mBrowserBox->addRow("/mercenarytomaster", _("Move to master"));
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: fire mercenary
- mBrowserBox->addRow("/firemercenary", _("Fire"));
- mBrowserBox->addSeparator("##3---");
- break;
-
- case ActorType::Homunculus:
- {
- const HomunculusInfo *const info = PlayerInfo::getHomunculus();
- if (info != nullptr)
- {
- mBrowserBox->addRow("/homunculustomaster",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: homunculus move to master
- _("Move to master"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: feed homunculus
- mBrowserBox->addRow("/homunculusfeed", _("Feed"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: pet rename item
- mBrowserBox->addRow("/sethomunname", _("Rename"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: delete homunculus
- mBrowserBox->addRow("/homunculusfire", _("Kill"));
- mBrowserBox->addSeparator("##3---");
- }
- addGmCommands();
- break;
- }
- case ActorType::Pet:
- if (being->getOwner() == localPlayer)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: feed pet
- mBrowserBox->addRow("/petfeed", _("Feed"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: pet drop loot
- mBrowserBox->addRow("/petdroploot", _("Drop loot"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: pet unequip item
- mBrowserBox->addRow("/petunequip", _("Unequip"));
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: pet rename item
- mBrowserBox->addRow("/setpetname", _("Rename"));
- mBrowserBox->addSeparator("##3---");
- const BeingInfo *const info = being->getInfo();
- std::string msg;
- if (info != nullptr)
- msg = info->getString(0);
- if (!msg.empty())
- {
- mBrowserBox->addRow("/petreturnegg", msg.c_str());
- }
- else
- {
- mBrowserBox->addRow("/petreturnegg",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: pet return to egg
- _("Return to egg"));
- }
- mBrowserBox->addSeparator("##3---");
- }
- else
- {
- addCatchPetCommands();
- }
- break;
- case ActorType::SkillUnit:
- {
- const BeingId id = being->getCreatorId();
- std::string creatorName;
- Being *const creator = actorManager->findBeing(id);
- if (creator != nullptr)
- creatorName = creator->getName();
- else
- creatorName = actorManager->getSeenPlayerById(id);
-
- if (creatorName.empty())
- creatorName = strprintf("?%d", CAST_S32(id));
-
- mBrowserBox->addRow(strprintf("%s, %d (%s)",
- name.c_str(),
- CAST_S32(being->getSubType()),
- creatorName.c_str()));
- break;
- }
- case ActorType::Avatar:
- case ActorType::Unknown:
- case ActorType::FloorItem:
- case ActorType::Portal:
- case ActorType::Elemental:
- default:
- break;
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add being name to chat
- mBrowserBox->addRow("/addtext 'NAME'", _("Add name to chat"));
- mBrowserBox->addSeparator("##3---");
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-bool PopupMenu::addBeingMenu()
-{
- Being *being = actorManager->findBeing(mBeingId);
- if (being == nullptr)
- return false;
-
- BeingInfo *const info = NPCDB::get(fromInt(
- being->getSubType(), BeingTypeId));
- if (info == nullptr)
- return false;
-
- const STD_VECTOR<BeingMenuItem> &menu = info->getMenu();
- FOR_EACH (STD_VECTOR<BeingMenuItem>::const_iterator, it, menu)
- {
- const BeingMenuItem &item = *it;
- mBrowserBox->addRow("/" + item.command, item.name.c_str());
- }
- return true;
-}
-
-void PopupMenu::setMousePos()
-{
- if (viewport != nullptr)
- {
- mX = viewport->mMouseX;
- mY = viewport->mMouseY;
- }
- else
- {
- Gui::getMouseState(mX, mY);
- }
-}
-
-void PopupMenu::setMousePos2()
-{
- if (mX == 0 && mY == 0)
- {
- if (viewport != nullptr)
- {
- mX = viewport->mMouseX;
- mY = viewport->mMouseY;
- }
- else
- {
- Gui::getMouseState(mX, mY);
- }
- }
-}
-
-void PopupMenu::showPopup(const int x, const int y,
- const STD_VECTOR<ActorSprite*> &beings)
-{
- initPopup();
- mX = x;
- mY = y;
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Players"));
- FOR_EACH (STD_VECTOR<ActorSprite*>::const_iterator, it, beings)
- {
- const Being *const being = dynamic_cast<const Being*>(*it);
- const ActorSprite *const actor = *it;
- if ((being != nullptr) && !being->getName().empty())
- {
- mBrowserBox->addRow(strprintf("@@player_%u|%s >@@",
- CAST_U32(being->getId()), (being->getName()
- + being->getGenderSignWithSpace()).c_str()));
- }
- else if (actor->getType() == ActorType::FloorItem)
- {
- const FloorItem *const floorItem
- = static_cast<const FloorItem*>(actor);
- mBrowserBox->addRow(strprintf("@@flooritem_%u|%s >@@",
- CAST_U32(actor->getId()),
- floorItem->getName().c_str()));
- }
- }
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(x, y);
-}
-
-void PopupMenu::showPlayerPopup(const std::string &nick)
-{
- if (nick.empty() || (localPlayer == nullptr))
- return;
-
- initPopup();
- setMousePos();
- mName = nick;
- mExtName = nick;
- mBeingId = BeingId_zero;
- mType = ActorType::Player;
- mSubType = BeingTypeId_zero;
- mBrowserBox->clearRows();
-
- const std::string &name = mName;
-
- mBrowserBox->addRow(name);
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: send whisper to player
- mBrowserBox->addRow("/whispertext 'NAME'", _("Whisper"));
- addMailCommands();
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
-
- addPlayerRelation(name);
- mBrowserBox->addSeparator("##3---");
-
- addFollow();
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add comment to player
- mBrowserBox->addRow("addcomment", _("Add comment"));
-
- if (localPlayer->isInParty())
- {
- const Party *const party = localPlayer->getParty();
- if (party != nullptr)
- {
- const PartyMember *const member = party->getMember(mName);
- if (member != nullptr)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player from party
- mBrowserBox->addRow("/kickparty 'NAME'", _("Kick from party"));
- mBrowserBox->addSeparator("##3---");
- const PartyMember *const o = party->getMember(
- localPlayer->getName());
- showAdoptCommands();
- if ((o != nullptr) && member->getMap() == o->getMap())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move to player position
- mBrowserBox->addRow("/navigate 'X' 'Y'", _("Move"));
- }
- }
- }
- }
-
- const Guild *const guild2 = localPlayer->getGuild();
- if (guild2 != nullptr)
- {
- if (guild2->getMember(mName) != nullptr)
- {
-#ifdef TMWA_SUPPORT
- if (guild2->getServerGuild() || (guildManager != nullptr
- && guildManager->havePower()))
-#endif // TMWA_SUPPORT
- {
- mBrowserBox->addRow("/kickguild 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player from guild
- _("Kick from guild"));
- }
- if (guild2->getServerGuild())
- {
- mBrowserBox->addRow(strprintf(
- // TRANSLATORS: popup menu item
- // TRANSLATORS: change player position in guild
- "@@guild-pos|%s >@@", _("Change pos in guild")));
- }
- }
- else
- {
-#ifdef TMWA_SUPPORT
- if (guild2->getServerGuild() || (guildManager != nullptr
- && guildManager->havePower()))
-#endif // TMWA_SUPPORT
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: invite player to guild
- mBrowserBox->addRow("/guild 'NAME'", _("Invite to guild"));
- }
- }
- }
-
- addBuySellDefault();
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player name to chat
- mBrowserBox->addRow("/addtext 'NAME'", _("Add name to chat"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::showPopup(const int x, const int y,
- const FloorItem *const floorItem)
-{
- if (floorItem == nullptr)
- return;
-
- initPopup();
- mX = x;
- mY = y;
- mFloorItemId = floorItem->getId();
- mItemId = floorItem->getItemId();
- mType = ActorType::FloorItem;
- mSubType = BeingTypeId_zero;
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = floorItem->getCard(f);
- mBrowserBox->clearRows();
- const std::string name = floorItem->getName();
- mName = name;
- mExtName = name;
-
- mBrowserBox->addRow(name);
-
- if (config.getBoolValue("enablePickupFilter"))
- {
- if (actorManager->isInPickupList(name)
- || (actorManager->isInPickupList("")
- && !actorManager->isInIgnorePickupList(name)))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: pickup item from ground
- mBrowserBox->addRow("/pickup 'FLOORID'", _("Pick up"));
- mBrowserBox->addSeparator("##3---");
- }
- addPickupFilter(name);
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: pickup item from ground
- mBrowserBox->addRow("/pickup 'FLOORID'", _("Pick up"));
- }
- addProtection();
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item name to chat
- mBrowserBox->addRow("/addchat 'FLOORID''CARDS'", _("Add to chat"));
- mBrowserBox->addSeparator("##3---");
- addGmCommands();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::showPopup(const int x, const int y, MapItem *const mapItem)
-{
- if (mapItem == nullptr)
- return;
-
- initPopup();
- mMapItem = mapItem;
- mX = x;
- mY = y;
-
- mBrowserBox->clearRows();
-
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Map Item"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: rename map item
- mBrowserBox->addRow("rename map", _("Rename"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove map item
- mBrowserBox->addRow("remove map", _("Remove"));
-
- if (isAllowCommand(ServerCommandType::slide))
- {
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: warp to map item
- mBrowserBox->addRow("/slide 'MAPX' 'MAPY'", _("Warp"));
- }
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showMapPopup(const int x, const int y,
- const int x2, const int y2,
- const bool isMinimap)
-{
- initPopup();
- mX = x2;
- mY = y2;
-
- if (isMinimap)
- mCallerWindow = minimap;
-
- mBrowserBox->clearRows();
-
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Map Item"));
-
- if (isAllowCommand(ServerCommandType::slide))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: warp to map item
- mBrowserBox->addRow("/slide 'MAPX' 'MAPY'", _("Warp"));
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move to map item
- mBrowserBox->addRow("/navigate 'X' 'Y'", _("Move"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move camera to map item
- mBrowserBox->addRow("/movecamera 'X' 'Y'", _("Move camera"));
- if (settings.cameraMode != 0)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: restore camera to default view
- mBrowserBox->addRow("/restorecamera", _("Restore camera"));
- }
- mBrowserBox->addSeparator("##3---");
- if (isMinimap)
- {
- // TRANSLATORS: popup menu item
- mBrowserBox->addRow("window close", _("Close"));
- }
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showOutfitsWindowPopup(const int x, const int y)
-{
- initPopup();
- mX = x;
- mY = y;
- mCallerWindow = outfitWindow;
-
- mBrowserBox->clearRows();
-
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Outfits"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: copy selected outfit to chat input
- mBrowserBox->addRow("/outfittochat", _("Add to chat"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: copy equipment from player to outfit
- mBrowserBox->addRow("/itemstooutfit", _("Copy from player"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: clear selected outfit
- mBrowserBox->addRow("/clearoutfit", _("Clear outfit"));
- mBrowserBox->addSeparator("##3---");
-
- addWindowMenu(outfitWindow);
- mBrowserBox->addSeparator("##3---");
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showSpellPopup(const int x, const int y,
- TextCommand *const cmd)
-{
- if (cmd == nullptr)
- return;
-
- initPopup();
- mBrowserBox->clearRows();
-
- mSpell = cmd;
- mX = x;
- mY = y;
-
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Spells"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: edit selected spell
- mBrowserBox->addRow("edit spell", _("Edit spell"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showChatPopup(const int x, const int y, ChatTab *const tab)
-{
- if (tab == nullptr ||
- actorManager == nullptr ||
- localPlayer == nullptr)
- {
- return;
- }
-
- initPopup();
- mTab = tab;
- mX = x;
- mY = y;
- mCallerWindow = chatWindow;
-
- mBrowserBox->clearRows();
-
- const ChatTabTypeT &type = tab->getType();
- if (type == ChatTabType::WHISPER || type == ChatTabType::CHANNEL)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close chat tab
- mBrowserBox->addRow("/close", _("Close"));
- }
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove all text from chat tab
- mBrowserBox->addRow("/chatclear", _("Clear"));
- mBrowserBox->addSeparator("##3---");
-
- if (tab->getAllowHighlight())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: disable chat tab highlight
- mBrowserBox->addRow("/disablehighlight", _("Disable highlight"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: enable chat tab highlight
- mBrowserBox->addRow("/enablehighlight", _("Enable highlight"));
- }
- if (tab->getRemoveNames())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: do not remove player names from chat tab
- mBrowserBox->addRow("/dontremovename", _("Don't remove name"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove player names from chat tab
- mBrowserBox->addRow("/removename", _("Remove name"));
- }
- if (tab->getNoAway())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: enable away messages in chat tab
- mBrowserBox->addRow("/enableaway", _("Enable away"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: disable away messages in chat tab
- mBrowserBox->addRow("/disableaway", _("Disable away"));
- }
- mBrowserBox->addSeparator("##3---");
- if (type == ChatTabType::PARTY)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: enable away messages in chat tab
- mBrowserBox->addRow("/leaveparty", _("Leave"));
- mBrowserBox->addSeparator("##3---");
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: copy selected text to clipboard
- mBrowserBox->addRow("/chatclipboard 'X' 'Y'", _("Copy to clipboard"));
- mBrowserBox->addSeparator("##3---");
-
- if (type == ChatTabType::WHISPER)
- {
- const WhisperTab *const wTab = static_cast<WhisperTab*>(tab);
- const std::string &name = wTab->getNick();
-
- const Being* const being = actorManager->findBeingByName(
- name, ActorType::Player);
-
- addGmCommands();
- if (being != nullptr)
- {
- mBeingId = being->getId();
- mName = being->getName();
- mExtName = being->getExtName();
- mType = being->getType();
- mSubType = being->getSubType();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: trade with player
- mBrowserBox->addRow("/trade 'NAME'", _("Trade"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: attack player
- mBrowserBox->addRow("/attack 'NAME'", _("Attack"));
- addMailCommands();
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: heal player
- mBrowserBox->addRow("/heal :'BEINGID'", _("Heal"));
- mBrowserBox->addSeparator("##3---");
- addPlayerRelation(name);
- mBrowserBox->addSeparator("##3---");
- addFollow();
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move to player position
- mBrowserBox->addRow("/navigateto 'NAME'", _("Move"));
- addPlayerMisc();
- addBuySell(being);
- mBrowserBox->addSeparator("##3---");
- addParty(wTab->getNick());
- const Guild *const guild1 = being->getGuild();
- const Guild *const guild2 = localPlayer->getGuild();
- if (guild2 != nullptr)
- {
- if (guild1 != nullptr)
- {
- if (guild1->getId() == guild2->getId())
- {
-#ifdef TMWA_SUPPORT
- if (guild2->getServerGuild() ||
- (guildManager != nullptr &&
- guildManager->havePower()))
-#endif // TMWA_SUPPORT
- {
- mBrowserBox->addRow("/kickguild 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player from guild
- _("Kick from guild"));
- }
- if (guild2->getServerGuild())
- {
- mBrowserBox->addRow(strprintf("@@guild-pos|%s >@@",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: change player position in guild
- _("Change pos in guild")));
- }
- }
- }
- else
- {
-#ifdef TMWA_SUPPORT
- if (guild2->getServerGuild() || (guildManager != nullptr
- && guildManager->havePower()))
-#endif // TMWA_SUPPORT
- {
- mBrowserBox->addRow("/guild 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: invite player to guild
- _("Invite to guild"));
- }
- }
- }
- }
- else
- {
- mBeingId = BeingId_zero;
- mName = name;
- mExtName = name;
- mType = ActorType::Player;
- mSubType = BeingTypeId_zero;
- addPlayerRelation(name);
- mBrowserBox->addSeparator("##3---");
- addMailCommands();
- addFollow();
-
- if (localPlayer->isInParty())
- {
- const Party *const party = localPlayer->getParty();
- if (party != nullptr)
- {
- const PartyMember *const m = party->getMember(mName);
- if (m != nullptr)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move to player location
- mBrowserBox->addRow("/navigateto 'NAME'", _("Move"));
- }
- }
- }
- addPlayerMisc();
- addBuySellDefault();
- if (Net::getNetworkType() != ServerType::TMWATHENA)
- addParty(wTab->getNick());
- mBrowserBox->addSeparator("##3---");
- }
- }
-
- addWindowMenu(chatWindow);
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showChangePos(const int x, const int y)
-{
- initPopup();
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Change guild position"));
-
- if (localPlayer == nullptr)
- return;
-
- mX = x;
- mY = y;
- const Guild *const guild = localPlayer->getGuild();
- if (guild != nullptr)
- {
- const PositionsMap &map = guild->getPositions();
- FOR_EACH (PositionsMap::const_iterator, itr, map)
- {
- mBrowserBox->addRow(strprintf("@@guild-pos-%u|%s@@",
- itr->first, itr->second.c_str()));
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
- }
- else
- {
- mBeingId = BeingId_zero;
- mFloorItemId = BeingId_zero;
- mItemIndex = -1;
- mItemId = 0;
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = 0;
- mMapItem = nullptr;
- mName.clear();
- mExtName.clear();
- mType = ActorType::Unknown;
- mSubType = BeingTypeId_zero;
- mX = 0;
- mY = 0;
- setVisible(Visible_false);
- }
-}
-
-void PopupMenu::showWindowPopup(Window *const window)
-{
- if (window == nullptr)
- return;
-
- initPopup();
- setMousePos();
- mCallerWindow = window;
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("window"));
-
- addWindowMenu(window);
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::addWindowMenu(const Window *const window)
-{
- if (window == nullptr)
- return;
-
- initPopup();
- if (window->getAlowClose())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close window
- mBrowserBox->addRow("window close", _("Close"));
- }
-
- if (window->isStickyButtonLock())
- {
- if (window->isSticky())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: unlock window
- mBrowserBox->addRow("window unlock", _("Unlock"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: lock window
- mBrowserBox->addRow("window lock", _("Lock"));
- }
- }
-}
-
-void PopupMenu::showEmoteType()
-{
- initPopup();
- setMousePos();
-
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Show emotes for:"));
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show emotes for player
- mBrowserBox->addRow("/setemotetype player", _("Player"));
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show emotes for pet
- mBrowserBox->addRow("/setemotetype pet", _("Pet"));
-
- if (Net::getNetworkType() == ServerType::EVOL2)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show emotes for homuncules
- mBrowserBox->addRow("/setemotetype homun", _("Homunculus"));
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show emotes for mercenary
- mBrowserBox->addRow("/setemotetype merc", _("Mercenary"));
- }
- mBrowserBox->addSeparator("##3---");
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::handleLink(const std::string &link,
- MouseEvent *event A_UNUSED)
-{
- Being *being = nullptr;
- if (actorManager != nullptr)
- being = actorManager->findBeing(mBeingId);
-
- mAllowCleanMenu = true;
-
- if (link == "remove map" && (mMapItem != nullptr))
- {
- if (viewport != nullptr)
- {
- const Map *const map = viewport->getMap();
- if (map != nullptr)
- {
- SpecialLayer *const specialLayer = map->getSpecialLayer();
- if (specialLayer != nullptr)
- {
- const bool isHome = (mMapItem->getType()
- == CAST_S32(MapItemType::HOME));
- const int x = static_cast<int>(mMapItem->getX());
- const int y = static_cast<int>(mMapItem->getY());
- specialLayer->setTile(x, y,
- CAST_S32(MapItemType::EMPTY));
- specialLayer->updateCache();
- if (socialWindow != nullptr)
- socialWindow->removePortal(x, y);
- if (isHome && (localPlayer != nullptr))
- {
- localPlayer->removeHome();
- localPlayer->saveHomes();
- }
- }
- }
- }
- }
- else if (link == "rename map" && (mMapItem != nullptr))
- {
- mRenameListener.setMapItem(mMapItem);
- CREATEWIDGETV(mDialog, TextDialog,
- // TRANSLATORS: dialog caption
- // TRANSLATORS: number of chars in string should be near original
- _("Rename map sign "),
- // TRANSLATORS: label
- // TRANSLATORS: number of chars in string should be near original
- _("Name: "));
- mRenameListener.setDialog(mDialog);
- mDialog->setText(mMapItem->getComment());
- mDialog->setActionEventId("ok");
- mDialog->addActionListener(&mRenameListener);
- }
- else if (link == "edit spell" && (mSpell != nullptr))
- {
- CREATEWIDGET(TextCommandEditor, mSpell);
- }
- else if (link == "addcomment" && !mName.empty())
- {
- TextDialog *const dialog = CREATEWIDGETR(TextDialog,
- // TRANSLATORS: dialog caption
- // TRANSLATORS: number of chars in string should be near original
- _("Player comment "),
- // TRANSLATORS: label
- // TRANSLATORS: number of chars in string should be near original
- _("Comment: "));
- mPlayerListener.setDialog(dialog);
- mPlayerListener.setNick(mName);
- mPlayerListener.setType(mType);
-
- if (being != nullptr)
- {
- being->updateComment();
- dialog->setText(being->getComment());
- }
- else
- {
- dialog->setText(Being::loadComment(mName,
- static_cast<ActorTypeT>(mType)));
- }
- dialog->setActionEventId("ok");
- dialog->addActionListener(&mPlayerListener);
- }
- else if (link == "guild-pos" && !mName.empty())
- {
- showChangePos(getX(), getY());
- return;
- }
- else if (link == "clipboard copy")
- {
- if (mTextField != nullptr)
- mTextField->handleCopy();
- }
- else if (link == "clipboard paste")
- {
- if (mTextField != nullptr)
- mTextField->handlePaste();
- }
- else if (link == "gm" && !mName.empty())
- {
- showGMPopup(mName);
- return;
- }
- else if (link == "mute" && !mName.empty())
- {
- showMuteCommands();
- return;
- }
- else if (link == "show" && !mName.empty())
- {
- showPlayerMenu();
- return;
- }
- else if (link == "window close" && (mCallerWindow != nullptr))
- {
- if (Widget::widgetExists(mCallerWindow))
- mCallerWindow->close();
- }
- else if (link == "window unlock" && (mCallerWindow != nullptr))
- {
- if (Widget::widgetExists(mCallerWindow))
- mCallerWindow->setSticky(false);
- }
- else if (link == "window lock" && (mCallerWindow != nullptr))
- {
- if (Widget::widgetExists(mCallerWindow))
- mCallerWindow->setSticky(true);
- }
- else if (link == "join chat" && (being != nullptr))
- {
- const ChatObject *const chat = being->getChat();
- if (chat != nullptr)
- chatHandler->joinChat(chat, "");
- }
- else if (link == "craftmenu")
- {
- showCraftPopup();
- return;
- }
- else if (link.compare(0, 10, "guild-pos-") == 0)
- {
- if (localPlayer != nullptr)
- {
- const int num = atoi(link.substr(10).c_str());
- const Guild *const guild = localPlayer->getGuild();
- if (guild != nullptr)
- {
- guildHandler->changeMemberPostion(
- guild->getMember(mName), num);
- }
- }
- }
- else if (link.compare(0, 7, "player_") == 0)
- {
- if (actorManager != nullptr)
- {
- mBeingId = fromInt(atoi(link.substr(7).c_str()), BeingId);
- being = actorManager->findBeing(mBeingId);
- if (being != nullptr)
- {
- showPopup(getX(), getY(), being);
- return;
- }
- }
- }
- else if (link.compare(0, 10, "flooritem_") == 0)
- {
- if (actorManager != nullptr)
- {
- const BeingId id = fromInt(atoi(
- link.substr(10).c_str()), BeingId);
- if (id != BeingId_zero)
- {
- const FloorItem *const item = actorManager->findItem(id);
- if (item != nullptr)
- {
- mFloorItemId = item->getId();
- mItemId = item->getItemId();
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = item->getCard(f);
- showPopup(getX(), getY(), item);
- return;
- }
- }
- }
- }
- else if (link.compare(0, 12, "hide button_") == 0)
- {
- if (windowMenu != nullptr)
- windowMenu->showButton(link.substr(12), Visible_false);
- }
- else if (link.compare(0, 12, "show button_") == 0)
- {
- if (windowMenu != nullptr)
- windowMenu->showButton(link.substr(12), Visible_true);
- }
- else if (link.compare(0, 9, "hide bar_") == 0)
- {
- if (miniStatusWindow != nullptr)
- miniStatusWindow->showBar(link.substr(9), Visible_false);
- }
- else if (link.compare(0, 9, "show bar_") == 0)
- {
- if (miniStatusWindow != nullptr)
- miniStatusWindow->showBar(link.substr(9), Visible_true);
- }
- else if (link.compare(0, 12, "show window_") == 0)
- {
- const int id = atoi(link.substr(12).c_str());
- if (id >= 0)
- inputManager.executeAction(static_cast<InputActionT>(id));
- }
- else if (link.compare(0, 6, "mute_+") == 0)
- {
- if (being != nullptr)
- {
- const int time = atoi(link.substr(6).c_str());
- adminHandler->mute(being, 1, time);
- }
- }
- else if (link.compare(0, 6, "mute_-") == 0)
- {
- if (being != nullptr)
- {
- const int time = atoi(link.substr(6).c_str());
- adminHandler->mute(being, 0, time);
- }
- }
- else if (!link.empty() && link[0] == '/')
- {
- std::string cmd = link.substr(1);
- replaceAll(cmd, "'NAME'", mName);
- replaceAll(cmd, "'ENAME'", escapeString(mName));
- replaceAll(cmd, "'EXTNAME'", mExtName);
- replaceAll(cmd, "'EEXTNAME'", escapeString(mExtName));
- replaceAll(cmd, "'X'", toString(mX));
- replaceAll(cmd, "'Y'", toString(mY));
- replaceAll(cmd, "'BEINGID'", toString(toInt(mBeingId, int)));
- replaceAll(cmd, "'FLOORID'", toString(toInt(mFloorItemId, int)));
- replaceAll(cmd, "'ITEMID'", toString(mItemId));
- replaceAll(cmd, "'ITEMCOLOR'", toString(toInt(mItemColor, int)));
- replaceAll(cmd, "'BEINGTYPEID'", toString(CAST_S32(mType)));
- replaceAll(cmd, "'BEINGSUBTYPEID'", toString(CAST_S32(mSubType)));
- replaceAll(cmd, "'PLAYER'", localPlayer->getName());
- replaceAll(cmd, "'EPLAYER'", escapeString(localPlayer->getName()));
- replaceAll(cmd, "'PLAYERX'", toString(localPlayer->getTileX()));
- replaceAll(cmd, "'PLAYERY'", toString(localPlayer->getTileY()));
- if (mItemIndex >= 0)
- replaceAll(cmd, "'INVINDEX'", toString(mItemIndex));
- else
- replaceAll(cmd, "'INVINDEX'", "0");
- if (mMapItem != nullptr)
- {
- replaceAll(cmd, "'MAPX'", toString(mMapItem->getX()));
- replaceAll(cmd, "'MAPY'", toString(mMapItem->getY()));
- }
- else
- {
- replaceAll(cmd, "'MAPX'", toString(mX));
- replaceAll(cmd, "'MAPY'", toString(mY));
- }
-
- std::string cards;
- for (int f = 0; f < maxCards; f ++)
- {
- const int id = mItemCards[f];
- if (id != 0)
- {
- cards.append(",");
- cards.append(toString(id));
- }
- }
- replaceAll(cmd, "'CARDS'", cards);
- replaceAll(cmd, "'ECARDS'", escapeString(cards));
- if (actorManager != nullptr)
- {
- if (being == nullptr)
- {
- being = actorManager->findBeingByName(mName,
- ActorType::Player);
- }
- }
- if (being != nullptr)
- replaceAll(cmd, "'PARTY'", being->getPartyName());
- else
- replaceAll(cmd, "'PARTY'", "");
-
- const size_t pos = cmd.find(' ');
- const std::string type(cmd, 0, pos);
- std::string args(cmd, pos == std::string::npos ? cmd.size() : pos + 1);
- args = trim(args);
- inputManager.executeChatCommand(type, args, mTab);
- }
- // Unknown actions
- else if (link != "cancel")
- {
- reportAlways("PopupMenu: Warning, unknown action '%s'", link.c_str());
- }
-
- if (!mAllowCleanMenu)
- return;
-
- setVisible(Visible_false);
-
- mBeingId = BeingId_zero;
- mFloorItemId = BeingId_zero;
- mItemId = 0;
- mItemIndex = -1;
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = 0;
- mItemColor = ItemColor_one;
- mMapItem = nullptr;
- mTab = nullptr;
- mSpell = nullptr;
- mCallerWindow = nullptr;
- mDialog = nullptr;
- mButton = nullptr;
- mName.clear();
- mExtName.clear();
- mTextField = nullptr;
- mType = ActorType::Unknown;
- mSubType = BeingTypeId_zero;
- mX = 0;
- mY = 0;
-}
-
-void PopupMenu::showPopup(Window *const parent,
- const int x, const int y,
- const Item *const item,
- const InventoryTypeT type)
-{
- if (item == nullptr)
- return;
-
- initPopup();
- mItemId = item->getId();
- mItemIndex = item->getInvIndex();
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = item->getCard(f);
- mItemColor = item->getColor();
- mCallerWindow = parent;
- mX = x;
- mY = y;
- mName.clear();
- mExtName.clear();
- mBrowserBox->clearRows();
-
- const int cnt = item->getQuantity();
- const bool isProtected = PlayerInfo::isItemProtected(mItemId);
-
- switch (type)
- {
- case InventoryType::Inventory:
- if (tradeWindow != nullptr &&
- tradeWindow->isWindowVisible() &&
- !isProtected)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item to trade
- mBrowserBox->addRow("/addtrade 'INVINDEX'", _("Add to trade"));
- if (cnt > 1)
- {
- if (cnt > 10)
- {
- mBrowserBox->addRow("/addtrade 'INVINDEX' 10",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add 10 item amount to trade
- _("Add to trade 10"));
- }
- mBrowserBox->addRow("/addtrade 'INVINDEX' /",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add half item amount to trade
- _("Add to trade half"));
- mBrowserBox->addRow("/addtrade 'INVINDEX' -1",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add all amount except one item to trade
- _("Add to trade all-1"));
- mBrowserBox->addRow("/addtrade 'INVINDEX' all",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add all amount item to trade
- _("Add to trade all"));
- }
- mBrowserBox->addSeparator("##3---");
- }
- if (InventoryWindow::isStorageActive())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item to storage
- mBrowserBox->addRow("/invtostorage 'INVINDEX'", _("Store"));
- if (cnt > 1)
- {
- if (cnt > 10)
- {
- mBrowserBox->addRow("/invtostorage 'INVINDEX' 10",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add 10 item amount to storage
- _("Store 10"));
- }
- mBrowserBox->addRow("/invtostorage 'INVINDEX' /",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add half item amount to storage
- _("Store half"));
- mBrowserBox->addRow("/invtostorage 'INVINDEX' -1",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add all except one item to storage
- _("Store all-1"));
- mBrowserBox->addRow("/invtostorage 'INVINDEX' all",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add all item amount to storage
- _("Store all"));
- }
- mBrowserBox->addSeparator("##3---");
- }
- if (npcHandler != nullptr)
- {
- NpcDialog *const dialog = npcHandler->getCurrentNpcDialog();
- if ((dialog != nullptr) &&
- dialog->getInputState() == NpcInputState::ITEM_CRAFT)
- {
- mBrowserBox->addRow("craftmenu",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: sub menu for craft
- _("Move to craft..."));
- }
- }
- addItemMenu(item, InventoryType::Inventory);
- addDrop(item, isProtected);
- break;
-
- case InventoryType::Storage:
- // TRANSLATORS: popup menu item
- // TRANSLATORS: get item from storage
- mBrowserBox->addRow("/storagetoinv 'INVINDEX'", _("Retrieve"));
- if (cnt > 1)
- {
- if (cnt > 10)
- {
- mBrowserBox->addRow("/storagetoinv 'INVINDEX' 10",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: get 10 item amount from storage
- _("Retrieve 10"));
- }
- mBrowserBox->addRow("/storagetoinv 'INVINDEX' /",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: get half item amount from storage
- _("Retrieve half"));
- mBrowserBox->addRow("/storagetoinv 'INVINDEX' -1",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: get all except one item amount from storage
- _("Retrieve all-1"));
- mBrowserBox->addRow("/storagetoinv 'INVINDEX' all",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: get all item amount from storage
- _("Retrieve all"));
- mBrowserBox->addSeparator("##3---");
- }
- addItemMenu(item, InventoryType::Storage);
- break;
- case InventoryType::Cart:
- addItemMenu(item, InventoryType::Cart);
- break;
-
- case InventoryType::Trade:
- case InventoryType::Npc:
- case InventoryType::Vending:
- case InventoryType::MailEdit:
- case InventoryType::MailView:
- case InventoryType::Craft:
- case InventoryType::TypeEnd:
- default:
- break;
- }
-
-
- addProtection();
- if (config.getBoolValue("enablePickupFilter"))
- {
- mName = item->getName();
- mExtName = mName;
- mBrowserBox->addSeparator("##3---");
- addPickupFilter(mName);
- }
- addGmCommands();
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item name to chat
- mBrowserBox->addRow("/addchat 'ITEMID''CARDS'", _("Add to chat"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showItemPopup(const int x, const int y,
- const int itemId,
- const ItemColor color)
-{
- const Inventory *const inv = PlayerInfo::getInventory();
- if (inv == nullptr)
- return;
-
- Item *const item = inv->findItem(itemId, color);
- if (item != nullptr)
- {
- showItemPopup(x, y, item);
- }
- else
- {
- initPopup();
- mItemId = itemId;
- mItemIndex = -1;
- mItemColor = color;
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = 0;
- mX = x;
- mY = y;
- mBrowserBox->clearRows();
-
- if (!PlayerInfo::isItemProtected(mItemId))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: use item
- mBrowserBox->addRow("/use 'ITEMID'", _("Use"));
- }
- addProtection();
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
- }
-}
-
-void PopupMenu::showItemPopup(const int x, const int y,
- const Item *const item)
-{
- initPopup();
- mX = x;
- mY = y;
- if (item != nullptr)
- {
- mItemId = item->getId();
- mItemColor = item->getColor();
- mItemIndex = item->getInvIndex();
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = item->getCard(f);
- }
- else
- {
- mItemId = 0;
- mItemColor = ItemColor_one;
- mItemIndex = -1;
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = 0;
- }
- mName.clear();
- mExtName.clear();
- mBrowserBox->clearRows();
-
- if (item != nullptr)
- {
- const bool isProtected = PlayerInfo::isItemProtected(mItemId);
- addUse(item);
- addDrop(item, isProtected);
- if (InventoryWindow::isStorageActive())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item to storage
- mBrowserBox->addRow("/invtostorage 'INVINDEX'", _("Store"));
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item name to chat
- mBrowserBox->addRow("/addchat 'ITEMID''CARDS'", _("Add to chat"));
-
- if (config.getBoolValue("enablePickupFilter"))
- {
- mName = item->getName();
- mExtName = mName;
- mBrowserBox->addSeparator("##3---");
- addPickupFilter(mName);
- }
- }
- addProtection();
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showDropPopup(const int x,
- const int y,
- const Item *const item)
-{
- initPopup();
- mX = x;
- mY = y;
- mName.clear();
- mExtName.clear();
- mBrowserBox->clearRows();
-
- if (item != nullptr)
- {
- mItemId = item->getId();
- mItemColor = item->getColor();
- mItemIndex = item->getInvIndex();
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = item->getCard(f);
- const bool isProtected = PlayerInfo::isItemProtected(mItemId);
- addUse(item);
- addDrop(item, isProtected);
- if (InventoryWindow::isStorageActive())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item to storage
- mBrowserBox->addRow("/invtostorage 'INVINDEX'", _("Store"));
- }
- addProtection();
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item name to chat
- mBrowserBox->addRow("/addchat 'ITEMID''CARDS'", _("Add to chat"));
- if (config.getBoolValue("enablePickupFilter"))
- {
- mName = item->getName();
- mExtName = mName;
- mBrowserBox->addSeparator("##3---");
- addPickupFilter(mName);
- }
- }
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- mBrowserBox->addRow("/cleardrops", _("Clear drop window"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showPopup(const int x, const int y, Button *const button)
-{
- if ((button == nullptr) || (windowMenu == nullptr))
- return;
-
- initPopup();
- mButton = button;
- mX = x;
- mY = y;
-
- mBrowserBox->clearRows();
- STD_VECTOR<Button *> names = windowMenu->getButtons();
- for (STD_VECTOR<Button *>::const_iterator it = names.begin(),
- it_end = names.end(); it != it_end; ++ it)
- {
- const Button *const btn = *it;
- if ((btn == nullptr) || btn->getActionEventId() == "SET")
- continue;
-
- if (btn->mVisible == Visible_true)
- {
- mBrowserBox->addRow(strprintf("@@hide button_%s|%s %s (%s)@@",
- // TRANSLATORS: popup menu item
- btn->getActionEventId().c_str(), _("Hide"),
- btn->getDescription().c_str(), btn->getCaption().c_str()));
- }
- else
- {
- mBrowserBox->addRow(strprintf("@@show button_%s|%s %s (%s)@@",
- // TRANSLATORS: popup menu item
- btn->getActionEventId().c_str(), _("Show"),
- btn->getDescription().c_str(), btn->getCaption().c_str()));
- }
- }
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showPopup(const int x, const int y, const ProgressBar *const b)
-{
- if ((b == nullptr) || (miniStatusWindow == nullptr))
- return;
-
- initPopup();
- mName = b->text();
- mExtName = mName;
- mX = x;
- mY = y;
-
- mBrowserBox->clearRows();
- STD_VECTOR <ProgressBar*> bars = miniStatusWindow->getBars();
- ProgressBar *onlyBar = nullptr;
- int cnt = 0;
-
- // search for alone visible bar
- for (STD_VECTOR <ProgressBar*>::const_iterator it = bars.begin(),
- it_end = bars.end(); it != it_end; ++it)
- {
- ProgressBar *const bar = *it;
- if (bar == nullptr)
- continue;
-
- if (bar->mVisible == Visible_true)
- {
- cnt ++;
- onlyBar = bar;
- }
- }
- if (cnt > 1)
- onlyBar = nullptr;
-
- for (STD_VECTOR <ProgressBar*>::const_iterator it = bars.begin(),
- it_end = bars.end(); it != it_end; ++it)
- {
- ProgressBar *const bar = *it;
- if ((bar == nullptr) || bar == onlyBar)
- continue;
-
- if (bar->mVisible == Visible_true)
- {
- mBrowserBox->addRow(strprintf("@@hide bar_%s|%s %s@@",
- // TRANSLATORS: popup menu item
- bar->getActionEventId().c_str(), _("Hide"),
- bar->getId().c_str()));
- }
- else
- {
- mBrowserBox->addRow(strprintf("@@show bar_%s|%s %s@@",
- // TRANSLATORS: popup menu item
- bar->getActionEventId().c_str(), _("Show"),
- bar->getId().c_str()));
- }
- }
-
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- mBrowserBox->addRow("/yellowbar", _("Open yellow bar settings"));
- // TRANSLATORS: popup menu item
- mBrowserBox->addRow("/resetmodifiers", _("Reset yellow bar"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: copy status to chat
- mBrowserBox->addRow("/bartochat 'NAME'", _("Copy to chat"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showAttackMonsterPopup(const int x, const int y,
- const std::string &name,
- const int type)
-{
- if ((localPlayer == nullptr) || (actorManager == nullptr))
- return;
-
- initPopup();
- mName = name;
- mExtName = name;
- mType = ActorType::Monster;
- mSubType = BeingTypeId_zero;
- mX = x;
- mY = y;
-
- mBrowserBox->clearRows();
-
- if (name.empty())
- {
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("(default)"));
- }
- else
- {
- mBrowserBox->addRow(name);
- }
- switch (type)
- {
- case MapItemType::ATTACK:
- {
- const int idx = actorManager->getAttackMobIndex(name);
- const int size = actorManager->getAttackMobsSize();
- if (idx > 0)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move attack target up
- mBrowserBox->addRow("/moveattackup 'NAME'", _("Move up"));
- }
- if (idx + 1 < size)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move attack target down
- mBrowserBox->addRow("/moveattackdown 'NAME'", _("Move down"));
- }
- break;
- }
- case MapItemType::PRIORITY:
- {
- const int idx = actorManager->
- getPriorityAttackMobIndex(name);
- const int size = actorManager->getPriorityAttackMobsSize();
- if (idx > 0)
- {
- mBrowserBox->addRow("/movepriorityattackup 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move attack target up
- _("Move up"));
- }
- if (idx + 1 < size)
- {
- mBrowserBox->addRow("/movepriorityattackdown 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move attack target down
- _("Move down"));
- }
- break;
- }
- case MapItemType::IGNORE_:
- break;
- default:
- break;
- }
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove attack target
- mBrowserBox->addRow("/removeattack 'NAME'", _("Remove"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showPickupItemPopup(const int x, const int y,
- const std::string &name)
-{
- if ((localPlayer == nullptr) || (actorManager == nullptr))
- return;
-
- initPopup();
- mName = name;
- mExtName = name;
- mType = ActorType::FloorItem;
- mSubType = BeingTypeId_zero;
- mX = x;
- mY = y;
-
- mBrowserBox->clearRows();
-
- if (name.empty())
- {
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("(default)"));
- }
- else
- {
- mBrowserBox->addRow(name);
- }
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove item from pickup filter
- mBrowserBox->addRow("/removepickup 'NAME'", _("Remove"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showUndressPopup(const int x, const int y,
- const Being *const being,
- const Item *const item)
-{
- if ((being == nullptr) || (item == nullptr))
- return;
-
- initPopup();
- mBeingId = being->getId();
- mItemId = item->getId();
- mItemColor = item->getColor();
- mItemIndex = item->getInvIndex();
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = item->getCard(f);
- mX = x;
- mY = y;
-
- mBrowserBox->clearRows();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: undress item from player
- mBrowserBox->addRow("/undress :'BEINGID' 'ITEMID'", _("Undress"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item name to chat
- mBrowserBox->addRow("/addchat 'ITEMID''CARDS'", _("Add to chat"));
- addGmCommands();
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showTextFieldPopup(TextField *const input)
-{
- initPopup();
- setMousePos();
- mTextField = input;
-
- mBrowserBox->clearRows();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: copy text to clipboard
- mBrowserBox->addRow("clipboard copy", _("Copy"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: paste text from clipboard
- mBrowserBox->addRow("clipboard paste", _("Paste"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::showLinkPopup(const std::string &link)
-{
- initPopup();
- setMousePos();
- mName = link;
- mExtName = link;
-
- mBrowserBox->clearRows();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: open link in browser
- mBrowserBox->addRow("/open 'NAME'", _("Open link"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: copy link to clipboard
- mBrowserBox->addRow("/clipboardcopy 'NAME'", _("Copy to clipboard"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::showWindowsPopup()
-{
- initPopup();
- setMousePos();
- mBrowserBox->clearRows();
- const STD_VECTOR<ButtonText*> &names = windowMenu->getButtonTexts();
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Show window"));
-
- FOR_EACH (STD_VECTOR<ButtonText*>::const_iterator, it, names)
- {
- const ButtonText *const btn = *it;
- if (btn == nullptr)
- continue;
-
- mBrowserBox->addRow(strprintf("show window_%d",
- CAST_S32(btn->key)),
- btn->text.c_str());
- }
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::showNpcDialogPopup(const BeingId npcId,
- const int x, const int y)
-{
- initPopup();
- mBeingId = npcId;
- mX = x;
- mY = y;
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu item
- // TRANSLATORS: copy npc text to clipboard
- mBrowserBox->addRow("/npcclipboard 'X' 'Y'", _("Copy to clipboard"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(x, y);
-}
-
-void PopupMenu::showSkillPopup(const SkillInfo *const info)
-{
- if (info == nullptr)
- return;
-
- initPopup();
- setMousePos();
-
- // using mItemId as skill id
- mItemId = info->id;
- // using mItemIndex as skill level
- mItemIndex = info->level;
- mBrowserBox->clearRows();
-
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Skill"));
- mBrowserBox->addRow("/addskillshortcut 'ITEMID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add skill to shortcurs tab
- _("Add skill shortcut"));
- mBrowserBox->addSeparator("##3---");
- mBrowserBox->addRow("/showskilllevels 'ITEMID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: set skill level
- _("Skill level..."));
- mBrowserBox->addRow("/showskilltypes 'ITEMID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: set skill cast type
- _("Skill cast type..."));
- mBrowserBox->addRow("/showskilloffsetx 'ITEMID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: set skill cast offset by x
- _("Skill offset by x..."));
- mBrowserBox->addRow("/showskilloffsety 'ITEMID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: set skill cast offset by y
- _("Skill offset by y..."));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::showSkillOffsetPopup(const SkillInfo *const info,
- const bool isOffsetX)
-{
- if (info == nullptr)
- return;
-
- initPopup();
- setMousePos2();
-
- // using mItemId as skill id
- mItemId = info->id;
- // using mItemIndex as skill level
- mItemIndex = info->level;
- mBrowserBox->clearRows();
- char letter = ' ';
-
- if (isOffsetX)
- {
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Skill cast offset by x"));
- letter = 'x';
- }
- else
- {
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("Skill cast offset by y"));
- letter = 'y';
- }
- for (int f = -9; f <= 9; f ++)
- {
- const std::string command = strprintf(
- "/setskilloffset%c 'ITEMID' %d", letter, f);
- if (f == 0)
- {
- mBrowserBox->addRow(command,
- strprintf("%d", f).c_str());
- }
- else
- {
- mBrowserBox->addRow(command,
- strprintf("%+d", f).c_str());
- }
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(mX, mY);
-}
-
-void PopupMenu::showSkillLevelPopup(const SkillInfo *const info)
-{
- if (info == nullptr)
- return;
-
- initPopup();
- setMousePos2();
-
- // using mItemId as skill id
- mItemId = info->id;
- // using mItemIndex as skill level
- mItemIndex = info->level;
-
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = 0;
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu item
- // TRANSLATORS: skill level header
- mBrowserBox->addRow(_("Select skill level"));
- for (int f = 1; f <= mItemIndex; 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->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::showSkillTypePopup(const SkillInfo *const info)
-{
- if (info == nullptr)
- return;
-
- initPopup();
- setMousePos2();
-
- // using mItemId as skill id
- mItemId = info->id;
- // using mItemIndex as skill level
- mItemIndex = info->level;
-
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = 0;
- mBrowserBox->clearRows();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: skill cast type header
- mBrowserBox->addRow(_("Select skill cast type"));
- mBrowserBox->addRow(strprintf("/selectskilltype %d 0", mItemId),
- // TRANSLATORS: popup menu item
- // TRANSLATORS: skill cast type
- _("Default"));
- mBrowserBox->addRow(strprintf("/selectskilltype %d 1", mItemId),
- // TRANSLATORS: popup menu item
- // TRANSLATORS: skill cast type
- _("Target"));
- mBrowserBox->addRow(strprintf("/selectskilltype %d 2", mItemId),
- // TRANSLATORS: popup menu item
- // TRANSLATORS: skill cast type
- _("Mouse position"));
- mBrowserBox->addRow(strprintf("/selectskilltype %d 3", mItemId),
- // TRANSLATORS: popup menu item
- // TRANSLATORS: skill cast type
- _("Self"));
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::showPopup(int x, int y)
-{
- PopupManager::hideItemPopup();
- const int pad2 = 2 * mPadding;
- mBrowserBox->setPosition(mPadding, mPadding);
- mScrollArea->setPosition(mPadding, mPadding);
- mBrowserBox->updateHeight();
- // add padding to initial size before draw browserbox
- int height = mBrowserBox->getHeight();
- if (height + pad2 >= mainGraphics->getHeight())
- {
- height = mainGraphics->getHeight() - pad2;
- mBrowserBox->setWidth(mBrowserBox->getWidth() + 5);
- mScrollArea->setWidth(mBrowserBox->getWidth() + pad2 + 10);
- setContentSize(mBrowserBox->getWidth() + pad2 + 20,
- height + pad2);
- }
- else
- {
- mBrowserBox->setWidth(mBrowserBox->getWidth());
- mScrollArea->setWidth(mBrowserBox->getWidth() + pad2);
- setContentSize(mBrowserBox->getWidth() + pad2,
- height + pad2);
- }
- if (mainGraphics->mWidth < (x + getWidth() + 5))
- x = mainGraphics->mWidth - getWidth();
- if (mainGraphics->mHeight < (y + getHeight() + 5))
- y = mainGraphics->mHeight - getHeight();
- mScrollArea->setHeight(height);
- setPosition(x, y);
- setVisible(Visible_true);
- requestMoveToTop();
- mAllowCleanMenu = false;
-}
-
-void PopupMenu::addNormalRelations()
-{
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to disregarded list
- mBrowserBox->addRow("/disregard 'NAME'", _("Disregard"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to ignore list
- mBrowserBox->addRow("/ignore 'NAME'", _("Ignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to black list
- mBrowserBox->addRow("/blacklist 'NAME'", _("Black list"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to enemy list
- mBrowserBox->addRow("/enemy 'NAME'", _("Set as enemy"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to erased list
- mBrowserBox->addRow("/erase 'NAME'", _("Erase"));
-}
-
-void PopupMenu::addPlayerRelation(const std::string &name)
-{
- switch (playerRelations.getRelation(name))
- {
- case Relation::NEUTRAL:
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to friends list
- mBrowserBox->addRow("/friend 'NAME'", _("Be friend"));
- addNormalRelations();
- break;
-
- case Relation::FRIEND:
- addNormalRelations();
- break;
-
- case Relation::BLACKLISTED:
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove player from ignore list
- mBrowserBox->addRow("/unignore 'NAME'", _("Unignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to disregarded list
- mBrowserBox->addRow("/disregard 'NAME'", _("Disregard"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to ignore list
- mBrowserBox->addRow("/ignore 'NAME'", _("Ignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to enemy list
- mBrowserBox->addRow("/enemy 'NAME'", _("Set as enemy"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to erased list
- mBrowserBox->addRow("/erase 'NAME'", _("Erase"));
- break;
-
- case Relation::DISREGARDED:
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove player from ignore list
- mBrowserBox->addRow("/unignore 'NAME'", _("Unignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to completle ignore list
- mBrowserBox->addRow("/ignore 'NAME'", _("Completely ignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to erased list
- mBrowserBox->addRow("/erase 'NAME'", _("Erase"));
- break;
-
- case Relation::IGNORED:
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove player from ignore list
- mBrowserBox->addRow("/unignore 'NAME'", _("Unignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to erased list
- mBrowserBox->addRow("/erase 'NAME'", _("Erase"));
- break;
-
- case Relation::ENEMY2:
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove player from ignore list
- mBrowserBox->addRow("/unignore 'NAME'", _("Unignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to disregarded list
- mBrowserBox->addRow("/disregard 'NAME'", _("Disregard"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to ignore list
- mBrowserBox->addRow("/ignore 'NAME'", _("Ignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to black list
- mBrowserBox->addRow("/blacklist 'NAME'", _("Black list"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to erased list
- mBrowserBox->addRow("/erase 'NAME'", _("Erase"));
- break;
-
- case Relation::ERASED:
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove player from ignore list
- mBrowserBox->addRow("/unignore 'NAME'", _("Unignore"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to disregarded list
- mBrowserBox->addRow("/disregard 'NAME'", _("Disregard"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add player to ignore list
- mBrowserBox->addRow("/ignore 'NAME'", _("Completely ignore"));
- break;
-
- default:
- break;
- }
-}
-
-void PopupMenu::addFollow()
-{
- if (features.getBoolValue("allowFollow"))
- {
- // TRANSLATORS: popup menu item
- mBrowserBox->addRow("/follow 'NAME'", _("Follow"));
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: imitate player
- mBrowserBox->addRow("/imitation 'NAME'", _("Imitate"));
-}
-
-void PopupMenu::addBuySell(const Being *const being)
-{
- if ((playerRelations.getDefault() & PlayerRelation::TRADE) != 0u)
- {
- mBrowserBox->addSeparator("##3---");
- const bool haveVending =
- (Net::getNetworkType() != ServerType::TMWATHENA);
- if (being->isSellShopEnabled())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: buy item
- mBrowserBox->addRow("/buy 'NAME'", _("Buy"));
- }
- else if (!haveVending)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: buy item
- mBrowserBox->addRow("/buy 'NAME'", _("Buy (?)"));
- }
- if (being->isBuyShopEnabled())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: sell item
- mBrowserBox->addRow("/sell 'NAME'", _("Sell"));
- }
- else if (!haveVending)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: sell item
- mBrowserBox->addRow("/sell 'NAME'", _("Sell (?)"));
- }
- }
-}
-
-void PopupMenu::addBuySellDefault()
-{
- if ((playerRelations.getDefault() & PlayerRelation::TRADE) != 0u)
- {
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: buy item
- mBrowserBox->addRow("/buy 'NAME'", _("Buy (?)"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: sell item
- mBrowserBox->addRow("/sell 'NAME'", _("Sell (?)"));
- }
-}
-
-void PopupMenu::addPartyName(const std::string &partyName)
-{
- if (localPlayer->isInParty())
- {
- if (localPlayer->getParty() != nullptr)
- {
- if (localPlayer->getParty()->getName() != partyName)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: invite player to party
- mBrowserBox->addRow("/party 'NAME'", _("Invite to party"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player from party
- mBrowserBox->addRow("/kickparty 'NAME'", _("Kick from party"));
- showAdoptCommands();
- }
- mBrowserBox->addSeparator("##3---");
- }
- }
-}
-
-void PopupMenu::addParty(const std::string &nick)
-{
- if (localPlayer->isInParty())
- {
- const Party *const party = localPlayer->getParty();
- if (party != nullptr)
- {
- if (!party->isMember(nick))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: invite player to party
- mBrowserBox->addRow("/party 'NAME'", _("Invite to party"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player from party
- mBrowserBox->addRow("/kickparty 'NAME'", _("Kick from party"));
- showAdoptCommands();
- }
- mBrowserBox->addSeparator("##3---");
- }
- }
-}
-
-void PopupMenu::addChat(const Being *const being)
-{
- if (being == nullptr)
- return;
- const ChatObject *const chat = being->getChat();
- if (chat != nullptr)
- {
- mBrowserBox->addRow("join chat",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: invite player to party
- strprintf(_("Join chat %s"), chat->title.c_str()).c_str());
- mBrowserBox->addSeparator("##3---");
- }
-}
-
-void PopupMenu::addPlayerMisc()
-{
- // TRANSLATORS: popup menu item
- mBrowserBox->addRow("/showitems :'BEINGID'", _("Show Items"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: undress player
- mBrowserBox->addRow("/undress :'BEINGID'", _("Undress"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add comment to player
- mBrowserBox->addRow("addcomment", _("Add comment"));
-}
-
-void PopupMenu::addPickupFilter(const std::string &name)
-{
- if (actorManager->isInPickupList(name)
- || actorManager->isInIgnorePickupList(name))
- {
- mBrowserBox->addRow("/removepickup 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove item from pickup list
- _("Remove from pickup list"));
- }
- else
- {
- mBrowserBox->addRow("/addpickup 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: popup menu item
- _("Add to pickup list"));
- mBrowserBox->addRow("/ignorepickup 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add item to pickup list
- _("Add to ignore list"));
- }
-}
-
-void PopupMenu::showPopup(const int x, const int y,
- ListModel *const model)
-{
- if (model == nullptr)
- return;
-
- mBrowserBox->clearRows();
- for (int f = 0, sz = model->getNumberOfElements(); f < sz; f ++)
- {
- mBrowserBox->addRow(strprintf("dropdown_%d", f),
- model->getElementAt(f).c_str());
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(x, y);
-}
-
-void PopupMenu::clear()
-{
- if (mDialog != nullptr)
- {
- mDialog->close();
- mDialog = nullptr;
- }
- mItemIndex = -1;
- mItemId = 0;
- for (int f = 0; f < maxCards; f ++)
- mItemCards[f] = 0;
- mMapItem = nullptr;
- mTab = nullptr;
- mSpell = nullptr;
- mCallerWindow = nullptr;
- mButton = nullptr;
- mTextField = nullptr;
-}
-
-void PopupMenu::addProtection()
-{
- if (PlayerInfo::isItemProtected(mItemId))
- {
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: remove protection from item
- mBrowserBox->addRow("/unprotectitem 'ITEMID'", _("Unprotect item"));
- }
- else
- {
- if (mItemId < SPELL_MIN_ID)
- {
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: add protection to item
- mBrowserBox->addRow("/protectitem 'ITEMID'", _("Protect item"));
- }
- }
-}
-
-void PopupMenu::addUse(const Item *const item)
-{
- const ItemInfo &info = item->getInfo();
- const std::string &str = (item->isEquipment() == Equipm_true
- && item->isEquipped() == Equipped_true)
- ? info.getUseButton2() : info.getUseButton();
-
- if (str.empty())
- {
- // TRANSLATORS: popup menu item
- mBrowserBox->addRow("/useinv 'INVINDEX'", _("Use"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- mBrowserBox->addRow("/useinv 'INVINDEX'", str.c_str());
- }
-}
-
-void PopupMenu::addItemMenu(const Item *const item,
- const InventoryTypeT type)
-{
- const ItemInfo &info = item->getInfo();
- const STD_VECTOR<ItemMenuItem> *menu = nullptr;
- switch (type)
- {
- case InventoryType::Inventory:
- menu = &info.getInventoryMenuConst();
- break;
- case InventoryType::Storage:
- menu = &info.getStorageMenuConst();
- break;
- case InventoryType::Cart:
- menu = &info.getCartMenuConst();
- break;
- case InventoryType::Trade:
- case InventoryType::Npc:
- case InventoryType::Vending:
- case InventoryType::MailEdit:
- case InventoryType::MailView:
- case InventoryType::Craft:
- case InventoryType::TypeEnd:
- default:
- return;
- }
-
- const bool firstMode = (item->isEquipment() == Equipm_true ?
- (item->isEquipped() != Equipped_true) : (item->getQuantity() == 1));
-
- FOR_EACHP (STD_VECTOR<ItemMenuItem>::const_iterator, it, menu)
- {
- const ItemMenuItem &menuItem = *it;
- const std::string &name = firstMode ?
- menuItem.name1 : menuItem.name2;
- const std::string &command = firstMode ?
- menuItem.command1 : menuItem.command2;
- if (command.empty() ||
- name.empty())
- {
- continue;
- }
- mBrowserBox->addRow("/" + command, name.c_str());
- }
- mBrowserBox->addSeparator("##3---");
-}
-
-void PopupMenu::addDrop(const Item *const item,
- const bool isProtected)
-{
- if (!isProtected)
- {
- mBrowserBox->addSeparator("##3---");
- if (item->getQuantity() > 1)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: drop item
- mBrowserBox->addRow("/dropinv 'INVINDEX'", _("Drop..."));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: drop all item amount
- mBrowserBox->addRow("/dropinvall 'INVINDEX'", _("Drop all"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: drop item
- mBrowserBox->addRow("/dropinv 'INVINDEX'", _("Drop"));
- }
- }
-}
-
-void PopupMenu::addGmCommands()
-{
- if (localPlayer->isGM())
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm commands
- mBrowserBox->addRow("gm", _("GM..."));
- }
-}
-
-void PopupMenu::showPlayerMenu()
-{
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(strprintf(_("Show %s"),
- mName.c_str()));
- if (isAllowCommand(ServerCommandType::accinfo))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show player account info
- mBrowserBox->addRow("/showaccountinfo 'NAME'", _("Account info"));
- }
- if (isAllowOtherCommand(ServerCommandType::exp))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show player level
- mBrowserBox->addRow("/showlevel 'NAME'", _("Level"));
- }
- if (isAllowOtherCommand(ServerCommandType::stats))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show player stats
- mBrowserBox->addRow("/showstats 'NAME'", _("Stats"));
- }
- if (isAllowOtherCommand(ServerCommandType::itemlist))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show player inventory list
- mBrowserBox->addRow("/showinventory 'NAME'", _("Inventory"));
- }
- if (isAllowOtherCommand(ServerCommandType::storagelist))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show player storage list
- mBrowserBox->addRow("/showstorage 'NAME'", _("Storage"));
- }
- if (isAllowOtherCommand(ServerCommandType::cartlist))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show player cart list
- mBrowserBox->addRow("/showcart 'NAME'", _("Cart"));
- }
- if (isAllowOtherCommand(ServerCommandType::commands))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm commands
- mBrowserBox->addRow("/gmcommands 'NAME'", _("Commands"));
- }
- if (isAllowOtherCommand(ServerCommandType::charcommands))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm char commands
- mBrowserBox->addRow("/gmcharcommands 'NAME'", _("Char commands"));
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: back to gm menu
- mBrowserBox->addRow("gm", _("Back"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(getX(), getY());
-}
-
-void PopupMenu::showPlayerGMCommands(const std::string &name)
-{
- if (localPlayer == nullptr)
- return;
- const bool legacy = Net::getNetworkType() == ServerType::TMWATHENA;
- if (!legacy && isAllowCommand(ServerCommandType::where))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: find player position
- mBrowserBox->addRow("/locateplayer 'NAME'", _("Locate"));
- }
- if (legacy)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: check player ip
- mBrowserBox->addRow("/ipcheck 'NAME'", _("Check ip"));
- }
- if (isAllowCommand(ServerCommandType::jumpto))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: go to player position
- mBrowserBox->addRow("/gotopc 'NAME'", _("Goto"));
- }
- if (isAllowCommand(ServerCommandType::recall))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: recall player to current position
- mBrowserBox->addRow("/recallpc 'NAME'", _("Recall"));
- }
- if (isAllowOtherCommand(ServerCommandType::alive))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: revive player
- mBrowserBox->addRow("/alive 'NAME'", _("Revive"));
- }
- if (!legacy)
- {
- Being *const being = actorManager->findBeingByName(name,
- ActorType::Player);
- if (being != nullptr && being == localPlayer)
- {
- if (!being->getPartyName().empty() &&
- isAllowCommand(ServerCommandType::partyrecall))
- {
- mBrowserBox->addRow("/partyrecall 'PARTY'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: recall all party members to player location
- _("Recall party"));
- }
- if (!being->getGuildName().empty() &&
- isAllowCommand(ServerCommandType::guildrecall))
- {
- mBrowserBox->addRow("/guildrecall 'PARTY'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: recall all guild members to player location
- _("Recall guild"));
- }
- }
- if (localPlayer->isInParty())
- {
- const Party *const party = localPlayer->getParty();
- if (party != nullptr &&
- party->isMember(name) &&
- isAllowCommand(ServerCommandType::changeleader))
- {
- mBrowserBox->addRow("/gmpartyleader 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: give party leader status
- _("Give party leader"));
- }
- }
-
- if (isAllowCommand(ServerCommandType::nuke))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: nuke player
- mBrowserBox->addRow("/gmnuke 'NAME'", _("Nuke"));
- }
- if (isAllowOtherCommand(ServerCommandType::kill))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kill player
- mBrowserBox->addRow("/kill 'NAME'", _("Kill"));
- }
- if (mBeingId != BeingId_zero)
- {
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show menu
- mBrowserBox->addRow("show", _("Show..."));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute menu
- mBrowserBox->addRow("mute", _("Mute..."));
- }
- }
- if (legacy)
- {
- if (localPlayer->getName() == mName)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: hide player
- mBrowserBox->addRow("/hide", _("Hide"));
- mBrowserBox->addSeparator("##3---");
- }
- }
- else
- {
- if (isAllowOtherCommand(ServerCommandType::heal))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: heal player
- mBrowserBox->addRow("/gmheal 'NAME'", _("Heal"));
- }
- if (isAllowOtherCommand(ServerCommandType::monsterignore))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: enable immortal mode for player
- mBrowserBox->addRow("/immortal 'NAME'", _("Immortal"));
- }
- if (isAllowCommand(ServerCommandType::jail))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: send player to jail
- mBrowserBox->addRow("/jail 'NAME'", _("Jail"));
- }
- if (isAllowCommand(ServerCommandType::unjail))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: restore player from jail
- mBrowserBox->addRow("/unjail 'NAME'", _("Unjail"));
- }
- if (name == localPlayer->getName() &&
- isAllowCommand(ServerCommandType::hide))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: hide player
- mBrowserBox->addRow("/hide 'NAME'", _("Hide"));
- }
- mBrowserBox->addSeparator("##3---");
- if (isAllowOtherCommand(ServerCommandType::killer))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: set player as killer
- mBrowserBox->addRow("/killer 'NAME'", _("Killer"));
- }
- if (isAllowOtherCommand(ServerCommandType::killable))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: set player as killable
- mBrowserBox->addRow("/killable 'NAME'", _("Killable"));
- }
- if (isAllowOtherCommand(ServerCommandType::save))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: set player save position
- mBrowserBox->addRow("/savepos 'NAME'", _("Set save"));
- }
- if (isAllowOtherCommand(ServerCommandType::load))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: warp player to save position
- mBrowserBox->addRow("/loadpos 'NAME'", _("Warp to save"));
- }
- if (isAllowOtherCommand(ServerCommandType::jump))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: warp player to random position on same map
- mBrowserBox->addRow("/randomwarp 'NAME'", _("Warp to random"));
- }
- mBrowserBox->addSeparator("##3---");
- if (isAllowCommand(ServerCommandType::clone))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: spawn player clone
- mBrowserBox->addRow("/spawnclone 'NAME'", _("Spawn clone"));
- }
- if (isAllowCommand(ServerCommandType::slaveclone))
- {
- mBrowserBox->addRow("/spawnslaveclone 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: spawn slave player clone
- _("Spawn slave clone"));
- }
- if (isAllowCommand(ServerCommandType::evilclone))
- {
- mBrowserBox->addRow("/spawnevilclone 'NAME'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: spawn evil player clone
- _("Spawn evil clone"));
- }
- mBrowserBox->addSeparator("##3---");
- if (isAllowOtherCommand(ServerCommandType::breakguild))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: break guild
- mBrowserBox->addRow("/gmbreakguild 'NAME'", _("Break guild"));
- }
- }
- if (mBeingId != BeingId_zero &&
- isAllowCommand(ServerCommandType::kick))
- {
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player
- mBrowserBox->addRow("/kick :'BEINGID'", _("Kick"));
- }
-}
-
-void PopupMenu::showMuteCommands()
-{
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(strprintf(_("Mute %s"),
- mName.c_str()));
- if (mBeingId != BeingId_zero &&
- Net::getNetworkType() != ServerType::TMWATHENA &&
- isAllowCommand(ServerCommandType::mute))
- {
- mBrowserBox->addRow("mute_+1",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Mute %d"), 1).c_str());
- mBrowserBox->addRow("mute_+5",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Mute %d"), 5).c_str());
- mBrowserBox->addRow("mute_+10",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Mute %d"), 10).c_str());
- mBrowserBox->addRow("mute_+15",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Mute %d"), 15).c_str());
- mBrowserBox->addRow("mute_+30",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Mute %d"), 30).c_str());
-
- mBrowserBox->addRow("mute_-1",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Unmute %d"), 1).c_str());
- mBrowserBox->addRow("mute_-5",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Unmute %d"), 5).c_str());
- mBrowserBox->addRow("mute_-10",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Unmute %d"), 10).c_str());
- mBrowserBox->addRow("mute_-15",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Unmute %d"), 15).c_str());
- mBrowserBox->addRow("mute_-30",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: mute player
- strprintf(_("Unmute %d"), 30).c_str());
- mBrowserBox->addSeparator("##3---");
- }
- // TRANSLATORS: popup menu item
- // TRANSLATORS: back to gm menu
- mBrowserBox->addRow("gm", _("Back"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(getX(), getY());
-}
-
-void PopupMenu::showNpcGMCommands()
-{
- if (mBeingId != BeingId_zero)
- {
- if (isAllowCommand(ServerCommandType::kick))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick player
- mBrowserBox->addRow("/kick :'BEINGID'", _("Kick"));
- }
- const bool legacy = Net::getNetworkType() == ServerType::TMWATHENA;
- if (!legacy)
- {
- if (isAllowCommand(ServerCommandType::hidenpc))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: hide npc
- mBrowserBox->addRow("/hidenpc 'EXTNAME'", _("Hide"));
- }
- mBrowserBox->addSeparator("##3---");
- if (isAllowCommand(ServerCommandType::npcmove))
- {
- mBrowserBox->addRow("/npcmove 'EEXTNAME' 'PLAYERX' 'PLAYERY'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: warp npc to player location
- _("Recall"));
- }
- if (isAllowCommand(ServerCommandType::disguise))
- {
- mBrowserBox->addRow("/disguise 'BEINGSUBTYPEID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: disguise to npc
- _("Disguise"));
- }
- if (isAllowCommand(ServerCommandType::tonpc))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: warp to npc
- mBrowserBox->addRow("/gotonpc 'EXTNAME'", _("Goto"));
- }
- }
- }
-}
-
-void PopupMenu::showMonsterGMCommands()
-{
- if (mBeingId != BeingId_zero)
- {
- const bool legacy = Net::getNetworkType() == ServerType::TMWATHENA;
- if (isAllowCommand(ServerCommandType::kick))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: kick monster
- mBrowserBox->addRow("/kick :'BEINGID'", _("Kick"));
- }
- if (isAllowCommand(ServerCommandType::monster))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: spawn monster
- mBrowserBox->addRow("/spawn 'BEINGSUBTYPEID'", _("Spawn same"));
- }
- if (!legacy)
- {
- if (isAllowCommand(ServerCommandType::summon))
- {
- mBrowserBox->addRow("/spawnslave 'BEINGSUBTYPEID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: spawn slave monster
- _("Spawn slave"));
- }
- if (isAllowCommand(ServerCommandType::disguise))
- {
- mBrowserBox->addRow("/disguise 'BEINGSUBTYPEID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: disguise to monster
- _("Disguise"));
- }
- mBrowserBox->addSeparator("##3---");
- if (isAllowCommand(ServerCommandType::mobinfo))
- {
- mBrowserBox->addRow("/monsterinfo 'BEINGSUBTYPEID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show monster information
- _("Info"));
- }
- if (isAllowCommand(ServerCommandType::mobsearch))
- {
- mBrowserBox->addRow("/mobsearch 'BEINGSUBTYPEID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show selected monster in current map
- _("Search"));
- }
- if (isAllowCommand(ServerCommandType::whereis))
- {
- mBrowserBox->addRow("/mobspawnsearch 'BEINGSUBTYPEID'",
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show selected monster spawns in all maps
- _("Search spawns"));
- }
- }
- }
-}
-
-void PopupMenu::showFloorItemGMCommands()
-{
- const bool legacy = Net::getNetworkType() == ServerType::TMWATHENA;
- if (legacy)
- return;
- if (isAllowCommand(ServerCommandType::iteminfo))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show item information
- mBrowserBox->addRow("/iteminfo 'ITEMID'", _("Info"));
- }
- if (isAllowCommand(ServerCommandType::whodrops))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show who drops item
- mBrowserBox->addRow("/whodrops 'ITEMID'", _("Who drops"));
- }
-}
-
-void PopupMenu::showItemGMCommands()
-{
- const bool legacy = Net::getNetworkType() == ServerType::TMWATHENA;
- if (legacy)
- return;
- if (isAllowCommand(ServerCommandType::iteminfo))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show item information
- mBrowserBox->addRow("/iteminfo 'ITEMID'", _("Info"));
- }
- if (isAllowCommand(ServerCommandType::whodrops))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: show who drops item
- mBrowserBox->addRow("/whodrops 'ITEMID'", _("Who drops"));
- }
- mBrowserBox->addSeparator("##3---");
- if (isAllowCommand(ServerCommandType::item))
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm create item
- mBrowserBox->addRow("/createitem 'ITEMID' 1", _("Add 1"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm create item
- mBrowserBox->addRow("/createitem 'ITEMID' 5", _("Add 5"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm create item
- mBrowserBox->addRow("/createitem 'ITEMID' 10", _("Add 10"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm create item
- mBrowserBox->addRow("/createitem 'ITEMID' 100", _("Add 100"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm create item
- mBrowserBox->addRow("/createitem 'ITEMID' 1000", _("Add 1000"));
- // TRANSLATORS: popup menu item
- // TRANSLATORS: gm create item
- mBrowserBox->addRow("/createitem 'ITEMID' 10000", _("Add 10000"));
- }
-}
-
-void PopupMenu::showGMPopup(const std::string &name)
-{
- mBrowserBox->clearRows();
- // TRANSLATORS: popup menu header
- mBrowserBox->addRow(_("GM commands"));
- if (localPlayer->isGM())
- {
- switch (mType)
- {
- case ActorType::Player:
- showPlayerGMCommands(name);
- break;
- case ActorType::Npc:
- showNpcGMCommands();
- break;
- case ActorType::Monster:
- showMonsterGMCommands();
- break;
- case ActorType::FloorItem:
- showFloorItemGMCommands();
- break;
- case ActorType::Homunculus:
- showHomunGMCommands();
- break;
- case ActorType::Pet:
- showPetGMCommands();
- break;
- case ActorType::Mercenary:
- showMercenaryGMCommands();
- break;
- case ActorType::SkillUnit:
- break;
- default:
- case ActorType::Unknown:
- if (mItemId != 0)
- showItemGMCommands();
- break;
- case ActorType::Portal:
- case ActorType::Avatar:
- case ActorType::Elemental:
- break;
- }
- }
-
- mBrowserBox->addSeparator("##3---");
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(getX(), getY());
-}
-
-void PopupMenu::showHomunGMCommands()
-{
-}
-
-void PopupMenu::showPetGMCommands()
-{
-}
-
-void PopupMenu::showMercenaryGMCommands()
-{
-}
-
-void PopupMenu::showCraftPopup()
-{
- mBrowserBox->clearRows();
-
- for (int f = 0; f < 9; f ++)
- {
- const std::string cmd = strprintf("/craft %d", f);
- mBrowserBox->addRow(cmd,
- // TRANSLATORS: popup menu item
- // TRANSLATORS: move current item to craft slot
- strprintf(_("Move to craft %d"), f + 1).c_str());
- }
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
-
- showPopup(mX, mY);
-}
-
-void PopupMenu::addMailCommands()
-{
- if (Net::getNetworkType() == ServerType::TMWATHENA)
- return;
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: open mail dialog
- mBrowserBox->addRow("/mailto 'NAME'", _("Mail to..."));
-}
-
-void PopupMenu::addCatchPetCommands()
-{
- if (Net::getNetworkType() == ServerType::TMWATHENA)
- return;
- // TRANSLATORS: popup menu item
- // TRANSLATORS: catch pet command
- mBrowserBox->addRow("/catchpet :'BEINGID'", _("Taming pet"));
-}
-
-void PopupMenu::showAdoptCommands()
-{
- if (Net::getNetworkType() == ServerType::TMWATHENA)
- return;
- // TRANSLATORS: popup menu item
- // TRANSLATORS: adopt child command
- mBrowserBox->addRow("/adoptchild 'NAME'", _("Adopt child"));
-}
-
-void PopupMenu::addSocialMenu()
-{
- initPopup();
- mBrowserBox->clearRows();
- setMousePos();
- const Party *const party = localPlayer->getParty();
- if (party != nullptr)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: leave party
- mBrowserBox->addRow("/leaveparty", _("Leave party"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: create party
- mBrowserBox->addRow("/createparty", _("Create party"));
- }
-
- if (Net::getNetworkType() != ServerType::TMWATHENA)
- {
- const Guild *const guild = localPlayer->getGuild();
- if (guild != nullptr)
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: leave guild
- mBrowserBox->addRow("/leaveguild", _("Leave guild"));
- }
- else
- {
- // TRANSLATORS: popup menu item
- // TRANSLATORS: create guild
- mBrowserBox->addRow("/createguild", _("Create guild"));
- }
- }
- mBrowserBox->addSeparator("##3---");
-}
-
-void PopupMenu::showPartyPopup()
-{
- addSocialMenu();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(mX, mY);
-}
-
-void PopupMenu::showGuildPopup()
-{
- addSocialMenu();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: change guild notice message
- mBrowserBox->addRow("/guildnotice", _("Change notice"));
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(mX, mY);
-}
-
-void PopupMenu::showAttackPopup()
-{
- addSocialMenu();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(mX, mY);
-}
-
-void PopupMenu::showNavigationPopup()
-{
- addSocialMenu();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(mX, mY);
-}
-
-void PopupMenu::showPickupPopup()
-{
- addSocialMenu();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(mX, mY);
-}
-
-void PopupMenu::showPlayersPopup()
-{
- addSocialMenu();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(mX, mY);
-}
-
-void PopupMenu::showFriendsPopup()
-{
- addSocialMenu();
-
- // TRANSLATORS: popup menu item
- // TRANSLATORS: close menu
- mBrowserBox->addRow("cancel", _("Cancel"));
- showPopup(mX, mY);
-}
-
-void PopupMenu::moveUp()
-{
- mBrowserBox->moveSelectionUp();
-}
-
-void PopupMenu::moveDown()
-{
- mBrowserBox->moveSelectionDown();
-}
-
-void PopupMenu::select()
-{
- mBrowserBox->selectSelection();
-}
diff --git a/src/gui/popups/popupmenu.h b/src/gui/popups/popupmenu.h
deleted file mode 100644
index 5b554e197..000000000
--- a/src/gui/popups/popupmenu.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2004-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/>.
- */
-
-#ifndef GUI_POPUPS_POPUPMENU_H
-#define GUI_POPUPS_POPUPMENU_H
-
-#ifndef DYECMD
-
-#include "const/resources/item/cards.h"
-
-#include "enums/inventorytype.h"
-
-#include "enums/resources/servercommandtype.h"
-
-#include "enums/simpletypes/beingid.h"
-#include "enums/simpletypes/beingtypeid.h"
-#include "enums/simpletypes/itemcolor.h"
-
-#include "gui/widgets/linkhandler.h"
-#include "gui/widgets/popup.h"
-
-#include "listeners/playerlistener.h"
-#include "listeners/renamelistener.h"
-
-#include "localconsts.h"
-
-class ActorSprite;
-class Being;
-class Button;
-class ChatTab;
-class FloorItem;
-class Item;
-class ListModel;
-class MapItem;
-class ProgressBar;
-class ScrollArea;
-class StaticBrowserBox;
-class TextCommand;
-class TextDialog;
-class TextField;
-class Window;
-
-struct GroupInfo;
-struct SkillInfo;
-
-/**
- * Window showing popup menu.
- */
-class PopupMenu final : public Popup, public LinkHandler
-{
- public:
- /**
- * Constructor.
- */
- PopupMenu();
-
- A_DELETE_COPY(PopupMenu)
-
- void postInit() override final;
-
- /**
- * Shows the being related popup menu at the specified mouse coords.
- */
- void showPopup(const int x, const int y, const Being *const being);
-
- /**
- * Shows the beings related popup menu at the specified mouse coords.
- */
- void showPopup(const int x, const int y,
- const STD_VECTOR<ActorSprite*> &beings);
-
- void showPlayerPopup(const std::string &nick);
-
- /**
- * Shows the floor item related popup menu at the specified
- * mouse coords.
- */
- void showPopup(const int x, const int y,
- const FloorItem *const floorItem);
-
- /**
- * Shows the related popup menu when right click on the inventory
- * at the specified mouse coordinates.
- */
- void showPopup(Window *const parent,
- const int x, const int y,
- const Item *const item,
- const InventoryTypeT type);
-
- void showPopup(const int x, const int y, Button *const button);
-
- void showPopup(const int x, const int y, const ProgressBar *const bar);
-
- void showPopup(const int x, const int y, MapItem *const mapItem);
-
- void showItemPopup(const int x,
- const int y,
- const Item *const item);
-
- void showItemPopup(const int x, const int y,
- const int itemId,
- const ItemColor color);
-
- void showDropPopup(const int x,
- const int y,
- const Item *const item);
-
- void showOutfitsWindowPopup(const int x, const int y);
-
- void showSpellPopup(const int x, const int y, TextCommand *const cmd);
-
- void showAttackMonsterPopup(const int x, const int y,
- const std::string &name,
- const int type);
-
- void showPickupItemPopup(const int x, const int y,
- const std::string &name);
-
- void showUndressPopup(const int x, const int y,
- const Being *const being,
- const Item *const item);
-
- void showMapPopup(const int x, const int y,
- const int x2, const int y2,
- const bool isMinimap);
-
- /**
- * Shows the related popup menu when right click on the chat
- * at the specified mouse coordinates.
- */
- void showChatPopup(const int x, const int y, ChatTab *const tab);
-
- void showChangePos(const int x, const int y);
-
- void showPopup(const int x, const int y, ListModel *const model);
-
- void showTextFieldPopup(TextField *const input);
-
- void showLinkPopup(const std::string &link);
-
- void showWindowsPopup();
-
- void showNpcDialogPopup(const BeingId npcId,
- const int x, const int y);
-
- void showWindowPopup(Window *const window);
-
- void showSkillPopup(const SkillInfo *const info);
-
- void showSkillLevelPopup(const SkillInfo *const info);
-
- void showSkillTypePopup(const SkillInfo *const info);
-
- void showSkillOffsetPopup(const SkillInfo *const info,
- const bool isOffsetX);
-
- void showCraftPopup();
-
- void showEmoteType();
-
- void showPartyPopup();
-
- void showGuildPopup();
-
- void showAttackPopup();
-
- void showNavigationPopup();
-
- void showPickupPopup();
-
- void showPlayersPopup();
-
- void showFriendsPopup();
-
- /**
- * Handles link action.
- */
- void handleLink(const std::string &link,
- MouseEvent *event A_UNUSED) override final;
-
- void clear() override final;
-
- void moveUp();
-
- void moveDown();
-
- void select();
-
- private:
- void initPopup();
-
- bool isAllowCommand(const ServerCommandTypeT command);
-
- bool isAllowOtherCommand(const ServerCommandTypeT command);
-
- void setMousePos();
-
- void setMousePos2();
-
- void addPlayerRelation(const std::string &name);
-
- void addFollow();
-
- void addBuySell(const Being *const being) A_NONNULL(2);
-
- void addParty(const std::string &nick);
-
- void addPartyName(const std::string &partyName);
-
- void addBuySellDefault();
-
- void addPlayerMisc();
-
- void addPickupFilter(const std::string &name);
-
- void addProtection();
-
- void addUse(const Item *const item) A_NONNULL(2);
-
- void addItemMenu(const Item *const item,
- const InventoryTypeT type) A_NONNULL(2);
-
- void addDrop(const Item *const item,
- const bool isProtected) A_NONNULL(2);
-
- void addGmCommands();
-
- void showMuteCommands();
-
- void showPlayerMenu();
-
- void showFloorItemGMCommands();
-
- void showItemGMCommands();
-
- void addNormalRelations();
-
- void addWindowMenu(const Window *const window);
-
- void showHomunGMCommands();
-
- void showPetGMCommands();
-
- void showMercenaryGMCommands();
-
- void addChat(const Being *const being);
-
- void addMailCommands();
-
- void addCatchPetCommands();
-
- void showGMPopup(const std::string &name);
-
- void showPlayerGMCommands(const std::string &name);
-
- void showNpcGMCommands();
-
- void showMonsterGMCommands();
-
- void showAdoptCommands();
-
- void addSocialMenu();
-
- bool addBeingMenu();
-
- StaticBrowserBox *mBrowserBox A_NONNULLPOINTER;
- ScrollArea *mScrollArea A_NONNULLPOINTER;
-
- BeingId mBeingId;
- BeingId mFloorItemId;
- int mItemId;
- int mItemIndex;
- int mItemCards[maxCards];
- ItemColor mItemColor;
- MapItem *mMapItem;
- ChatTab *mTab;
- TextCommand *mSpell;
- Window *mCallerWindow;
- RenameListener mRenameListener;
- PlayerListener mPlayerListener;
- TextDialog *mDialog;
- Button *mButton;
- const GroupInfo *mGroup;
- std::string mName;
- std::string mExtName;
- TextField *mTextField;
- ActorTypeT mType;
- BeingTypeId mSubType;
- int mX;
- int mY;
- bool mAllowCleanMenu;
-
- /**
- * Shared code for the various showPopup functions.
- */
- void showPopup(int x, int y);
-};
-
-extern PopupMenu *popupMenu;
-
-#endif // DYE_CMD
-#endif // GUI_POPUPS_POPUPMENU_H
diff --git a/src/gui/popups/skillpopup.cpp b/src/gui/popups/skillpopup.cpp
deleted file mode 100644
index c2a583e30..000000000
--- a/src/gui/popups/skillpopup.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/popups/skillpopup.h"
-
-#include "gui/gui.h"
-
-#include "gui/fonts/font.h"
-
-#include "gui/widgets/label.h"
-#include "gui/widgets/textbox.h"
-
-#include "utils/gettext.h"
-#include "utils/stringutils.h"
-
-#include "resources/skill/skilldata.h"
-#include "resources/skill/skillinfo.h"
-
-#include "debug.h"
-
-SkillPopup *skillPopup = nullptr;
-
-SkillPopup::SkillPopup() :
- Popup("SkillPopup", "skillpopup.xml"),
- mSkillName(new Label(this)),
- mSkillDesc(new TextBox(this)),
- mSkillEffect(new TextBox(this)),
- mSkillLevel(new TextBox(this)),
- mSkillCastType(new TextBox(this)),
- mCastType(CastType::Default),
- mLastId(0U),
- mLastLevel(-1),
- mOffsetX(0),
- mOffsetY(0)
-{
- mSkillName->setFont(boldFont);
- mSkillName->setPosition(0, 0);
- mSkillName->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-
- const int fontHeight = getFont()->getHeight();
-
- mSkillDesc->setEditable(false);
- mSkillDesc->setPosition(0, fontHeight);
- mSkillDesc->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-
- mSkillEffect->setEditable(false);
- mSkillEffect->setPosition(0, 2 * fontHeight);
- mSkillEffect->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-
- mSkillLevel->setEditable(false);
- mSkillLevel->setPosition(0, 3 * fontHeight);
- mSkillLevel->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-
- mSkillCastType->setEditable(false);
- mSkillCastType->setPosition(0, 4 * fontHeight);
- mSkillCastType->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-}
-
-void SkillPopup::postInit()
-{
- Popup::postInit();
- add(mSkillName);
- add(mSkillDesc);
- add(mSkillEffect);
- add(mSkillLevel);
- add(mSkillCastType);
-
- addMouseListener(this);
-}
-
-SkillPopup::~SkillPopup()
-{
-}
-
-void SkillPopup::show(const SkillInfo *const skill,
- const int level,
- const CastTypeT castType,
- const int offsetX,
- const int offsetY)
-{
- if ((skill == nullptr) ||
- (skill->data == nullptr) ||
- (skill->id == mLastId &&
- level == mLastLevel &&
- castType == mCastType &&
- offsetX == mOffsetX &&
- offsetY == mOffsetY))
- {
- return;
- }
-
- mLastId = skill->id;
- mLastLevel = level;
- mCastType = castType;
- mOffsetX = offsetX;
- mOffsetY = offsetY;
-
- mSkillName->setCaption(skill->data->dispName);
- mSkillName->adjustSize();
- mSkillName->setPosition(0, 0);
-
- std::string description = skill->data->description;
- std::string effect = skill->skillEffect;
- if (description.empty())
- {
- description = effect;
- effect.clear();
- }
- mSkillDesc->setTextWrapped(description, 196);
- mSkillEffect->setTextWrapped(effect, 196);
- if (level != 0)
- {
- mSkillLevel->setTextWrapped(strprintf(
- // TRANSLATORS: skill level
- _("Level: %d / %d"), level, skill->level),
- 196);
- }
- else
- {
- if (skill->level != 0)
- {
- mSkillLevel->setTextWrapped(strprintf(
- // TRANSLATORS: skill level
- _("Level: %d"), skill->level),
- 196);
- }
- else
- {
- mSkillLevel->setTextWrapped(
- // TRANSLATORS: skill level for tmw fake skills
- _("Level: Unknown"),
- 196);
- }
- }
- std::string castStr;
- switch (castType)
- {
- case CastType::Default:
- default:
- // TRANSLATORS: skill cast type
- castStr = _("Default");
- break;
- case CastType::Target:
- // TRANSLATORS: skill cast type
- castStr = _("Target");
- break;
- case CastType::Position:
- // TRANSLATORS: skill cast type
- castStr = _("Mouse position");
- break;
- case CastType::Self:
- // TRANSLATORS: skill cast type
- castStr = _("Self position");
- break;
- }
- if (offsetX != 0 ||
- offsetY != 0)
- {
- castStr.append(strprintf(" (%+d,%+d)",
- offsetX,
- offsetY));
- }
- mSkillCastType->setTextWrapped(strprintf(
- // TRANSLATORS: skill cast type
- _("Cast type: %s"),
- castStr.c_str()), 196);
-
- int minWidth = mSkillName->getWidth();
-
- if (mSkillName->getWidth() > minWidth)
- minWidth = mSkillName->getWidth();
- if (mSkillDesc->getMinWidth() > minWidth)
- minWidth = mSkillDesc->getMinWidth();
- if (mSkillEffect->getMinWidth() > minWidth)
- minWidth = mSkillEffect->getMinWidth();
- if (mSkillLevel->getMinWidth() > minWidth)
- minWidth = mSkillLevel->getMinWidth();
- if (mSkillCastType->getMinWidth() > minWidth)
- minWidth = mSkillCastType->getMinWidth();
-
- const int numRowsDesc = mSkillDesc->getNumberOfRows();
- const int numRowsEffect = mSkillEffect->getNumberOfRows();
- const int numRowsLevel = mSkillLevel->getNumberOfRows();
- const int numRowsCast = mSkillCastType->getNumberOfRows();
- const int height = getFont()->getHeight();
-
- if (skill->skillEffect.empty())
- {
- setContentSize(minWidth,
- (numRowsDesc + numRowsLevel + numRowsCast + 1) * height);
- mSkillLevel->setPosition(0, (numRowsDesc + 1) * height);
- mSkillCastType->setPosition(0, (numRowsDesc + 2) * height);
- }
- else
- {
- setContentSize(minWidth,
- (numRowsDesc + numRowsLevel + numRowsEffect + numRowsCast + 1) *
- height);
- mSkillEffect->setPosition(0, (numRowsDesc + 1) * height);
- mSkillLevel->setPosition(0,
- (numRowsDesc + numRowsEffect + 1) * height);
- mSkillCastType->setPosition(0,
- (numRowsDesc + numRowsEffect + 2) * height);
- }
-
- mSkillDesc->setPosition(0, 1 * height);
-}
-
-void SkillPopup::mouseMoved(MouseEvent &event)
-{
- Popup::mouseMoved(event);
-
- // When the mouse moved on top of the popup, hide it
- setVisible(Visible_false);
- mLastId = 0;
-}
-
-void SkillPopup::reset()
-{
- mLastId = 0;
- mLastLevel = 0;
- mCastType = CastType::Default;
- mOffsetX = 0;
- mOffsetY = 0;
-}
diff --git a/src/gui/popups/skillpopup.h b/src/gui/popups/skillpopup.h
deleted file mode 100644
index d62916ed0..000000000
--- a/src/gui/popups/skillpopup.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/>.
- */
-
-#ifndef GUI_POPUPS_SKILLPOPUP_H
-#define GUI_POPUPS_SKILLPOPUP_H
-
-#include "gui/widgets/popup.h"
-
-#include "enums/resources/skill/casttype.h"
-
-class Label;
-class TextBox;
-
-struct SkillInfo;
-
-/**
- * A popup that displays information about an item.
- */
-class SkillPopup final : public Popup
-{
- public:
- /**
- * Constructor. Initializes the skill popup.
- */
- SkillPopup();
-
- A_DELETE_COPY(SkillPopup)
-
- /**
- * Destructor. Cleans up the skill popup on deletion.
- */
- ~SkillPopup();
-
- void postInit() override final;
-
- /**
- * Sets the info to be displayed given a particular item.
- */
- void show(const SkillInfo *const skill,
- const int level,
- const CastTypeT type,
- const int offsetX,
- const int offsetY);
-
- void mouseMoved(MouseEvent &event) override final;
-
- void reset();
-
- private:
- Label *mSkillName A_NONNULLPOINTER;
- TextBox *mSkillDesc A_NONNULLPOINTER;
- TextBox *mSkillEffect A_NONNULLPOINTER;
- TextBox *mSkillLevel A_NONNULLPOINTER;
- TextBox *mSkillCastType A_NONNULLPOINTER;
- CastTypeT mCastType;
- unsigned int mLastId;
- int mLastLevel;
- int mOffsetX;
- int mOffsetY;
-};
-
-extern SkillPopup *skillPopup;
-
-#endif // GUI_POPUPS_SKILLPOPUP_H
diff --git a/src/gui/popups/speechbubble.cpp b/src/gui/popups/speechbubble.cpp
deleted file mode 100644
index 1ae67fb99..000000000
--- a/src/gui/popups/speechbubble.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/popups/speechbubble.h"
-
-#include "gui/gui.h"
-#include "gui/skin.h"
-#include "gui/viewport.h"
-
-#include "gui/fonts/font.h"
-
-#include "gui/widgets/label.h"
-#include "gui/widgets/staticbrowserbox.h"
-
-#include "debug.h"
-
-SpeechBubble::SpeechBubble() :
- Popup("Speech", "speechbubble.xml"),
- mText(),
- mSpacing(mSkin != nullptr ? mSkin->getOption("spacing") : 2),
- mCaption(new Label(this)),
- mSpeechBox(new StaticBrowserBox(this, Opaque_true,
- "speechbrowserbox.xml"))
-{
- setContentSize(140, 46);
- setMinWidth(8);
- setMinHeight(8);
-
- mCaption->setFont(boldFont);
- mSpeechBox->setOpaque(Opaque_false);
- mSpeechBox->setForegroundColorAll(getThemeColor(ThemeColorId::BUBBLE_TEXT),
- getThemeColor(ThemeColorId::BUBBLE_TEXT_OUTLINE));
-}
-
-void SpeechBubble::postInit()
-{
- Popup::postInit();
- add(mCaption);
- add(mSpeechBox);
-}
-
-void SpeechBubble::setCaption(const std::string &name,
- const Color *const color1,
- const Color *const color2)
-{
- mCaption->setCaption(name);
- mCaption->adjustSize();
- mCaption->setForegroundColorAll(*color1, *color2);
-}
-
-void SpeechBubble::setText(const std::string &text, const bool showName)
-{
- if (text == mText && (mCaption->getWidth() <= mSpeechBox->getWidth()))
- return;
-
- mSpeechBox->setForegroundColorAll(getThemeColor(ThemeColorId::BUBBLE_TEXT),
- getThemeColor(ThemeColorId::BUBBLE_TEXT_OUTLINE));
-
- int width = mCaption->getWidth();
- mSpeechBox->clearRows();
- mSpeechBox->addRow(text);
- mSpeechBox->updateHeight();
-
- const int speechWidth = mSpeechBox->getWidth();
- const int nameHeight = showName ? mCaption->getHeight() + mSpacing : 0;
-
- if (width < speechWidth)
- width = speechWidth;
-
- setContentSize(width, getFont()->getHeight() + nameHeight);
- mCaption->setPosition(0, 0);
- mSpeechBox->setPosition(0, nameHeight);
-}
-
-void SpeechBubble::requestMoveToBackground()
-{
- windowContainer->moveWidgetAfter(viewport, this);
-}
diff --git a/src/gui/popups/speechbubble.h b/src/gui/popups/speechbubble.h
deleted file mode 100644
index 694a6eb2a..000000000
--- a/src/gui/popups/speechbubble.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/>.
- */
-
-#ifndef GUI_POPUPS_SPEECHBUBBLE_H
-#define GUI_POPUPS_SPEECHBUBBLE_H
-
-#include "gui/widgets/popup.h"
-
-class Label;
-class StaticBrowserBox;
-
-class SpeechBubble final : public Popup
-{
- public:
- /**
- * Constructor. Initializes the speech bubble.
- */
- SpeechBubble();
-
- A_DELETE_COPY(SpeechBubble)
-
- void postInit() override final;
-
- /**
- * Sets the name displayed for the speech bubble, and in what color.
- */
- void setCaption(const std::string &name,
- const Color *const color1 = &theme->getColor(
- ThemeColorId::BUBBLE_NAME, 255),
- const Color *const color2 = &theme->getColor(
- ThemeColorId::BUBBLE_NAME_OUTLINE, 255));
-
- /**
- * Sets the text to be displayed.
- */
- void setText(const std::string &text, const bool showName = true);
-
- void requestMoveToBackground();
-
- private:
- std::string mText;
- int mSpacing;
- Label *mCaption A_NONNULLPOINTER;
- StaticBrowserBox *mSpeechBox A_NONNULLPOINTER;
-};
-
-#endif // GUI_POPUPS_SPEECHBUBBLE_H
diff --git a/src/gui/popups/spellpopup.cpp b/src/gui/popups/spellpopup.cpp
deleted file mode 100644
index 16169d81e..000000000
--- a/src/gui/popups/spellpopup.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 Andrei Karas
- * 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/popups/spellpopup.h"
-
-#include "textcommand.h"
-
-#include "gui/gui.h"
-
-#include "gui/widgets/label.h"
-
-#include "debug.h"
-
-SpellPopup *spellPopup = nullptr;
-
-SpellPopup::SpellPopup() :
- Popup("SpellPopup", "spellpopup.xml"),
- mItemName(new Label(this)),
- mItemComment(new Label(this))
-{
- mItemName->setFont(boldFont);
- mItemName->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
- mItemComment->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
-}
-
-void SpellPopup::postInit()
-{
- Popup::postInit();
- add(mItemName);
- add(mItemComment);
-
- addMouseListener(this);
-}
-
-SpellPopup::~SpellPopup()
-{
-}
-
-void SpellPopup::setItem(const TextCommand *const spell)
-{
- if (spell != nullptr)
- {
- mItemName->setCaption(spell->getName());
- mItemComment->setCaption(spell->getComment());
- }
- else
- {
- mItemName->setCaption("?");
- mItemComment->setCaption("");
- }
-
- mItemName->adjustSize();
- mItemComment->adjustSize();
- int minWidth = mItemName->getWidth();
- if (mItemComment->getWidth() > minWidth)
- minWidth = mItemComment->getWidth();
-
- mItemName->setPosition(0, 0);
- const int fontHeight = mItemName->getHeight();
- mItemComment->setPosition(0, fontHeight);
- if (!mItemComment->getCaption().empty())
- setContentSize(minWidth, 2 * fontHeight);
- else
- setContentSize(minWidth, fontHeight);
-}
-
-void SpellPopup::view(const int x, const int y)
-{
- const int distance = 20;
-
- int posX = std::max(0, x - getWidth() / 2);
- int posY = y + distance;
-
- const Rect &rect = mDimension;
- const int w = rect.width;
- const int h = rect.height;
- if (posX + w > mainGraphics->mWidth)
- {
- if (mainGraphics->mWidth > w)
- posX = mainGraphics->mWidth - w;
- else
- posX = 0;
- }
- if (posY + h > mainGraphics->mHeight)
- {
- if (y > h + distance)
- posY = y - h - distance;
- }
-
- setPosition(posX, posY);
- setVisible(Visible_true);
- requestMoveToTop();
-}
-
-void SpellPopup::mouseMoved(MouseEvent &event)
-{
- Popup::mouseMoved(event);
-
- // When the mouse moved on top of the popup, hide it
- setVisible(Visible_false);
-}
diff --git a/src/gui/popups/spellpopup.h b/src/gui/popups/spellpopup.h
deleted file mode 100644
index 6b9d84238..000000000
--- a/src/gui/popups/spellpopup.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 Andrei Karas
- * 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/>.
- */
-
-#ifndef GUI_POPUPS_SPELLPOPUP_H
-#define GUI_POPUPS_SPELLPOPUP_H
-
-#include "gui/widgets/popup.h"
-
-class Label;
-class TextCommand;
-
-/**
- * A popup that displays information about an item.
- */
-class SpellPopup final : public Popup
-{
- public:
- /**
- * Constructor. Initializes the item popup.
- */
- SpellPopup();
-
- A_DELETE_COPY(SpellPopup)
-
- /**
- * Destructor. Cleans up the item popup on deletion.
- */
- ~SpellPopup();
-
- void postInit() override final;
-
- /**
- * Sets the info to be displayed given a particular item.
- */
- void setItem(const TextCommand *const spell);
-
- /**
- * Sets the location to display the item popup.
- */
- void view(const int x, const int y);
-
- void mouseMoved(MouseEvent &event) override final;
-
- private:
- Label *mItemName A_NONNULLPOINTER;
- Label *mItemComment A_NONNULLPOINTER;
-};
-
-extern SpellPopup *spellPopup;
-
-#endif // GUI_POPUPS_SPELLPOPUP_H
diff --git a/src/gui/popups/statuspopup.cpp b/src/gui/popups/statuspopup.cpp
deleted file mode 100644
index 544a37b56..000000000
--- a/src/gui/popups/statuspopup.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 Andrei Karas
- * 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/popups/statuspopup.h"
-
-#include "gamemodifiers.h"
-
-#include "gui/widgets/label.h"
-
-#include "input/inputmanager.h"
-
-#include "utils/stringutils.h"
-
-#include "gui/fonts/font.h"
-
-#include "debug.h"
-
-#define addLabel(num) \
- { \
- Label *const label = mLabels[num]; \
- label->setPosition(0, y); \
- label->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP), \
- getThemeColor(ThemeColorId::POPUP_OUTLINE)); \
- add(label); \
- y += fontHeight; \
- }
-
-StatusPopup::StatusPopup() :
- Popup("StatusPopup", "statuspopup.xml"),
- mLabels()
-{
- for (int f = 0; f < STATUSPOPUP_NUM_LABELS; f ++)
- mLabels[f] = new Label(this);
-}
-
-void StatusPopup::postInit()
-{
- Popup::postInit();
- const int fontHeight = getFont()->getHeight();
- int y = 0;
- addLabel(0);
- addLabel(1);
- addLabel(2);
- addLabel(3);
- y += 4;
- addLabel(4);
- addLabel(5);
- addLabel(9);
- addLabel(10);
- y += 4;
- addLabel(6);
- addLabel(7);
- y += 4;
- addLabel(8);
- y += 4;
- addLabel(12);
- addLabel(13);
- addLabel(14);
- addLabel(15);
- y += 4;
- addLabel(11);
-}
-
-StatusPopup::~StatusPopup()
-{
-}
-
-void StatusPopup::update()
-{
- updateLabels();
-
- int maxWidth = mLabels[0]->getWidth();
-
- for (int f = 0; f < STATUSPOPUP_NUM_LABELS; f ++)
- {
- const int width = mLabels[f]->getWidth();
- if (width > maxWidth)
- maxWidth = width;
- }
-
- const int pad2 = 2 * mPadding;
- maxWidth += pad2;
- setWidth(maxWidth);
- setHeight(mLabels[11]->getY()
- + mLabels[11]->getHeight() + pad2);
-}
-
-void StatusPopup::view(const int x, const int y)
-{
- const int distance = 20;
-
- int posX = std::max(0, x - getWidth() / 2);
- int posY = y + distance;
-
- if (posX + getWidth() > mainGraphics->mWidth)
- posX = mainGraphics->mWidth - getWidth();
- if (posY + getHeight() > mainGraphics->mHeight)
- posY = y - getHeight() - distance;
-
- update();
-
- setPosition(posX, posY);
- setVisible(Visible_true);
- requestMoveToTop();
-}
-
-void StatusPopup::setLabelText(const int num,
- const std::string &text,
- const InputActionT key) const
-{
- Label *const label = mLabels[num];
- label->setCaption(strprintf("%s %s", text.c_str(),
- inputManager.getKeyValueString(key).c_str()));
- label->adjustSize();
-}
-
-void StatusPopup::updateLabels() const
-{
- setLabelText(0, GameModifiers::getMoveTypeString(),
- InputAction::INVERT_DIRECTION);
- setLabelText(1, GameModifiers::getCrazyMoveTypeString(),
- InputAction::CHANGE_CRAZY_MOVES_TYPE);
- setLabelText(2, GameModifiers::getMoveToTargetTypeString(),
- InputAction::CHANGE_MOVE_TO_TARGET);
- setLabelText(3, GameModifiers::getFollowModeString(),
- InputAction::CHANGE_FOLLOW_MODE);
- setLabelText(4, GameModifiers::getAttackWeaponTypeString(),
- InputAction::CHANGE_ATTACK_WEAPON_TYPE);
- setLabelText(5, GameModifiers::getAttackTypeString(),
- InputAction::CHANGE_ATTACK_TYPE);
- setLabelText(6, GameModifiers::getQuickDropCounterString(),
- InputAction::SWITCH_QUICK_DROP);
- setLabelText(7, GameModifiers::getPickUpTypeString(),
- InputAction::CHANGE_PICKUP_TYPE);
- setLabelText(8, GameModifiers::getMapDrawTypeString(),
- InputAction::PATHFIND);
- setLabelText(9, GameModifiers::getMagicAttackTypeString(),
- InputAction::SWITCH_MAGIC_ATTACK);
- setLabelText(10, GameModifiers::getPvpAttackTypeString(),
- InputAction::SWITCH_PVP_ATTACK);
- setLabelText(11, GameModifiers::getGameModifiersString(),
- InputAction::DISABLE_GAME_MODIFIERS);
- setLabelText(12, GameModifiers::getImitationModeString(),
- InputAction::CHANGE_IMITATION_MODE);
- setLabelText(13, GameModifiers::getAwayModeString(),
- InputAction::AWAY);
- setLabelText(14, GameModifiers::getCameraModeString(),
- InputAction::CAMERA);
- setLabelText(15, GameModifiers::getTargetingTypeString(),
- InputAction::CHANGE_TARGETING_TYPE);
-}
diff --git a/src/gui/popups/statuspopup.h b/src/gui/popups/statuspopup.h
deleted file mode 100644
index 6ffff5799..000000000
--- a/src/gui/popups/statuspopup.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2009 The Mana World Development Team
- * Copyright (C) 2009-2010 Andrei Karas
- * 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/>.
- */
-
-#ifndef GUI_POPUPS_STATUSPOPUP_H
-#define GUI_POPUPS_STATUSPOPUP_H
-
-#include "enums/input/inputaction.h"
-
-#include "gui/widgets/popup.h"
-
-class Label;
-
-const int STATUSPOPUP_NUM_LABELS = 16;
-
-/**
- * A popup that displays information about an item.
- */
-class StatusPopup final : public Popup
-{
- public:
- /**
- * Constructor. Initializes the item popup.
- */
- StatusPopup();
-
- A_DELETE_COPY(StatusPopup)
-
- void postInit() override final;
-
- /**
- * Destructor. Cleans up the item popup on deletion.
- */
- ~StatusPopup();
-
- /**
- * Sets the location to display the item popup.
- */
- void view(const int x, const int y);
-
- void update();
-
- private:
- void updateLabels() const;
-
- void setLabelText(const int num,
- const std::string &text,
- const InputActionT key) const;
-
- Label *mLabels[STATUSPOPUP_NUM_LABELS] A_NONNULLPOINTER;
-};
-
-#endif // GUI_POPUPS_STATUSPOPUP_H
diff --git a/src/gui/popups/textboxpopup.cpp b/src/gui/popups/textboxpopup.cpp
deleted file mode 100644
index 873d6018c..000000000
--- a/src/gui/popups/textboxpopup.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/popups/textboxpopup.h"
-
-#include "gui/widgets/textbox.h"
-
-#include "gui/fonts/font.h"
-
-#include "render/graphics.h"
-
-#include "debug.h"
-
-TextBoxPopup *textBoxPopup = nullptr;
-
-TextBoxPopup::TextBoxPopup() :
- Popup("TextBoxPopup", "textboxpopup.xml"),
- mTextBox(new TextBox(this))
-{
-}
-
-void TextBoxPopup::postInit()
-{
- Popup::postInit();
- const int fontHeight = getFont()->getHeight();
- setMinHeight(fontHeight);
- mTextBox->setEditable(false);
- mTextBox->setOpaque(Opaque_false);
- add(mTextBox);
- addMouseListener(this);
-}
-
-TextBoxPopup::~TextBoxPopup()
-{
-}
-
-void TextBoxPopup::show(const int x, const int y, const std::string &str)
-{
- mTextBox->setTextWrapped(str, 190);
- setContentSize(mTextBox->getWidth(), mTextBox->getHeight());
- const int distance = 20;
-
- const Rect &rect = mDimension;
- int posX = std::max(0, x - rect.width / 2);
- int posY = y + distance;
-
- if (posX + rect.width > mainGraphics->mWidth)
- posX = mainGraphics->mWidth - rect.width;
- if (posY + rect.height > mainGraphics->mHeight)
- posY = y - rect.height - distance;
-
- setPosition(posX, posY);
- setVisible(Visible_true);
- requestMoveToTop();
-}
-
-void TextBoxPopup::mouseMoved(MouseEvent &event)
-{
- Popup::mouseMoved(event);
-
- // When the mouse moved on top of the popup, hide it
- setVisible(Visible_false);
-}
diff --git a/src/gui/popups/textboxpopup.h b/src/gui/popups/textboxpopup.h
deleted file mode 100644
index 8316905ac..000000000
--- a/src/gui/popups/textboxpopup.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/>.
- */
-
-#ifndef GUI_POPUPS_TEXTBOXPOPUP_H
-#define GUI_POPUPS_TEXTBOXPOPUP_H
-
-#include "gui/widgets/popup.h"
-
-class TextBox;
-
-/**
- * A popup that displays information about an item.
- */
-class TextBoxPopup final : public Popup
-{
- public:
- /**
- * Constructor. Initializes the item popup.
- */
- TextBoxPopup();
-
- A_DELETE_COPY(TextBoxPopup)
-
- /**
- * Destructor. Cleans up the item popup on deletion.
- */
- ~TextBoxPopup();
-
- void postInit() override final;
-
- /**
- * Sets the text to be displayed.
- */
- void show(const int x, const int y, const std::string &str);
-
- void mouseMoved(MouseEvent &event) override final;
-
- private:
- TextBox *mTextBox A_NONNULLPOINTER;
-};
-
-extern TextBoxPopup *textBoxPopup;
-
-#endif // GUI_POPUPS_TEXTBOXPOPUP_H
diff --git a/src/gui/popups/textpopup.cpp b/src/gui/popups/textpopup.cpp
deleted file mode 100644
index c8b951aea..000000000
--- a/src/gui/popups/textpopup.cpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/popups/textpopup.h"
-
-#include "gui/widgets/label.h"
-
-#include "gui/fonts/font.h"
-
-#include "debug.h"
-
-TextPopup *textPopup = nullptr;
-
-TextPopup::TextPopup() :
- Popup("TextPopup", "textpopup.xml"),
- mText()
-{
-}
-
-void TextPopup::postInit()
-{
- Popup::postInit();
- const int fontHeight = getFont()->getHeight();
- int y = 0;
- for (int f = 0; f < TEXTPOPUPCOUNT; f ++)
- {
- Label *const label = new Label(this);
- mText[f] = label;
- label->setPosition(0, y);
- label->setForegroundColorAll(getThemeColor(ThemeColorId::POPUP),
- getThemeColor(ThemeColorId::POPUP_OUTLINE));
- add(label);
- y += fontHeight;
- }
- addMouseListener(this);
-}
-
-TextPopup::~TextPopup()
-{
-}
-
-void TextPopup::show(const int x, const int y, const std::string &str1,
- const std::string &str2, const std::string &str3)
-{
- mText[0]->setCaption(str1);
- mText[1]->setCaption(str2);
- mText[2]->setCaption(str3);
-
- int minWidth = 0;
- for (int f = 0; f < TEXTPOPUPCOUNT; f ++)
- {
- Label *const label = mText[f];
- label->adjustSize();
- const int width = label->getWidth();
- if (width > minWidth)
- minWidth = width;
- }
-
- const int pad2 = 2 * mPadding;
- minWidth += pad2;
- setWidth(minWidth);
-
- int cnt = 1;
- if (!str2.empty())
- cnt ++;
- if (!str3.empty())
- cnt ++;
-
- setHeight(pad2 + mText[0]->getFont()->getHeight() * cnt);
- const int distance = 20;
-
- const Rect &rect = mDimension;
- int posX = std::max(0, x - rect.width / 2);
- int posY = y + distance;
-
- if (posX + rect.width > mainGraphics->mWidth)
- posX = mainGraphics->mWidth - rect.width;
- if (posY + rect.height > mainGraphics->mHeight)
- posY = y - rect.height - distance;
-
- setPosition(posX, posY);
- setVisible(Visible_true);
- requestMoveToTop();
-}
-
-void TextPopup::mouseMoved(MouseEvent &event)
-{
- Popup::mouseMoved(event);
-
- // When the mouse moved on top of the popup, hide it
- setVisible(Visible_false);
-}
diff --git a/src/gui/popups/textpopup.h b/src/gui/popups/textpopup.h
deleted file mode 100644
index 8a67d5660..000000000
--- a/src/gui/popups/textpopup.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * The ManaPlus Client
- * Copyright (C) 2008 The Legend of Mazzeroth Development Team
- * Copyright (C) 2008-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/>.
- */
-
-#ifndef GUI_POPUPS_TEXTPOPUP_H
-#define GUI_POPUPS_TEXTPOPUP_H
-
-#include "gui/widgets/popup.h"
-
-class Label;
-
-const int TEXTPOPUPCOUNT = 3;
-
-/**
- * A popup that displays information about an item.
- */
-class TextPopup final : public Popup
-{
- public:
- /**
- * Constructor. Initializes the item popup.
- */
- TextPopup();
-
- A_DELETE_COPY(TextPopup)
-
- /**
- * Destructor. Cleans up the item popup on deletion.
- */
- ~TextPopup();
-
- void postInit() override final;
-
- /**
- * Sets the text to be displayed.
- */
- void show(const int x, const int y, const std::string &str1)
- {
- show(x, y, str1, static_cast<const char*>(""),
- static_cast<const char*>(""));
- }
-
- /**
- * Sets the text to be displayed.
- */
- void show(const int x, const int y, const std::string &str1,
- const std::string &str2)
- { show(x, y, str1, str2, static_cast<const char*>("")); }
-
- /**
- * Sets the text to be displayed.
- */
- void show(const int x, const int y, const std::string &str1,
- const std::string &str2, const std::string &str3);
-
- void mouseMoved(MouseEvent &event) override final;
-
- private:
- Label *mText[TEXTPOPUPCOUNT];
-};
-
-extern TextPopup *textPopup;
-
-#endif // GUI_POPUPS_TEXTPOPUP_H