SatDump 2.0.0-alpha-76a915210
Loading...
Searching...
No Matches
handler.h
Go to the documentation of this file.
1#pragma once
2
6
7#include "imgui/imgui.h"
8#include "nlohmann/json.hpp"
9#include "tree.h"
10#include <functional>
11#include <map>
12#include <memory>
13#include <mutex>
14#include <string>
15
16namespace satdump
17{
18 namespace handlers
19 {
31 class Handler
32 {
33 protected: // TODOREWORK?
34 std::vector<std::shared_ptr<Handler>> subhandlers;
35 std::mutex subhandlers_mtx;
36
37 public:
38 std::string handler_tree_icon = "N";
39
40 private:
41 TreeDrawer tree_local;
42 std::vector<std::shared_ptr<Handler>> subhandlers_marked_for_del;
43
44 bool handler_can_be_selected = true;
45 bool handler_can_be_dragged = true;
46 bool handler_can_be_dragged_to = true;
47 bool handler_can_subhandlers_be_dragged = true;
48
49 bool handler_can_be_reorg = false;
50
51 void delSubHandlersNow()
52 {
53 subhandlers_mtx.lock();
54 if (subhandlers_marked_for_del.size())
55 {
56 for (auto &h : subhandlers_marked_for_del)
57 subhandlers.erase(std::find(subhandlers.begin(), subhandlers.end(), h));
58 subhandlers_marked_for_del.clear();
59 }
60 subhandlers_mtx.unlock();
61 }
62
63 bool isParent(const std::shared_ptr<Handler> &dragged, const std::shared_ptr<Handler> &potential_child);
64
65 public:
69 virtual void drawMenu() = 0;
70
74 virtual void drawContents(ImVec2 win_size) = 0;
75
79 virtual void drawMenuBar() {}
80
87 virtual bool drawTreeMenu(std::shared_ptr<Handler> &h);
88
93 virtual std::string getName() { return "!!!Invalid!!!"; }
94
99 std::string getTreeID() { return getName() + "##" + std::to_string((size_t)this); }
100
105 bool hasSubhandlers();
106
112 virtual void addSubHandler(std::shared_ptr<Handler> handler, bool ontop = false);
113
118 virtual void delSubHandler(std::shared_ptr<Handler> handler, bool now = false);
119
124 virtual std::vector<std::shared_ptr<Handler>> getAllSubHandlers();
125
130 void setCanBeSelected(bool v) { handler_can_be_selected = v; }
131
136 void setCanBeDragged(bool v) { handler_can_be_dragged = v; }
137
142 void setCanBeDraggedTo(bool v) { handler_can_be_dragged_to = v; }
143
148 void setSubHandlersCanBeDragged(bool v) { handler_can_subhandlers_be_dragged = v; }
149
154 void setCanSubBeReorgTo(bool v) { handler_can_be_reorg = v; }
155
160 virtual void setConfig(nlohmann::json p) {}
161
166 virtual nlohmann::json getConfig();
167
171 virtual void resetConfig() {};
172
173 public:
174 virtual std::string getID() = 0; // TODOREWORK
175 };
176 } // namespace handlers
177} // namespace satdump
SatDump's handler base class.
Definition handler.h:32
virtual void delSubHandler(std::shared_ptr< Handler > handler, bool now=false)
Delete a subhandler.
Definition handler.cpp:159
virtual void drawContents(ImVec2 win_size)=0
Render explorer contents (center/left)
void setCanBeDragged(bool v)
Set if a handler can be dragged around in the tree.
Definition handler.h:136
virtual void resetConfig()
Optional, allows resetting the handler's configuration.
Definition handler.h:171
void setSubHandlersCanBeDragged(bool v)
Set if a handler's subhandlers can be dragged to in the tree.
Definition handler.h:148
std::string getTreeID()
Get this handler's ImGui ID for rendering in the tree.
Definition handler.h:99
virtual std::string getName()
Get this handler's readable name.
Definition handler.h:93
virtual void drawMenuBar()
Render explorer menu bar (in the left sidebar)
Definition handler.h:79
virtual std::vector< std::shared_ptr< Handler > > getAllSubHandlers()
Get all current subhandlers.
Definition handler.cpp:169
virtual nlohmann::json getConfig()
Optional, allows getting a configuration/state as JSON.
Definition handler.cpp:178
virtual void addSubHandler(std::shared_ptr< Handler > handler, bool ontop=false)
Add a new subhandler.
Definition handler.cpp:149
virtual bool drawTreeMenu(std::shared_ptr< Handler > &h)
Render explorer menu bar (in the left sidebar)
Definition handler.cpp:34
void setCanBeDraggedTo(bool v)
Set if a handler can be dragged to in the tree.
Definition handler.h:142
bool hasSubhandlers()
Check if this handler contains any sub-handlers.
Definition handler.cpp:141
void setCanSubBeReorgTo(bool v)
Set if a handler's subhandlers can be reordered.
Definition handler.h:154
void setCanBeSelected(bool v)
Set if a handler can be select in the tree.
Definition handler.h:130
virtual void drawMenu()=0
Render explorer menu left sidebar.
virtual void setConfig(nlohmann::json p)
Optional, allows setting a configuration/state from JSON.
Definition handler.h:160
Handler Tree Drawer.
Definition tree.h:19