]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/dynamicdialog.cpp
Persist most dialogs across runs
[r2c2.git] / source / engineer / dynamicdialog.cpp
index 6d9afb4861432c208a305ce673a16d6f0a0b68b8..4e3312fbe8ad5a6813b7b6cfd39a1583771f518f 100644 (file)
@@ -1,6 +1,9 @@
 #include "dynamicdialog.h"
 #include "userinterface.h"
 
+using namespace std;
+using namespace Msp;
+
 DynamicDialog::DynamicDialog(UserInterface &u):
        ui(u)
 {
@@ -11,3 +14,32 @@ DynamicDialog::~DynamicDialog()
 {
        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));
+       }
+}