summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-02-15 17:01:46 +0300
committerAndrei Karas <akaras@inbox.ru>2014-02-15 17:01:46 +0300
commit382067b05c4fe97bcf0da0143405375ec295f7c6 (patch)
treef668cd2595ac0c85f0942f88729d3ff1956676fa /src
parentee8191705826d978b7793497fdd307536c709bff (diff)
parent9b329556e748050c4300174e9bdc72b15e5b8cc5 (diff)
downloadplus-382067b05c4fe97bcf0da0143405375ec295f7c6.tar.gz
plus-382067b05c4fe97bcf0da0143405375ec295f7c6.tar.bz2
plus-382067b05c4fe97bcf0da0143405375ec295f7c6.tar.xz
plus-382067b05c4fe97bcf0da0143405375ec295f7c6.zip
Merge branch 'master' into stable
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt5
-rw-r--r--src/Makefile.am5
-rw-r--r--src/actionmanager.cpp61
-rw-r--r--src/actionmanager.h5
-rw-r--r--src/actormanager.cpp29
-rw-r--r--src/actormanager.h5
-rw-r--r--src/being/being.cpp7
-rw-r--r--src/being/being.h7
-rw-r--r--src/being/localplayer.cpp78
-rw-r--r--src/being/localplayer.h17
-rw-r--r--src/being/playerrelations.cpp2
-rw-r--r--src/being/playerrelations.h19
-rw-r--r--src/being/playerrelationslistener.h43
-rw-r--r--src/chatlogger.cpp5
-rw-r--r--src/chatlogger.h4
-rw-r--r--src/client.cpp12
-rw-r--r--src/client.h16
-rw-r--r--src/commandhandler.cpp2
-rw-r--r--src/commandhandler.h2
-rw-r--r--src/dragdrop.h4
-rw-r--r--src/dropshortcut.h2
-rw-r--r--src/dyetool/dyemain.cpp5
-rw-r--r--src/emoteshortcut.h2
-rw-r--r--src/eventsmanager.cpp6
-rw-r--r--src/eventsmanager.h6
-rw-r--r--src/game.cpp6
-rw-r--r--src/game.h4
-rw-r--r--src/graphicsmanager.cpp2
-rw-r--r--src/graphicsmanager.h8
-rw-r--r--src/gui/gui.cpp2
-rw-r--r--src/gui/gui.h7
-rw-r--r--src/gui/popups/statuspopup.cpp4
-rw-r--r--src/gui/sdlfont.cpp4
-rw-r--r--src/gui/setupactiondata.h30
-rw-r--r--src/gui/theme.cpp2
-rw-r--r--src/gui/theme.h5
-rw-r--r--src/gui/viewport.cpp6
-rw-r--r--src/gui/viewport.h2
-rw-r--r--src/gui/widgets/button.h2
-rw-r--r--src/gui/widgets/characterdisplay.cpp2
-rw-r--r--src/gui/widgets/dropdown.cpp2
-rw-r--r--src/gui/widgets/emotepage.h2
-rw-r--r--src/gui/widgets/itemcontainer.h2
-rw-r--r--src/gui/widgets/listbox.h2
-rw-r--r--src/gui/widgets/namesmodel.h5
-rw-r--r--src/gui/widgets/playerbox.cpp9
-rw-r--r--src/gui/widgets/progressbar.cpp3
-rw-r--r--src/gui/widgets/scrollarea.cpp24
-rw-r--r--src/gui/widgets/setupitem.cpp38
-rw-r--r--src/gui/widgets/setupitem.h30
-rw-r--r--src/gui/widgets/slider.cpp3
-rw-r--r--src/gui/widgets/sliderlist.cpp3
-rw-r--r--src/gui/widgets/sliderlist.h2
-rw-r--r--src/gui/widgets/spellshortcutcontainer.cpp2
-rw-r--r--src/gui/widgets/spellshortcutcontainer.h2
-rw-r--r--src/gui/widgets/tabbedarea.cpp19
-rw-r--r--src/gui/widgets/tabbedarea.h4
-rw-r--r--src/gui/widgets/tabs/chattab.cpp11
-rw-r--r--src/gui/widgets/tabs/chattab.h10
-rw-r--r--src/gui/widgets/tabs/guildchattab.cpp62
-rw-r--r--src/gui/widgets/tabs/guildchattab.h4
-rw-r--r--src/gui/widgets/tabs/setup_input.cpp9
-rw-r--r--src/gui/widgets/tabs/setup_input.h9
-rw-r--r--src/gui/widgets/tabs/setup_visual.cpp10
-rw-r--r--src/gui/widgets/tabs/setup_visual.h2
-rw-r--r--src/gui/widgets/tabs/setuptabscroll.h2
-rw-r--r--src/gui/widgets/tabs/whispertab.cpp51
-rw-r--r--src/gui/widgets/tabs/whispertab.h2
-rw-r--r--src/gui/widgets/textfield.cpp4
-rw-r--r--src/gui/widgets/window.cpp22
-rw-r--r--src/gui/widgets/window.h2
-rw-r--r--src/gui/windows/chatwindow.cpp31
-rw-r--r--src/gui/windows/chatwindow.h8
-rw-r--r--src/gui/windows/debugwindow.cpp3
-rw-r--r--src/gui/windows/didyouknowwindow.cpp2
-rw-r--r--src/gui/windows/equipmentwindow.cpp4
-rw-r--r--src/gui/windows/equipmentwindow.h2
-rw-r--r--src/gui/windows/helpwindow.cpp2
-rw-r--r--src/gui/windows/inventorywindow.cpp2
-rw-r--r--src/gui/windows/minimap.cpp2
-rw-r--r--src/gui/windows/outfitwindow.cpp2
-rw-r--r--src/gui/windows/outfitwindow.h2
-rw-r--r--src/gui/windows/setupwindow.cpp (renamed from src/gui/windows/setup.cpp)31
-rw-r--r--src/gui/windows/setupwindow.h (renamed from src/gui/windows/setup.h)21
-rw-r--r--src/gui/windows/shopwindow.cpp2
-rw-r--r--src/gui/windows/shopwindow.h2
-rw-r--r--src/gui/windows/shortcutwindow.cpp15
-rw-r--r--src/gui/windows/shortcutwindow.h4
-rw-r--r--src/gui/windows/skilldialog.cpp2
-rw-r--r--src/gui/windows/socialwindow.cpp41
-rw-r--r--src/gui/windows/socialwindow.h10
-rw-r--r--src/gui/windows/statuswindow.cpp8
-rw-r--r--src/gui/windows/statuswindow.h5
-rw-r--r--src/gui/windows/tradewindow.cpp2
-rw-r--r--src/gui/windows/whoisonline.h2
-rw-r--r--src/input/inputmanager.cpp10
-rw-r--r--src/input/inputmanager.h6
-rw-r--r--src/input/keyboardconfig.cpp4
-rw-r--r--src/input/keyboardconfig.h6
-rw-r--r--src/input/keyboarddata.h37
-rw-r--r--src/input/keydata.h5
-rw-r--r--src/itemshortcut.h2
-rw-r--r--src/main.h4
-rw-r--r--src/map.cpp6
-rw-r--r--src/map.h2
-rw-r--r--src/maplayer.cpp3
-rw-r--r--src/maplayer.h5
-rw-r--r--src/mumblemanager.cpp2
-rw-r--r--src/mumblemanager.h2
-rw-r--r--src/net/ea/gui/guildtab.cpp55
-rw-r--r--src/net/ea/gui/guildtab.h4
-rw-r--r--src/net/ea/gui/partytab.cpp91
-rw-r--r--src/net/ea/gui/partytab.h6
-rw-r--r--src/net/ea/inventoryhandler.cpp6
-rw-r--r--src/net/ea/inventoryhandler.h6
-rw-r--r--src/net/ea/itemhandler.cpp6
-rw-r--r--src/net/ea/itemhandler.h6
-rw-r--r--src/net/ea/playerhandler.cpp18
-rw-r--r--src/net/ea/playerhandler.h18
-rw-r--r--src/net/ea/skillhandler.cpp6
-rw-r--r--src/net/ea/skillhandler.h6
-rw-r--r--src/net/ea/tradehandler.cpp10
-rw-r--r--src/net/ea/tradehandler.h10
-rw-r--r--src/net/eathena/beinghandler.cpp2
-rw-r--r--src/net/eathena/beinghandler.h2
-rw-r--r--src/net/eathena/buysellhandler.cpp2
-rw-r--r--src/net/eathena/buysellhandler.h2
-rw-r--r--src/net/eathena/gamehandler.cpp2
-rw-r--r--src/net/eathena/gamehandler.h2
-rw-r--r--src/net/eathena/loginhandler.cpp2
-rw-r--r--src/net/eathena/loginhandler.h2
-rw-r--r--src/net/eathena/npchandler.cpp4
-rw-r--r--src/net/eathena/npchandler.h4
-rw-r--r--src/net/eathena/playerhandler.cpp4
-rw-r--r--src/net/eathena/playerhandler.h4
-rw-r--r--src/net/tmwa/beinghandler.cpp5
-rw-r--r--src/net/tmwa/beinghandler.h4
-rw-r--r--src/net/tmwa/buysellhandler.cpp2
-rw-r--r--src/net/tmwa/buysellhandler.h2
-rw-r--r--src/net/tmwa/loginhandler.cpp2
-rw-r--r--src/net/tmwa/loginhandler.h2
-rw-r--r--src/net/tmwa/playerhandler.cpp6
-rw-r--r--src/net/tmwa/playerhandler.h6
-rw-r--r--src/net/tmwa/questhandler.cpp4
-rw-r--r--src/net/tmwa/questhandler.h4
-rw-r--r--src/particle/particleemitter.h2
-rw-r--r--src/render/graphics.cpp23
-rw-r--r--src/render/sdl2softwaregraphics.cpp2
-rw-r--r--src/resources/ambientlayer.cpp15
-rw-r--r--src/resources/ambientlayer.h11
-rw-r--r--src/resources/beingcommon.cpp6
-rw-r--r--src/resources/beingcommon.h24
-rw-r--r--src/resources/db/colordb.cpp2
-rw-r--r--src/resources/db/emotedb.cpp15
-rw-r--r--src/resources/db/emotedb.h4
-rw-r--r--src/resources/db/itemdb.cpp4
-rw-r--r--src/resources/imagehelper.cpp2
-rw-r--r--src/resources/imagehelper.h2
-rw-r--r--src/resources/iteminfo.cpp6
-rw-r--r--src/resources/iteminfo.h6
-rw-r--r--src/resources/mapreader.cpp106
-rw-r--r--src/resources/mapreader.h16
-rw-r--r--src/resources/openglimagehelper.cpp2
-rw-r--r--src/resources/openglimagehelper.h2
-rw-r--r--src/resources/resourcemanager.cpp8
-rw-r--r--src/resources/resourcemanager.h13
-rw-r--r--src/resources/spritedef.cpp12
-rw-r--r--src/resources/spritedef.h16
-rw-r--r--src/soundmanager.cpp2
-rw-r--r--src/soundmanager.h4
-rw-r--r--src/spellmanager.cpp6
-rw-r--r--src/spellmanager.h12
-rw-r--r--src/touchmanager.cpp19
-rw-r--r--src/touchmanager.h6
-rw-r--r--src/utils/stringutils.cpp6
-rw-r--r--src/utils/stringutils.h2
-rw-r--r--src/utils/translation/poparser.cpp8
-rw-r--r--src/utils/translation/poparser.h8
-rw-r--r--src/utils/xml.h3
179 files changed, 1030 insertions, 748 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 059eef64f..29e5afcb0 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -335,8 +335,8 @@ SET(SRCS
gui/windows/selldialog.h
gui/windows/serverdialog.cpp
gui/windows/serverdialog.h
- gui/windows/setup.cpp
- gui/windows/setup.h
+ gui/windows/setupwindow.cpp
+ gui/windows/setupwindow.h
gui/widgets/tabs/setup_audio.cpp
gui/widgets/tabs/setup_audio.h
gui/widgets/tabs/setup_colors.cpp
@@ -725,6 +725,7 @@ SET(SRCS
being/playerinfo.h
being/playerrelations.cpp
being/playerrelations.h
+ being/playerrelationslistener.h
position.cpp
position.h
properties.h
diff --git a/src/Makefile.am b/src/Makefile.am
index ba0fbc800..7fb4541a1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -469,8 +469,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \
gui/windows/selldialog.h \
gui/windows/serverdialog.cpp \
gui/windows/serverdialog.h \
- gui/windows/setup.cpp \
- gui/windows/setup.h \
+ gui/windows/setupwindow.cpp \
+ gui/windows/setupwindow.h \
gui/widgets/tabs/setup_audio.cpp \
gui/widgets/tabs/setup_audio.h \
gui/widgets/tabs/setup_colors.cpp \
@@ -861,6 +861,7 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \
being/playerinfo.h \
being/playerrelations.cpp \
being/playerrelations.h \
+ being/playerrelationslistener.h \
position.cpp \
position.h \
properties.h \
diff --git a/src/actionmanager.cpp b/src/actionmanager.cpp
index bc7be23a9..1c7dbce14 100644
--- a/src/actionmanager.cpp
+++ b/src/actionmanager.cpp
@@ -40,6 +40,7 @@
#include "gui/windows/skilldialog.h"
#include "gui/windows/socialwindow.h"
#include "gui/windows/statuswindow.h"
+#include "gui/windows/tradewindow.h"
#include "gui/windows/questswindow.h"
#include "gui/windows/quitdialog.h"
#include "gui/windows/whoisonline.h"
@@ -57,7 +58,7 @@
#include "gui/windows/ministatuswindow.h"
#include "gui/windows/npcdialog.h"
#include "gui/windows/outfitwindow.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/windows/shopwindow.h"
#include "gui/windows/shortcutwindow.h"
@@ -67,6 +68,7 @@
#include "net/net.h"
#include "net/playerhandler.h"
+#include "net/tradehandler.h"
#include "utils/gettext.h"
@@ -82,6 +84,7 @@
#define impHandler0(name) bool name(const InputEvent &event A_UNUSED)
extern ShortcutWindow *spellShortcutWindow;
+extern std::string tradePartnerName;
extern QuitDialog *quitDialog;
namespace ActionManager
@@ -215,7 +218,7 @@ impHandler0(mouseClick)
return false;
int mouseX, mouseY;
- gui->getMouseState(&mouseX, &mouseY);
+ Gui::getMouseState(&mouseX, &mouseY);
guiInput->simulateMouseClick(mouseX, mouseY, gcn::MouseEvent::RIGHT);
return true;
}
@@ -1149,4 +1152,58 @@ impHandler0(showWindows)
return false;
}
+impHandler0(nextShortcutsTab)
+{
+ if (itemShortcutWindow)
+ {
+ itemShortcutWindow->nextTab();
+ return true;
+ }
+ return false;
+}
+
+impHandler0(prevShortcutsTab)
+{
+ if (itemShortcutWindow)
+ {
+ itemShortcutWindow->prevTab();
+ return true;
+ }
+ return false;
+}
+
+impHandler0(nextCommandsTab)
+{
+ if (spellShortcutWindow)
+ {
+ spellShortcutWindow->nextTab();
+ return true;
+ }
+ return false;
+}
+
+impHandler0(prevCommandsTab)
+{
+ if (spellShortcutWindow)
+ {
+ spellShortcutWindow->prevTab();
+ return true;
+ }
+ return false;
+}
+
+impHandler0(openTrade)
+{
+ const Being *const being = player_node->getTarget();
+ if (being && being->getType() == ActorSprite::PLAYER)
+ {
+ Net::getTradeHandler()->request(being);
+ tradePartnerName = being->getName();
+ if (tradeWindow)
+ tradeWindow->clear();
+ return true;
+ }
+ return false;
+}
+
} // namespace ActionManager
diff --git a/src/actionmanager.h b/src/actionmanager.h
index a2df14202..ca8c3e2b9 100644
--- a/src/actionmanager.h
+++ b/src/actionmanager.h
@@ -94,6 +94,11 @@ namespace ActionManager
decHandler(stopSit);
decHandler(showKeyboard);
decHandler(showWindows);
+ decHandler(nextShortcutsTab);
+ decHandler(prevShortcutsTab);
+ decHandler(nextCommandsTab);
+ decHandler(prevCommandsTab);
+ decHandler(openTrade);
decHandler(hideWindows);
decHandler(helpWindowShow);
diff --git a/src/actormanager.cpp b/src/actormanager.cpp
index f55875351..9661dc2fe 100644
--- a/src/actormanager.cpp
+++ b/src/actormanager.cpp
@@ -37,6 +37,8 @@
#include "gui/windows/equipmentwindow.h"
#include "gui/windows/socialwindow.h"
+#include "input/inputmanager.h"
+
#include "utils/checkutils.h"
#include "utils/gettext.h"
@@ -327,6 +329,7 @@ Being *ActorManager::findBeingByPixel(const int x, const int y,
return nullptr;
const bool targetDead = mTargetDeadPlayers;
+ const bool modActive = inputManager.isActionActive(Input::KEY_STOP_ATTACK);
if (mExtMouseTargeting)
{
@@ -360,8 +363,11 @@ Being *ActorManager::findBeingByPixel(const int x, const int y,
Being *const being = static_cast<Being*>(*it);
- if (being->getInfo() && !being->getInfo()->isTargetSelection())
+ if (being->getInfo() && !(being->getInfo()->isTargetSelection()
+ || modActive))
+ {
continue;
+ }
if ((being->isAlive()
|| (targetDead && being->getType() == Being::PLAYER))
@@ -406,8 +412,11 @@ Being *ActorManager::findBeingByPixel(const int x, const int y,
Being *const being = static_cast<Being*>(*it);
- if (being->getInfo() && !being->getInfo()->isTargetSelection())
+ if (being->getInfo() && !(being->getInfo()->isTargetSelection()
+ || modActive))
+ {
continue;
+ }
if ((being->getPixelX() - mapTileSize / 2 <= x) &&
(being->getPixelX() + mapTileSize / 2 > x) &&
@@ -430,6 +439,7 @@ void ActorManager::findBeingsByPixel(std::vector<ActorSprite*> &beings,
const int xtol = mapTileSize / 2;
const int uptol = mapTileSize;
+ const bool modActive = inputManager.isActionActive(Input::KEY_STOP_ATTACK);
for_actors
{
@@ -442,7 +452,7 @@ void ActorManager::findBeingsByPixel(std::vector<ActorSprite*> &beings,
const Being *const being = dynamic_cast<const Being*>(*it);
if (being && being->getInfo()
- && !being->getInfo()->isTargetSelection())
+ && !(being->getInfo()->isTargetSelection() || modActive))
{
continue;
}
@@ -879,6 +889,7 @@ Being *ActorManager::findNearestLivingBeing(const Being *const aroundBeing,
const bool filtered = config.getBoolValue("enableAttackFilter")
&& type == Being::MONSTER;
+ const bool modActive = inputManager.isActionActive(Input::KEY_STOP_ATTACK);
bool ignoreDefault = false;
if (filtered)
@@ -935,8 +946,11 @@ Being *ActorManager::findNearestLivingBeing(const Being *const aroundBeing,
}
}
- if (being->getInfo() && !being->getInfo()->isTargetSelection())
+ if (being->getInfo()
+ && !(being->getInfo()->isTargetSelection() || modActive))
+ {
continue;
+ }
if (validateBeing(aroundBeing, being, type, nullptr, maxDist))
{
@@ -1029,8 +1043,11 @@ Being *ActorManager::findNearestLivingBeing(const Being *const aroundBeing,
}
}
- if (being->getInfo() && !being->getInfo()->isTargetSelection())
+ if (being->getInfo()
+ && !(being->getInfo()->isTargetSelection() || modActive))
+ {
continue;
+ }
const bool valid = validateBeing(aroundBeing, being,
type, excluded, 50);
@@ -1556,7 +1573,7 @@ void ActorManager::rebuildPickupItems()
}
int ActorManager::getIndexByName(const std::string &name,
- const std::map<std::string, int> &map) const
+ const std::map<std::string, int> &map)
{
const std::map<std::string, int>::const_iterator
i = map.find(name);
diff --git a/src/actormanager.h b/src/actormanager.h
index 9ccd5eaa6..17bd696d6 100644
--- a/src/actormanager.h
+++ b/src/actormanager.h
@@ -296,8 +296,9 @@ class ActorManager final: public ConfigListener
int getPickupItemIndex(const std::string &name) const A_WARN_UNUSED;
- int getIndexByName(const std::string &name, const std::map<std::string,
- int> &map) const A_WARN_UNUSED;
+ static int getIndexByName(const std::string &name,
+ const std::map<std::string, int> &map)
+ A_WARN_UNUSED;
bool checkForPickup(const FloorItem *const item) const A_WARN_UNUSED;
diff --git a/src/being/being.cpp b/src/being/being.cpp
index f9667ca33..fef3ca53a 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -2964,7 +2964,7 @@ int Being::searchSlotValue(const std::vector<int> &slotRemap,
void Being::searchSlotValueItr(std::vector<int>::iterator &it, int &idx,
std::vector<int> &slotRemap,
- const int val) const
+ const int val)
{
// logger->log("searching %d", val);
it = slotRemap.begin();
@@ -3052,7 +3052,7 @@ std::string Being::loadComment(const std::string &name, const int type)
str.append(stringToHexPath(name)).append("/comment.txt");
const ResourceManager *const resman = ResourceManager::getInstance();
- if (resman->existsLocal(str))
+ if (ResourceManager::existsLocal(str))
{
StringVect lines;
resman->loadTextFileLocal(str, lines);
@@ -3078,8 +3078,7 @@ void Being::saveComment(const std::string &restrict name,
return;
}
dir.append(stringToHexPath(name));
- const ResourceManager *const resman = ResourceManager::getInstance();
- resman->saveTextFile(dir, "comment.txt",
+ ResourceManager::saveTextFile(dir, "comment.txt",
(name + "\n").append(comment));
}
diff --git a/src/being/being.h b/src/being/being.h
index d3dfe2cc1..b9039bce3 100644
--- a/src/being/being.h
+++ b/src/being/being.h
@@ -1025,9 +1025,10 @@ class Being : public ActorSprite, public ConfigListener
int searchSlotValue(const std::vector<int> &slotRemap,
const int val) const A_WARN_UNUSED;
- void searchSlotValueItr(std::vector<int>::iterator &it, int &idx,
- std::vector<int> &slotRemap,
- const int val) const;
+ static void searchSlotValueItr(std::vector<int>::iterator &it,
+ int &idx,
+ std::vector<int> &slotRemap,
+ const int val);
void dumpSprites() const;
diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp
index 41688cbf3..86db69d8d 100644
--- a/src/being/localplayer.cpp
+++ b/src/being/localplayer.cpp
@@ -62,10 +62,13 @@
#include "net/chathandler.h"
#include "net/inventoryhandler.h"
#include "net/net.h"
+#include "net/pethandler.h"
#include "net/playerhandler.h"
#include "resources/iteminfo.h"
+#include "resources/db/emotedb.h"
+
#include "utils/gettext.h"
#include "utils/timer.h"
@@ -2118,7 +2121,7 @@ static const char *const debugPathStrings[] =
N_("(b) black & white map view")
};
-std::string LocalPlayer::getDebugPathString() const
+std::string LocalPlayer::getDebugPathString()
{
return gettext(getVarItem(&debugPathStrings[0],
viewport->getDebugPath(), debugPathSize));
@@ -2274,7 +2277,7 @@ static const char *const cameraModeStrings[] =
N_("(?) away")
};
-std::string LocalPlayer::getCameraModeString() const
+std::string LocalPlayer::getCameraModeString()
{
return gettext(getVarItem(&cameraModeStrings[0],
viewport->getCameraMode(), cameraModeSize));
@@ -2793,9 +2796,9 @@ void LocalPlayer::crazyMoveA()
signed char param = mMoveProgram[mCrazyMoveState++];
if (param == '?')
{
- const char cmd[] = {'l', 'r', 'u', 'd'};
+ const char cmd[] = {'l', 'r', 'u', 'd', 'L', 'R', 'U', 'D'};
srand(tick_time);
- param = cmd[rand() % 4];
+ param = cmd[rand() % 8];
}
switch (param)
{
@@ -2811,26 +2814,38 @@ void LocalPlayer::crazyMoveA()
case 'r':
move(1, 0);
break;
+ case 'D':
+ move(1, 1);
+ break;
+ case 'U':
+ move(-1, -1);
+ break;
+ case 'L':
+ move(-1, 1);
+ break;
+ case 'R':
+ move(1, -1);
+ break;
case 'f':
- switch (mDirection)
- {
- case UP : dy = -1; break;
- case DOWN : dy = 1; break;
- case LEFT : dx = -1; break;
- case RIGHT: dx = 1; break;
- default: break;
- }
+ if (mDirection | UP)
+ dy = -1;
+ else if (mDirection | DOWN)
+ dy = 1;
+ if (mDirection | LEFT)
+ dx = -1;
+ else if (mDirection | RIGHT)
+ dx = 1;
move(dx, dy);
break;
case 'b':
- switch (mDirection)
- {
- case UP : dy = 1; break;
- case DOWN : dy = -1; break;
- case LEFT : dx = 1; break;
- case RIGHT: dx = -1; break;
- default: break;
- }
+ if (mDirection | UP)
+ dy = 1;
+ else if (mDirection | DOWN)
+ dy = -1;
+ if (mDirection | LEFT)
+ dx = 1;
+ else if (mDirection | RIGHT)
+ dx = -1;
move(dx, dy);
break;
default:
@@ -2981,22 +2996,31 @@ void LocalPlayer::crazyMoveA()
pickUpItems();
}
// emote
- else if (mMoveProgram[mCrazyMoveState] == 'e')
+ else if (mMoveProgram[mCrazyMoveState] == 'e'
+ || mMoveProgram[mCrazyMoveState] == 'E')
{
mCrazyMoveState ++;
const signed char emo = mMoveProgram[mCrazyMoveState];
+ unsigned char emoteId = 0;
if (emo == '?')
{
srand(tick_time);
- emote(static_cast<unsigned char>(1 + (rand() % 13)));
+ emoteId = static_cast<unsigned char>(
+ 1 + (rand() % EmoteDB::size()));
}
else
{
if (emo >= '0' && emo <= '9')
- emote(static_cast<unsigned char>(emo - '0' + 1));
- else if (emo >= 'a' && emo <= 'd')
- emote(static_cast<unsigned char>(emo - 'a' + 11));
+ emoteId = static_cast<unsigned char>(emo - '0' + 1);
+ else if (emo >= 'a' && emo <= 'z')
+ emoteId = static_cast<unsigned char>(emo - 'a' + 11);
+ else if (emo >= 'A' && emo <= 'Z')
+ emoteId = static_cast<unsigned char>(emo - 'A' + 37);
}
+ if (mMoveProgram[mCrazyMoveState] == 'e')
+ emote(emoteId);
+ else
+ Net::getPetHandler()->emote(emoteId, 0);
mCrazyMoveState ++;
}
@@ -3229,7 +3253,7 @@ void LocalPlayer::specialMove(const unsigned char direction)
}
}
-void LocalPlayer::debugMsg(const std::string &str) const
+void LocalPlayer::debugMsg(const std::string &str)
{
if (debugChatTab)
debugChatTab->chatLog(str);
@@ -4317,7 +4341,7 @@ bool LocalPlayer::checAttackPermissions(const Being *const target) const
const char *LocalPlayer::getVarItem(const char *const *const arr,
const unsigned index,
- const unsigned sz) const
+ const unsigned sz)
{
if (index < sz)
return arr[index];
diff --git a/src/being/localplayer.h b/src/being/localplayer.h
index 88a6f6754..6ba12bd56 100644
--- a/src/being/localplayer.h
+++ b/src/being/localplayer.h
@@ -297,7 +297,7 @@ class LocalPlayer final : public Being,
void moveToHome();
- void debugMsg(const std::string &str) const;
+ static void debugMsg(const std::string &str);
bool isReachable(Being *const being,
const int maxCost = 0) A_WARN_UNUSED;
@@ -331,7 +331,7 @@ class LocalPlayer final : public Being,
void afkRespond(ChatTab *const tab, const std::string &nick);
- void setAfkMessage(std::string message);
+ static void setAfkMessage(std::string message);
bool navigateTo(const int x, const int y);
@@ -489,7 +489,7 @@ class LocalPlayer final : public Being,
std::string getPickUpTypeString();
- std::string getDebugPathString() const;
+ static std::string getDebugPathString();
std::string getMagicAttackString();
@@ -499,7 +499,7 @@ class LocalPlayer final : public Being,
std::string getAwayModeString();
- std::string getCameraModeString() const;
+ static std::string getCameraModeString();
std::string getGameModifiersString();
@@ -522,11 +522,12 @@ class LocalPlayer final : public Being,
static void tryMagic(const std::string &spell, const int baseMagic,
const int schoolMagic, const int mana);
- const char *getVarItem(const char *const *const arr,
- const unsigned index,
- const unsigned sz) const A_WARN_UNUSED;
+ static const char *getVarItem(const char *const *const arr,
+ const unsigned index,
+ const unsigned sz) A_WARN_UNUSED;
- void changeMode(unsigned *restrict const var, const unsigned limit,
+ void changeMode(unsigned *restrict const var,
+ const unsigned limit,
const char *restrict const conf,
std::string (LocalPlayer::*const func)(),
const unsigned def = 0,
diff --git a/src/being/playerrelations.cpp b/src/being/playerrelations.cpp
index f3e921be3..a04c77e76 100644
--- a/src/being/playerrelations.cpp
+++ b/src/being/playerrelations.cpp
@@ -600,7 +600,7 @@ bool PlayerRelationsManager::isGoodName(Being *const being) const
return status;
}
-bool PlayerRelationsManager::checkName(const std::string &name) const
+bool PlayerRelationsManager::checkName(const std::string &name)
{
const size_t size = name.size();
const std::string check = config.getStringValue("unsecureChars");
diff --git a/src/being/playerrelations.h b/src/being/playerrelations.h
index f37e33d89..360930879 100644
--- a/src/being/playerrelations.h
+++ b/src/being/playerrelations.h
@@ -25,6 +25,8 @@
#include "utils/stringvector.h"
+#include "being/playerrelationslistener.h"
+
#include <list>
#include <map>
@@ -97,21 +99,6 @@ class PlayerIgnoreStrategy
}
};
-class PlayerRelationsListener
-{
- public:
- virtual ~PlayerRelationsListener()
- { }
-
- virtual void updatedPlayer(const std::string &name) = 0;
-
- virtual void updateAll() = 0;
-
- protected:
- PlayerRelationsListener()
- { }
-};
-
/**
* Player relations class, represents any particular relations and/or
* preferences the user of the local client has wrt other players (identified
@@ -270,7 +257,7 @@ class PlayerRelationsManager final
// ignored data upon reloading
unsigned int mDefaultPermissions;
- bool checkName(const std::string &name) const A_WARN_UNUSED;
+ static bool checkName(const std::string &name) A_WARN_UNUSED;
PlayerIgnoreStrategy *mIgnoreStrategy;
std::map<std::string, PlayerRelation *> mRelations;
diff --git a/src/being/playerrelationslistener.h b/src/being/playerrelationslistener.h
new file mode 100644
index 000000000..983f731e4
--- /dev/null
+++ b/src/being/playerrelationslistener.h
@@ -0,0 +1,43 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2008-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2014 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 BEING_PLAYERRELATIONSLISTENER_H
+#define BEING_PLAYERRELATIONSLISTENER_H
+
+#include <string>
+
+class PlayerRelationsListener
+{
+ public:
+ virtual ~PlayerRelationsListener()
+ { }
+
+ virtual void updatedPlayer(const std::string &name) = 0;
+
+ virtual void updateAll() = 0;
+
+ protected:
+ PlayerRelationsListener()
+ { }
+};
+
+#endif // BEING_PLAYERRELATIONSLISTENER_H
diff --git a/src/chatlogger.cpp b/src/chatlogger.cpp
index c3da6e0b1..2bfe4933b 100644
--- a/src/chatlogger.cpp
+++ b/src/chatlogger.cpp
@@ -131,7 +131,7 @@ std::string ChatLogger::getDir() const
return date;
}
-std::string ChatLogger::secureName(std::string &name) const
+std::string ChatLogger::secureName(std::string &name)
{
const unsigned int sz = name.length();
for (unsigned int f = 0; f < sz; f ++)
@@ -151,7 +151,8 @@ std::string ChatLogger::secureName(std::string &name) const
return name;
}
-void ChatLogger::writeTo(std::ofstream &file, const std::string &str) const
+void ChatLogger::writeTo(std::ofstream &file,
+ const std::string &str)
{
file << str << std::endl;
}
diff --git a/src/chatlogger.h b/src/chatlogger.h
index c95cea7fe..ae0e21388 100644
--- a/src/chatlogger.h
+++ b/src/chatlogger.h
@@ -55,7 +55,7 @@ class ChatLogger final
std::string getDir() const A_WARN_UNUSED;
- std::string secureName(std::string &str) const;
+ static std::string secureName(std::string &str);
void setServerName(const std::string &serverName);
@@ -72,7 +72,7 @@ class ChatLogger final
void setLogDir(const std::string &logDir);
- void writeTo(std::ofstream &file, const std::string &str) const;
+ static void writeTo(std::ofstream &file, const std::string &str);
std::ofstream mLogFile;
std::string mLogDir;
diff --git a/src/client.cpp b/src/client.cpp
index 4d301ccfe..ab3add135 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -66,7 +66,7 @@
#include "gui/windows/registerdialog.h"
#include "gui/windows/selldialog.h"
#include "gui/windows/serverdialog.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/windows/unregisterdialog.h"
#include "gui/windows/updaterwindow.h"
#include "gui/windows/quitdialog.h"
@@ -527,7 +527,7 @@ void Client::initSoundManager()
void Client::createWindows()
{
userPalette = new UserPalette;
- setupWindow = new Setup;
+ setupWindow = new SetupWindow;
setupWindow->postInit();
helpWindow = new HelpWindow;
didYouKnowWindow = new DidYouKnowWindow;
@@ -2106,7 +2106,7 @@ void Client::initServerConfig(std::string serverName)
dropShortcut = new DropShortcut;
}
-void Client::initFeatures() const
+void Client::initFeatures()
{
features.init(paths.getStringValue("featuresFile"), true);
features.setDefaultValues(getFeaturesDefaults());
@@ -2337,7 +2337,7 @@ void Client::initScreenshotDir()
logger->log("screenshotDirectory: " + mScreenshotDir);
}
-void Client::accountLogin(LoginData *const data) const
+void Client::accountLogin(LoginData *const data)
{
if (!data)
return;
@@ -2758,7 +2758,7 @@ bool Client::limitPackets(const int type)
return true;
}
-void Client::setFramerate(const int fpsLimit)
+void Client::setFramerate(const int fpsLimit) const
{
if (!fpsLimit)
return;
@@ -3012,7 +3012,7 @@ void Client::setIcon()
#else
iconFile.append(".png");
#endif
- iconFile = ResourceManager::getInstance()->getPath(iconFile);
+ iconFile = ResourceManager::getPath(iconFile);
logger->log("Loading icon from file: %s", iconFile.c_str());
#ifdef WIN32
diff --git a/src/client.h b/src/client.h
index 92daff44b..22567ae94 100644
--- a/src/client.h
+++ b/src/client.h
@@ -285,7 +285,7 @@ public:
static void closeDialogs();
- void setFramerate(const int fpsLimit);
+ void setFramerate(const int fpsLimit) const;
int getFramerate() const A_WARN_UNUSED;
@@ -335,9 +335,9 @@ public:
const bool modal);
private:
- void createWindows();
+ static void createWindows();
- void initLang();
+ static void initLang();
void initSoundManager();
@@ -347,7 +347,7 @@ private:
void initTitle();
- void extractDataDir();
+ static void extractDataDir();
void mountDataDir();
@@ -369,9 +369,9 @@ private:
void initServerConfig(std::string serverName);
- void initFeatures() const;
+ static void initFeatures();
- void accountLogin(LoginData *const data) const;
+ static void accountLogin(LoginData *const data);
#ifndef ANDROID
void storeSafeParameters() const;
@@ -383,9 +383,9 @@ private:
void testsClear();
- void logVars();
+ static void logVars();
- void checkConfigVersion();
+ static void checkConfigVersion();
void setIcon();
diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp
index 8409b8d58..6d3881432 100644
--- a/src/commandhandler.cpp
+++ b/src/commandhandler.cpp
@@ -68,7 +68,7 @@ void CommandHandler::handleCommands(const std::string &command,
}
void CommandHandler::handleCommand(const std::string &command,
- ChatTab *const tab)
+ ChatTab *const tab) const
{
const size_t pos = command.find(' ');
const std::string type(command, 0, pos);
diff --git a/src/commandhandler.h b/src/commandhandler.h
index 02ced5630..de1561d74 100644
--- a/src/commandhandler.h
+++ b/src/commandhandler.h
@@ -62,7 +62,7 @@ class CommandHandler final
* Parse and handle the given command.
*/
void handleCommand(const std::string &command,
- ChatTab *const tab = localChatTab);
+ ChatTab *const tab = localChatTab) const;
void handleCommands(const std::string &command,
ChatTab *const tab = localChatTab);
diff --git a/src/dragdrop.h b/src/dragdrop.h
index 42d01c238..99cfb1ee7 100644
--- a/src/dragdrop.h
+++ b/src/dragdrop.h
@@ -75,10 +75,10 @@ class DragDrop final
mItemImage->decRef();
}
- int getItem()
+ int getItem() const
{ return mItem; }
- int getItemColor()
+ int getItemColor() const
{ return mItemColor; }
Image *getItemImage()
diff --git a/src/dropshortcut.h b/src/dropshortcut.h
index b4450127f..85c0b6620 100644
--- a/src/dropshortcut.h
+++ b/src/dropshortcut.h
@@ -71,7 +71,7 @@ class DropShortcut final
/**
* Returns the amount of shortcut items.
*/
- int getItemCount() const A_WARN_UNUSED
+ static int getItemCount() A_WARN_UNUSED
{ return DROP_SHORTCUT_ITEMS; }
/**
diff --git a/src/dyetool/dyemain.cpp b/src/dyetool/dyemain.cpp
index c11cdd162..0699ce1ff 100644
--- a/src/dyetool/dyemain.cpp
+++ b/src/dyetool/dyemain.cpp
@@ -95,6 +95,9 @@ int main(int argc, char **argv)
printf("Error loading image\n");
return 1;
}
- ImageWriter::writePNG(image->getSDLSurface(), dst);
+ SDL_Surface *const surface = imageHelper->convertTo32Bit(
+ image->getSDLSurface());
+ ImageWriter::writePNG(surface, dst);
+ SDL_FreeSurface(surface);
return 0;
}
diff --git a/src/emoteshortcut.h b/src/emoteshortcut.h
index 0b5859fe9..3e03a18f5 100644
--- a/src/emoteshortcut.h
+++ b/src/emoteshortcut.h
@@ -60,7 +60,7 @@ class EmoteShortcut final
/**
* Returns the amount of shortcut Emotes.
*/
- unsigned int getEmoteCount() const A_WARN_UNUSED
+ static unsigned int getEmoteCount() A_WARN_UNUSED
{ return SHORTCUT_EMOTES; }
/**
diff --git a/src/eventsmanager.cpp b/src/eventsmanager.cpp
index 237e7bf68..3062ac3d2 100644
--- a/src/eventsmanager.cpp
+++ b/src/eventsmanager.cpp
@@ -60,7 +60,7 @@ void EventsManager::shutdown()
config.removeListeners(this);
}
-bool EventsManager::handleCommonEvents(const SDL_Event &event)
+bool EventsManager::handleCommonEvents(const SDL_Event &event) const
{
if (mLogInput)
logEvent(event);
@@ -100,7 +100,7 @@ bool EventsManager::handleCommonEvents(const SDL_Event &event)
return false;
}
-bool EventsManager::handleEvents()
+bool EventsManager::handleEvents() const
{
if (Game::instance())
{
@@ -157,7 +157,7 @@ bool EventsManager::handleEvents()
return false;
}
-void EventsManager::handleGameEvents()
+void EventsManager::handleGameEvents() const
{
Game *const game = Game::instance();
diff --git a/src/eventsmanager.h b/src/eventsmanager.h
index 7bf1eea24..5433a83fb 100644
--- a/src/eventsmanager.h
+++ b/src/eventsmanager.h
@@ -42,11 +42,11 @@ class EventsManager final : public ConfigListener
void shutdown();
- bool handleEvents();
+ bool handleEvents() const;
- bool handleCommonEvents(const SDL_Event &event);
+ bool handleCommonEvents(const SDL_Event &event) const;
- void handleGameEvents();
+ void handleGameEvents() const;
#ifdef USE_SDL2
static void handleSDL2WindowEvent(const SDL_Event &event);
diff --git a/src/game.cpp b/src/game.cpp
index 6e4341372..26807b8b6 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -68,7 +68,7 @@
#include "gui/windows/npcdialog.h"
#include "gui/windows/okdialog.h"
#include "gui/windows/outfitwindow.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/windows/shopwindow.h"
#include "gui/windows/shortcutwindow.h"
#include "gui/windows/skilldialog.h"
@@ -962,7 +962,7 @@ void Game::handleInput()
}
handleMove();
- inputManager.handleRepeat();
+ InputManager::handleRepeat();
BLOCK_END("Game::handleInput 1")
}
@@ -1175,7 +1175,7 @@ void Game::closeDialogs()
}
}
-void Game::videoResized(const int width, const int height) const
+void Game::videoResized(const int width, const int height)
{
if (viewport)
viewport->setSize(width, height);
diff --git a/src/game.h b/src/game.h
index 08349cdaa..023796290 100644
--- a/src/game.h
+++ b/src/game.h
@@ -107,12 +107,12 @@ class Game final
static void closeDialogs();
- void videoResized(const int width, const int height) const;
+ static void videoResized(const int width, const int height);
bool getValidSpeed() const A_WARN_UNUSED
{ return mValidSpeed; }
- void moveInDirection(const unsigned char direction);
+ static void moveInDirection(const unsigned char direction);
static bool createScreenshot();
diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp
index 00cceb22f..b40f8df57 100644
--- a/src/graphicsmanager.cpp
+++ b/src/graphicsmanager.cpp
@@ -546,7 +546,7 @@ bool GraphicsManager::supportExtension(const std::string &ext) const
return mExtensions.find(ext) != mExtensions.end();
}
-void GraphicsManager::updateTextureFormat()
+void GraphicsManager::updateTextureFormat() const
{
const int compressionFormat = config.getIntValue("compresstextures");
if (compressionFormat)
diff --git a/src/graphicsmanager.h b/src/graphicsmanager.h
index 744514ed2..8e5aba51f 100644
--- a/src/graphicsmanager.h
+++ b/src/graphicsmanager.h
@@ -78,7 +78,7 @@ class GraphicsManager final
void initGraphics(const bool noOpenGL);
- void setVideoMode();
+ static void setVideoMode();
SDL_Window *createWindow(const int w, const int h,
const int bpp, const int flags);
@@ -94,7 +94,7 @@ class GraphicsManager final
std::string getDensityString() const;
- int getDensity()
+ int getDensity() const
{ return mDensity; }
#ifdef USE_OPENGL
@@ -104,7 +104,7 @@ class GraphicsManager final
bool supportExtension(const std::string &ext) const A_WARN_UNUSED;
- void updateTextureFormat();
+ void updateTextureFormat() const;
bool checkGLVersion(const int major, const int minor)
const A_WARN_UNUSED;
@@ -154,7 +154,7 @@ class GraphicsManager final
void updateDebugLog() const;
- std::string getGLVersion()
+ std::string getGLVersion() const
{ return mGlVersionString; }
#endif
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index dcd4d82ea..126fc9a3b 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -940,7 +940,7 @@ void Gui::removeDragged(gcn::Widget *widget)
mFocusHandler->setDraggedWidget(nullptr);
}
-uint32_t Gui::getMouseState(int *const x, int *const y) const
+uint32_t Gui::getMouseState(int *const x, int *const y)
{
const uint32_t res = SDL_GetMouseState(x, y);
const int scale = mainGraphics->getScale();
diff --git a/src/gui/gui.h b/src/gui/gui.h
index 033a71282..5fddc7df7 100644
--- a/src/gui/gui.h
+++ b/src/gui/gui.h
@@ -147,8 +147,9 @@ class Gui final : public gcn::Gui
MouseEvent *createMouseEvent(Window *const widget) A_WARN_UNUSED;
- void getAbsolutePosition(gcn::Widget *restrict widget,
- int &restrict x, int &restrict y);
+ static void getAbsolutePosition(gcn::Widget *restrict widget,
+ int &restrict x,
+ int &restrict y);
void addGlobalFocusListener(gcn::FocusListener* focusListener);
@@ -164,7 +165,7 @@ class Gui final : public gcn::Gui
int getLastMouseY() const
{ return mLastMouseY; }
- uint32_t getMouseState(int *const x, int *const y) const;
+ static uint32_t getMouseState(int *const x, int *const y);
protected:
void handleMouseMoved(const gcn::MouseInput &mouseInput);
diff --git a/src/gui/popups/statuspopup.cpp b/src/gui/popups/statuspopup.cpp
index 7944d1400..1d696fe82 100644
--- a/src/gui/popups/statuspopup.cpp
+++ b/src/gui/popups/statuspopup.cpp
@@ -154,7 +154,7 @@ void StatusPopup::updateLabels() const
Input::KEY_SWITCH_QUICK_DROP);
setLabelText(7, player_node->getPickUpTypeString(),
Input::KEY_CHANGE_PICKUP_TYPE);
- setLabelText(8, player_node->getDebugPathString(),
+ setLabelText(8, LocalPlayer::getDebugPathString(),
Input::KEY_PATHFIND);
setLabelText(9, player_node->getMagicAttackString(),
Input::KEY_SWITCH_MAGIC_ATTACK);
@@ -166,6 +166,6 @@ void StatusPopup::updateLabels() const
Input::KEY_CHANGE_IMITATION_MODE);
setLabelText(13, player_node->getAwayModeString(),
Input::KEY_AWAY);
- setLabelText(14, player_node->getCameraModeString(),
+ setLabelText(14, LocalPlayer::getCameraModeString(),
Input::KEY_CAMERA);
}
diff --git a/src/gui/sdlfont.cpp b/src/gui/sdlfont.cpp
index 8ef78c262..f97970a26 100644
--- a/src/gui/sdlfont.cpp
+++ b/src/gui/sdlfont.cpp
@@ -404,8 +404,8 @@ TTF_Font *SDLFont::openFont(const char *const name, const int size)
// return nullptr;
// return TTF_OpenFontIndexRW(rw, 1, size, 0);
// #else
- return TTF_OpenFontIndex(ResourceManager::getInstance()->getPath(
- name).c_str(), size, 0);
+ return TTF_OpenFontIndex(ResourceManager::getPath(name).c_str(),
+ size, 0);
// #endif
}
diff --git a/src/gui/setupactiondata.h b/src/gui/setupactiondata.h
index 2b9d694a8..1b767516d 100644
--- a/src/gui/setupactiondata.h
+++ b/src/gui/setupactiondata.h
@@ -162,6 +162,12 @@ static SetupActionData setupActionData0[] =
},
{
// TRANSLATORS: input action name
+ N_("Open trade window"),
+ Input::KEY_OPEN_TRADE,
+ "",
+ },
+ {
+ // TRANSLATORS: input action name
N_("Change Map View Mode"),
Input::KEY_PATHFIND,
"",
@@ -497,6 +503,30 @@ static SetupActionData setupActionData2[] =
"",
},
{
+ // TRANSLATORS: input action name
+ N_("Previous Shortcuts tab"),
+ Input::KEY_PREV_SHORTCUTS_TAB,
+ "",
+ },
+ {
+ // TRANSLATORS: input action name
+ N_("Next Shortcuts tab"),
+ Input::KEY_NEXT_SHORTCUTS_TAB,
+ "",
+ },
+ {
+ // TRANSLATORS: input action name
+ N_("Previous Commands tab"),
+ Input::KEY_PREV_COMMANDS_TAB,
+ "",
+ },
+ {
+ // TRANSLATORS: input action name
+ N_("Next Commands tab"),
+ Input::KEY_NEXT_COMMANDS_TAB,
+ "",
+ },
+ {
"",
Input::KEY_NO_VALUE,
""
diff --git a/src/gui/theme.cpp b/src/gui/theme.cpp
index 44f2ca24e..4218aff7c 100644
--- a/src/gui/theme.cpp
+++ b/src/gui/theme.cpp
@@ -1179,7 +1179,7 @@ Skin *Theme::loadSkinRect(ImageRect &image, const std::string &name,
}
void Theme::unloadRect(const ImageRect &rect, const int start,
- const int end) const
+ const int end)
{
for (int f = start; f <= end; f ++)
{
diff --git a/src/gui/theme.h b/src/gui/theme.h
index 910964bdf..b40be2881 100644
--- a/src/gui/theme.h
+++ b/src/gui/theme.h
@@ -502,8 +502,9 @@ class Theme final : public Palette, public ConfigListener
const std::string &name2, const int start = 0,
const int end = 8);
- void unloadRect(const ImageRect &rect, const int start = 0,
- const int end = 8) const;
+ static void unloadRect(const ImageRect &rect,
+ const int start = 0,
+ const int end = 8);
static Image *getImageFromThemeXml(const std::string &name,
const std::string &name2)
diff --git a/src/gui/viewport.cpp b/src/gui/viewport.cpp
index 5206b7424..341af1f0b 100644
--- a/src/gui/viewport.cpp
+++ b/src/gui/viewport.cpp
@@ -277,7 +277,7 @@ void Viewport::_followMouse()
{
if (!gui)
return;
- const uint8_t button = gui->getMouseState(&mMouseX, &mMouseY);
+ const uint8_t button = Gui::getMouseState(&mMouseX, &mMouseY);
// If the left button is dragged
if (mPlayerFollowMouse && (button & SDL_BUTTON(1)))
{
@@ -302,7 +302,7 @@ void Viewport::_drawDebugPath(Graphics *const graphics)
if (!player_node || !userPalette || !actorManager || !mMap || !gui)
return;
- gui->getMouseState(&mMouseX, &mMouseY);
+ Gui::getMouseState(&mMouseX, &mMouseY);
static Path debugPath;
static Vector lastMouseDestination = Vector(0.0F, 0.0F);
@@ -1034,7 +1034,7 @@ void Viewport::returnCamera()
mCameraRelativeY = 0;
}
-void Viewport::validateSpeed() const
+void Viewport::validateSpeed()
{
if (!inputManager.isActionActive(static_cast<int>(
Input::KEY_TARGET_ATTACK)) && !inputManager.isActionActive(
diff --git a/src/gui/viewport.h b/src/gui/viewport.h
index 2ccb5ddac..dcddc003c 100644
--- a/src/gui/viewport.h
+++ b/src/gui/viewport.h
@@ -284,7 +284,7 @@ class Viewport final : public WindowContainer,
/// Clears any matching hovers
void clearHover(const ActorSprite *const actor);
- void validateSpeed() const;
+ static void validateSpeed();
private:
/**
diff --git a/src/gui/widgets/button.h b/src/gui/widgets/button.h
index a2333d581..3dd783e52 100644
--- a/src/gui/widgets/button.h
+++ b/src/gui/widgets/button.h
@@ -107,7 +107,7 @@ class Button final : public gcn::Button,
/**
* Update the alpha value to the button components.
*/
- void updateAlpha();
+ static void updateAlpha();
void mouseReleased(gcn::MouseEvent& mouseEvent) override final;
diff --git a/src/gui/widgets/characterdisplay.cpp b/src/gui/widgets/characterdisplay.cpp
index bd3f042f9..5ae4e2f5b 100644
--- a/src/gui/widgets/characterdisplay.cpp
+++ b/src/gui/widgets/characterdisplay.cpp
@@ -127,7 +127,7 @@ void CharacterDisplay::mouseMoved(gcn::MouseEvent &event A_UNUSED)
int mouseX = 0;
int mouseY = 0;
- gui->getMouseState(&mouseX, &mouseY);
+ Gui::getMouseState(&mouseX, &mouseY);
const std::string &name = mName->getCaption();
if (!name.empty())
{
diff --git a/src/gui/widgets/dropdown.cpp b/src/gui/widgets/dropdown.cpp
index 068ffe1fc..59cdec6fb 100644
--- a/src/gui/widgets/dropdown.cpp
+++ b/src/gui/widgets/dropdown.cpp
@@ -183,7 +183,7 @@ DropDown::~DropDown()
if (theme)
{
theme->unload(mSkin);
- theme->unloadRect(skinRect);
+ Theme::unloadRect(skinRect);
}
}
}
diff --git a/src/gui/widgets/emotepage.h b/src/gui/widgets/emotepage.h
index 8cef8f058..132cfb8e9 100644
--- a/src/gui/widgets/emotepage.h
+++ b/src/gui/widgets/emotepage.h
@@ -53,7 +53,7 @@ class EmotePage final : public gcn::Widget,
void resetAction();
- int getSelectedIndex()
+ int getSelectedIndex() const
{ return mSelectedIndex; }
private:
diff --git a/src/gui/widgets/itemcontainer.h b/src/gui/widgets/itemcontainer.h
index 272536c87..f4a73af9f 100644
--- a/src/gui/widgets/itemcontainer.h
+++ b/src/gui/widgets/itemcontainer.h
@@ -134,7 +134,7 @@ class ItemContainer final : public gcn::Widget,
void updateMatrix();
- bool getClickCount() A_WARN_UNUSED
+ bool getClickCount() const A_WARN_UNUSED
{ return mClicks; }
private:
diff --git a/src/gui/widgets/listbox.h b/src/gui/widgets/listbox.h
index 83a33eb62..b1a2f0da5 100644
--- a/src/gui/widgets/listbox.h
+++ b/src/gui/widgets/listbox.h
@@ -97,7 +97,7 @@ class ListBox : public gcn::ListBox,
void setCenter(const bool b)
{ mCenterText = b; }
- int getPressedIndex()
+ int getPressedIndex() const
{ return mPressedIndex; }
unsigned int getRowHeight() const override A_WARN_UNUSED
diff --git a/src/gui/widgets/namesmodel.h b/src/gui/widgets/namesmodel.h
index 76f668f10..f70dd2571 100644
--- a/src/gui/widgets/namesmodel.h
+++ b/src/gui/widgets/namesmodel.h
@@ -43,12 +43,15 @@ class NamesModel : public gcn::ListModel
StringVect &getNames() A_WARN_UNUSED
{ return mNames; }
- size_t size() A_WARN_UNUSED
+ size_t size() const A_WARN_UNUSED
{ return mNames.size(); }
void clear()
{ mNames.clear(); }
+ void add(const std::string &str)
+ { mNames.push_back(str); }
+
void fillFromArray(const char *const *const arr, std::size_t size);
protected:
diff --git a/src/gui/widgets/playerbox.cpp b/src/gui/widgets/playerbox.cpp
index 2e078c088..6fda932bf 100644
--- a/src/gui/widgets/playerbox.cpp
+++ b/src/gui/widgets/playerbox.cpp
@@ -70,13 +70,8 @@ PlayerBox::~PlayerBox()
if (gui)
gui->removeDragged(this);
- Theme *const theme = Theme::instance();
- if (theme)
- {
- theme->unloadRect(mBackground);
- theme->unloadRect(mSelectedBackground);
- }
-
+ Theme::unloadRect(mBackground);
+ Theme::unloadRect(mSelectedBackground);
mBeing = nullptr;
}
diff --git a/src/gui/widgets/progressbar.cpp b/src/gui/widgets/progressbar.cpp
index aecb323f8..38257e0a8 100644
--- a/src/gui/widgets/progressbar.cpp
+++ b/src/gui/widgets/progressbar.cpp
@@ -101,8 +101,7 @@ ProgressBar::~ProgressBar()
theme->unload(mSkin);
mSkin = nullptr;
}
- if (theme)
- theme->unloadRect(mFillRect);
+ Theme::unloadRect(mFillRect);
delete mVertexes;
mVertexes = nullptr;
}
diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp
index 6d7695198..a260142a1 100644
--- a/src/gui/widgets/scrollarea.cpp
+++ b/src/gui/widgets/scrollarea.cpp
@@ -96,23 +96,19 @@ ScrollArea::~ScrollArea()
delete getContent();
instances--;
- const Theme *const theme = Theme::instance();
- if (theme)
+ if (instances == 0)
{
- if (instances == 0)
+ Theme::unloadRect(background);
+ Theme::unloadRect(vMarker);
+ Theme::unloadRect(vMarkerHi);
+ Theme::unloadRect(vBackground);
+ Theme::unloadRect(hBackground);
+ for (int i = 0; i < 2; i ++)
{
- theme->unloadRect(background);
- theme->unloadRect(vMarker);
- theme->unloadRect(vMarkerHi);
- theme->unloadRect(vBackground);
- theme->unloadRect(hBackground);
- for (int i = 0; i < 2; i ++)
+ for (int f = UP; f < BUTTONS_DIR; f ++)
{
- for (int f = UP; f < BUTTONS_DIR; f ++)
- {
- if (buttons[f][i])
- buttons[f][i]->decRef();
- }
+ if (buttons[f][i])
+ buttons[f][i]->decRef();
}
}
}
diff --git a/src/gui/widgets/setupitem.cpp b/src/gui/widgets/setupitem.cpp
index b9ea91f76..2cb7f60d1 100644
--- a/src/gui/widgets/setupitem.cpp
+++ b/src/gui/widgets/setupitem.cpp
@@ -1139,3 +1139,41 @@ void SetupItemSound::action(const gcn::ActionEvent &event)
SetupItemSliderList::action(event);
}
}
+
+SetupItemSliderInt::SetupItemSliderInt(const std::string &restrict text,
+ const std::string &restrict description,
+ const std::string &restrict keyName,
+ SetupTabScroll *restrict const parent,
+ const std::string &restrict eventName,
+ gcn::ListModel *restrict const model,
+ const int min,
+ const int width,
+ const bool onTheFly,
+ const bool mainConfig) :
+ SetupItemSliderList(text, description, keyName, parent, eventName,
+ model, width, onTheFly, mainConfig),
+ mMin(min)
+{
+ createControls();
+}
+
+void SetupItemSliderInt::addMoreControls()
+{
+ toWidget();
+}
+
+void SetupItemSliderInt::fromWidget()
+{
+ if (!mSlider)
+ return;
+
+ mValue = toString(mSlider->getSelected() + mMin);
+}
+
+void SetupItemSliderInt::toWidget()
+{
+ if (!mSlider)
+ return;
+
+ mSlider->setSelected(atoi(mValue.c_str()) - mMin);
+}
diff --git a/src/gui/widgets/setupitem.h b/src/gui/widgets/setupitem.h
index 689f62fdf..c72bb39ef 100644
--- a/src/gui/widgets/setupitem.h
+++ b/src/gui/widgets/setupitem.h
@@ -466,9 +466,9 @@ class SetupItemSliderList : public SetupItem
void createControls();
- void fromWidget() override final;
+ void fromWidget() override;
- void toWidget() override final;
+ void toWidget() override;
virtual void action(const gcn::ActionEvent &event) override;
@@ -528,4 +528,30 @@ class SetupItemSound final : public SetupItemSliderList
Button *mButton;
};
+class SetupItemSliderInt final : public SetupItemSliderList
+{
+ public:
+ SetupItemSliderInt(const std::string &restrict text,
+ const std::string &restrict description,
+ const std::string &restrict keyName,
+ SetupTabScroll *restrict const parent,
+ const std::string &restrict eventName,
+ gcn::ListModel *restrict const model,
+ const int min,
+ const int width = 150,
+ const bool onTheFly = false,
+ const bool mainConfig = true);
+
+ A_DELETE_COPY(SetupItemSliderInt)
+
+ void addMoreControls() override final;
+
+ void fromWidget() override final;
+
+ void toWidget() override final;
+
+ protected:
+ int mMin;
+};
+
#endif // GUI_WIDGETS_SETUPITEM_H
diff --git a/src/gui/widgets/slider.cpp b/src/gui/widgets/slider.cpp
index 37b696a4e..750b58528 100644
--- a/src/gui/widgets/slider.cpp
+++ b/src/gui/widgets/slider.cpp
@@ -72,9 +72,8 @@ Slider::~Slider()
mInstances--;
if (mInstances == 0 && Theme::instance())
{
- const Theme *const theme = Theme::instance();
for (int mode = 0; mode < 2; mode ++)
- theme->unloadRect(buttons[mode]);
+ Theme::unloadRect(buttons[mode]);
}
}
diff --git a/src/gui/widgets/sliderlist.cpp b/src/gui/widgets/sliderlist.cpp
index 6dd968eef..60d7926d1 100644
--- a/src/gui/widgets/sliderlist.cpp
+++ b/src/gui/widgets/sliderlist.cpp
@@ -77,8 +77,7 @@ SliderList::~SliderList()
void SliderList::updateAlpha()
{
- mButtons[0]->updateAlpha();
- mButtons[1]->updateAlpha();
+ Button::updateAlpha();
}
void SliderList::mouseWheelMovedUp(gcn::MouseEvent& mouseEvent)
diff --git a/src/gui/widgets/sliderlist.h b/src/gui/widgets/sliderlist.h
index 4ef673b83..73f8c6f5c 100644
--- a/src/gui/widgets/sliderlist.h
+++ b/src/gui/widgets/sliderlist.h
@@ -67,7 +67,7 @@ class SliderList final : public Container,
void adjustSize();
- int getSelected() A_WARN_UNUSED
+ int getSelected() const A_WARN_UNUSED
{ return mSelectedIndex; }
protected:
diff --git a/src/gui/widgets/spellshortcutcontainer.cpp b/src/gui/widgets/spellshortcutcontainer.cpp
index c4e4b0671..bf14f21fe 100644
--- a/src/gui/widgets/spellshortcutcontainer.cpp
+++ b/src/gui/widgets/spellshortcutcontainer.cpp
@@ -321,7 +321,7 @@ void SpellShortcutContainer::widgetHidden(const gcn::Event &event A_UNUSED)
mSpellPopup->setVisible(false);
}
-int SpellShortcutContainer::getItemByIndex(const int index)
+int SpellShortcutContainer::getItemByIndex(const int index) const
{
return spellShortcut->getItem(
(mNumber * SPELL_SHORTCUT_ITEMS) + index);
diff --git a/src/gui/widgets/spellshortcutcontainer.h b/src/gui/widgets/spellshortcutcontainer.h
index 31e98a592..37e7b5660 100644
--- a/src/gui/widgets/spellshortcutcontainer.h
+++ b/src/gui/widgets/spellshortcutcontainer.h
@@ -75,7 +75,7 @@ class SpellShortcutContainer final : public ShortcutContainer
void setWidget2(const Widget2 *const widget) override final;
- int getItemByIndex(const int index);
+ int getItemByIndex(const int index) const A_WARN_UNUSED;
private:
SpellPopup *mSpellPopup;
diff --git a/src/gui/widgets/tabbedarea.cpp b/src/gui/widgets/tabbedarea.cpp
index da6c89d1a..3b0cf1db5 100644
--- a/src/gui/widgets/tabbedarea.cpp
+++ b/src/gui/widgets/tabbedarea.cpp
@@ -725,3 +725,22 @@ void TabbedArea::death(const gcn::Event &event)
else
gcn::BasicContainer::death(event);
}
+
+void TabbedArea::selectNextTab()
+{
+ int tab = getSelectedTabIndex();
+ tab++;
+ if (tab == static_cast<int>(mTabs.size()))
+ tab = 0;
+ setSelectedTab(mTabs[tab].first);
+}
+
+void TabbedArea::selectPrevTab()
+{
+ int tab = getSelectedTabIndex();
+
+ if (tab == 0)
+ tab = static_cast<int>(mTabs.size());
+ tab--;
+ setSelectedTab(mTabs[tab].first);
+}
diff --git a/src/gui/widgets/tabbedarea.h b/src/gui/widgets/tabbedarea.h
index eaac7a6d5..d0f97b688 100644
--- a/src/gui/widgets/tabbedarea.h
+++ b/src/gui/widgets/tabbedarea.h
@@ -189,6 +189,10 @@ class TabbedArea final : public Widget2,
void adjustWidget(gcn::Widget *const widget) const;
+ void selectNextTab();
+
+ void selectPrevTab();
+
private:
typedef std::vector <std::pair<Tab*, gcn::Widget*> > TabContainer;
diff --git a/src/gui/widgets/tabs/chattab.cpp b/src/gui/widgets/tabs/chattab.cpp
index 1795fd03e..331101209 100644
--- a/src/gui/widgets/tabs/chattab.cpp
+++ b/src/gui/widgets/tabs/chattab.cpp
@@ -418,15 +418,8 @@ void ChatTab::clearText()
void ChatTab::handleInput(const std::string &msg)
{
- if (chatWindow)
- {
- Net::getChatHandler()->talk(chatWindow->doReplace(msg),
- mChannelName);
- }
- else
- {
- Net::getChatHandler()->talk(msg, mChannelName);
- }
+ Net::getChatHandler()->talk(ChatWindow::doReplace(msg),
+ mChannelName);
}
void ChatTab::handleCommand(const std::string &msg)
diff --git a/src/gui/widgets/tabs/chattab.h b/src/gui/widgets/tabs/chattab.h
index 9790c33e4..651e69d6b 100644
--- a/src/gui/widgets/tabs/chattab.h
+++ b/src/gui/widgets/tabs/chattab.h
@@ -109,13 +109,6 @@ class ChatTab : public Tab
void clearText();
/**
- * Add any extra help text to the output. Allows tabs to define help
- * for commands defined by the tab itself.
- */
- virtual void showHelp()
- { }
-
- /**
* Handle special commands. Allows a tab to handle commands it
* defines itself.
*
@@ -195,6 +188,9 @@ class ChatTab : public Tab
virtual void getAutoCompleteList(StringVect&) const
{}
+ virtual void getAutoCompleteCommands(StringVect&) const
+ {}
+
void addRow(std::string &line);
BrowserBox *mTextOutput;
diff --git a/src/gui/widgets/tabs/guildchattab.cpp b/src/gui/widgets/tabs/guildchattab.cpp
index 364b83968..da1a651e1 100644
--- a/src/gui/widgets/tabs/guildchattab.cpp
+++ b/src/gui/widgets/tabs/guildchattab.cpp
@@ -55,50 +55,16 @@ GuildChatTab::~GuildChatTab()
bool GuildChatTab::handleCommand(const std::string &restrict type,
const std::string &restrict args)
{
- if (type == "help")
- {
- if (args == "invite")
- {
- // TRANSLATORS: guild chat tab help
- chatLog(_("Command: /invite <nick>"));
- // TRANSLATORS: guild chat tab help
- chatLog(_("This command invites <nick> to the guild you're in."));
- // TRANSLATORS: guild chat tab help
- chatLog(_("If the <nick> has spaces in it, enclose it in "
- "double quotes (\")."));
- }
- else if (args == "leave")
- {
- // TRANSLATORS: guild chat tab help
- chatLog(_("Command: /leave"));
- // TRANSLATORS: guild chat tab help
- chatLog(_("This command causes the player to leave the guild."));
- }
- else
- {
- return false;
- }
- }
- else if (type == "invite" && guildManager)
- {
+ if (type == "invite" && guildManager)
guildManager->invite(args);
- }
else if (type == "leave" && guildManager)
- {
guildManager->leave();
- }
else if (type == "kick" && guildManager)
- {
guildManager->kick(args);
- }
else if (type == "notice" && guildManager)
- {
guildManager->notice(args);
- }
else
- {
return false;
- }
return true;
}
@@ -107,23 +73,7 @@ void GuildChatTab::handleInput(const std::string &msg)
{
if (!guildManager)
return;
-
- if (chatWindow)
- guildManager->chat(chatWindow->doReplace(msg));
- else
- guildManager->chat(msg);
-}
-
-void GuildChatTab::showHelp()
-{
- // TRANSLATORS: guild chat tab help
- chatLog(_("/help > Display this help."));
- // TRANSLATORS: guild chat tab help
- chatLog(_("/invite > Invite a player to your guild"));
- // TRANSLATORS: guild chat tab help
- chatLog(_("/leave > Leave the guild you are in"));
- // TRANSLATORS: guild chat tab help
- chatLog(_("/kick > Kick someone from the guild you are in"));
+ guildManager->chat(ChatWindow::doReplace(msg));
}
void GuildChatTab::getAutoCompleteList(StringVect &names) const
@@ -132,6 +82,14 @@ void GuildChatTab::getAutoCompleteList(StringVect &names) const
return;
guildManager->getNames(names);
+}
+
+void GuildChatTab::getAutoCompleteCommands(StringVect &names) const
+{
+ names.push_back("/help");
+ names.push_back("/invite ");
+ names.push_back("/leave");
+ names.push_back("/kick ");
names.push_back("/notice ");
}
diff --git a/src/gui/widgets/tabs/guildchattab.h b/src/gui/widgets/tabs/guildchattab.h
index 7fac06843..fbfd3a032 100644
--- a/src/gui/widgets/tabs/guildchattab.h
+++ b/src/gui/widgets/tabs/guildchattab.h
@@ -40,8 +40,6 @@ class GuildChatTab final : public ChatTab, public ConfigListener
bool handleCommand(const std::string &restrict type,
const std::string &restrict args) override final;
- void showHelp() override;
-
void saveToLogFile(const std::string &msg) const override final;
int getType() const override A_WARN_UNUSED
@@ -55,6 +53,8 @@ class GuildChatTab final : public ChatTab, public ConfigListener
void handleInput(const std::string &msg) override final;
void getAutoCompleteList(StringVect &names) const override final;
+
+ void getAutoCompleteCommands(StringVect &names) const override final;
};
#endif // GUI_WIDGETS_TABS_GUILDCHATTAB_H
diff --git a/src/gui/widgets/tabs/setup_input.cpp b/src/gui/widgets/tabs/setup_input.cpp
index 2ce99d971..9ce6fd616 100644
--- a/src/gui/widgets/tabs/setup_input.cpp
+++ b/src/gui/widgets/tabs/setup_input.cpp
@@ -270,7 +270,7 @@ void Setup_Input::action(const gcn::ActionEvent &event)
else if (id == "resetkeys")
{
inputManager.resetKeys();
- inputManager.update();
+ InputManager::update();
refreshKeys();
}
else if (id == "default")
@@ -378,8 +378,9 @@ void Setup_Input::keyUnresolved()
}
void Setup_Input::fixTranslation(SetupActionData *const actionDatas,
- const int actionStart, const int actionEnd,
- const std::string &text) const
+ const int actionStart,
+ const int actionEnd,
+ const std::string &text)
{
int k = 0;
@@ -397,7 +398,7 @@ void Setup_Input::fixTranslation(SetupActionData *const actionDatas,
}
}
-void Setup_Input::fixTranslations() const
+void Setup_Input::fixTranslations()
{
fixTranslation(setupActionData1, static_cast<int>(Input::KEY_SHORTCUT_1),
static_cast<int>(Input::KEY_SHORTCUT_20), "Item Shortcut %d");
diff --git a/src/gui/widgets/tabs/setup_input.h b/src/gui/widgets/tabs/setup_input.h
index cb2e5cac0..135cb3339 100644
--- a/src/gui/widgets/tabs/setup_input.h
+++ b/src/gui/widgets/tabs/setup_input.h
@@ -82,11 +82,12 @@ class Setup_Input final : public SetupTab
std::string keyToString(const int index) const A_WARN_UNUSED;
private:
- void fixTranslations() const;
+ static void fixTranslations();
- void fixTranslation(SetupActionData *const actionDatas,
- const int actionStart, const int actionEnd,
- const std::string &text) const;
+ static void fixTranslation(SetupActionData *const actionDatas,
+ const int actionStart,
+ const int actionEnd,
+ const std::string &text);
KeyListModel *mKeyListModel;
ListBox *mKeyList;
diff --git a/src/gui/widgets/tabs/setup_visual.cpp b/src/gui/widgets/tabs/setup_visual.cpp
index 8d79fdaa0..ac608f756 100644
--- a/src/gui/widgets/tabs/setup_visual.cpp
+++ b/src/gui/widgets/tabs/setup_visual.cpp
@@ -88,7 +88,7 @@ Setup_Visual::Setup_Visual(const Widget2 *const widget) :
mParticleList(new SetupItemNames),
mParticleTypeList(new NamesModel),
mVSyncList(new NamesModel),
- mScaleList(new SetupItemNames)
+ mScaleList(new NamesModel)
{
// TRANSLATORS: settings tab name
setName(_("Visual"));
@@ -105,11 +105,11 @@ Setup_Visual::Setup_Visual(const Widget2 *const widget) :
for (int f = 1; f <= 7; f ++)
{
// TRANSLATORS: particle details
- mScaleList->push_back(toString(f) + "x");
+ mScaleList->add(toString(f) + "x");
}
- new SetupItemSlider2(_("Scale "), "", "scale",
- this, "scaleEvent", 1, 7,
- mScaleList, true);
+ // TRANSLATORS: settings option
+ new SetupItemSliderInt(_("Scale"), "",
+ "scale", this, "scaleEvent", mScaleList, 1);
// TRANSLATORS: settings option
new SetupItemLabel(_("Notifications"), "", this);
diff --git a/src/gui/widgets/tabs/setup_visual.h b/src/gui/widgets/tabs/setup_visual.h
index 8aef0d294..2d40d3a08 100644
--- a/src/gui/widgets/tabs/setup_visual.h
+++ b/src/gui/widgets/tabs/setup_visual.h
@@ -43,7 +43,7 @@ class Setup_Visual final : public SetupTabScroll
SetupItemNames *mParticleList;
NamesModel *mParticleTypeList;
NamesModel *mVSyncList;
- SetupItemNames *mScaleList;
+ NamesModel *mScaleList;
};
#endif // GUI_WIDGETS_TABS_SETUP_VISUAL_H
diff --git a/src/gui/widgets/tabs/setuptabscroll.h b/src/gui/widgets/tabs/setuptabscroll.h
index e3d495690..fb7de574d 100644
--- a/src/gui/widgets/tabs/setuptabscroll.h
+++ b/src/gui/widgets/tabs/setuptabscroll.h
@@ -60,7 +60,7 @@ class SetupTabScroll : public SetupTab
override final
{ }
- int getPreferredFirstItemSize() A_WARN_UNUSED
+ int getPreferredFirstItemSize() const A_WARN_UNUSED
{ return mPreferredFirstItemSize; }
void widgetResized(const gcn::Event &event) override final;
diff --git a/src/gui/widgets/tabs/whispertab.cpp b/src/gui/widgets/tabs/whispertab.cpp
index 659704638..ec02bb70f 100644
--- a/src/gui/widgets/tabs/whispertab.cpp
+++ b/src/gui/widgets/tabs/whispertab.cpp
@@ -32,8 +32,6 @@
#include "gui/widgets/windowcontainer.h"
-#include "utils/gettext.h"
-
#include "debug.h"
WhisperTab::WhisperTab(const Widget2 *const widget, const std::string &nick) :
@@ -52,10 +50,7 @@ WhisperTab::~WhisperTab()
void WhisperTab::handleInput(const std::string &msg)
{
std::string newMsg;
- if (chatWindow)
- newMsg = chatWindow->doReplace(msg);
- else
- newMsg = msg;
+ newMsg = ChatWindow::doReplace(msg);
Net::getChatHandler()->privateMessage(mNick, newMsg);
if (player_node)
@@ -92,50 +87,10 @@ void WhisperTab::handleCommand(const std::string &msg)
}
}
-void WhisperTab::showHelp()
-{
- // TRANSLATORS: whisper tab help
- chatLog(_("/ignore > Ignore the other player"));
- // TRANSLATORS: whisper tab help
- chatLog(_("/unignore > Stop ignoring the other player"));
- // TRANSLATORS: whisper tab help
- chatLog(_("/close > Close the whisper tab"));
-}
-
bool WhisperTab::handleCommand(const std::string &restrict type,
- const std::string &restrict args)
+ const std::string &restrict args A_UNUSED)
{
- if (type == "help")
- {
- if (args == "close")
- {
- // TRANSLATORS: whisper tab help
- chatLog(_("Command: /close"));
- // TRANSLATORS: whisper tab help
- chatLog(_("This command closes the current whisper tab."));
- }
- else if (args == "ignore")
- {
- // TRANSLATORS: whisper tab help
- chatLog(_("Command: /ignore"));
- // TRANSLATORS: whisper tab help
- chatLog(_("This command ignores the other player regardless of "
- "current relations."));
- }
- else if (args == "unignore")
- {
- // TRANSLATORS: whisper tab help
- chatLog(_("Command: /unignore <player>"));
- // TRANSLATORS: whisper tab help
- chatLog(_("This command stops ignoring the other player if they "
- "are being ignored."));
- }
- else
- {
- return false;
- }
- }
- else if (type == "close")
+ if (type == "close")
{
if (windowContainer)
windowContainer->scheduleDelete(this);
diff --git a/src/gui/widgets/tabs/whispertab.h b/src/gui/widgets/tabs/whispertab.h
index b3936ab01..5dbb05a4e 100644
--- a/src/gui/widgets/tabs/whispertab.h
+++ b/src/gui/widgets/tabs/whispertab.h
@@ -36,8 +36,6 @@ class WhisperTab final : public ChatTab
const std::string &getNick() const A_WARN_UNUSED
{ return mNick; }
- void showHelp() override final;
-
bool handleCommand(const std::string &restrict type,
const std::string &restrict args) override final;
diff --git a/src/gui/widgets/textfield.cpp b/src/gui/widgets/textfield.cpp
index 41084c867..269ace775 100644
--- a/src/gui/widgets/textfield.cpp
+++ b/src/gui/widgets/textfield.cpp
@@ -116,7 +116,7 @@ TextField::~TextField()
if (theme)
{
theme->unload(mSkin);
- theme->unloadRect(skin);
+ Theme::unloadRect(skin);
}
}
}
@@ -745,7 +745,7 @@ void TextField::mousePressed(gcn::MouseEvent &mouseEvent)
{
int x = 0;
int y = 0;
- gui->getMouseState(&x, &y);
+ Gui::getMouseState(&x, &y);
mPopupMenu->showTextFieldPopup(x, y, this);
}
}
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp
index cd00d2568..36372dcaa 100644
--- a/src/gui/widgets/window.cpp
+++ b/src/gui/widgets/window.cpp
@@ -1059,6 +1059,28 @@ void Window::adjustPositionAfterResize(const int oldScreenWidth,
}
ensureOnScreen();
+ adjustSizeToScreen();
+}
+
+void Window::adjustSizeToScreen()
+{
+ if (!mGrip)
+ return;
+
+ const int screenWidth = mainGraphics->mWidth;
+ const int screenHeight = mainGraphics->mHeight;
+ const int oldWidth = mDimension.width;
+ const int oldHeight = mDimension.height;
+ if (oldWidth + mDimension.x > screenWidth)
+ mDimension.x = 0;
+ if (oldHeight + mDimension.y > screenHeight)
+ mDimension.x = 0;
+ if (mDimension.width > screenWidth)
+ mDimension.width = screenWidth;
+ if (mDimension.height > screenHeight)
+ mDimension.height = screenHeight;
+ if (oldWidth != mDimension.width || oldHeight != mDimension.height)
+ widgetResized(gcn::Event(this));
}
int Window::getResizeHandles(const gcn::MouseEvent &event)
diff --git a/src/gui/widgets/window.h b/src/gui/widgets/window.h
index 757ec8c58..bb0f19bb3 100644
--- a/src/gui/widgets/window.h
+++ b/src/gui/widgets/window.h
@@ -465,6 +465,8 @@ class Window : public gcn::Window,
*/
void ensureOnScreen();
+ void adjustSizeToScreen();
+
/**
* Determines if the mouse is in a resize area and returns appropriate
* resize handles. Also initializes drag offset in case the resize
diff --git a/src/gui/windows/chatwindow.cpp b/src/gui/windows/chatwindow.cpp
index 6af18ff06..26f665052 100644
--- a/src/gui/windows/chatwindow.cpp
+++ b/src/gui/windows/chatwindow.cpp
@@ -43,7 +43,8 @@
#include "gui/viewport.h"
#include "gui/windows/emotewindow.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
+#include "gui/widgets/tabbedarea.h"
#include "gui/windows/whoisonline.h"
#include "gui/widgets/tabs/battletab.h"
@@ -452,7 +453,7 @@ ChatTab *ChatWindow::getFocused() const
return static_cast<ChatTab*>(mChatTabs->getSelectedTab());
}
-void ChatWindow::clearTab(ChatTab *const tab) const
+void ChatWindow::clearTab(ChatTab *const tab)
{
if (tab)
tab->clearText();
@@ -1312,7 +1313,6 @@ void ChatWindow::autoComplete()
const int caretPos = mChatInput->getCaretPosition();
int startName = 0;
const std::string inputText = mChatInput->getText();
- bool needSecure(false);
std::string name = inputText.substr(0, caretPos);
for (int f = caretPos - 1; f > -1; f --)
@@ -1335,15 +1335,21 @@ void ChatWindow::autoComplete()
if (cTab)
cTab->getAutoCompleteList(nameList);
std::string newName = autoComplete(nameList, name);
- if (!newName.empty())
- needSecure = true;
+ if (!newName.empty() && !startName)
+ secureChatCommand(newName);
+
+ if (cTab && newName.empty())
+ {
+ cTab->getAutoCompleteCommands(nameList);
+ newName = autoComplete(nameList, name);
+ }
if (newName.empty() && actorManager)
{
actorManager->getPlayerNames(nameList, true);
newName = autoComplete(nameList, name);
- if (!newName.empty())
- needSecure = true;
+ if (!newName.empty() && !startName)
+ secureChatCommand(newName);
}
if (newName.empty())
newName = autoCompleteHistory(name);
@@ -1366,11 +1372,6 @@ void ChatWindow::autoComplete()
if (!newName.empty())
{
- if (!startName && needSecure && (newName[0] == '/'
- || newName[0] == '@' || newName[0] == '#'))
- {
- newName = "_" + newName;
- }
mChatInput->setText(inputText.substr(0, startName).append(newName)
.append(inputText.substr(caretPos,
inputText.length() - caretPos)));
@@ -1386,7 +1387,7 @@ void ChatWindow::autoComplete()
}
std::string ChatWindow::autoComplete(StringVect &names,
- std::string partName) const
+ std::string partName)
{
StringVectCIter i = names.begin();
const StringVectCIter i_end = names.end();
@@ -1770,7 +1771,7 @@ void ChatWindow::saveState() const
}
}
-std::string ChatWindow::doReplace(const std::string &msg) const
+std::string ChatWindow::doReplace(const std::string &msg)
{
std::string str = msg;
replaceSpecialChars(str);
@@ -1918,7 +1919,7 @@ void ChatWindow::updateVisibility()
int mouseY = 0;
int x = 0;
int y = 0;
- gui->getMouseState(&mouseX, &mouseY);
+ Gui::getMouseState(&mouseX, &mouseY);
getAbsolutePosition(x, y);
if (mChatInput->isVisible())
{
diff --git a/src/gui/windows/chatwindow.h b/src/gui/windows/chatwindow.h
index c000215f1..3093c52e9 100644
--- a/src/gui/windows/chatwindow.h
+++ b/src/gui/windows/chatwindow.h
@@ -109,7 +109,7 @@ class ChatWindow final : public Window,
/**
* Clear the given tab.
*/
- void clearTab(ChatTab *const tab) const;
+ static void clearTab(ChatTab *const tab);
/**
* Clear the current tab.
@@ -253,7 +253,7 @@ class ChatWindow final : public Window,
void loadGMCommands();
- std::string doReplace(const std::string &msg) const A_WARN_UNUSED;
+ static std::string doReplace(const std::string &msg) A_WARN_UNUSED;
void adjustTabSize();
@@ -328,8 +328,8 @@ class ChatWindow final : public Window,
std::string autoComplete(const std::string &partName,
History *const words) const;
- std::string autoComplete(StringVect &names,
- std::string partName) const;
+ static std::string autoComplete(StringVect &names,
+ std::string partName);
/** Used for showing item popup on clicking links **/
ItemLinkHandler *mItemLinkHandler;
diff --git a/src/gui/windows/debugwindow.cpp b/src/gui/windows/debugwindow.cpp
index 02a79d0de..30d202054 100644
--- a/src/gui/windows/debugwindow.cpp
+++ b/src/gui/windows/debugwindow.cpp
@@ -31,11 +31,12 @@
#include "gui/viewport.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/widgets/label.h"
#include "gui/widgets/layout.h"
#include "gui/widgets/layouthelper.h"
+#include "gui/widgets/tabbedarea.h"
#include "resources/imagehelper.h"
diff --git a/src/gui/windows/didyouknowwindow.cpp b/src/gui/windows/didyouknowwindow.cpp
index 37c970562..93166e6fa 100644
--- a/src/gui/windows/didyouknowwindow.cpp
+++ b/src/gui/windows/didyouknowwindow.cpp
@@ -26,7 +26,7 @@
#include "gui/sdlfont.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/widgets/button.h"
#include "gui/widgets/browserbox.h"
diff --git a/src/gui/windows/equipmentwindow.cpp b/src/gui/windows/equipmentwindow.cpp
index 621f5e537..3b97e12d7 100644
--- a/src/gui/windows/equipmentwindow.cpp
+++ b/src/gui/windows/equipmentwindow.cpp
@@ -36,7 +36,7 @@
#include "gui/popups/itempopup.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/widgets/button.h"
#include "gui/widgets/playerbox.h"
@@ -552,7 +552,7 @@ void EquipmentWindow::loadSlot(const XmlNodePtr slotNode,
mMaxY = y + mBoxSize;
}
-int EquipmentWindow::parseSlotName(const std::string &name) const
+int EquipmentWindow::parseSlotName(const std::string &name)
{
int id = -1;
if (name == "shoes" || name == "boot" || name == "boots")
diff --git a/src/gui/windows/equipmentwindow.h b/src/gui/windows/equipmentwindow.h
index d291a5f81..7387fb249 100644
--- a/src/gui/windows/equipmentwindow.h
+++ b/src/gui/windows/equipmentwindow.h
@@ -122,7 +122,7 @@ class EquipmentWindow final : public Window, public gcn::ActionListener
void loadSlot(const XmlNodePtr slotNode,
const ImageSet *const imageset);
- int parseSlotName(const std::string &name) const A_WARN_UNUSED;
+ static int parseSlotName(const std::string &name) A_WARN_UNUSED;
Equipment *mEquipment;
diff --git a/src/gui/windows/helpwindow.cpp b/src/gui/windows/helpwindow.cpp
index 854ac8cbd..eb2300e0e 100644
--- a/src/gui/windows/helpwindow.cpp
+++ b/src/gui/windows/helpwindow.cpp
@@ -27,7 +27,7 @@
#include "gui/sdlfont.h"
#include "gui/windows/didyouknowwindow.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/widgets/button.h"
#include "gui/widgets/browserbox.h"
diff --git a/src/gui/windows/inventorywindow.cpp b/src/gui/windows/inventorywindow.cpp
index 02b30aed7..6fd2ab95b 100644
--- a/src/gui/windows/inventorywindow.cpp
+++ b/src/gui/windows/inventorywindow.cpp
@@ -38,7 +38,7 @@
#include "gui/windows/equipmentwindow.h"
#include "gui/windows/itemamountwindow.h"
#include "gui/windows/outfitwindow.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/windows/shopwindow.h"
#include "gui/windows/tradewindow.h"
diff --git a/src/gui/windows/minimap.cpp b/src/gui/windows/minimap.cpp
index 177be8a74..02be64a13 100644
--- a/src/gui/windows/minimap.cpp
+++ b/src/gui/windows/minimap.cpp
@@ -33,7 +33,7 @@
#include "gui/popups/textpopup.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "resources/image.h"
#include "resources/imagehelper.h"
diff --git a/src/gui/windows/outfitwindow.cpp b/src/gui/windows/outfitwindow.cpp
index c5df4b652..d686056ac 100644
--- a/src/gui/windows/outfitwindow.cpp
+++ b/src/gui/windows/outfitwindow.cpp
@@ -524,7 +524,7 @@ void OutfitWindow::unequipNotInOutfit(const int outfit) const
}
}
-std::string OutfitWindow::keyName(const int number) const
+std::string OutfitWindow::keyName(const int number)
{
if (number < 0 || number >= SHORTCUT_EMOTES)
return "";
diff --git a/src/gui/windows/outfitwindow.h b/src/gui/windows/outfitwindow.h
index 4f6e5c0bf..eeedc2ec6 100644
--- a/src/gui/windows/outfitwindow.h
+++ b/src/gui/windows/outfitwindow.h
@@ -89,7 +89,7 @@ class OutfitWindow final : public Window,
void showCurrentOutfit();
- std::string keyName(const int number) const A_WARN_UNUSED;
+ static std::string keyName(const int number) A_WARN_UNUSED;
void clearCurrentOutfit();
diff --git a/src/gui/windows/setup.cpp b/src/gui/windows/setupwindow.cpp
index d0ecc2d6d..0780865aa 100644
--- a/src/gui/windows/setup.cpp
+++ b/src/gui/windows/setupwindow.cpp
@@ -20,7 +20,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "configuration.h"
#include "game.h"
@@ -45,6 +45,7 @@
#include "gui/widgets/tabs/setup_visual.h"
#include "gui/widgets/label.h"
+#include "gui/widgets/tabbedarea.h"
#include "utils/dtor.h"
#include "utils/gettext.h"
@@ -52,9 +53,9 @@
#include "debug.h"
extern Window *statusWindow;
-Setup *setupWindow = nullptr;
+SetupWindow *setupWindow = nullptr;
-Setup::Setup() :
+SetupWindow::SetupWindow() :
// TRANSLATORS: setup window name
Window(_("Setup"), false, nullptr, "setup.xml"),
gcn::ActionListener(),
@@ -72,7 +73,7 @@ Setup::Setup() :
setStickyButtonLock(true);
}
-void Setup::postInit()
+void SetupWindow::postInit()
{
int width = 620;
const int height = 450;
@@ -153,13 +154,13 @@ void Setup::postInit()
enableVisibleSound(true);
}
-Setup::~Setup()
+SetupWindow::~SetupWindow()
{
delete_all(mTabs);
mButtons.clear();
}
-void Setup::action(const gcn::ActionEvent &event)
+void SetupWindow::action(const gcn::ActionEvent &event)
{
if (Game::instance())
Game::instance()->resetAdjustLevel();
@@ -196,12 +197,12 @@ void Setup::action(const gcn::ActionEvent &event)
}
}
-void Setup::setInGame(const bool inGame)
+void SetupWindow::setInGame(const bool inGame)
{
mResetWindows->setEnabled(inGame);
}
-void Setup::externalUpdate()
+void SetupWindow::externalUpdate()
{
unloadModTab();
mModsTab = new Setup_Mods(this);
@@ -214,7 +215,7 @@ void Setup::externalUpdate()
}
}
-void Setup::unloadModTab()
+void SetupWindow::unloadModTab()
{
if (mModsTab)
{
@@ -226,7 +227,7 @@ void Setup::unloadModTab()
}
}
-void Setup::externalUnload()
+void SetupWindow::externalUnload()
{
FOR_EACH (std::list<SetupTab*>::const_iterator, it, mTabs)
{
@@ -236,30 +237,30 @@ void Setup::externalUnload()
unloadModTab();
}
-void Setup::registerWindowForReset(Window *const window)
+void SetupWindow::registerWindowForReset(Window *const window)
{
mWindowsToReset.push_back(window);
}
-void Setup::doCancel()
+void SetupWindow::doCancel()
{
setVisible(false);
for_each(mTabs.begin(), mTabs.end(), std::mem_fun(&SetupTab::cancel));
}
-void Setup::activateTab(const std::string &name)
+void SetupWindow::activateTab(const std::string &name)
{
std::string tmp = gettext(name.c_str());
mPanel->setSelectedTabByName(tmp);
}
-void Setup::setVisible(bool visible)
+void SetupWindow::setVisible(bool visible)
{
touchManager.setTempHide(visible);
Window::setVisible(visible);
}
-void Setup::widgetResized(const gcn::Event &event)
+void SetupWindow::widgetResized(const gcn::Event &event)
{
Window::widgetResized(event);
diff --git a/src/gui/windows/setup.h b/src/gui/windows/setupwindow.h
index 4c9ab2fb7..f5406e8ac 100644
--- a/src/gui/windows/setup.h
+++ b/src/gui/windows/setupwindow.h
@@ -20,10 +20,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef GUI_WINDOWS_SETUP_H
-#define GUI_WINDOWS_SETUP_H
-
-#include "gui/widgets/tabbedarea.h"
+#ifndef GUI_WINDOWS_SETUPWINDOW_H
+#define GUI_WINDOWS_SETUPWINDOW_H
#include "gui/widgets/window.h"
@@ -31,8 +29,10 @@
#include <list>
+class Button;
class Label;
class SetupTab;
+class TabbedArea;
/**
* The setup dialog. Displays several tabs for configuring different aspects
@@ -40,14 +40,15 @@ class SetupTab;
*
* \ingroup GUI
*/
-class Setup final : public Window, public gcn::ActionListener
+class SetupWindow final : public Window,
+ public gcn::ActionListener
{
public:
- Setup();
+ SetupWindow();
- A_DELETE_COPY(Setup)
+ A_DELETE_COPY(SetupWindow)
- ~Setup();
+ ~SetupWindow();
void postInit() override final;
@@ -84,6 +85,6 @@ class Setup final : public Window, public gcn::ActionListener
Label *mVersion;
};
-extern Setup* setupWindow;
+extern SetupWindow* setupWindow;
-#endif // GUI_WINDOWS_SETUP_H
+#endif // GUI_WINDOWS_SETUPWINDOW_H
diff --git a/src/gui/windows/shopwindow.cpp b/src/gui/windows/shopwindow.cpp
index 48bfedb06..a940e4cdb 100644
--- a/src/gui/windows/shopwindow.cpp
+++ b/src/gui/windows/shopwindow.cpp
@@ -632,7 +632,7 @@ void ShopWindow::sendMessage(const std::string &nick,
chatWindow->addWhisper(nick, data, BY_PLAYER);
}
-void ShopWindow::showList(const std::string &nick, std::string data) const
+void ShopWindow::showList(const std::string &nick, std::string data)
{
BuyDialog *buyDialog = nullptr;
SellDialog *sellDialog = nullptr;
diff --git a/src/gui/windows/shopwindow.h b/src/gui/windows/shopwindow.h
index 590a05dcc..95eee1e05 100644
--- a/src/gui/windows/shopwindow.h
+++ b/src/gui/windows/shopwindow.h
@@ -121,7 +121,7 @@ class ShopWindow final : public Window,
void sendMessage(const std::string &nick, std::string data,
const bool random = false);
- void showList(const std::string &nick, std::string data) const;
+ static void showList(const std::string &nick, std::string data);
void processRequest(const std::string &nick, std::string data,
const int mode);
diff --git a/src/gui/windows/shortcutwindow.cpp b/src/gui/windows/shortcutwindow.cpp
index 1d9fa88c2..96ec8c93c 100644
--- a/src/gui/windows/shortcutwindow.cpp
+++ b/src/gui/windows/shortcutwindow.cpp
@@ -22,7 +22,8 @@
#include "gui/windows/shortcutwindow.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
+#include "gui/widgets/tabbedarea.h"
#include "gui/widgets/layout.h"
#include "gui/widgets/scrollarea.h"
@@ -234,6 +235,18 @@ void ShortcutWindow::widgetMoved(const gcn::Event& event)
(*it)->setRedraw(true);
}
+void ShortcutWindow::nextTab()
+{
+ if (mTabs)
+ mTabs->selectNextTab();
+}
+
+void ShortcutWindow::prevTab()
+{
+ if (mTabs)
+ mTabs->selectPrevTab();
+}
+
#ifdef USE_PROFILER
void ShortcutWindow::logicChildren()
{
diff --git a/src/gui/windows/shortcutwindow.h b/src/gui/windows/shortcutwindow.h
index b7d7f70a1..f4c417c94 100644
--- a/src/gui/windows/shortcutwindow.h
+++ b/src/gui/windows/shortcutwindow.h
@@ -68,6 +68,10 @@ class ShortcutWindow final : public Window
void mouseDragged(gcn::MouseEvent &event) override final;
+ void nextTab();
+
+ void prevTab();
+
#ifdef USE_PROFILER
void logicChildren();
#endif
diff --git a/src/gui/windows/skilldialog.cpp b/src/gui/windows/skilldialog.cpp
index 197c60a90..04baad26a 100644
--- a/src/gui/windows/skilldialog.cpp
+++ b/src/gui/windows/skilldialog.cpp
@@ -33,7 +33,7 @@
#include "gui/popups/textpopup.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/windows/shortcutwindow.h"
#include "gui/widgets/button.h"
diff --git a/src/gui/windows/socialwindow.cpp b/src/gui/windows/socialwindow.cpp
index 1c6b85153..2385066be 100644
--- a/src/gui/windows/socialwindow.cpp
+++ b/src/gui/windows/socialwindow.cpp
@@ -35,7 +35,7 @@
#include "gui/windows/confirmdialog.h"
#include "gui/windows/okdialog.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/windows/textdialog.h"
#include "gui/windows/whoisonline.h"
@@ -46,6 +46,7 @@
#include "gui/widgets/label.h"
#include "gui/widgets/popup.h"
#include "gui/widgets/scrollarea.h"
+#include "gui/widgets/tabbedarea.h"
#include "gui/widgets/tabs/chattab.h"
@@ -1276,6 +1277,7 @@ SocialWindow::SocialWindow() :
// TRANSLATORS: social window name
Window(_("Social"), false, nullptr, "social.xml"),
gcn::ActionListener(),
+ PlayerRelationsListener(),
mGuildInvited(0),
mGuildAcceptDialog(nullptr),
mGuildCreateDialog(nullptr),
@@ -1372,10 +1374,12 @@ void SocialWindow::postInit()
enableVisibleSound(true);
updateButtons();
+ player_relations.addListener(this);
}
SocialWindow::~SocialWindow()
{
+ player_relations.removeListener(this);
if (mGuildAcceptDialog)
{
mGuildAcceptDialog->close();
@@ -1740,6 +1744,7 @@ void SocialWindow::slowLogic()
const unsigned int nowTime = cur_time;
if (mNeedUpdate && nowTime - mLastUpdateTime > 1)
{
+ logger->log("soc update");
mPlayers->updateList();
mFriends->updateList();
mNeedUpdate = false;
@@ -1819,30 +1824,14 @@ void SocialWindow::removePortal(const int x, const int y)
void SocialWindow::nextTab()
{
- if (!mTabs)
- return;
-
- int tab = mTabs->getSelectedTabIndex();
-
- tab++;
- if (tab == mTabs->getNumberOfTabs())
- tab = 0;
-
- mTabs->setSelectedTabByIndex(tab);
+ if (mTabs)
+ mTabs->selectNextTab();
}
void SocialWindow::prevTab()
{
- if (!mTabs)
- return;
-
- int tab = mTabs->getSelectedTabIndex();
-
- if (tab == 0)
- tab = mTabs->getNumberOfTabs();
- tab--;
-
- mTabs->setSelectedTabByIndex(tab);
+ if (mTabs)
+ mTabs->selectPrevTab();
}
void SocialWindow::updateAttackFilter()
@@ -1908,6 +1897,16 @@ void SocialWindow::updateGuildCounter(const int online, const int total)
}
}
+void SocialWindow::updatedPlayer(const std::string &name A_UNUSED)
+{
+ mNeedUpdate = true;
+}
+
+void SocialWindow::updateAll()
+{
+ mNeedUpdate = true;
+}
+
#ifdef USE_PROFILER
void SocialWindow::logicChildren()
{
diff --git a/src/gui/windows/socialwindow.h b/src/gui/windows/socialwindow.h
index 018b5f32c..e8dc44043 100644
--- a/src/gui/windows/socialwindow.h
+++ b/src/gui/windows/socialwindow.h
@@ -24,6 +24,8 @@
#include "gui/widgets/window.h"
+#include "being/playerrelationslistener.h"
+
#include <guichan/actionlistener.hpp>
#include <string>
@@ -45,7 +47,9 @@ class TextDialog;
*
* \ingroup Interface
*/
-class SocialWindow final : public Window, private gcn::ActionListener
+class SocialWindow final : public Window,
+ private gcn::ActionListener,
+ public PlayerRelationsListener
{
public:
SocialWindow();
@@ -125,6 +129,10 @@ public:
void updateGuildCounter(const int online = 0, const int total = 0);
+ void updatedPlayer(const std::string &name);
+
+ void updateAll();
+
#ifdef USE_PROFILER
void logicChildren();
#endif
diff --git a/src/gui/windows/statuswindow.cpp b/src/gui/windows/statuswindow.cpp
index 567460927..80e86e66f 100644
--- a/src/gui/windows/statuswindow.cpp
+++ b/src/gui/windows/statuswindow.cpp
@@ -36,7 +36,7 @@
#include "gui/viewport.h"
#include "gui/windows/equipmentwindow.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/widgets/button.h"
#include "gui/widgets/label.h"
@@ -606,7 +606,7 @@ void StatusWindow::updateJobBar(ProgressBar *const bar, const bool percent)
}
void StatusWindow::updateProgressBar(ProgressBar *const bar, const int id,
- const bool percent) const
+ const bool percent)
{
const std::pair<int, int> exp = PlayerInfo::getStatExperience(id);
updateProgressBar(bar, exp.first, exp.second, percent);
@@ -733,10 +733,10 @@ void StatusWindow::updateStatusBar(ProgressBar *const bar,
player_node->getQuickDropCounterString()))
.append(translateLetter2(player_node->getPickUpTypeString()))
.append(" ").append(translateLetter2(
- player_node->getDebugPathString()))
+ LocalPlayer::getDebugPathString()))
.append(" ").append(translateLetter2(
player_node->getImitationModeString()))
- .append(translateLetter2(player_node->getCameraModeString()))
+ .append(translateLetter2(LocalPlayer::getCameraModeString()))
.append(translateLetter2(player_node->getAwayModeString())));
bar->setProgress(50);
diff --git a/src/gui/windows/statuswindow.h b/src/gui/windows/statuswindow.h
index 414449df0..94f1aaa65 100644
--- a/src/gui/windows/statuswindow.h
+++ b/src/gui/windows/statuswindow.h
@@ -79,8 +79,9 @@ class StatusWindow final : public Window,
const bool percent = true);
static void updateProgressBar(ProgressBar *const bar, const int value,
const int max, const bool percent);
- void updateProgressBar(ProgressBar *const bar, const int id,
- const bool percent = true) const;
+ static void updateProgressBar(ProgressBar *const bar,
+ const int id,
+ const bool percent = true);
void action(const gcn::ActionEvent &event) override;
diff --git a/src/gui/windows/tradewindow.cpp b/src/gui/windows/tradewindow.cpp
index dfdc53a5c..a379f0f28 100644
--- a/src/gui/windows/tradewindow.cpp
+++ b/src/gui/windows/tradewindow.cpp
@@ -35,7 +35,7 @@
#include "gui/windows/inventorywindow.h"
#include "gui/windows/itemamountwindow.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/widgets/button.h"
#include "gui/widgets/itemcontainer.h"
diff --git a/src/gui/windows/whoisonline.h b/src/gui/windows/whoisonline.h
index 1057f1898..10a8be4b5 100644
--- a/src/gui/windows/whoisonline.h
+++ b/src/gui/windows/whoisonline.h
@@ -153,7 +153,7 @@ public:
void readFromWeb();
- void setNeutralColor(OnlinePlayer *const player);
+ static void setNeutralColor(OnlinePlayer *const player);
void getPlayerNames(StringVect &names);
diff --git a/src/input/inputmanager.cpp b/src/input/inputmanager.cpp
index 090629aea..cc37001cc 100644
--- a/src/input/inputmanager.cpp
+++ b/src/input/inputmanager.cpp
@@ -44,7 +44,7 @@
#include "gui/windows/npcdialog.h"
#include "gui/windows/npcpostdialog.h"
#include "gui/windows/selldialog.h"
-#include "gui/windows/setup.h"
+#include "gui/windows/setupwindow.h"
#include "gui/windows/textdialog.h"
#include "gui/windows/tradewindow.h"
#include "gui/windows/quitdialog.h"
@@ -102,7 +102,7 @@ void InputManager::init()
update();
}
-void InputManager::update() const
+void InputManager::update()
{
keyboard.update();
if (joystick)
@@ -347,7 +347,7 @@ bool InputManager::isActionActive(const int index) const
return true;
}
-bool InputManager::isActionActive0(const int index) const
+bool InputManager::isActionActive0(const int index)
{
if (keyboard.isActionActive(index))
return true;
@@ -497,7 +497,7 @@ void InputManager::setNewKey(const SDL_Event &event, const int type)
{
int val = -1;
if (type == INPUT_KEYBOARD)
- val = keyboard.getKeyValueFromEvent(event);
+ val = KeyboardConfig::getKeyValueFromEvent(event);
else if (type == INPUT_JOYSTICK && joystick)
val = joystick->getButtonFromEvent(event);
@@ -651,7 +651,7 @@ bool InputManager::handleEvent(const SDL_Event &event)
return false;
}
-void InputManager::handleRepeat() const
+void InputManager::handleRepeat()
{
const int time = tick_time;
keyboard.handleRepeat(time);
diff --git a/src/input/inputmanager.h b/src/input/inputmanager.h
index ce662611a..630b52948 100644
--- a/src/input/inputmanager.h
+++ b/src/input/inputmanager.h
@@ -164,14 +164,14 @@ class InputManager final
bool handleAssignKey(const SDL_Event &event, const int type);
- void handleRepeat() const;
+ static void handleRepeat();
bool triggerAction(const KeysVector *const ptrs);
int getKeyIndex(const int value, const int grp,
const int type) const A_WARN_UNUSED;
- void update() const;
+ static void update();
void updateConditionMask();
@@ -180,7 +180,7 @@ class InputManager final
void executeAction(const int keyNum);
protected:
- bool isActionActive0(const int index) const A_WARN_UNUSED;
+ static bool isActionActive0(const int index) A_WARN_UNUSED;
Setup_Input *mSetupInput; /**< Reference to setup window */
diff --git a/src/input/keyboardconfig.cpp b/src/input/keyboardconfig.cpp
index 6cf524842..3756e27fb 100644
--- a/src/input/keyboardconfig.cpp
+++ b/src/input/keyboardconfig.cpp
@@ -59,7 +59,7 @@ void KeyboardConfig::deinit()
mActiveKeys2 = nullptr;
}
-int KeyboardConfig::getKeyValueFromEvent(const SDL_Event &event) const
+int KeyboardConfig::getKeyValueFromEvent(const SDL_Event &event)
{
#ifdef USE_SDL2
return event.key.keysym.scancode;
@@ -72,7 +72,7 @@ int KeyboardConfig::getKeyValueFromEvent(const SDL_Event &event) const
return 0;
}
-int KeyboardConfig::getKeyIndex(const SDL_Event &event, const int grp) const
+int KeyboardConfig::getKeyIndex(const SDL_Event &event, const int grp)
{
const int keyValue = getKeyValueFromEvent(event);
return inputManager.getKeyIndex(keyValue, grp, INPUT_KEYBOARD);
diff --git a/src/input/keyboardconfig.h b/src/input/keyboardconfig.h
index 5e8232508..7f7102964 100644
--- a/src/input/keyboardconfig.h
+++ b/src/input/keyboardconfig.h
@@ -56,8 +56,8 @@ class KeyboardConfig final
/**
* Get the key function index by providing the keys value.
*/
- int getKeyIndex(const SDL_Event &event,
- const int grp = 1) const A_WARN_UNUSED;
+ static int getKeyIndex(const SDL_Event &event,
+ const int grp = 1) A_WARN_UNUSED;
/**
* Set the enable flag, which will stop the user from doing actions.
@@ -75,7 +75,7 @@ class KeyboardConfig final
static SDLKey getKeyFromEvent(const SDL_Event &event) A_WARN_UNUSED;
- int getKeyValueFromEvent(const SDL_Event &event) const A_WARN_UNUSED;
+ static int getKeyValueFromEvent(const SDL_Event &event) A_WARN_UNUSED;
KeysVector *getActionVector(const SDL_Event &event) A_WARN_UNUSED;
diff --git a/src/input/keyboarddata.h b/src/input/keyboarddata.h
index c250b759e..e6bafb61b 100644
--- a/src/input/keyboarddata.h
+++ b/src/input/keyboarddata.h
@@ -2051,7 +2051,42 @@ static const KeyData keyData[Input::KEY_TOTAL] = {
Input::GRP_GUICHAN,
nullptr,
Input::KEY_NO_VALUE, 50,
- COND_DEFAULT}
+ COND_DEFAULT},
+ {"keyShortcutsPrevTab",
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ Input::GRP_DEFAULT | Input::GRP_GUI,
+ &ActionManager::prevShortcutsTab,
+ Input::KEY_NO_VALUE, 50,
+ COND_NOINPUT | COND_INGAME},
+ {"keyShortcutsNextTab",
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ Input::GRP_DEFAULT | Input::GRP_GUI,
+ &ActionManager::nextShortcutsTab,
+ Input::KEY_NO_VALUE, 50,
+ COND_NOINPUT | COND_INGAME},
+ {"keyCommandsPrevTab",
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ Input::GRP_DEFAULT | Input::GRP_GUI,
+ &ActionManager::prevCommandsTab,
+ Input::KEY_NO_VALUE, 50,
+ COND_NOINPUT | COND_INGAME},
+ {"keyCommandsNextTab",
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ Input::GRP_DEFAULT | Input::GRP_GUI,
+ &ActionManager::nextCommandsTab,
+ Input::KEY_NO_VALUE, 50,
+ COND_NOINPUT | COND_INGAME},
+ {"keyOpenTrade",
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ INPUT_UNKNOWN, Input::KEY_NO_VALUE,
+ Input::GRP_DEFAULT,
+ &ActionManager::openTrade,
+ Input::KEY_NO_VALUE, 50,
+ COND_GAME | COND_NOTARGET},
};
#endif // INPUT_KEYBOARDDATA_H
diff --git a/src/input/keydata.h b/src/input/keydata.h
index a0fb8341b..2ceb957c5 100644
--- a/src/input/keydata.h
+++ b/src/input/keydata.h
@@ -353,6 +353,11 @@ namespace Input
KEY_GUI_U,
KEY_GUI_V,
KEY_GUI_W,
+ KEY_PREV_SHORTCUTS_TAB,
+ KEY_NEXT_SHORTCUTS_TAB,
+ KEY_PREV_COMMANDS_TAB,
+ KEY_NEXT_COMMANDS_TAB,
+ KEY_OPEN_TRADE,
KEY_TOTAL
};
} // namespace Input
diff --git a/src/itemshortcut.h b/src/itemshortcut.h
index 2293a1583..b40ae87f1 100644
--- a/src/itemshortcut.h
+++ b/src/itemshortcut.h
@@ -72,7 +72,7 @@ class ItemShortcut final
/**
* Returns the amount of shortcut items.
*/
- int getItemCount() const A_WARN_UNUSED
+ static int getItemCount() A_WARN_UNUSED
{ return SHORTCUT_ITEMS; }
/**
diff --git a/src/main.h b/src/main.h
index 976b4e584..2035338a6 100644
--- a/src/main.h
+++ b/src/main.h
@@ -45,8 +45,8 @@
* different interfaces, which have different implementations for each server.
*/
-#define SMALL_VERSION "1.4.2.1"
-#define CHECK_VERSION "01.04.02.01"
+#define SMALL_VERSION "1.4.2.15"
+#define CHECK_VERSION "01.04.02.15"
#ifdef HAVE_CONFIG_H
#include "../config.h"
diff --git a/src/map.cpp b/src/map.cpp
index 0bbb21271..5dc1bfc0f 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -290,6 +290,8 @@ void Map::initializeAmbientLayers()
mForegrounds.push_back(new AmbientLayer(img,
getFloatProperty(name + "parallaxX", parallax),
getFloatProperty(name + "parallaxY", parallax),
+ getFloatProperty(name + "posX"),
+ getFloatProperty(name + "posY"),
getFloatProperty(name + "scrollX"),
getFloatProperty(name + "scrollY"),
getBoolProperty(name + "keepratio"),
@@ -317,6 +319,8 @@ void Map::initializeAmbientLayers()
mForegrounds.push_back(new AmbientLayer(img,
getFloatProperty(name + "parallaxX", parallax),
getFloatProperty(name + "parallaxY", parallax),
+ getFloatProperty(name + "posX"),
+ getFloatProperty(name + "posY"),
getFloatProperty(name + "scrollX"),
getFloatProperty(name + "scrollY"),
getBoolProperty(name + "keepratio"),
@@ -738,7 +742,7 @@ bool Map::getWalk(const int x, const int y, const unsigned char walkmask) const
return !(mMetaTiles[x + y * mWidth].blockmask & walkmask);
}
-unsigned char Map::getBlockMask(const int x, const int y)
+unsigned char Map::getBlockMask(const int x, const int y) const
{
// You can't walk outside of the map
if (x < 0 || y < 0 || x >= mWidth || y >= mHeight)
diff --git a/src/map.h b/src/map.h
index 9c9d0100f..26303da7a 100644
--- a/src/map.h
+++ b/src/map.h
@@ -240,7 +240,7 @@ class Map final : public Properties, public ConfigListener
void setWalk(const int x, const int y, const bool walkable);
- unsigned char getBlockMask(const int x, const int y);
+ unsigned char getBlockMask(const int x, const int y) const;
/**
* Returns the width of this map in tiles.
diff --git a/src/maplayer.cpp b/src/maplayer.cpp
index 2bb7884d8..3da8ba7d9 100644
--- a/src/maplayer.cpp
+++ b/src/maplayer.cpp
@@ -548,7 +548,8 @@ void MapLayer::drawFringe(Graphics *const graphics, int startX, int startY,
}
int MapLayer::getTileDrawWidth(const Image *img,
- const int endX, int &width) const
+ const int endX,
+ int &width)
{
BLOCK_START("MapLayer::getTileDrawWidth")
const Image *const img1 = img;
diff --git a/src/maplayer.h b/src/maplayer.h
index 697f52c89..dcfdb991e 100644
--- a/src/maplayer.h
+++ b/src/maplayer.h
@@ -177,8 +177,9 @@ class MapLayer final: public ConfigListener
void optionChanged(const std::string &value) override final;
- int getTileDrawWidth(const Image *img,
- const int endX, int &width) const A_WARN_UNUSED;
+ static int getTileDrawWidth(const Image *img,
+ const int endX,
+ int &width) A_WARN_UNUSED;
private:
int mX;
diff --git a/src/mumblemanager.cpp b/src/mumblemanager.cpp
index 43b10b76b..7a2337b7e 100644
--- a/src/mumblemanager.cpp
+++ b/src/mumblemanager.cpp
@@ -56,7 +56,7 @@ MumbleManager::~MumbleManager()
}
}
-uint16_t MumbleManager::getMapId(std::string mapName) const
+uint16_t MumbleManager::getMapId(std::string mapName)
{
uint16_t res = 0;
if (mapName.size() != 5 || mapName[3] != '-')
diff --git a/src/mumblemanager.h b/src/mumblemanager.h
index 12de869e4..4d76f0f54 100644
--- a/src/mumblemanager.h
+++ b/src/mumblemanager.h
@@ -60,7 +60,7 @@ class MumbleManager final
void setServer(const std::string &serverName);
private:
- uint16_t getMapId(std::string mapName) const A_WARN_UNUSED;
+ static uint16_t getMapId(std::string mapName) A_WARN_UNUSED;
void setMapBase(uint16_t mapid);
diff --git a/src/net/ea/gui/guildtab.cpp b/src/net/ea/gui/guildtab.cpp
index 6a801bba4..46b1f1649 100644
--- a/src/net/ea/gui/guildtab.cpp
+++ b/src/net/ea/gui/guildtab.cpp
@@ -63,28 +63,6 @@ GuildTab::~GuildTab()
bool GuildTab::handleCommand(const std::string &restrict type,
const std::string &restrict args)
{
- if (type == "help")
- {
- if (args == "invite")
- {
- // TRANSLATORS: guild chat help
- chatLog(_("Command: /invite <nick>"));
- // TRANSLATORS: guild chat help
- chatLog(_("This command invites <nick> to the guild you're in."));
- // TRANSLATORS: guild chat help
- chatLog(_("If the <nick> has spaces in it, enclose it in "
- "double quotes (\")."));
- }
- else if (args == "leave")
- {
- // TRANSLATORS: guild chat help
- chatLog(_("Command: /leave"));
- // TRANSLATORS: guild chat help
- chatLog(_("This command causes the player to leave the guild."));
- }
- else
- return false;
- }
/*
else if (type == "create" || type == "new")
{
@@ -94,7 +72,7 @@ bool GuildTab::handleCommand(const std::string &restrict type,
Net::getGuildHandler()->create(args);
}
*/
- else if (type == "invite" && taGuild)
+ if (type == "invite" && taGuild)
{
Net::getGuildHandler()->invite(taGuild->getId(), args);
}
@@ -127,34 +105,23 @@ void GuildTab::handleInput(const std::string &msg)
if (!taGuild)
return;
- if (chatWindow)
- {
- Net::getGuildHandler()->chat(taGuild->getId(),
- chatWindow->doReplace(msg));
- }
- else
- {
- Net::getGuildHandler()->chat(taGuild->getId(), msg);
- }
-}
-
-void GuildTab::showHelp()
-{
- // TRANSLATORS: guild chat help
- chatLog(_("/help > Display this help."));
- // TRANSLATORS: guild chat help
- chatLog(_("/invite > Invite a player to your guild"));
- // TRANSLATORS: guild chat help
- chatLog(_("/leave > Leave the guild you are in"));
- // TRANSLATORS: guild chat help
- chatLog(_("/kick > Kick someone from the guild you are in"));
+ Net::getGuildHandler()->chat(taGuild->getId(),
+ ChatWindow::doReplace(msg));
}
void GuildTab::getAutoCompleteList(StringVect &names) const
{
if (taGuild)
taGuild->getNames(names);
+}
+
+void GuildTab::getAutoCompleteCommands(StringVect &names) const
+{
+ names.push_back("/help");
+ names.push_back("/invite ");
+ names.push_back("/kick ");
names.push_back("/notice ");
+ names.push_back("/leave");
}
void GuildTab::saveToLogFile(const std::string &msg) const
diff --git a/src/net/ea/gui/guildtab.h b/src/net/ea/gui/guildtab.h
index 442ad62d0..2b6a4bd1a 100644
--- a/src/net/ea/gui/guildtab.h
+++ b/src/net/ea/gui/guildtab.h
@@ -43,8 +43,6 @@ class GuildTab : public ChatTab, public ConfigListener
bool handleCommand(const std::string &restrict type,
const std::string &restrict args) override final;
- void showHelp() override;
-
void saveToLogFile(const std::string &msg) const override final;
int getType() const override final A_WARN_UNUSED
@@ -58,6 +56,8 @@ class GuildTab : public ChatTab, public ConfigListener
void handleInput(const std::string &msg) override final;
void getAutoCompleteList(StringVect &names) const override final;
+
+ void getAutoCompleteCommands(StringVect &names) const override final;
};
} // namespace Ea
diff --git a/src/net/ea/gui/partytab.cpp b/src/net/ea/gui/partytab.cpp
index 76e204205..79a9a8897 100644
--- a/src/net/ea/gui/partytab.cpp
+++ b/src/net/ea/gui/partytab.cpp
@@ -64,90 +64,13 @@ PartyTab::~PartyTab()
void PartyTab::handleInput(const std::string &msg)
{
- if (chatWindow)
- Net::getPartyHandler()->chat(chatWindow->doReplace(msg));
- else
- Net::getPartyHandler()->chat(msg);
-}
-
-void PartyTab::showHelp()
-{
- // TRANSLATORS: party help message
- chatLog(_("/help > Display this help."));
- // TRANSLATORS: party help message
- chatLog(_("/invite > Invite a player to your party"));
- // TRANSLATORS: party help message
- chatLog(_("/leave > Leave the party you are in"));
- // TRANSLATORS: party help message
- chatLog(_("/kick > Kick someone from the party you are in"));
- // TRANSLATORS: party help message
- chatLog(_("/item > Show/change party item sharing options"));
- // TRANSLATORS: party help message
- chatLog(_("/exp > Show/change party experience sharing options"));
+ Net::getPartyHandler()->chat(ChatWindow::doReplace(msg));
}
bool PartyTab::handleCommand(const std::string &restrict type,
const std::string &restrict args)
{
- if (type == "help")
- {
- if (args == "invite")
- {
- // TRANSLATORS: party help message
- chatLog(_("Command: /invite <nick>"));
- // TRANSLATORS: party help message
- chatLog(_("This command invites <nick> to party with you."));
- // TRANSLATORS: party help message
- chatLog(_("If the <nick> has spaces in it, enclose it in "
- "double quotes (\")."));
- }
- else if (args == "leave")
- {
- // TRANSLATORS: party help message
- chatLog(_("Command: /leave"));
- // TRANSLATORS: party help message
- chatLog(_("This command causes the player to leave the party."));
- }
- else if (args == "item")
- {
- // TRANSLATORS: party help message
- chatLog(_("Command: /item <policy>"));
- // TRANSLATORS: party help message
- chatLog(
- _("This command changes the party's item sharing policy."));
- // TRANSLATORS: party help message
- chatLog(_("<policy> can be one of \"1\", \"yes\", \"true\" to "
- "enable item sharing, or \"0\", \"no\", \"false\" to "
- "disable item sharing."));
- // TRANSLATORS: party help message
- chatLog(_("Command: /item"));
- // TRANSLATORS: party help message
- chatLog(_("This command displays the party's"
- " current item sharing policy."));
- }
- else if (args == "exp")
- {
- // TRANSLATORS: party help message
- chatLog(_("Command: /exp <policy>"));
- // TRANSLATORS: party help message
- chatLog(_("This command changes the party's "
- "experience sharing policy."));
- // TRANSLATORS: party help message
- chatLog(_("<policy> can be one of \"1\", \"yes\", \"true\" to "
- "enable experience sharing, or \"0\","
- " \"no\", \"false\" to disable experience sharing."));
- // TRANSLATORS: party help message
- chatLog(_("Command: /exp"));
- // TRANSLATORS: party help message
- chatLog(_("This command displays the party's current "
- "experience sharing policy."));
- }
- else
- {
- return false;
- }
- }
- else if (type == "create" || type == "new")
+ if (type == "create" || type == "new")
{
if (args.empty())
{
@@ -278,6 +201,16 @@ void PartyTab::getAutoCompleteList(StringVect &names) const
p->getNames(names);
}
+void PartyTab::getAutoCompleteCommands(StringVect &names) const
+{
+ names.push_back("/help");
+ names.push_back("/invite ");
+ names.push_back("/leave");
+ names.push_back("/kick ");
+ names.push_back("/item");
+ names.push_back("/exp");
+}
+
void PartyTab::saveToLogFile(const std::string &msg) const
{
if (chatLogger)
diff --git a/src/net/ea/gui/partytab.h b/src/net/ea/gui/partytab.h
index a73fbaaeb..d141452d0 100644
--- a/src/net/ea/gui/partytab.h
+++ b/src/net/ea/gui/partytab.h
@@ -40,8 +40,6 @@ class PartyTab : public ChatTab, public ConfigListener
virtual ~PartyTab();
- void showHelp() override final;
-
bool handleCommand(const std::string &restrict type,
const std::string &restrict args) override final;
@@ -57,7 +55,9 @@ class PartyTab : public ChatTab, public ConfigListener
protected:
void handleInput(const std::string &msg) override final;
- virtual void getAutoCompleteList(StringVect&) const override final;
+ void getAutoCompleteList(StringVect&) const override final;
+
+ void getAutoCompleteCommands(StringVect &names) const override final;
};
extern PartyTab *partyTab;
diff --git a/src/net/ea/inventoryhandler.cpp b/src/net/ea/inventoryhandler.cpp
index 94b81adb0..74f0a4ba7 100644
--- a/src/net/ea/inventoryhandler.cpp
+++ b/src/net/ea/inventoryhandler.cpp
@@ -337,7 +337,7 @@ void InventoryHandler::processPlayerInventoryAdd(Net::MessageIn &msg)
}
}
-void InventoryHandler::processPlayerInventoryRemove(Net::MessageIn &msg) const
+void InventoryHandler::processPlayerInventoryRemove(Net::MessageIn &msg)
{
Inventory *const inventory = player_node
? PlayerInfo::getInventory() : nullptr;
@@ -357,7 +357,7 @@ void InventoryHandler::processPlayerInventoryRemove(Net::MessageIn &msg) const
}
}
-void InventoryHandler::processPlayerInventoryUse(Net::MessageIn &msg) const
+void InventoryHandler::processPlayerInventoryUse(Net::MessageIn &msg)
{
Inventory *const inventory = player_node
? PlayerInfo::getInventory() : nullptr;
@@ -380,7 +380,7 @@ void InventoryHandler::processPlayerInventoryUse(Net::MessageIn &msg) const
}
}
-void InventoryHandler::processItemUseResponse(Net::MessageIn &msg) const
+void InventoryHandler::processItemUseResponse(Net::MessageIn &msg)
{
Inventory *const inventory = player_node
? PlayerInfo::getInventory() : nullptr;
diff --git a/src/net/ea/inventoryhandler.h b/src/net/ea/inventoryhandler.h
index eea4dde12..6e8ecec38 100644
--- a/src/net/ea/inventoryhandler.h
+++ b/src/net/ea/inventoryhandler.h
@@ -180,11 +180,11 @@ class InventoryHandler : public Net::InventoryHandler
void processPlayerInventoryAdd(Net::MessageIn &msg);
- void processPlayerInventoryRemove(Net::MessageIn &msg) const;
+ static void processPlayerInventoryRemove(Net::MessageIn &msg);
- void processPlayerInventoryUse(Net::MessageIn &msg) const;
+ static void processPlayerInventoryUse(Net::MessageIn &msg);
- void processItemUseResponse(Net::MessageIn &msg) const;
+ static void processItemUseResponse(Net::MessageIn &msg);
void processPlayerStorageStatus(Net::MessageIn &msg);
diff --git a/src/net/ea/itemhandler.cpp b/src/net/ea/itemhandler.cpp
index aaab0ca3e..9ce85a59b 100644
--- a/src/net/ea/itemhandler.cpp
+++ b/src/net/ea/itemhandler.cpp
@@ -37,7 +37,7 @@ ItemHandler::~ItemHandler()
{
}
-void ItemHandler::processItemVisible(Net::MessageIn &msg) const
+void ItemHandler::processItemVisible(Net::MessageIn &msg)
{
const int id = msg.readInt32();
const int itemId = msg.readInt16();
@@ -55,7 +55,7 @@ void ItemHandler::processItemVisible(Net::MessageIn &msg) const
}
}
-void ItemHandler::processItemDropped(Net::MessageIn &msg) const
+void ItemHandler::processItemDropped(Net::MessageIn &msg)
{
const int id = msg.readInt32();
const int itemId = msg.readInt16();
@@ -73,7 +73,7 @@ void ItemHandler::processItemDropped(Net::MessageIn &msg) const
}
}
-void ItemHandler::processItemRemove(Net::MessageIn &msg) const
+void ItemHandler::processItemRemove(Net::MessageIn &msg)
{
if (actorManager)
{
diff --git a/src/net/ea/itemhandler.h b/src/net/ea/itemhandler.h
index 8b07789f9..6bc23fb10 100644
--- a/src/net/ea/itemhandler.h
+++ b/src/net/ea/itemhandler.h
@@ -37,11 +37,11 @@ class ItemHandler
virtual ~ItemHandler();
- void processItemVisible(Net::MessageIn &msg) const;
+ static void processItemVisible(Net::MessageIn &msg);
- void processItemRemove(Net::MessageIn &msg) const;
+ static void processItemRemove(Net::MessageIn &msg);
- void processItemDropped(Net::MessageIn &msg) const;
+ static void processItemDropped(Net::MessageIn &msg);
};
} // namespace Ea
diff --git a/src/net/ea/playerhandler.cpp b/src/net/ea/playerhandler.cpp
index c6d20573d..3e5db9169 100644
--- a/src/net/ea/playerhandler.cpp
+++ b/src/net/ea/playerhandler.cpp
@@ -124,7 +124,7 @@ Vector PlayerHandler::getDefaultWalkSpeed() const
return Vector(150, 150, 0);
}
-void PlayerHandler::processWalkResponse(Net::MessageIn &msg) const
+void PlayerHandler::processWalkResponse(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processWalkResponse")
/*
@@ -140,7 +140,7 @@ void PlayerHandler::processWalkResponse(Net::MessageIn &msg) const
BLOCK_END("PlayerHandler::processWalkResponse")
}
-void PlayerHandler::processPlayerWarp(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerWarp(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processPlayerWarp")
std::string mapPath = msg.readString(16);
@@ -216,7 +216,7 @@ void PlayerHandler::processPlayerWarp(Net::MessageIn &msg) const
BLOCK_END("PlayerHandler::processPlayerWarp")
}
-void PlayerHandler::processPlayerStatUpdate1(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerStatUpdate1(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processPlayerStatUpdate1")
const int type = msg.readInt16();
@@ -405,7 +405,7 @@ void PlayerHandler::processPlayerStatUpdate1(Net::MessageIn &msg) const
BLOCK_END("PlayerHandler::processPlayerStatUpdate1")
}
-void PlayerHandler::processPlayerStatUpdate2(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerStatUpdate2(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processPlayerStatUpdate2")
const int type = msg.readInt16();
@@ -450,7 +450,7 @@ void PlayerHandler::processPlayerStatUpdate2(Net::MessageIn &msg) const
BLOCK_END("PlayerHandler::processPlayerStatUpdate2")
}
-void PlayerHandler::processPlayerStatUpdate3(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerStatUpdate3(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processPlayerStatUpdate3")
const int type = msg.readInt32();
@@ -464,7 +464,7 @@ void PlayerHandler::processPlayerStatUpdate3(Net::MessageIn &msg) const
BLOCK_END("PlayerHandler::processPlayerStatUpdate3")
}
-void PlayerHandler::processPlayerStatUpdate4(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerStatUpdate4(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processPlayerStatUpdate4")
const int type = msg.readInt16();
@@ -484,7 +484,7 @@ void PlayerHandler::processPlayerStatUpdate4(Net::MessageIn &msg) const
BLOCK_END("PlayerHandler::processPlayerStatUpdate4")
}
-void PlayerHandler::processPlayerStatUpdate5(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerStatUpdate5(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processPlayerStatUpdate5")
PlayerInfo::setAttribute(PlayerInfo::CHAR_POINTS, msg.readInt16());
@@ -558,7 +558,7 @@ void PlayerHandler::processPlayerStatUpdate5(Net::MessageIn &msg) const
BLOCK_END("PlayerHandler::processPlayerStatUpdate5")
}
-void PlayerHandler::processPlayerStatUpdate6(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerStatUpdate6(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processPlayerStatUpdate6")
const int type = msg.readInt16();
@@ -593,7 +593,7 @@ void PlayerHandler::processPlayerStatUpdate6(Net::MessageIn &msg) const
BLOCK_END("PlayerHandler::processPlayerStatUpdate6")
}
-void PlayerHandler::processPlayerArrowMessage(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerArrowMessage(Net::MessageIn &msg)
{
BLOCK_START("PlayerHandler::processPlayerArrowMessage")
const int type = msg.readInt16();
diff --git a/src/net/ea/playerhandler.h b/src/net/ea/playerhandler.h
index 2bac97ac1..589874e2e 100644
--- a/src/net/ea/playerhandler.h
+++ b/src/net/ea/playerhandler.h
@@ -53,23 +53,23 @@ class PlayerHandler : public Net::PlayerHandler
int getAttackLocation() const override final A_WARN_UNUSED;
- void processWalkResponse(Net::MessageIn &msg) const;
+ static void processWalkResponse(Net::MessageIn &msg);
- void processPlayerWarp(Net::MessageIn &msg) const;
+ static void processPlayerWarp(Net::MessageIn &msg);
- void processPlayerStatUpdate1(Net::MessageIn &msg) const;
+ static void processPlayerStatUpdate1(Net::MessageIn &msg);
- void processPlayerStatUpdate2(Net::MessageIn &msg) const;
+ static void processPlayerStatUpdate2(Net::MessageIn &msg);
- void processPlayerStatUpdate3(Net::MessageIn &msg) const;
+ static void processPlayerStatUpdate3(Net::MessageIn &msg);
- void processPlayerStatUpdate4(Net::MessageIn &msg) const;
+ static void processPlayerStatUpdate4(Net::MessageIn &msg);
- void processPlayerStatUpdate5(Net::MessageIn &msg) const;
+ static void processPlayerStatUpdate5(Net::MessageIn &msg);
- void processPlayerStatUpdate6(Net::MessageIn &msg) const;
+ static void processPlayerStatUpdate6(Net::MessageIn &msg);
- void processPlayerArrowMessage(Net::MessageIn &msg) const;
+ static void processPlayerArrowMessage(Net::MessageIn &msg);
};
} // namespace Ea
diff --git a/src/net/ea/skillhandler.cpp b/src/net/ea/skillhandler.cpp
index 3f5b38c68..3a5a1ab75 100644
--- a/src/net/ea/skillhandler.cpp
+++ b/src/net/ea/skillhandler.cpp
@@ -71,7 +71,7 @@ SkillHandler::SkillHandler()
{
}
-void SkillHandler::processPlayerSkills(Net::MessageIn &msg) const
+void SkillHandler::processPlayerSkills(Net::MessageIn &msg)
{
msg.readInt16(); // length
const int skillCount = (msg.getLength() - 4) / 37;
@@ -101,7 +101,7 @@ void SkillHandler::processPlayerSkills(Net::MessageIn &msg) const
skillDialog->playUpdateEffect(updateSkill);
}
-void SkillHandler::processPlayerSkillUp(Net::MessageIn &msg) const
+void SkillHandler::processPlayerSkillUp(Net::MessageIn &msg)
{
const int skillId = msg.readInt16();
const int level = msg.readInt16();
@@ -119,7 +119,7 @@ void SkillHandler::processPlayerSkillUp(Net::MessageIn &msg) const
}
}
-void SkillHandler::processSkillFailed(Net::MessageIn &msg) const
+void SkillHandler::processSkillFailed(Net::MessageIn &msg)
{
// Action failed (ex. sit because you have not reached the
// right level)
diff --git a/src/net/ea/skillhandler.h b/src/net/ea/skillhandler.h
index 251388969..8dc724e0a 100644
--- a/src/net/ea/skillhandler.h
+++ b/src/net/ea/skillhandler.h
@@ -36,11 +36,11 @@ class SkillHandler : public Net::SkillHandler
A_DELETE_COPY(SkillHandler)
- void processPlayerSkills(Net::MessageIn &msg) const;
+ static void processPlayerSkills(Net::MessageIn &msg);
- void processPlayerSkillUp(Net::MessageIn &msg) const;
+ static void processPlayerSkillUp(Net::MessageIn &msg);
- void processSkillFailed(Net::MessageIn &msg) const;
+ static void processSkillFailed(Net::MessageIn &msg);
};
} // namespace Ea
diff --git a/src/net/ea/tradehandler.cpp b/src/net/ea/tradehandler.cpp
index 45948f963..9457a31db 100644
--- a/src/net/ea/tradehandler.cpp
+++ b/src/net/ea/tradehandler.cpp
@@ -182,7 +182,7 @@ void TradeHandler::processTradeResponse(Net::MessageIn &msg) const
}
}
-void TradeHandler::processTradeItemAdd(Net::MessageIn &msg) const
+void TradeHandler::processTradeItemAdd(Net::MessageIn &msg)
{
const int amount = msg.readInt32();
const int type = msg.readInt16();
@@ -205,7 +205,7 @@ void TradeHandler::processTradeItemAdd(Net::MessageIn &msg) const
}
}
-void TradeHandler::processTradeItemAddResponse(Net::MessageIn &msg) const
+void TradeHandler::processTradeItemAddResponse(Net::MessageIn &msg)
{
// Trade: New Item add response (was 0x00ea, now 01b1)
const int index = msg.readInt16() - INVENTORY_OFFSET;
@@ -255,7 +255,7 @@ void TradeHandler::processTradeItemAddResponse(Net::MessageIn &msg) const
}
}
-void TradeHandler::processTradeOk(Net::MessageIn &msg) const
+void TradeHandler::processTradeOk(Net::MessageIn &msg)
{
// 0 means ok from myself, 1 means ok from other;
if (tradeWindow)
@@ -264,7 +264,7 @@ void TradeHandler::processTradeOk(Net::MessageIn &msg) const
msg.readInt8();
}
-void TradeHandler::processTradeCancel(Net::MessageIn &msg A_UNUSED) const
+void TradeHandler::processTradeCancel(Net::MessageIn &msg A_UNUSED)
{
NotifyManager::notify(NotifyManager::TRADE_CANCELLED);
if (tradeWindow)
@@ -275,7 +275,7 @@ void TradeHandler::processTradeCancel(Net::MessageIn &msg A_UNUSED) const
PlayerInfo::setTrading(false);
}
-void TradeHandler::processTradeComplete(Net::MessageIn &msg A_UNUSED) const
+void TradeHandler::processTradeComplete(Net::MessageIn &msg A_UNUSED)
{
NotifyManager::notify(NotifyManager::TRADE_COMPLETE);
if (tradeWindow)
diff --git a/src/net/ea/tradehandler.h b/src/net/ea/tradehandler.h
index c3f759ef4..22a78e9e6 100644
--- a/src/net/ea/tradehandler.h
+++ b/src/net/ea/tradehandler.h
@@ -43,15 +43,15 @@ class TradeHandler : public Net::TradeHandler
void processTradeResponse(Net::MessageIn &msg) const;
- void processTradeItemAdd(Net::MessageIn &msg) const;
+ static void processTradeItemAdd(Net::MessageIn &msg);
- void processTradeItemAddResponse(Net::MessageIn &msg) const;
+ static void processTradeItemAddResponse(Net::MessageIn &msg);
- void processTradeOk(Net::MessageIn &msg) const;
+ static void processTradeOk(Net::MessageIn &msg);
- void processTradeCancel(Net::MessageIn &msg) const;
+ static void processTradeCancel(Net::MessageIn &msg);
- void processTradeComplete(Net::MessageIn &msg) const;
+ static void processTradeComplete(Net::MessageIn &msg);
};
} // namespace Ea
diff --git a/src/net/eathena/beinghandler.cpp b/src/net/eathena/beinghandler.cpp
index c7d903c32..df25f40cf 100644
--- a/src/net/eathena/beinghandler.cpp
+++ b/src/net/eathena/beinghandler.cpp
@@ -380,7 +380,7 @@ void BeingHandler::processBeingChangeLook(Net::MessageIn &msg,
}
}
-void BeingHandler::processNameResponse2(Net::MessageIn &msg) const
+void BeingHandler::processNameResponse2(Net::MessageIn &msg)
{
if (!actorManager || !player_node)
return;
diff --git a/src/net/eathena/beinghandler.h b/src/net/eathena/beinghandler.h
index 9d288b053..54271edff 100644
--- a/src/net/eathena/beinghandler.h
+++ b/src/net/eathena/beinghandler.h
@@ -50,7 +50,7 @@ class BeingHandler final : public MessageHandler, public Ea::BeingHandler
void processBeingChangeLook(Net::MessageIn &msg,
const bool look2) const;
- void processNameResponse2(Net::MessageIn &msg) const;
+ static void processNameResponse2(Net::MessageIn &msg);
void processPlayerMoveUpdate(Net::MessageIn &msg,
const int type) const;
diff --git a/src/net/eathena/buysellhandler.cpp b/src/net/eathena/buysellhandler.cpp
index 8a637e435..31a831b25 100644
--- a/src/net/eathena/buysellhandler.cpp
+++ b/src/net/eathena/buysellhandler.cpp
@@ -107,7 +107,7 @@ void BuySellHandler::processNpcBuy(Net::MessageIn &msg)
mBuyDialog->sort();
}
-void BuySellHandler::processNpcSellResponse(Net::MessageIn &msg) const
+void BuySellHandler::processNpcSellResponse(Net::MessageIn &msg)
{
switch (msg.readInt8())
{
diff --git a/src/net/eathena/buysellhandler.h b/src/net/eathena/buysellhandler.h
index b18df810a..38e9f5da1 100644
--- a/src/net/eathena/buysellhandler.h
+++ b/src/net/eathena/buysellhandler.h
@@ -41,7 +41,7 @@ class BuySellHandler final : public MessageHandler, public Ea::BuySellHandler
void processNpcBuy(Net::MessageIn &msg);
- void processNpcSellResponse(Net::MessageIn &msg) const;
+ static void processNpcSellResponse(Net::MessageIn &msg);
};
} // namespace EAthena
diff --git a/src/net/eathena/gamehandler.cpp b/src/net/eathena/gamehandler.cpp
index 75cbf11e8..9c7e84554 100644
--- a/src/net/eathena/gamehandler.cpp
+++ b/src/net/eathena/gamehandler.cpp
@@ -172,7 +172,7 @@ void GameHandler::disconnect2() const
MessageOut outMsg(CMSG_CLIENT_DISCONNECT);
}
-void GameHandler::processMapCharId(Net::MessageIn &msg) const
+void GameHandler::processMapCharId(Net::MessageIn &msg)
{
msg.readInt32(); // char id
}
diff --git a/src/net/eathena/gamehandler.h b/src/net/eathena/gamehandler.h
index 2307eb089..075bc6f94 100644
--- a/src/net/eathena/gamehandler.h
+++ b/src/net/eathena/gamehandler.h
@@ -53,7 +53,7 @@ class GameHandler final : public MessageHandler, public Ea::GameHandler
void mapLoadedEvent() const override final;
- void processMapCharId(Net::MessageIn &msg) const;
+ static void processMapCharId(Net::MessageIn &msg);
bool mustPing() const override final A_WARN_UNUSED
{ return true; }
diff --git a/src/net/eathena/loginhandler.cpp b/src/net/eathena/loginhandler.cpp
index 685626d98..5ebec5106 100644
--- a/src/net/eathena/loginhandler.cpp
+++ b/src/net/eathena/loginhandler.cpp
@@ -153,7 +153,7 @@ ServerInfo *LoginHandler::getCharServer() const
return &charServer;
}
-void LoginHandler::requestUpdateHosts() const
+void LoginHandler::requestUpdateHosts()
{
MessageOut outMsg(CMSG_SEND_CLIENT_INFO);
outMsg.writeInt8(CLIENT_PROTOCOL_VERSION);
diff --git a/src/net/eathena/loginhandler.h b/src/net/eathena/loginhandler.h
index 14d432585..a1d791fdf 100644
--- a/src/net/eathena/loginhandler.h
+++ b/src/net/eathena/loginhandler.h
@@ -66,7 +66,7 @@ class LoginHandler final : public MessageHandler, public Ea::LoginHandler
void processServerVersion(Net::MessageIn &msg);
- void requestUpdateHosts() const;
+ static void requestUpdateHosts();
void processUpdateHost2(Net::MessageIn &msg) const;
diff --git a/src/net/eathena/npchandler.cpp b/src/net/eathena/npchandler.cpp
index f4f4eada5..75db7396b 100644
--- a/src/net/eathena/npchandler.cpp
+++ b/src/net/eathena/npchandler.cpp
@@ -242,14 +242,14 @@ int NpcHandler::getNpc(Net::MessageIn &msg, const bool haveLength)
}
void NpcHandler::processNpcCutin(Net::MessageIn &msg A_UNUSED,
- const int npcId A_UNUSED) const
+ const int npcId A_UNUSED)
{
msg.readString(64); // image name
msg.readInt8(); // type
}
void NpcHandler::processNpcViewPoint(Net::MessageIn &msg A_UNUSED,
- const int npcId A_UNUSED) const
+ const int npcId A_UNUSED)
{
msg.readInt32(); // type
msg.readInt32(); // x
diff --git a/src/net/eathena/npchandler.h b/src/net/eathena/npchandler.h
index fd565a5ed..8c2f61b55 100644
--- a/src/net/eathena/npchandler.h
+++ b/src/net/eathena/npchandler.h
@@ -67,9 +67,9 @@ class NpcHandler final : public MessageHandler, public Ea::NpcHandler
int getNpc(Net::MessageIn &msg, const bool haveLength) override final;
- void processNpcCutin(Net::MessageIn &msg, const int npcId) const;
+ static void processNpcCutin(Net::MessageIn &msg, const int npcId);
- void processNpcViewPoint(Net::MessageIn &msg, const int npcId) const;
+ static void processNpcViewPoint(Net::MessageIn &msg, const int npcId);
};
} // namespace EAthena
diff --git a/src/net/eathena/playerhandler.cpp b/src/net/eathena/playerhandler.cpp
index 54b4322d0..f4305f280 100644
--- a/src/net/eathena/playerhandler.cpp
+++ b/src/net/eathena/playerhandler.cpp
@@ -223,7 +223,7 @@ void PlayerHandler::updateStatus(const uint8_t status) const
outMsg.writeInt8(0);
}
-void PlayerHandler::processPlayerShortcuts(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerShortcuts(Net::MessageIn &msg)
{
for (int f = 0; f < 27; f ++)
{
@@ -233,7 +233,7 @@ void PlayerHandler::processPlayerShortcuts(Net::MessageIn &msg) const
}
}
-void PlayerHandler::processPlayerShowEquip(Net::MessageIn &msg) const
+void PlayerHandler::processPlayerShowEquip(Net::MessageIn &msg)
{
msg.readInt8(); // show equip
}
diff --git a/src/net/eathena/playerhandler.h b/src/net/eathena/playerhandler.h
index ee7bd1e39..087c42973 100644
--- a/src/net/eathena/playerhandler.h
+++ b/src/net/eathena/playerhandler.h
@@ -53,8 +53,8 @@ class PlayerHandler final : public MessageHandler, public Ea::PlayerHandler
void changeAction(const Being::Action &action) const override final;
void updateStatus(const uint8_t status) const override final;
- void processPlayerShortcuts(Net::MessageIn &msg) const;
- void processPlayerShowEquip(Net::MessageIn &msg) const;
+ static void processPlayerShortcuts(Net::MessageIn &msg);
+ static void processPlayerShowEquip(Net::MessageIn &msg);
void requestOnlineList() const override final;
void respawn() const override final;
diff --git a/src/net/tmwa/beinghandler.cpp b/src/net/tmwa/beinghandler.cpp
index 043321cd5..76efd958e 100644
--- a/src/net/tmwa/beinghandler.cpp
+++ b/src/net/tmwa/beinghandler.cpp
@@ -389,12 +389,11 @@ void BeingHandler::processBeingChangeLook(Net::MessageIn &msg,
}
}
-void BeingHandler::processNameResponse2(Net::MessageIn &msg) const
+void BeingHandler::processNameResponse2(Net::MessageIn &msg)
{
if (!actorManager || !player_node)
return;
-
const int len = msg.readInt16();
const int beingId = msg.readInt32();
const std::string str = msg.readString(len - 8);
@@ -653,7 +652,7 @@ void BeingHandler::processPlayerMoveUpdate(Net::MessageIn &msg,
dstBeing->setMoveTime();
}
-void BeingHandler::processBeingMove3(Net::MessageIn &msg) const
+void BeingHandler::processBeingMove3(Net::MessageIn &msg)
{
if (serverVersion < 10)
return;
diff --git a/src/net/tmwa/beinghandler.h b/src/net/tmwa/beinghandler.h
index f35921256..f3b57b023 100644
--- a/src/net/tmwa/beinghandler.h
+++ b/src/net/tmwa/beinghandler.h
@@ -47,12 +47,12 @@ class BeingHandler final : public MessageHandler, public Ea::BeingHandler
void processBeingChangeLook(Net::MessageIn &msg,
const bool look2) const;
- void processNameResponse2(Net::MessageIn &msg) const;
+ static void processNameResponse2(Net::MessageIn &msg);
void processPlayerMoveUpdate(Net::MessageIn &msg,
const int type) const;
- void processBeingMove3(Net::MessageIn &msg) const;
+ static void processBeingMove3(Net::MessageIn &msg);
};
} // namespace TmwAthena
diff --git a/src/net/tmwa/buysellhandler.cpp b/src/net/tmwa/buysellhandler.cpp
index 71891bdec..0be6839a7 100644
--- a/src/net/tmwa/buysellhandler.cpp
+++ b/src/net/tmwa/buysellhandler.cpp
@@ -114,7 +114,7 @@ void BuySellHandler::processNpcBuy(Net::MessageIn &msg)
mBuyDialog->sort();
}
-void BuySellHandler::processNpcSellResponse(Net::MessageIn &msg) const
+void BuySellHandler::processNpcSellResponse(Net::MessageIn &msg)
{
switch (msg.readInt8())
{
diff --git a/src/net/tmwa/buysellhandler.h b/src/net/tmwa/buysellhandler.h
index 9fa6caddc..a0c99908f 100644
--- a/src/net/tmwa/buysellhandler.h
+++ b/src/net/tmwa/buysellhandler.h
@@ -41,7 +41,7 @@ class BuySellHandler final : public MessageHandler, public Ea::BuySellHandler
void processNpcBuy(Net::MessageIn &msg);
- void processNpcSellResponse(Net::MessageIn &msg) const;
+ static void processNpcSellResponse(Net::MessageIn &msg);
};
} // namespace TmwAthena
diff --git a/src/net/tmwa/loginhandler.cpp b/src/net/tmwa/loginhandler.cpp
index 95dd59350..3797a7a54 100644
--- a/src/net/tmwa/loginhandler.cpp
+++ b/src/net/tmwa/loginhandler.cpp
@@ -178,7 +178,7 @@ ServerInfo *LoginHandler::getCharServer() const
return &charServer;
}
-void LoginHandler::requestUpdateHosts() const
+void LoginHandler::requestUpdateHosts()
{
MessageOut outMsg(CMSG_SEND_CLIENT_INFO);
outMsg.writeInt8(CLIENT_PROTOCOL_VERSION);
diff --git a/src/net/tmwa/loginhandler.h b/src/net/tmwa/loginhandler.h
index 20ca3f52d..632f02d62 100644
--- a/src/net/tmwa/loginhandler.h
+++ b/src/net/tmwa/loginhandler.h
@@ -63,7 +63,7 @@ class LoginHandler final : public MessageHandler, public Ea::LoginHandler
void processServerVersion(Net::MessageIn &msg);
- void requestUpdateHosts() const;
+ static void requestUpdateHosts();
void processUpdateHost2(Net::MessageIn &msg) const;
diff --git a/src/net/tmwa/playerhandler.cpp b/src/net/tmwa/playerhandler.cpp
index 007c29dd6..eea74a2a5 100644
--- a/src/net/tmwa/playerhandler.cpp
+++ b/src/net/tmwa/playerhandler.cpp
@@ -233,7 +233,7 @@ void PlayerHandler::requestOnlineList() const
MessageOut outMsg(CMSG_ONLINE_LIST);
}
-void PlayerHandler::processOnlineList(Net::MessageIn &msg) const
+void PlayerHandler::processOnlineList(Net::MessageIn &msg)
{
if (!whoIsOnline)
return;
@@ -309,7 +309,7 @@ void PlayerHandler::updateStatus(const uint8_t status) const
outMsg.writeInt8(0);
}
-void PlayerHandler::processMapMask(Net::MessageIn &msg) const
+void PlayerHandler::processMapMask(Net::MessageIn &msg)
{
const int mask = msg.readInt32();
msg.readInt32(); // unused
@@ -318,7 +318,7 @@ void PlayerHandler::processMapMask(Net::MessageIn &msg) const
map->setMask(mask);
}
-void PlayerHandler::processMapMusic(Net::MessageIn &msg) const
+void PlayerHandler::processMapMusic(Net::MessageIn &msg)
{
const int size = msg.readInt16() - 5;
const std::string music = msg.readString(size);
diff --git a/src/net/tmwa/playerhandler.h b/src/net/tmwa/playerhandler.h
index 5e1419119..125eea0ba 100644
--- a/src/net/tmwa/playerhandler.h
+++ b/src/net/tmwa/playerhandler.h
@@ -51,11 +51,11 @@ class PlayerHandler final : public MessageHandler, public Ea::PlayerHandler
void setDestination(const int x, const int y,
const int direction) const override final;
void changeAction(const Being::Action &action) const override final;
- void processOnlineList(Net::MessageIn &msg) const;
+ static void processOnlineList(Net::MessageIn &msg);
void requestOnlineList() const override final;
void updateStatus(const uint8_t status) const override final;
- void processMapMask(Net::MessageIn &msg) const;
- void processMapMusic(Net::MessageIn &msg) const;
+ static void processMapMask(Net::MessageIn &msg);
+ static void processMapMusic(Net::MessageIn &msg);
void respawn() const override final;
};
diff --git a/src/net/tmwa/questhandler.cpp b/src/net/tmwa/questhandler.cpp
index 328a379dc..73ba770ea 100644
--- a/src/net/tmwa/questhandler.cpp
+++ b/src/net/tmwa/questhandler.cpp
@@ -61,7 +61,7 @@ void QuestHandler::handleMessage(Net::MessageIn &msg)
BLOCK_END("QuestHandler::handleMessage")
}
-void QuestHandler::processSetQuestVar(Net::MessageIn &msg) const
+void QuestHandler::processSetQuestVar(Net::MessageIn &msg)
{
const int var = msg.readInt16(); // variable
const int val = msg.readInt32(); // value
@@ -77,7 +77,7 @@ void QuestHandler::processSetQuestVar(Net::MessageIn &msg) const
}
}
-void QuestHandler::processPlayerQuests(Net::MessageIn &msg) const
+void QuestHandler::processPlayerQuests(Net::MessageIn &msg)
{
const int count = (msg.readInt16() - 4) / 6;
for (int f = 0; f < count; f ++)
diff --git a/src/net/tmwa/questhandler.h b/src/net/tmwa/questhandler.h
index 3e5e8178a..1de4ed24f 100644
--- a/src/net/tmwa/questhandler.h
+++ b/src/net/tmwa/questhandler.h
@@ -35,9 +35,9 @@ class QuestHandler final : public MessageHandler
void handleMessage(Net::MessageIn &msg) override final;
- void processSetQuestVar(Net::MessageIn &msg) const;
+ static void processSetQuestVar(Net::MessageIn &msg);
- void processPlayerQuests(Net::MessageIn &msg) const;
+ static void processPlayerQuests(Net::MessageIn &msg);
};
} // namespace TmwAthena
diff --git a/src/particle/particleemitter.h b/src/particle/particleemitter.h
index 9e149034f..3f771ab57 100644
--- a/src/particle/particleemitter.h
+++ b/src/particle/particleemitter.h
@@ -83,7 +83,7 @@ class ParticleEmitter final
void adjustSize(const int w, const int h);
private:
- template <typename T> ParticleEmitterProp<T>
+ template <typename T> static ParticleEmitterProp<T>
readParticleEmitterProp(XmlNodePtrConst propertyNode, T def);
ImageSet *getImageSet(XmlNodePtrConst node);
diff --git a/src/render/graphics.cpp b/src/render/graphics.cpp
index 6ad1c67d7..7e3687006 100644
--- a/src/render/graphics.cpp
+++ b/src/render/graphics.cpp
@@ -136,8 +136,21 @@ void Graphics::setScale(int scale)
{
if (!scale)
scale = 1;
- if (mActualWidth / scale < 470 || mActualHeight / scale < 320)
- scale = 1;
+ int scaleW = mActualWidth / scale;
+ int scaleH = mActualHeight / scale;
+ if (scaleW < 470)
+ {
+ scale = mActualWidth / 470;
+ if (scale < 1)
+ scale = 1;
+ scaleH = mActualHeight / scale;
+ }
+ if (scaleH < 320)
+ {
+ scale = mActualHeight / 320;
+ if (scale < 1)
+ scale = 1;
+ }
logger->log("set scale: %d", scale);
mScale = scale;
mWidth = mActualWidth / mScale;
@@ -373,7 +386,7 @@ bool Graphics::videoInfo()
mDoubleBuffer = ((mWindow->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF);
logger->log("Double buffer mode: %s", mDoubleBuffer ? "yes" : "no");
- imageHelper->dumpSurfaceFormat(mWindow);
+ ImageHelper::dumpSurfaceFormat(mWindow);
const SDL_VideoInfo *const vi = SDL_GetVideoInfo();
if (!vi)
@@ -420,11 +433,13 @@ bool Graphics::resizeScreen(const int width, const int height)
mRect.h = height / mScale;
mWidth = width / mScale;
mHeight = height / mScale;
+ mActualWidth = width;
+ mActualHeight = height;
#ifdef USE_OPENGL
// +++ probably this way will not work in windows/mac
// Setup OpenGL
- glViewport(0, 0, mWidth, mHeight);
+ glViewport(0, 0, mActualWidth, mActualHeight);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
#else
// +++ need impliment resize in soft mode
diff --git a/src/render/sdl2softwaregraphics.cpp b/src/render/sdl2softwaregraphics.cpp
index 088aba98c..22a66a911 100644
--- a/src/render/sdl2softwaregraphics.cpp
+++ b/src/render/sdl2softwaregraphics.cpp
@@ -1487,7 +1487,7 @@ bool SDL2SoftwareGraphics::setVideoMode(const int w, const int h,
}
mSurface = SDL_GetWindowSurface(mWindow);
- imageHelper->dumpSurfaceFormat(mSurface);
+ ImageHelper::dumpSurfaceFormat(mSurface);
SDL2SoftwareImageHelper::setFormat(mSurface->format);
int w1 = 0;
diff --git a/src/resources/ambientlayer.cpp b/src/resources/ambientlayer.cpp
index c9574c589..b839064be 100644
--- a/src/resources/ambientlayer.cpp
+++ b/src/resources/ambientlayer.cpp
@@ -32,14 +32,19 @@
#include "debug.h"
AmbientLayer::AmbientLayer(Image *const img,
- const float parallaxX, const float parallaxY,
- const float speedX, const float speedY,
- const bool keepRatio, const int mask) :
+ const float parallaxX,
+ const float parallaxY,
+ const float posX,
+ const float posY,
+ const float speedX,
+ const float speedY,
+ const bool keepRatio,
+ const int mask) :
mImage(img),
mParallaxX(parallaxX),
mParallaxY(parallaxY),
- mPosX(0),
- mPosY(0),
+ mPosX(posX),
+ mPosY(posY),
mSpeedX(speedX),
mSpeedY(speedY),
mMask(mask),
diff --git a/src/resources/ambientlayer.h b/src/resources/ambientlayer.h
index 9a694bb2f..f6dd6d120 100644
--- a/src/resources/ambientlayer.h
+++ b/src/resources/ambientlayer.h
@@ -44,9 +44,14 @@ class AmbientLayer final
* the same ratio than in 800x600 resolution mode.
*/
AmbientLayer(Image *const img,
- const float parallax, const float parallaxY,
- const float speedX, const float speedY,
- const bool keepRatio, const int mask);
+ const float parallax,
+ const float parallaxY,
+ const float posX,
+ const float posY,
+ const float speedX,
+ const float speedY,
+ const bool keepRatio,
+ const int mask);
A_DELETE_COPY(AmbientLayer)
diff --git a/src/resources/beingcommon.cpp b/src/resources/beingcommon.cpp
index 7b7a57d9e..388312b34 100644
--- a/src/resources/beingcommon.cpp
+++ b/src/resources/beingcommon.cpp
@@ -49,7 +49,9 @@ void BeingCommon::readBasicAttributes(BeingInfo *const info,
info->setHpBarOffsetY(XML::getProperty(node, "hpBarOffsetY", 0));
}
-void BeingCommon::getIncludeFiles(const std::string &dir, StringVect &list)
+void BeingCommon::getIncludeFiles(const std::string &dir,
+ StringVect &list,
+ const std::string &ext)
{
const std::string path = dir + "/";
StringVect tempList;
@@ -57,7 +59,7 @@ void BeingCommon::getIncludeFiles(const std::string &dir, StringVect &list)
FOR_EACH (StringVectCIter, it, tempList)
{
const std::string &str = *it;
- if (findLast(str, ".xml"))
+ if (findLast(str, ext))
list.push_back(str);
}
std::sort(list.begin(), list.end());
diff --git a/src/resources/beingcommon.h b/src/resources/beingcommon.h
index 6124de5a1..2c9741a2c 100644
--- a/src/resources/beingcommon.h
+++ b/src/resources/beingcommon.h
@@ -30,11 +30,21 @@
class BeingInfo;
#define loadXmlDir(name, function) \
- StringVect listVect; \
- BeingCommon::getIncludeFiles(paths.getStringValue( \
- name), listVect); \
- FOR_EACH (StringVectCIter, itVect, listVect) \
- function(*itVect);
+ { \
+ StringVect listVect; \
+ BeingCommon::getIncludeFiles(paths.getStringValue( \
+ name), listVect, ".xml"); \
+ FOR_EACH (StringVectCIter, itVect, listVect) \
+ function(*itVect); \
+ }
+
+#define loadXmlDir2(name, function, ext) \
+ { \
+ StringVect listVect; \
+ BeingCommon::getIncludeFiles(name, listVect, ext); \
+ FOR_EACH (StringVectCIter, itVect, listVect) \
+ function(*itVect); \
+ }
namespace BeingCommon
{
@@ -42,7 +52,9 @@ namespace BeingCommon
XmlNodePtrConst node,
const std::string &hoverCursor);
- void getIncludeFiles(const std::string &dir, StringVect &list);
+ void getIncludeFiles(const std::string &dir,
+ StringVect &list,
+ const std::string &ext);
}
#endif // RESOURCES_BEINGCOMMON_H
diff --git a/src/resources/db/colordb.cpp b/src/resources/db/colordb.cpp
index 630c1c902..a358bebe7 100644
--- a/src/resources/db/colordb.cpp
+++ b/src/resources/db/colordb.cpp
@@ -53,7 +53,7 @@ void ColorDB::load()
loadHair(paths.getStringValue("hairColorPatchFile"), colors);
StringVect list;
BeingCommon::getIncludeFiles(paths.getStringValue(
- "hairColorPatchDir"), list);
+ "hairColorPatchDir"), list, ".xml");
FOR_EACH (StringVectCIter, it2, list)
loadHair(*it2, colors);
diff --git a/src/resources/db/emotedb.cpp b/src/resources/db/emotedb.cpp
index 97ea95aa0..943628978 100644
--- a/src/resources/db/emotedb.cpp
+++ b/src/resources/db/emotedb.cpp
@@ -295,3 +295,18 @@ const int &EmoteDB::getLast()
{
return mLastEmote;
}
+
+int EmoteDB::size()
+{
+ return static_cast<signed int>(mEmoteInfos.size());
+}
+
+int EmoteDB::getIdByIndex(const int index)
+{
+ if (index < 0 || index >= static_cast<signed int>(mEmoteInfos.size()))
+ return 0;
+ EmoteInfos::const_iterator it = mEmoteInfos.begin();
+ for (int f = 0; f < index; f ++)
+ ++ it;
+ return (*it).first;
+}
diff --git a/src/resources/db/emotedb.h b/src/resources/db/emotedb.h
index 02683a99a..29a2a8de4 100644
--- a/src/resources/db/emotedb.h
+++ b/src/resources/db/emotedb.h
@@ -87,6 +87,10 @@ namespace EmoteDB
const int &getLast() A_WARN_UNUSED;
+ int getIdByIndex(const int index);
+
+ int size();
+
typedef EmoteInfos::iterator EmoteInfosIterator;
} // namespace EmoteDB
diff --git a/src/resources/db/itemdb.cpp b/src/resources/db/itemdb.cpp
index abc164493..931377639 100644
--- a/src/resources/db/itemdb.cpp
+++ b/src/resources/db/itemdb.cpp
@@ -217,7 +217,9 @@ void ItemDB::load()
loadXmlFile(paths.getStringValue("itemsPatchFile"), tagNum);
StringVect list;
- BeingCommon::getIncludeFiles(paths.getStringValue("itemsPatchDir"), list);
+ BeingCommon::getIncludeFiles(paths.getStringValue("itemsPatchDir"),
+ list,
+ ".xml");
FOR_EACH (StringVectCIter, it, list)
loadXmlFile(*it, tagNum);
}
diff --git a/src/resources/imagehelper.cpp b/src/resources/imagehelper.cpp
index a089dc248..ff7c196c4 100644
--- a/src/resources/imagehelper.cpp
+++ b/src/resources/imagehelper.cpp
@@ -94,7 +94,7 @@ SDL_Surface* ImageHelper::convertTo32Bit(SDL_Surface *const tmpImage)
return MSDL_ConvertSurface(tmpImage, &RGBAFormat, SDL_SWSURFACE);
}
-void ImageHelper::dumpSurfaceFormat(const SDL_Surface *const image) const
+void ImageHelper::dumpSurfaceFormat(const SDL_Surface *const image)
{
if (image->format)
{
diff --git a/src/resources/imagehelper.h b/src/resources/imagehelper.h
index 27cf1df14..2e3b96771 100644
--- a/src/resources/imagehelper.h
+++ b/src/resources/imagehelper.h
@@ -82,7 +82,7 @@ class ImageHelper
static SDL_Surface *convertTo32Bit(SDL_Surface *const tmpImage)
A_WARN_UNUSED;
- void dumpSurfaceFormat(const SDL_Surface *const image) const;
+ static void dumpSurfaceFormat(const SDL_Surface *const image);
virtual SDL_Surface *create32BitSurface(int width, int height)
const A_WARN_UNUSED = 0;
diff --git a/src/resources/iteminfo.cpp b/src/resources/iteminfo.cpp
index afe9ff027..b7fc0f4ac 100644
--- a/src/resources/iteminfo.cpp
+++ b/src/resources/iteminfo.cpp
@@ -253,8 +253,10 @@ const SpriteToItemMap *ItemInfo::getSpriteToItemReplaceMap(const int direction)
return nullptr;
}
-void ItemInfo::setSpriteOrder(int *const ptr, const int direction,
- const int n, const int def) const
+void ItemInfo::setSpriteOrder(int *const ptr,
+ const int direction,
+ const int n,
+ const int def)
{
switch (direction)
{
diff --git a/src/resources/iteminfo.h b/src/resources/iteminfo.h
index 43dcbf9e9..d3df1c448 100644
--- a/src/resources/iteminfo.h
+++ b/src/resources/iteminfo.h
@@ -229,8 +229,10 @@ class ItemInfo final
void setDrawPriority(const int direction, const int n);
- void setSpriteOrder(int *const ptr, const int direction,
- const int n, const int def = -1) const;
+ static void setSpriteOrder(int *const ptr,
+ const int direction,
+ const int n,
+ const int def = -1);
const std::map<int, int> &getTags() const A_WARN_UNUSED
{ return mTags; }
diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp
index bcafe4bb7..e053e0035 100644
--- a/src/resources/mapreader.cpp
+++ b/src/resources/mapreader.cpp
@@ -30,6 +30,7 @@
#include "tileset.h"
#include "resources/animation.h"
+#include "resources/beingcommon.h"
#include "resources/image.h"
#include "resources/resourcemanager.h"
@@ -42,6 +43,15 @@
#include "debug.h"
+typedef std::map<std::string, XmlNodePtr>::iterator LayerInfoIterator;
+typedef std::set<XML::Document*>::iterator DocIterator;
+
+namespace
+{
+ std::map<std::string, XmlNodePtr> mKnownLayers;
+ std::set<XML::Document*> mKnownDocs;
+} // namespace
+
static int inflateMemory(unsigned char *restrict const in,
const unsigned int inLength,
unsigned char *&restrict out,
@@ -182,53 +192,46 @@ int inflateMemory(unsigned char *restrict const in,
return outLength;
}
+void MapReader::addLayerToList(const std::string &fileName)
+{
+ XML::Document *doc = new XML::Document(fileName);
+ XmlNodePtrConst node = doc->rootNode();
+ if (!node)
+ {
+ delete doc;
+ return;
+ }
+
+ for_each_xml_child_node(childNode, node)
+ {
+ if (!xmlNameEqual(childNode, "layer"))
+ continue;
+ std::string name = XML::getProperty(childNode, "name", "");
+ if (name.empty())
+ continue;
+ name = toLower(name);
+ logger->log("found patch layer: " + name);
+ mKnownLayers[name] = childNode;
+ mKnownDocs.insert(doc);
+ }
+}
+
Map *MapReader::readMap(const std::string &restrict filename,
const std::string &restrict realFilename)
{
BLOCK_START("MapReader::readMap")
logger->log("Attempting to read map %s", realFilename.c_str());
- // Load the file through resource manager
- const ResourceManager *const resman = ResourceManager::getInstance();
- int fileSize;
- void *buffer = resman->loadFile(realFilename, fileSize);
- Map *map = nullptr;
- if (!buffer)
+ XML::Document doc(realFilename);
+ if (!doc.isLoaded())
{
BLOCK_END("MapReader::readMap")
return createEmptyMap(filename, realFilename);
}
- unsigned char *inflated = nullptr;
- unsigned int inflatedSize;
-
- if (realFilename.find(".gz", realFilename.length() - 3)
- != std::string::npos)
- {
- // Inflate the gzipped map data
- inflatedSize = inflateMemory(static_cast<unsigned char*>(buffer),
- fileSize, inflated);
- free(buffer);
-
- if (!inflated)
- {
- logger->log("Could not decompress map file (%s)",
- realFilename.c_str());
- BLOCK_END("MapReader::readMap")
- return nullptr;
- }
- }
- else
- {
- inflated = static_cast<unsigned char*>(buffer);
- inflatedSize = fileSize;
- }
-
- XML::Document doc(reinterpret_cast<char*>(inflated), inflatedSize);
- free(inflated);
-
XmlNodePtrConst node = doc.rootNode();
+ Map *map = nullptr;
// Parse the inflated map data
if (node)
{
@@ -256,6 +259,24 @@ Map *MapReader::readMap(const std::string &restrict filename,
return map;
}
+void MapReader::loadLayers(const std::string &path)
+{
+ loadXmlDir2(path, addLayerToList, ".tmx");
+}
+
+void MapReader::unloadTempLayers()
+{
+ FOR_EACH (DocIterator, it, mKnownDocs)
+ delete (*it);
+ mKnownLayers.clear();
+ mKnownDocs.clear();
+}
+
+static void loadReplaceLayer(LayerInfoIterator &it, Map *const map)
+{
+ MapReader::readLayer((*it).second, map);
+}
+
Map *MapReader::readMap(XmlNodePtrConst node, const std::string &path)
{
if (!node)
@@ -281,6 +302,9 @@ Map *MapReader::readMap(XmlNodePtrConst node, const std::string &path)
return nullptr;
}
+ logger->log("loading replace layer list");
+ loadLayers(path + "_replace.d");
+
Map *const map = new Map(w, h, tilew, tileh);
const std::string fileName = path.substr(path.rfind("/") + 1);
@@ -309,7 +333,18 @@ Map *MapReader::readMap(XmlNodePtrConst node, const std::string &path)
}
else if (xmlNameEqual(childNode, "layer"))
{
- readLayer(childNode, map);
+ std::string name = XML::getProperty(childNode, "name", "");
+ name = toLower(name);
+ LayerInfoIterator it = mKnownLayers.find(name);
+ if (it == mKnownLayers.end())
+ {
+ readLayer(childNode, map);
+ }
+ else
+ {
+ logger->log("load replace layer: " + name);
+ loadReplaceLayer(it, map);
+ }
}
else if (xmlNameEqual(childNode, "properties"))
{
@@ -402,6 +437,7 @@ Map *MapReader::readMap(XmlNodePtrConst node, const std::string &path)
map->setActorsFix(0, atoi(map->getProperty("actorsfix").c_str()));
map->reduce();
map->setWalkLayer(resman->getWalkLayer(fileName, map));
+ unloadTempLayers();
return map;
}
diff --git a/src/resources/mapreader.h b/src/resources/mapreader.h
index 4f84f1a1a..27cbd665b 100644
--- a/src/resources/mapreader.h
+++ b/src/resources/mapreader.h
@@ -59,6 +59,11 @@ class MapReader final
const std::string &restrict realFilename)
A_WARN_UNUSED;
+ /**
+ * Reads a map layer and adds it to the given map.
+ */
+ static void readLayer(const XmlNodePtr node, Map *const map);
+
private:
/**
* Reads the properties element.
@@ -70,11 +75,6 @@ class MapReader final
static void readProperties(const XmlNodePtrConst node,
Properties *const props);
- /**
- * Reads a map layer and adds it to the given map.
- */
- static void readLayer(const XmlNodePtr node, Map *const map);
-
static bool readBase64Layer(const XmlNodePtrConst childNode,
Map *const map,
MapLayer *const layer,
@@ -100,6 +100,12 @@ class MapReader final
Map *const map) A_WARN_UNUSED;
static void updateMusic(Map *const map);
+
+ static void addLayerToList(const std::string &fileName);
+
+ static void loadLayers(const std::string &path);
+
+ static void unloadTempLayers();
};
#endif // RESOURCES_MAPREADER_H
diff --git a/src/resources/openglimagehelper.cpp b/src/resources/openglimagehelper.cpp
index d855323d1..5a0a91fc1 100644
--- a/src/resources/openglimagehelper.cpp
+++ b/src/resources/openglimagehelper.cpp
@@ -110,7 +110,7 @@ Image *OpenGLImageHelper::createTextSurface(SDL_Surface *const tmpImage,
return img;
}
-int OpenGLImageHelper::powerOfTwo(const int input) const
+int OpenGLImageHelper::powerOfTwo(const int input)
{
int value;
if (mTextureType == GL_TEXTURE_2D)
diff --git a/src/resources/openglimagehelper.h b/src/resources/openglimagehelper.h
index 6c6492eb4..2f203a00a 100644
--- a/src/resources/openglimagehelper.h
+++ b/src/resources/openglimagehelper.h
@@ -123,7 +123,7 @@ class OpenGLImageHelper final : public ImageHelper
/**
* Returns the first power of two equal or bigger than the input.
*/
- int powerOfTwo(const int input) const A_WARN_UNUSED;
+ static int powerOfTwo(const int input) A_WARN_UNUSED;
Image *glLoad(SDL_Surface *tmpImage,
int width = 0, int height = 0) const A_WARN_UNUSED;
diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp
index 4cc7a4574..954930b64 100644
--- a/src/resources/resourcemanager.cpp
+++ b/src/resources/resourcemanager.cpp
@@ -399,7 +399,7 @@ bool ResourceManager::exists(const std::string &path) const
return PhysFs::exists(path.c_str());
}
-bool ResourceManager::existsLocal(const std::string &path) const
+bool ResourceManager::existsLocal(const std::string &path)
{
bool flg(false);
std::fstream file;
@@ -415,7 +415,7 @@ bool ResourceManager::isDirectory(const std::string &path) const
return PhysFs::isDirectory(path.c_str());
}
-std::string ResourceManager::getPath(const std::string &file) const
+std::string ResourceManager::getPath(const std::string &file)
{
// get the real path to the file
const char *const tmp = PhysFs::getRealDir(file.c_str());
@@ -982,7 +982,7 @@ void *ResourceManager::loadFile(const std::string &fileName, int &fileSize)
}
bool ResourceManager::copyFile(const std::string &restrict src,
- const std::string &restrict dst) const
+ const std::string &restrict dst)
{
PHYSFS_file *const srcFile = PhysFs::openRead(src.c_str());
if (!srcFile)
@@ -1054,7 +1054,7 @@ bool ResourceManager::loadTextFileLocal(const std::string &fileName,
void ResourceManager::saveTextFile(std::string path,
const std::string &restrict name,
- const std::string &restrict text) const
+ const std::string &restrict text)
{
if (!mkdir_r(path.c_str()))
{
diff --git a/src/resources/resourcemanager.h b/src/resources/resourcemanager.h
index 72cad5988..2398cf212 100644
--- a/src/resources/resourcemanager.h
+++ b/src/resources/resourcemanager.h
@@ -122,7 +122,7 @@ class ResourceManager final
/**
* Checks whether the given file or directory exists
*/
- bool existsLocal(const std::string &path) const A_WARN_UNUSED;
+ static bool existsLocal(const std::string &path) A_WARN_UNUSED;
/**
* Checks whether the given path is a directory.
@@ -136,7 +136,7 @@ class ResourceManager final
* @param file The file to get the real path to.
* @return The real path.
*/
- std::string getPath(const std::string &file) const A_WARN_UNUSED;
+ static std::string getPath(const std::string &file) A_WARN_UNUSED;
/**
* Creates a resource and adds it to the resource map.
@@ -184,8 +184,8 @@ class ResourceManager final
* @return true on success, false on failure. An error message should be
* in the log file.
*/
- bool copyFile(const std::string &restrict src,
- const std::string &restrict dst) const;
+ static bool copyFile(const std::string &restrict src,
+ const std::string &restrict dst);
/**
* Convenience wrapper around ResourceManager::get for loading
@@ -274,8 +274,9 @@ class ResourceManager final
static bool loadTextFileLocal(const std::string &fileName,
StringVect &lines);
- void saveTextFile(std::string path, const std::string &restrict name,
- const std::string &restrict text) const;
+ static void saveTextFile(std::string path,
+ const std::string &restrict name,
+ const std::string &restrict text);
Image *getRescaled(Image *const image,
const int width, const int height) A_WARN_UNUSED;
diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp
index e37aa1aa8..5265a1a96 100644
--- a/src/resources/spritedef.cpp
+++ b/src/resources/spritedef.cpp
@@ -493,12 +493,16 @@ void SpriteDef::addAction(const unsigned hp, const std::string &name,
(*mActions[hp])[name] = action;
}
-bool SpriteDef::addSequence(const int start, const int end, const int delay,
- const int offsetX, const int offsetY,
+bool SpriteDef::addSequence(const int start,
+ const int end,
+ const int delay,
+ const int offsetX,
+ const int offsetY,
const int variant_offset,
- int repeat, const int rand,
+ int repeat,
+ const int rand,
const ImageSet *const imageSet,
- Animation *const animation) const
+ Animation *const animation)
{
if (!imageSet || !animation)
return true;
diff --git a/src/resources/spritedef.h b/src/resources/spritedef.h
index ecedde507..b9f5d2b19 100644
--- a/src/resources/spritedef.h
+++ b/src/resources/spritedef.h
@@ -159,12 +159,16 @@ class SpriteDef final : public Resource
void addAction(const unsigned hp, const std::string &name,
Action *const action);
- bool addSequence(const int start, const int end, const int delay,
- const int offsetX, const int offsetY,
- const int variant_offset,
- int repeat, const int rand,
- const ImageSet *const imageSet,
- Animation *const animation) const;
+ static bool addSequence(const int start,
+ const int end,
+ const int delay,
+ const int offsetX,
+ const int offsetY,
+ const int variant_offset,
+ int repeat,
+ const int rand,
+ const ImageSet *const imageSet,
+ Animation *const animation);
private:
/**
diff --git a/src/soundmanager.cpp b/src/soundmanager.cpp
index f106b6623..e9fd3fea0 100644
--- a/src/soundmanager.cpp
+++ b/src/soundmanager.cpp
@@ -170,7 +170,7 @@ void SoundManager::init()
playMusic(mCurrentMusicFile);
}
-void SoundManager::info() const
+void SoundManager::info()
{
SDL_version compiledVersion;
const char *format = "Unknown";
diff --git a/src/soundmanager.h b/src/soundmanager.h
index 3ed5b6fc0..9eb1ea8a2 100644
--- a/src/soundmanager.h
+++ b/src/soundmanager.h
@@ -94,7 +94,7 @@ class SoundManager final : public ConfigListener
void fadeOutAndPlayMusic(const std::string &fileName,
const int ms = 1000);
- int getMaxVolume() const A_WARN_UNUSED
+ static int getMaxVolume() A_WARN_UNUSED
{ return MIX_MAX_VOLUME; }
void setMusicVolume(const int volume);
@@ -138,7 +138,7 @@ class SoundManager final : public ConfigListener
private:
/** Logs various info about sound device. */
- void info() const;
+ static void info();
/** Halts and frees currently playing music. */
void haltMusic();
diff --git a/src/spellmanager.cpp b/src/spellmanager.cpp
index 85ac4bf22..b1fad932a 100644
--- a/src/spellmanager.cpp
+++ b/src/spellmanager.cpp
@@ -165,7 +165,7 @@ void SpellManager::invoke(const int spellId) const
}
}
-void SpellManager::invokeSpell(const TextCommand *const spell) const
+void SpellManager::invokeSpell(const TextCommand *const spell)
{
if (!chatWindow || !spell)
return;
@@ -173,7 +173,7 @@ void SpellManager::invokeSpell(const TextCommand *const spell) const
}
void SpellManager::invokeSpell(const TextCommand *const spell,
- const Being *const target) const
+ const Being *const target)
{
if (!chatWindow || !spell || !target)
return;
@@ -181,7 +181,7 @@ void SpellManager::invokeSpell(const TextCommand *const spell,
}
std::string SpellManager::parseCommand(std::string command,
- const Being *const target) const
+ const Being *const target)
{
if (!player_node)
return command;
diff --git a/src/spellmanager.h b/src/spellmanager.h
index c30fa645f..f2830edb6 100644
--- a/src/spellmanager.h
+++ b/src/spellmanager.h
@@ -70,14 +70,14 @@ class SpellManager final
private:
void fillSpells();
- void invokeSpell(const TextCommand *const spell,
- const Being *const target) const;
+ static void invokeSpell(const TextCommand *const spell,
+ const Being *const target);
- void invokeSpell(const TextCommand *const spell) const;
+ static void invokeSpell(const TextCommand *const spell);
- std::string parseCommand(std::string command,
- const Being *const target)
- const A_WARN_UNUSED;
+ static std::string parseCommand(std::string command,
+ const Being *const target)
+ A_WARN_UNUSED;
std::map<unsigned int, TextCommand*> mSpells;
std::vector<TextCommand*> mSpellsVector;
diff --git a/src/touchmanager.cpp b/src/touchmanager.cpp
index 2f93a4ddc..b7b926383 100644
--- a/src/touchmanager.cpp
+++ b/src/touchmanager.cpp
@@ -52,6 +52,8 @@ TouchManager::TouchManager() :
mButtonsSize(1),
mJoystickSize(1),
mButtonsFormat(0),
+ mWidth(0),
+ mHeight(0),
mShow(false),
mInGame(false),
mTempHideButtons(false)
@@ -99,6 +101,8 @@ void TouchManager::init()
loadPad();
if (mShowButtons)
loadButtons();
+ mWidth = mainGraphics->mWidth;
+ mHeight = mainGraphics->mHeight;
}
void TouchManager::loadTouchItem(TouchItem **item, const std::string &name,
@@ -309,8 +313,8 @@ bool TouchManager::isActionActive(const int index) const
void TouchManager::resize(const int width, const int height)
{
mRedraw = true;
- const int maxHeight = mainGraphics->mHeight;
- const int diffW = width - mainGraphics->mWidth;
+ const int maxHeight = mHeight;
+ const int diffW = width - mWidth;
const int diffH = height - maxHeight;
FOR_EACH (TouchItemVectorCIter, it, mObjects)
{
@@ -323,8 +327,8 @@ void TouchManager::resize(const int width, const int height)
case LEFT:
if (height != maxHeight)
{
- item->y += (height - item->height) / 2;
- item->rect.y += (height - item->rect.y) / 2;
+ item->y = (height - item->height) / 2;
+ item->rect.y = (height - item->rect.y) / 2;
}
break;
case RIGHT:
@@ -340,18 +344,17 @@ void TouchManager::resize(const int width, const int height)
break;
}
}
+ mWidth = mainGraphics->mWidth;
+ mHeight = mainGraphics->mHeight;
}
void TouchManager::unload(TouchItem *const item)
{
if (item)
{
- Theme *const theme = Theme::instance();
- if (!theme)
- return;
if (item->images)
{
- theme->unloadRect(*item->images);
+ Theme::unloadRect(*item->images);
delete item->images;
item->images = nullptr;
if (item->icon)
diff --git a/src/touchmanager.h b/src/touchmanager.h
index 8668654ec..6f7b96a6d 100644
--- a/src/touchmanager.h
+++ b/src/touchmanager.h
@@ -151,7 +151,7 @@ class TouchManager final : public ConfigListener
void loadKeyboard();
- int getPadSize()
+ int getPadSize() const
{ return (mJoystickSize + 2) * 50; }
void setInGame(const bool b);
@@ -160,7 +160,7 @@ class TouchManager final : public ConfigListener
void shutdown();
- void executeAction(const std::string &event);
+ static void executeAction(const std::string &event);
private:
TouchItem *mKeyboard;
@@ -176,6 +176,8 @@ class TouchManager final : public ConfigListener
int mButtonsSize;
int mJoystickSize;
int mButtonsFormat;
+ int mWidth;
+ int mHeight;
bool mShow;
bool mInGame;
bool mTempHideButtons;
diff --git a/src/utils/stringutils.cpp b/src/utils/stringutils.cpp
index 8e657bb93..224c2a8e8 100644
--- a/src/utils/stringutils.cpp
+++ b/src/utils/stringutils.cpp
@@ -721,3 +721,9 @@ bool isDigit(const std::string &str)
}
return true;
}
+
+void secureChatCommand(std::string &str)
+{
+ if (str[0] == '/' || str[0] == '@' || str[0] == '#')
+ str = "_" + str;
+}
diff --git a/src/utils/stringutils.h b/src/utils/stringutils.h
index 02b1aa031..4a73b3e58 100644
--- a/src/utils/stringutils.h
+++ b/src/utils/stringutils.h
@@ -236,4 +236,6 @@ std::string decodeLinkText(std::string data);
bool isDigit(const std::string &str);
+void secureChatCommand(std::string &str);
+
#endif // UTILS_STRINGUTILS_H
diff --git a/src/utils/translation/poparser.cpp b/src/utils/translation/poparser.cpp
index 76dae99a5..f0ab95005 100644
--- a/src/utils/translation/poparser.cpp
+++ b/src/utils/translation/poparser.cpp
@@ -214,7 +214,7 @@ bool PoParser::readMsgStr()
return false;
}
-bool PoParser::checkLine()
+bool PoParser::checkLine() const
{
const size_t sz = mLine.size();
// check is line in format: "text"
@@ -226,14 +226,14 @@ PoDict *PoParser::getEmptyDict()
return new PoDict("");
}
-bool PoParser::checkLang(std::string lang) const
+bool PoParser::checkLang(std::string lang)
{
// check is po file exists
const ResourceManager *const resman = ResourceManager::getInstance();
return resman->exists(getFileName(lang));
}
-std::string PoParser::getFileName(std::string lang) const
+std::string PoParser::getFileName(std::string lang)
{
// get po file name from lang name
// logger->log("getFileName: translations/%s.po", lang.c_str());
@@ -245,7 +245,7 @@ PoDict *PoParser::getDict() const
return new PoDict(mLang);
}
-void PoParser::convertStr(std::string &str) const
+void PoParser::convertStr(std::string &str)
{
if (str.empty())
return;
diff --git a/src/utils/translation/poparser.h b/src/utils/translation/poparser.h
index dbf87b531..08a6ac7b1 100644
--- a/src/utils/translation/poparser.h
+++ b/src/utils/translation/poparser.h
@@ -39,7 +39,7 @@ class PoParser final
const std::string &restrict fileName = "",
PoDict *restrict const dict = nullptr);
- bool checkLang(std::string lang) const;
+ static bool checkLang(std::string lang);
static PoDict *getEmptyDict();
@@ -55,13 +55,13 @@ class PoParser final
bool readMsgStr();
- bool checkLine();
+ bool checkLine() const;
- std::string getFileName(std::string lang) const;
+ static std::string getFileName(std::string lang);
PoDict *getDict() const;
- void convertStr(std::string &str) const;
+ static void convertStr(std::string &str);
// current lang
std::string mLang;
diff --git a/src/utils/xml.h b/src/utils/xml.h
index 5c1fb7605..48d60cda7 100644
--- a/src/utils/xml.h
+++ b/src/utils/xml.h
@@ -90,6 +90,9 @@ namespace XML
*/
XmlNodePtr rootNode() A_WARN_UNUSED;
+ bool isLoaded() const
+ { return mDoc != nullptr; }
+
private:
xmlDocPtr mDoc;
};