]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/dynamicdialog.cpp
Persist most dialogs across runs
[r2c2.git] / source / engineer / dynamicdialog.cpp
index 87c74377795948a03e3583f17a1d071a3eefecdc..4e3312fbe8ad5a6813b7b6cfd39a1583771f518f 100644 (file)
@@ -1,13 +1,45 @@
 #include "dynamicdialog.h"
-#include "engineer.h"
+#include "userinterface.h"
 
-DynamicDialog::DynamicDialog(Engineer &e):
-       engineer(e)
+using namespace std;
+using namespace Msp;
+
+DynamicDialog::DynamicDialog(UserInterface &u):
+       ui(u)
 {
-       engineer.add_dynamic_dialog(*this);
+       ui.add_dynamic_dialog(*this);
 }
 
 DynamicDialog::~DynamicDialog()
 {
-       engineer.remove_dynamic_dialog(*this);
+       ui.remove_dynamic_dialog(*this);
+}
+
+void DynamicDialog::save_position(list<DataFile::Statement> &st) const
+{
+       GLtk::Root *root = find_ancestor<GLtk::Root>();
+       if(root)
+       {
+               const GLtk::Geometry &rgeom = root->get_geometry();
+               float x = static_cast<float>(geom.x)/(rgeom.w-geom.w);
+               float y = static_cast<float>(geom.y)/(rgeom.h-geom.h);
+               st.push_back((DataFile::Statement("position"), x, y));
+       }
+}
+
+
+DynamicDialog::StateLoader::StateLoader(DynamicDialog &dd):
+       DataFile::ObjectLoader<DynamicDialog>(dd)
+{
+       add("position", &StateLoader::position);
+}
+
+void DynamicDialog::StateLoader::position(float x, float y)
+{
+       GLtk::Root *root = obj.find_ancestor<GLtk::Root>();
+       if(root)
+       {
+               const GLtk::Geometry &rgeom = root->get_geometry();
+               obj.set_position(x*(rgeom.w-obj.geom.w), y*(rgeom.h-obj.geom.h));
+       }
 }