From aae7a5ec7b6d962edd6620f1aedd468a6bc98e1a Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Wed, 29 Jul 2015 14:33:37 +0300
Subject: Add ability to show badges under nick.

Add option for select how show badges.
---
 src/being/being.cpp                    | 14 +++++++++-----
 src/being/being.h                      |  3 +--
 src/defaults.cpp                       |  3 +--
 src/gui/widgets/tabs/setup_players.cpp | 28 +++++++++++++++++++++-------
 src/gui/widgets/tabs/setup_players.h   |  5 +++++
 5 files changed, 37 insertions(+), 16 deletions(-)

(limited to 'src')

diff --git a/src/being/being.cpp b/src/being/being.cpp
index 6cc8bae4b..f0cc40bd9 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -118,8 +118,7 @@ bool Being::mEnableReorderSprites = true;
 bool Being::mHideErased = false;
 Move Being::mMoveNames = Move_false;
 bool Being::mUseDiagonal = true;
-bool Being::mShowBadges = true;
-bool Being::mShowBadgesTop = true;
+uint8_t Being::mShowBadges = 1;
 int Being::mAwayEffect = -1;
 
 std::list<BeingCacheEntry*> beingInfoCache;
@@ -1885,12 +1884,18 @@ void Being::drawEmotion(Graphics *const graphics,
     {
         int x;
         int y;
-        if (!mShowBadgesTop && mDispName && gui)
+        if (mShowBadges == 2 && mDispName && gui)
         {
             Font *const font = gui->getFont();
             x = mDispName->getX() - offsetX + mDispName->getWidth();
             y = mDispName->getY() - offsetY - font->getHeight();
         }
+        else if (mShowBadges == 3 && mDispName && gui)
+        {
+            Font *const font = gui->getFont();
+            x = px + 8 - mBadgesCount * 8;
+            y = mDispName->getY() - offsetY;
+        }
         else
         {
             x = px + 8 - mBadgesCount * 8;
@@ -2424,8 +2429,7 @@ void Being::reReadConfig()
         mHideErased = config.getBoolValue("hideErased");
         mMoveNames = fromBool(config.getBoolValue("moveNames"), Move);
         mUseDiagonal = config.getBoolValue("useDiagonalSpeed");
-        mShowBadges = config.getBoolValue("showBadges");
-        mShowBadgesTop = config.getBoolValue("showBadgesTop");
+        mShowBadges = config.getIntValue("showBadges");
 
         mUpdateConfigTime = cur_time;
     }
diff --git a/src/being/being.h b/src/being/being.h
index 5d4c5d0ec..1f01001c3 100644
--- a/src/being/being.h
+++ b/src/being/being.h
@@ -1106,8 +1106,7 @@ class Being notfinal : public ActorSprite,
         static bool mHideErased;
         static Move mMoveNames;
         static bool mUseDiagonal;
-        static bool mShowBadges;
-        static bool mShowBadgesTop;
+        static uint8_t mShowBadges;
         static int mAwayEffect;
 
         unsigned int mMoveTime;
diff --git a/src/defaults.cpp b/src/defaults.cpp
index 0a1983558..a7b2c14b7 100644
--- a/src/defaults.cpp
+++ b/src/defaults.cpp
@@ -380,8 +380,7 @@ DefaultsData* getConfigDefaults()
     AddDEF("ignorelogpackets", "");
     AddDEF("disableLoggingInGame", false);
     AddDEF("sellShopName", "unnamed");
-    AddDEF("showBadges", true);
-    AddDEF("showBadgesTop", true);
+    AddDEF("showBadges", 1);
     return configData;
 }
 
diff --git a/src/gui/widgets/tabs/setup_players.cpp b/src/gui/widgets/tabs/setup_players.cpp
index 82f8b0115..cd28c8d69 100644
--- a/src/gui/widgets/tabs/setup_players.cpp
+++ b/src/gui/widgets/tabs/setup_players.cpp
@@ -22,6 +22,8 @@
 
 #include "gui/widgets/tabs/setup_players.h"
 
+#include "gui/models/namesmodel.h"
+
 #include "gui/widgets/containerplacer.h"
 #include "gui/widgets/layouthelper.h"
 #include "gui/widgets/scrollarea.h"
@@ -31,8 +33,23 @@
 
 #include "debug.h"
 
+static const int badgesListSize = 4;
+
+static const char *const badgesList[] =
+{
+    // TRANSLATORS: screen badges type
+    N_("hide"),
+    // TRANSLATORS: screen badges type
+    N_("show at top"),
+    // TRANSLATORS: screen badges type
+    N_("show at right"),
+    // TRANSLATORS: screen badges type
+    N_("show at bottom"),
+};
+
 Setup_Players::Setup_Players(const Widget2 *const widget) :
-    SetupTabScroll(widget)
+    SetupTabScroll(widget),
+    mBadgesList(new NamesModel)
 {
     // TRANSLATORS: settings tab name
     setName(_("Players"));
@@ -69,13 +86,10 @@ Setup_Players::Setup_Players(const Widget2 *const widget) :
     new SetupItemCheckBox(_("Auto move names"), "",
         "moveNames", this, "moveNamesEvent");
 
+    mBadgesList->fillFromArray(&badgesList[0], badgesListSize);
     // TRANSLATORS: settings option
-    new SetupItemCheckBox(_("Show badges"), "",
-        "showBadges", this, "showBadgesEvent");
-
-    // TRANSLATORS: settings option
-    new SetupItemCheckBox(_("Show badges at top"), "",
-        "showBadgesTop", this, "showBadgesTopEvent");
+    new SetupItemDropDown(_("Badges"), "",
+        "showBadges", this, "showBadgesEvent", mBadgesList, 150);
 
     // TRANSLATORS: settings option
     new SetupItemCheckBox(_("Secure trades"), "",
diff --git a/src/gui/widgets/tabs/setup_players.h b/src/gui/widgets/tabs/setup_players.h
index 7561e770c..801839649 100644
--- a/src/gui/widgets/tabs/setup_players.h
+++ b/src/gui/widgets/tabs/setup_players.h
@@ -25,12 +25,17 @@
 
 #include "gui/widgets/tabs/setuptabscroll.h"
 
+class NamesModel;
+
 class Setup_Players final : public SetupTabScroll
 {
     public:
         explicit Setup_Players(const Widget2 *const widget);
 
         A_DELETE_COPY(Setup_Players)
+
+    private:
+        NamesModel *mBadgesList;
 };
 
 #endif  // GUI_WIDGETS_TABS_SETUP_PLAYERS_H
-- 
cgit v1.2.3-70-g09d2