Etterna 0.74.4
Loading...
Searching...
No Matches
OptionsList.h
1#ifndef SCREEN_OPTIONS_LIST_H
2#define SCREEN_OPTIONS_LIST_H
3
4#include "Etterna/Actor/Base/BitmapText.h"
5#include "Etterna/Models/Misc/CodeSet.h"
6#include "Etterna/Models/Misc/OptionRowHandler.h"
7#include "Etterna/Screen/Others/ScreenWithMenuElements.h"
8#include "Etterna/Models/Misc/ThemeMetric.h"
9
10class OptionsList;
12{
13 public:
14 void Load(OptionsList* pOptions, const std::string& sType);
15 void SetFromHandler(const OptionRowHandler* pHandler);
16 void SetTextFromHandler(const OptionRowHandler* pHandler);
17 void SetUnderlines(const std::vector<bool>& aSelections,
18 const OptionRowHandler* pHandler);
19
20 void PositionCursor(Actor* pCursor, int iSelection);
21
22 void Start();
23
24 private:
25 OptionsList* m_pOptions = nullptr;
26
27 std::vector<BitmapText> m_Text;
28 // underline for each ("self or child has selection")
29 std::vector<AutoActor> m_Underlines;
30
31 bool m_bItemsInTwoRows = false;
32
33 ThemeMetric<float> ITEMS_SPACING_Y;
34};
36class OptionsList : public ActorFrame
37{
38 public:
39 friend class OptionListRow;
40
42 ~OptionsList() override;
43
44 void Load(const std::string& sType, PlayerNumber pn);
45 void Reset();
46
47 void Link(OptionsList* pLink) { m_pLinked = pLink; }
48
50 void Open();
51
53 void Close();
54
55 bool Input(const InputEventPlus& input);
56 bool IsOpened() const { return !m_asMenuStack.empty(); }
57
58 bool Start(); // return true if the last menu was popped in response to this
59 // press
60
61 private:
63
64 void SelectItem(const std::string& sRowName, int iMenuItem);
65 void MoveItem(const std::string& sRowName, int iMove) {}
66 void SwitchMenu(int iDir);
67 void PositionCursor();
68 void SelectionsChanged(const std::string& sRowName);
69 void UpdateMenuFromSelections();
70 std::string GetCurrentRow() const;
71 const OptionRowHandler* GetCurrentHandler();
72 int GetOneSelection(const std::string& sRow, bool bAllowFail = false) const;
73 void SwitchToCurrentRow();
74 void TweenOnCurrentRow(bool bForward);
75 void SetDefaultCurrentRow();
76 void Push(const std::string& sDest);
77 void Pop();
78 void ImportRow(const std::string& sRow);
79 void ExportRow(const std::string& sRow);
80 static int FindScreenInHandler(const OptionRowHandler* pHandler,
81 const std::string& sScreen);
82
83 InputQueueCodeSet m_Codes;
84
85 OptionsList* m_pLinked;
86
87 bool m_bStartIsDown;
88 bool m_bAcceptStartRelease;
89
90 std::vector<std::string> m_asLoadedRows;
91 std::map<std::string, OptionRowHandler*> m_Rows;
92 std::map<std::string, std::vector<bool>> m_bSelections;
93 std::set<std::string> m_setDirectRows;
94 std::set<std::string>
95 m_setTopMenus; // list of top-level menus, pointing to submenus
96
97 PlayerNumber m_pn;
98 AutoActor m_Cursor;
99 OptionListRow m_Row[2];
100 int m_iCurrentRow;
101
102 std::vector<std::string> m_asMenuStack;
103 int m_iMenuStackSelection;
104};
105
106#endif
A container for other Actors.
Definition ActorFrame.h:8
Base class for all objects that appear on the screen.
Definition Actor.h:77
A smart pointer for Actor.
Definition AutoActor.h:13
Holds a device input plus Game/Menu translations.
Definition InputEventPlus.h:9
Definition CodeSet.h:8
Definition OptionsList.h:12
Shows PlayerOptions and SongOptions in icon form.
Definition OptionRowHandler.h:185
A popup options list.
Definition OptionsList.h:37
void Open()
Show the top-level menu.
Definition OptionsList.cpp:263
void Close()
Close all menus (for menu timer).
Definition OptionsList.cpp:281
The theme specific data.
Definition ThemeMetric.h:52