Unravel Engine C++ Reference
Loading...
Searching...
No Matches
panel.cpp
Go to the documentation of this file.
1#include "panel.h"
2#include "panels_defs.h"
3
4#include <imgui/imgui.h>
5#include <imgui/imgui_internal.h>
8
9#include <logging/logging.h>
10
11namespace unravel
12{
13
15{
16 console_log_panel_ = std::make_shared<console_log_panel>();
17 console_log_panel_->set_level(spdlog::level::trace);
18 get_mutable_logging_container()->add_sink(console_log_panel_);
19
20 header_panel_ = std::make_unique<header_panel>(this);
21 footer_panel_ = std::make_unique<footer_panel>();
22 cenral_dockspace_ = std::make_unique<dockspace>();
23
24 content_browser_panel_ = std::make_unique<content_browser_panel>(this);
25 hierarchy_panel_ = std::make_unique<hierarchy_panel>(this);
26 inspector_panel_ = std::make_unique<inspector_panel>(this);
27 scene_panel_ = std::make_unique<scene_panel>(this);
28 game_panel_ = std::make_unique<game_panel>();
29 statistics_panel_ = std::make_unique<statistics_panel>();
30 animation_panel_ = std::make_unique<animation_panel>(this);
31
32 deploy_panel_ = std::make_unique<deploy_panel>(this);
33 project_settings_panel_ = std::make_unique<project_settings_panel>(this);
34 editor_settings_panel_ = std::make_unique<editor_settings_panel>(this);
35 style_panel_ = std::make_unique<style_panel>(this);
36 undo_redo_panel_ = std::make_unique<undo_redo_panel>(this);
37}
38
40{
41 get_mutable_logging_container()->remove_sink(console_log_panel_);
42}
43
45{
46 style_panel_->init(ctx);
47
48 content_browser_panel_->init(ctx);
49 hierarchy_panel_->init(ctx);
50 inspector_panel_->init(ctx);
51 scene_panel_->init(ctx);
52 game_panel_->init(ctx);
53 statistics_panel_->init(ctx);
54 animation_panel_->init(ctx);
55}
56
58{
59 content_browser_panel_->deinit(ctx);
60 scene_panel_->deinit(ctx);
61 game_panel_->deinit(ctx);
62 inspector_panel_->deinit(ctx);
63 statistics_panel_->deinit(ctx);
64 animation_panel_->deinit(ctx);
65}
66
68{
69 scene_panel_->on_frame_update(ctx, dt);
70 game_panel_->on_frame_update(ctx, dt);
71}
72
74{
75 scene_panel_->on_frame_before_render(ctx, dt);
76 game_panel_->on_frame_before_render(ctx, dt);
77}
78
80{
81 scene_panel_->on_frame_render(ctx, dt);
82 game_panel_->on_frame_render(ctx, dt);
83}
84
86{
87 auto footer_size = ImGui::GetFrameHeightWithSpacing();
88 auto header_size = ImGui::GetFrameHeightWithSpacing() * 3;
89
90 header_panel_->on_frame_ui_render(ctx, header_size);
91
92 cenral_dockspace_->on_frame_ui_render(header_size, footer_size);
93
94 hierarchy_panel_->on_frame_ui_render(ctx, HIERARCHY_VIEW);
95
96 inspector_panel_->on_frame_ui_render(ctx, INSPECTOR_VIEW);
97
98 statistics_panel_->on_frame_ui_render(ctx, STATISTICS_VIEW);
99
100 console_log_panel_->on_frame_ui_render(ctx, CONSOLE_VIEW);
101
102 content_browser_panel_->on_frame_ui_render(ctx, CONTENT_VIEW);
103
104 scene_panel_->on_frame_ui_render(ctx, SCENE_VIEW);
105
106 game_panel_->on_frame_ui_render(ctx, GAME_VIEW);
107
108 animation_panel_->on_frame_ui_render(ctx, ANIMATION_VIEW);
109
110 deploy_panel_->on_frame_ui_render(ctx, DEPLOY_VIEW);
111
112 project_settings_panel_->on_frame_ui_render(ctx, PROJECT_SETTINGS_VIEW);
113
114 editor_settings_panel_->on_frame_ui_render(ctx, EDITOR_SETTINGS_VIEW);
115
116 footer_panel_->on_frame_ui_render(ctx,
117 footer_size,
118 [&]()
119 {
120 console_log_panel_->draw_last_log_button();
121 });
122 cenral_dockspace_->execute_dock_builder_order_and_focus_workaround();
123
124 // Draw the style picker window if visible
125 style_panel_->on_frame_ui_render();
126
127 // Draw the undo/redo panel if visible
128 undo_redo_panel_->on_frame_ui_render(ctx);
129
130
131 // Render toasts on top of everything, at the end of your code!
132 // You should push style vars here
133 ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 5.f); // Round borders
134 ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(43.f / 255.f, 43.f / 255.f, 43.f / 255.f, 100.f / 255.f)); // Background color
135 ImGui::RenderNotifications(); // <-- Here we render all notifications
137 ImGui::PopStyleVar(1); // Don't forget to Pop()
138 ImGui::PopStyleColor(1);
139}
140
142{
143 return *deploy_panel_;
144}
145
147{
148 return *project_settings_panel_;
149}
150
152{
153 return *editor_settings_panel_;
154}
155
157{
158 return *scene_panel_;
159}
160
162{
163 return *game_panel_;
164}
165
167{
168 return *console_log_panel_;
169}
170
172{
173 return *style_panel_;
174}
175
177{
178 return *animation_panel_;
179}
180
182{
183 return *undo_redo_panel_;
184}
185
187{
188 external_drop_data_.drop_in_progress = in_progress;
189}
190
192{
193 return external_drop_data_.drop_in_progress;
194}
195
197{
198 external_drop_data_.drop_position = pos;
199}
200
201auto imgui_panels::get_external_drop_position() const -> const ImVec2&
202{
203 return external_drop_data_.drop_position;
204}
205
206void imgui_panels::add_external_drop_file(const std::string& file)
207{
208 external_drop_data_.drop_files.emplace_back(file);
209}
210
212{
213 external_drop_data_.drop_files.clear();
214}
215
216auto imgui_panels::get_external_drop_files() const -> const std::vector<std::string>&
217{
218 return external_drop_data_.drop_files;
219}
220
221} // namespace unravel
void set_external_drop_in_progress(bool in_progress)
Definition panel.cpp:186
void add_external_drop_file(const std::string &file)
Definition panel.cpp:206
void on_frame_ui_render(rtti::context &ctx)
Definition panel.cpp:85
auto get_project_settings_panel() -> project_settings_panel &
Definition panel.cpp:146
auto get_external_drop_position() const -> const ImVec2 &
Definition panel.cpp:201
auto get_scene_panel() -> scene_panel &
Definition panel.cpp:156
void on_frame_update(rtti::context &ctx, delta_t dt)
Definition panel.cpp:67
void on_frame_render(rtti::context &ctx, delta_t dt)
Definition panel.cpp:79
auto get_game_panel() -> game_panel &
Definition panel.cpp:161
void on_frame_before_render(rtti::context &ctx, delta_t dt)
Definition panel.cpp:73
void clear_external_drop_files()
Definition panel.cpp:211
auto get_deploy_panel() -> deploy_panel &
Definition panel.cpp:141
auto get_console_log_panel() -> console_log_panel &
Definition panel.cpp:166
auto get_external_drop_files() const -> const std::vector< std::string > &
Definition panel.cpp:216
auto get_external_drop_in_progress() const -> bool
Definition panel.cpp:191
void deinit(rtti::context &ctx)
Definition panel.cpp:57
auto get_editor_settings_panel() -> editor_settings_panel &
Definition panel.cpp:151
auto get_style_panel() -> style_panel &
Definition panel.cpp:171
void set_external_drop_position(ImVec2 pos)
Definition panel.cpp:196
auto get_animation_panel() -> animation_panel &
Definition panel.cpp:176
void init(rtti::context &ctx)
Definition panel.cpp:44
auto get_undo_redo_panel() -> undo_redo_panel &
Definition panel.cpp:181
std::chrono::duration< float > delta_t
auto RenderMessageBoxes() -> void
Render all message boxes (call this in your main render loop)
NOTIFY_INLINE void RenderNotifications()
Render toasts, call at the end of your rendering!
auto get_mutable_logging_container() -> std::shared_ptr< spdlog::sinks::dist_sink_mt >
Definition logging.cpp:31
#define CONTENT_VIEW
Definition panels_defs.h:8
#define DEPLOY_VIEW
Definition panels_defs.h:12
#define HIERARCHY_VIEW
Definition panels_defs.h:9
#define STATISTICS_VIEW
Definition panels_defs.h:11
#define ANIMATION_VIEW
Definition panels_defs.h:16
#define SCENE_VIEW
Definition panels_defs.h:5
#define INSPECTOR_VIEW
Definition panels_defs.h:10
#define CONSOLE_VIEW
Definition panels_defs.h:4
#define PROJECT_SETTINGS_VIEW
Definition panels_defs.h:13
#define EDITOR_SETTINGS_VIEW
Definition panels_defs.h:14
#define GAME_VIEW
Definition panels_defs.h:7