Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
EditorOptionsWindow.cpp
Go to the documentation of this file.
1
2
5
9
10#include <IconsForkAwesome.h>
11
12#include <imgui_stdlib.h>
13
14namespace Divide {
16 : PlatformContextComponent(context),
17 _fileOpenDialog(false, true)
18 {
19 }
20
21 void EditorOptionsWindow::update([[maybe_unused]] const U64 deltaTimeUS)
22 {
23 }
24
26 {
27 if (!open) {
28 return;
29 }
30
32
33 const U32 flags = ImGuiWindowFlags_NoResize |
34 ImGuiWindowFlags_NoCollapse |
35 ImGuiWindowFlags_AlwaysAutoResize |
36 ImGuiWindowFlags_NoDocking |
37 (_openDialog ? ImGuiWindowFlags_NoBringToFrontOnFocus : ImGuiWindowFlags_Tooltip);
38
40 if (!ImGui::Begin("Editor options", nullptr, flags))
41 {
42 ImGui::End();
43 return;
44 }
45
47 ImGui::Text(ICON_FK_PLUS_SQUARE_O);
48 ImGui::SameLine();
49 if (ImGui::SliderFloat("Grid axis width", &axisWidth, 0.01f, 10.0f, "%.3f"))
50 {
52 }
53
54 ImGui::SameLine();
55 F32 gridLineWidth = 10.1f - _context.editor().infiniteGridScale();
56 if (ImGui::SliderFloat("Grid scale", &gridLineWidth, 1.f, 10.f, "%.3f"))
57 {
58 _context.editor().infiniteGridScale(10.1f - gridLineWidth);
59 }
60
61 static UndoEntry<I32> undo = {};
63 I32 selection = crtThemeIdx;
64 if (ImGui::Combo("Editor Theme", &selection, ImGui::GetDefaultStyleNames(), ImGuiStyle_Count))
65 {
66 ImGui::ResetStyle(static_cast<ImGuiStyleEnum>(selection));
68
70 undo._name = "Theme Selection";
71 undo._oldVal = crtThemeIdx;
72 undo._newVal = selection;
73 undo._dataSetter = [this](const I32& data)
74 {
75 const ImGuiStyleEnum style = static_cast<ImGuiStyleEnum>(data);
76 ImGui::ResetStyle(style);
78 };
81 }
82
83 ImGui::Separator();
84
85 std::string externalTextEditorPath = Attorney::EditorOptionsWindow::externalTextEditorPath(_context.editor()).string().c_str();
86 ImGui::Text( "Text Editor:" ); ImGui::SameLine();
87 if (ImGui::InputText("##Text Editor:", &externalTextEditorPath, ImGuiInputTextFlags_ReadOnly))
88 {
89 }
90
91 ImGui::SameLine();
92 const bool openDialog = ImGui::Button("Select");
93 if (openDialog)
94 {
97 _openDialog = true;
98 }
99 ImGui::Separator();
100
101 ImGui::Separator();
102 if (ImGui::Button("Cancel", ImVec2(120, 0)))
103 {
104 open = false;
106 for (U16 i = 0; i < _changeCount; ++i)
107 {
108 if (!_context.editor().Undo())
109 {
110 NOP();
111 }
112 }
113 _changeCount = 0u;
114 }
115 ImGui::SetItemDefaultFocus();
116 ImGui::SameLine();
117 if (ImGui::Button(ICON_FK_FLOPPY_O" Save", ImVec2(120, 0)))
118 {
119 open = false;
120 _changeCount = 0u;
122 if (!_context.editor().saveToXML())
123 {
124 Attorney::EditorGeneralWidget::showStatusMessage(_context.editor(), "Save failed!", Time::SecondsToMilliseconds<F32>(3.0f), true);
125 }
126 }
127 ImGui::SameLine();
128 if (ImGui::Button("Defaults", ImVec2(120, 0)))
129 {
130 _changeCount = 0u;
133 }
134 ImGui::End();
135
136 if (_openDialog)
137 {
139 externalTextEditorPath = _fileOpenDialog.chooseFileDialog(openDialog, nullptr, nullptr, "Choose text editor", ImVec2(-1, -1), ImGui::GetMainViewport()->WorkPos);
140
142 {
143 _openDialog = false;
144 }
145 }
146 }
147
148} //namespace Divide
#define NOP()
#define PROFILE_SCOPE_AUTO(CATEGORY)
Definition: Profiler.h:87
static void showStatusMessage(const Editor &editor, const string &message, const F32 durationMS, const bool error)
Definition: Editor.h:711
static ImGuiStyleEnum getTheme(const Editor &editor) noexcept
Definition: Editor.h:531
static void setTheme(Editor &editor, const ImGuiStyleEnum newTheme) noexcept
Definition: Editor.h:536
static const ResourcePath & externalTextEditorPath(const Editor &editor) noexcept
Definition: Editor.h:541
size_t UndoStackSize() const noexcept
Definition: Editor.inl:66
void registerUndoEntry(const UndoEntry< T > &entry)
Definition: Editor.inl:62
bool saveToXML() const
Definition: Editor.cpp:2833
bool Undo() const
Definition: Editor.cpp:1670
void infiniteGridScale(const F32 value) noexcept
Definition: Editor.cpp:1211
void infiniteGridAxisWidth(const F32 value) noexcept
Definition: Editor.cpp:1205
EditorOptionsWindow(PlatformContext &context)
Editor & editor() noexcept
ImGuiStyleEnum
@ ImGuiStyle_Count
@ ImGuiStyle_DarkCodz01
constexpr Optick::Category::Type GUI
Definition: Profiler.h:64
void CenterNextWindow()
Definition: Utils.cpp:406
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
int32_t I32
uint16_t U16
constexpr I32 to_I32(const T value)
uint32_t U32
uint64_t U64
bool ResetStyle(int styleEnum, ImGuiStyle &style)
const char ** GetDefaultStyleNames()
PushConstantType _type
Definition: UndoManager.h:42
string _name
Definition: UndoManager.h:43
StringReturnType< N > string() const noexcept
Definition: ResourcePath.h:64
Definition: UndoManager.h:51
T _oldVal
Definition: UndoManager.h:52
T _newVal
Definition: UndoManager.h:53
DELEGATE_STD< void, const T & > _dataSetter
Definition: UndoManager.h:54
IMGUI_API const char * chooseFileDialog(bool dialogTriggerButton, const char *directory=NULL, const char *fileFilterExtensionString=NULL, const char *windowTitle=NULL, const ImVec2 &windowSize=ImVec2(-1,-1), const ImVec2 &windowPos=ImVec2(-1,-1), const float windowAlpha=0.875f)
IMGUI_API bool hasUserJustCancelledDialog() const
static ImVec4 WindowLTRBOffsets