]> git.lizzy.rs Git - dragonfireclient.git/blob - src/quicktune_shortcutter.h
Optimize string (mis)handling (#8128)
[dragonfireclient.git] / src / quicktune_shortcutter.h
1 /*
2 Minetest
3 Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #pragma once
21
22 #include "quicktune.h"
23
24 class QuicktuneShortcutter
25 {
26 private:
27         std::vector<std::string> m_names;
28         u32 m_selected_i;
29         std::string m_message;
30 public:
31         bool hasMessage() const
32         {
33                 return !m_message.empty();
34         }
35
36         std::string getMessage()
37         {
38                 std::string s = m_message;
39                 m_message = "";
40                 if (!s.empty())
41                         return std::string("[quicktune] ") + s;
42                 return "";
43         }
44         std::string getSelectedName()
45         {
46                 if(m_selected_i < m_names.size())
47                         return m_names[m_selected_i];
48                 return "(nothing)";
49         }
50         void next()
51         {
52                 m_names = getQuicktuneNames();
53                 if(m_selected_i < m_names.size()-1)
54                         m_selected_i++;
55                 else
56                         m_selected_i = 0;
57                 m_message = std::string("Selected \"")+getSelectedName()+"\"";
58         }
59         void prev()
60         {
61                 m_names = getQuicktuneNames();
62                 if(m_selected_i > 0)
63                         m_selected_i--;
64                 else
65                         m_selected_i = m_names.size()-1;
66                 m_message = std::string("Selected \"")+getSelectedName()+"\"";
67         }
68         void inc()
69         {
70                 QuicktuneValue val = getQuicktuneValue(getSelectedName());
71                 val.relativeAdd(0.05);
72                 m_message = std::string("\"")+getSelectedName()
73                                 +"\" = "+val.getString();
74                 setQuicktuneValue(getSelectedName(), val);
75         }
76         void dec()
77         {
78                 QuicktuneValue val = getQuicktuneValue(getSelectedName());
79                 val.relativeAdd(-0.05);
80                 m_message = std::string("\"")+getSelectedName()
81                                 +"\" = "+val.getString();
82                 setQuicktuneValue(getSelectedName(), val);
83         }
84 };