TDME2 1.9.121
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
EnvMapEditorTabController.cpp
Go to the documentation of this file.
2
3#include <array>
4#include <string>
5
6#include <tdme/tdme.h>
16#include <tdme/gui/GUI.h>
17#include <tdme/gui/GUIParser.h>
18#include <tdme/math/Vector3.h>
33
34using std::array;
35using std::string;
36
38
63
64EnvMapEditorTabController::EnvMapEditorTabController(EnvMapEditorTabView* view)
65{
66 this->view = view;
67 this->popUps = view->getPopUps();
68}
69
71}
72
74 return view;
75}
76
78{
79 return screenNode;
80}
81
83{
84 this->screenNode = screenNode;
85}
86
88{
89}
90
92{
93 auto fileName = view->getPrototype() != nullptr?view->getPrototype()->getFileName():"";
94 try {
95 if (fileName.empty() == true) throw ExceptionBase("Could not save file. No filename known");
97 Tools::getPathName(fileName),
98 Tools::getFileName(fileName)
99 );
100 } catch (Exception& exception) {
101 showErrorPopUp("Warning", (string(exception.what())));
102 }
103}
104
106{
107 class OnEnvMapSave: public virtual Action
108 {
109 public:
110 void performAction() override {
111 try {
112 envMapEditorTabController->view->saveFile(
113 envMapEditorTabController->popUps->getFileDialogScreenController()->getPathName(),
114 envMapEditorTabController->popUps->getFileDialogScreenController()->getFileName()
115 );
116 } catch (Exception& exception) {
117 envMapEditorTabController->showErrorPopUp("Warning", (string(exception.what())));
118 }
119 envMapEditorTabController->popUps->getFileDialogScreenController()->close();
120 }
121 OnEnvMapSave(EnvMapEditorTabController* envMapEditorTabController): envMapEditorTabController(envMapEditorTabController) {
122 }
123 private:
124 EnvMapEditorTabController* envMapEditorTabController;
125 };
126
127 auto fileName = view->getPrototype() != nullptr?view->getPrototype()->getFileName():"";
128 vector<string> extensions = {
129 "tenvmap"
130 };
132 fileName.empty() == false?Tools::getPathName(fileName):string(),
133 "Save to: ",
134 extensions,
135 Tools::getFileName(fileName),
136 false,
137 new OnEnvMapSave(this)
138 );
139}
140
141void EnvMapEditorTabController::showErrorPopUp(const string& caption, const string& message)
142{
143 popUps->getInfoDialogScreenController()->show(caption, message);
144}
145
147{
148 for (auto& applyNode: applyNodesRenderPasses) {
149 if (node->getId() == applyNode) {
151 break;
152 }
153 }
154 for (auto& applyNode: applyNodesLocation) {
155 if (node->getId() == applyNode) {
157 break;
158 }
159 }
160}
161
163}
164
166}
167
169}
170
172{
173}
174
176 string xml;
177 xml+= "<selectbox-option image=\"resources/engine/images/folder.png\" text=\"" + GUIParser::escapeQuotes("Prototype") + "\" value=\"" + GUIParser::escapeQuotes("prototype") + "\" />\n";
179
182 string("<dropdown-option text=\"Property\" value=\"property\" />\n")
183 );
184}
185
186void EnvMapEditorTabController::updateDetails(const string& outlinerNode) {
187 Console::println("EnvMapEditorTabController::updateDetails(): ");
188
190 string("<template id=\"details_environmentmapping\" src=\"resources/engine/gui/template_details_environmentmapping.xml\" />\n") +
191 string("<template id=\"details_location\" src=\"resources/engine/gui/template_details_location.xml\" />\n")
192 );
193
194 try {
195 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("details_environmentmapping"))->getActiveConditions().add("open");
196 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("details_location"))->getActiveConditions().add("open");
197
198 auto frequency = view->getEnvironmentMapFrequency();
199 switch (frequency) {
200 case 60LL * 60LL * 24LL * 1000LL:
201 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency_details"))->getActiveConditions().removeAll();
202 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency"))->getController()->setValue(MutableString(1));
203 break;
204 case 0LL:
205 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency_details"))->getActiveConditions().removeAll();
206 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency"))->getController()->setValue(MutableString(2));
207 break;
208 default:
209 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency"))->getController()->setValue(MutableString(3));
210 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency_details"))->getActiveConditions().set("custom");
211 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency_value"))->getController()->setValue(MutableString(static_cast<int32_t>(frequency)));
212 }
213
214 auto renderPassMask = view->getEnvironmentMapRenderPassMask();
215 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_standard"))->getController()->setValue(MutableString((renderPassMask & Entity::RENDERPASS_STANDARD) == Entity::RENDERPASS_STANDARD?"1":""));
216 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_sky"))->getController()->setValue(MutableString((renderPassMask & Entity::RENDERPASS_SKY) == Entity::RENDERPASS_SKY?"1":""));
217 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_terrain"))->getController()->setValue(MutableString((renderPassMask & Entity::RENDERPASS_TERRAIN) == Entity::RENDERPASS_TERRAIN?"1":""));
218 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_water"))->getController()->setValue(MutableString((renderPassMask & Entity::RENDERPASS_WATER) == Entity::RENDERPASS_WATER?"1":""));
219 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_postprocessing"))->getController()->setValue(MutableString((renderPassMask & Entity::RENDERPASS_POST_POSTPROCESSING) == Entity::RENDERPASS_POST_POSTPROCESSING?"1":""));
220
221 auto environmentMapTranslation = view->getEnvironmentMapTranslation();
222 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("location_translation_x"))->getController()->setValue(MutableString(environmentMapTranslation.getX()));
223 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("location_translation_y"))->getController()->setValue(MutableString(environmentMapTranslation.getY()));
224 required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("location_translation_z"))->getController()->setValue(MutableString(environmentMapTranslation.getZ()));
225 } catch (Exception& exception) {
226 Console::println(string("EnvMapEditorTabController::updateDetails(): An error occurred: ") + exception.what());;
227 showErrorPopUp("Warning", (string(exception.what())));
228 }
229}
230
232 auto prototype = view->getPrototype();
233 if (prototype == nullptr) return;
234
235 //
236 try {
237 //
238 int64_t frequency = -1LL;
239 switch (Integer::parse(required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency"))->getController()->getValue().getString())) {
240 case 1:
241 frequency = 60LL * 60LL * 24LL * 1000LL;
242 break;
243 case 2:
244 frequency = 0LL;
245 break;
246 case 3:
247 frequency = Integer::parse(required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_frequency_value"))->getController()->getValue().getString());
248 break;
249 }
251 prototype->setEnvironmentMapTimeRenderUpdateFrequency(frequency);
252
253 //
254 int32_t renderPassMask = 0;
255 renderPassMask+= required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_standard"))->getController()->getValue().equals("1") == true?Entity::RENDERPASS_STANDARD:0;
256 renderPassMask+= required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_sky"))->getController()->getValue().equals("1") == true?Entity::RENDERPASS_SKY:0;
257 renderPassMask+= required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_terrain"))->getController()->getValue().equals("1") == true?Entity::RENDERPASS_TERRAIN:0;
258 renderPassMask+= required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_water"))->getController()->getValue().equals("1") == true?Entity::RENDERPASS_WATER:0;
259 renderPassMask+= required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("rendersettings_renderpass_postprocessing"))->getController()->getValue().equals("1") == true?Entity::RENDERPASS_POST_POSTPROCESSING:0;
260 view->setEnvironmentMapRenderPassMask(renderPassMask);
261 prototype->setEnvironmentMapRenderPassMask(renderPassMask);
262 } catch (Exception& exception) {
263 Console::println(string("EnvMapEditorTabController::applyRenderPasses(): An error occurred: ") + exception.what());;
264 showErrorPopUp("Warning", (string(exception.what())));
265 }
266}
267
269 try {
270 Vector3 environmentMapTranslation(
271 Float::parse(required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("location_translation_x"))->getController()->getValue().getString()),
272 Float::parse(required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("location_translation_y"))->getController()->getValue().getString()),
273 Float::parse(required_dynamic_cast<GUIElementNode*>(screenNode->getNodeById("location_translation_z"))->getController()->getValue().getString())
274 );
275 view->setEnvironmentMapTranslation(environmentMapTranslation);
276 } catch (Exception& exception) {
277 Console::println(string("EnvMapEditorTabController::applyLocation(): An error occurred: ") + exception.what());;
278 showErrorPopUp("Warning", (string(exception.what())));
279 }
280}
281
283 required_dynamic_cast<GUITextNode*>(screenNode->getNodeById(view->getTabId() + "_tab_text_info"))->setText(text);
284}
TDME engine entity.
Definition: Entity.h:31
Prototype definition.
Definition: Prototype.h:49
GUI parser.
Definition: GUIParser.h:39
GUI element node conditions.
GUI node controller base class.
const string & getId()
Definition: GUINode.h:329
GUI screen node that represents a screen that can be rendered via GUI system.
Definition: GUIScreenNode.h:57
GUINode * getNodeById(const string &nodeId)
Get GUI node by id.
3D vector 3 class
Definition: Vector3.h:22
void show(const string &cwd, const string &captionText, const vector< string > &extensions, const string &fileName, bool enableFilter, Action *applyAction, Action *cancelAction=nullptr, const string &settingsFileName=".filedialog.properties", const string &settingsPathName=string())
Shows the file dialog pop up.
void show(const string &caption, const string &message)
Shows the pop up.
Pop ups controller accessor class.
Definition: PopUps.h:19
FileDialogScreenController * getFileDialogScreenController()
Definition: PopUps.h:42
InfoDialogScreenController * getInfoDialogScreenController()
Definition: PopUps.h:49
void updateInfoText(const MutableString &text)
Update info text line.
void onContextMenuRequested(GUIElementNode *node, int mouseX, int mouseY) override
On mouse over.
void onValueChanged(GUIElementNode *node) override
On value changed.
void updateDetails(const string &outlinerNode)
Update details panel.
void onActionPerformed(GUIActionListenerType type, GUIElementNode *node) override
void showErrorPopUp(const string &caption, const string &message)
Shows the error pop up.
void saveFile(const string &pathName, const string &fileName)
Saving prototype as tenvmap prototype.
void setEnvironmentMapTranslation(const Vector3 &translation)
Set environment map translation.
void setEnvironmentMapRenderPassMask(int32_t renderPassMask)
Set environment map render passes.
void setEnvironmentMapFrequency(int64_t frequency)
Set environment map frequency.
void setOutlinerAddDropDownContent(const string &xml)
Set outliner add drop down content.
Definition: EditorView.cpp:214
void setOutlinerContent(const string &xml)
Set outliner content.
Definition: EditorView.cpp:210
void setDetailsContent(const string &xml)
Set details content.
Definition: EditorView.cpp:218
Console class.
Definition: Console.h:26
Exception base class.
Definition: ExceptionBase.h:20
Float class.
Definition: Float.h:23
Integer class.
Definition: Integer.h:26
Mutable string class.
Definition: MutableString.h:16
std::exception Exception
Exception base class.
Definition: Exception.h:19
Tab controller, which connects UI with logic.
Definition: TabController.h:23
Action Interface.
Definition: Action.h:12