]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/designer.cpp
Fix memory leaks and other bad stuff
[r2c2.git] / source / designer / designer.cpp
index f79ef7a9ae8daa4bfdb94a901ba3b6d170412b9c..99655683c1a3bc772d3fe6737d336d2a6d2e7802 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of the MSP Märklin suite
-Copyright © 2006-2009 Mikkosoft Productions, Mikko Rasa
+Copyright © 2006-2010 Mikkosoft Productions, Mikko Rasa
 Distributed under the GPL
 */
 
@@ -74,9 +74,6 @@ Designer::Designer(int argc, char **argv):
        {
                filename = argv[1];
                DataFile::load(*layout, argv[1]);
-               const list<Track3D *> &ltracks = layout_3d->get_tracks();
-               for(list<Track3D *>::const_iterator i=ltracks.begin(); i!=ltracks.end(); ++i)
-                       update_track_color(**i);
 
                if(!layout->get_base().empty())
                {
@@ -119,13 +116,22 @@ Designer::Designer(int argc, char **argv):
        root->add(*toolbar);
        toolbar->set_position(0, window.get_height()-toolbar->get_geometry().h);
        toolbar->set_visible(true);
+
+       overlay = new Overlay3D(window, camera, ui_res.get_default_font());
+
+       const list<Track3D *> &tracks = layout_3d->get_tracks();
+       for(list<Track3D *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
+               update_track_icon(**i);
 }
 
 Designer::~Designer()
 {
+       delete overlay;
        delete root;
-       delete layout;
+       delete pipeline;
+       delete base_object;
        delete layout_3d;
+       delete layout;
        delete cat_layout_3d;
 }
 
@@ -293,6 +299,7 @@ void Designer::key_press(unsigned code, unsigned mod, wchar_t)
                selection.clear();
                for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
                {
+                       overlay->clear(layout_3d->get_track(**i));
                        layout->remove_track(**i);
                        delete *i;
                }
@@ -309,7 +316,7 @@ void Designer::key_press(unsigned code, unsigned mod, wchar_t)
                                if(*j!=*i)
                                        (*i)->snap_to(**j, true);
 
-                       update_track_color(layout_3d->get_track(**i));
+                       update_track_icon(layout_3d->get_track(**i));
                }
        }
        else if(key==Msp::Input::KEY_F)
@@ -465,6 +472,9 @@ void Designer::render()
                pipeline->render_all();
                layout_3d->get_endpoint_scene().render();
                GL::enable(GL_CULL_FACE);
+               GL::disable(GL::DEPTH_TEST);
+               overlay->render(0);
+               GL::enable(GL::DEPTH_TEST);
                /*if(cur_route)
                {
                        glColor4f(0.5, 0.8, 1.0, 1.0);
@@ -514,21 +524,23 @@ Track3D *Designer::pick_track(int x, int y)
        return l->pick_track(xx, yy, size);
 }
 
-void Designer::update_track_color(Track3D &track)
+void Designer::update_track_icon(Track3D &track)
 {
-       if(track.get_track().get_sensor_id())
+       overlay->clear(track);
+
+       if(track.get_track().get_flex())
+               overlay->add_graphic(track, "flex");
+
+       if(unsigned sid = track.get_track().get_sensor_id())
        {
-               if(track.get_track().get_flex())
-                       track.set_color(GL::Color(1, 0.6, 1));
-               else
-                       track.set_color(GL::Color(0.7, 0.7, 1));
+               overlay->add_graphic(track, "sensor");
+               overlay->set_label(track, lexical_cast(sid));
+       }
+       else if(unsigned tid = track.get_track().get_turnout_id())
+       {
+               overlay->add_graphic(track, "turnout");
+               overlay->set_label(track, lexical_cast(tid));
        }
-       else if(track.get_track().get_turnout_id())
-               track.set_color(GL::Color(0.8, 1, 0.8));
-       else if(track.get_track().get_flex())
-               track.set_color(GL::Color(1, 0.8, 0.8));
-       else
-               track.set_color(GL::Color(1, 1, 1));
 }
 
 void Designer::manipulation_status(const string &status)
@@ -586,7 +598,7 @@ void Designer::turnout_id_accept()
        unsigned id = lexical_cast<unsigned>(input->get_text());
        track->set_turnout_id(id);
 
-       update_track_color(layout_3d->get_track(*track));
+       update_track_icon(layout_3d->get_track(*track));
 
        input_dismiss();
 }
@@ -599,7 +611,7 @@ void Designer::sensor_id_accept()
        {
                (*i)->set_sensor_id(id);
 
-               update_track_color(layout_3d->get_track(**i));
+               update_track_icon(layout_3d->get_track(**i));
        }
 
        input_dismiss();