summaryrefslogtreecommitdiff
path: root/src/gui/shortcut/emoteshortcut.h
blob: f4d029588a1060130960bf7ffef0326757c110c3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 *  The ManaPlus Client
 *  Copyright (C) 2009  Aethyra Development Team
 *  Copyright (C) 2011-2019  The ManaPlus Developers
 *
 *  This file is part of The ManaPlus Client.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef GUI_SHORTCUT_EMOTESHORTCUT_H
#define GUI_SHORTCUT_EMOTESHORTCUT_H

#include "const/emoteshortcut.h"

#include "utils/cast.h"

#include "localconsts.h"

/**
 * The class which keeps track of the emote shortcuts.
 */
class EmoteShortcut final
{
    public:
        /**
         * Constructor.
         */
        EmoteShortcut();

        A_DELETE_COPY(EmoteShortcut)

        /**
         * Destructor.
         */
        ~EmoteShortcut();

        /**
         * Load the configuration information.
         */
        void load();

        /**
         * Returns the shortcut Emote ID specified by the index.
         *
         * @param index Index of the shortcut Emote.
         */
        unsigned char getEmote(const size_t index) const A_WARN_UNUSED
        { return mEmotes[index]; }

        /**
         * Returns the amount of shortcut Emotes.
         */
        static unsigned int getEmoteCount() A_WARN_UNUSED
        { return SHORTCUT_EMOTES; }

        /**
         * Returns the emote ID that is currently selected.
         */
        unsigned char getEmoteSelected() const noexcept2 A_WARN_UNUSED
        { return mEmoteSelected; }

        /**
         * Adds the selected emote ID to the emotes specified by the index.
         *
         * @param index Index of the emotes.
         */
        void setEmote(const size_t index)
        { mEmotes[index] = mEmoteSelected; }

        /**
         * Adds a emoticon to the emotes store specified by the index.
         *
         * @param index Index of the emote.
         * @param emoteId ID of the emote.
         */
        void setEmotes(const size_t index,
                       const unsigned char emoteId)
        { mEmotes[index] = emoteId; }

        /**
         * Set the Emote that is selected.
         *
         * @param emoteId The ID of the emote that is to be assigned.
         */
        void setEmoteSelected(const unsigned char emoteId)
        { mEmoteSelected = emoteId; }

        /**
         * A flag to check if the Emote is selected.
         */
        bool isEmoteSelected() const noexcept2 A_WARN_UNUSED
        { return mEmoteSelected != 0U; }

        /**
         * Remove a Emote from the shortcut.
         */
        void removeEmote(const size_t index)
        { if (index < CAST_SIZE(SHORTCUT_EMOTES)) mEmotes[index] = 0; }

        /**
         * Try to use the Emote specified by the index.
         *
         * @param index Index of the emote shortcut.
         */
        void useEmote(const size_t index) const;

        void useEmotePlayer(const size_t index) const;

    private:
        /**
         * Save the configuration information.
         */
        void save() const;

        unsigned char mEmotes[SHORTCUT_EMOTES];  // The emote stored.
        unsigned char mEmoteSelected;            // The emote held by cursor.
};

extern EmoteShortcut *emoteShortcut;

#endif  // GUI_SHORTCUT_EMOTESHORTCUT_H