]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/designer.cpp
Major code refactoring:
[r2c2.git] / source / designer / designer.cpp
index d0bc940b4cea510e57083dd00e204c0d38f7aea6..9edf816afcdef1ec7a557b42a9617c586777f3a4 100644 (file)
@@ -5,12 +5,14 @@
 #include <SDL.h>
 #include <msp/gl/rendermode.h>
 #include <msp/gl/select.h>
+#include <msp/gl/texture2d.h>
 #include <msp/strings/codec.h>
 #include <msp/strings/lexicalcast.h>
 #include <msp/strings/utf8.h>
 #include <msp/strings/utils.h>
 #include <msp/time/units.h>
 #include <msp/time/utils.h>
+#include "libmarklin/tracktype.h"
 #include "designer.h"
 #include "input.h"
 #include "manipulator.h"
@@ -41,14 +43,14 @@ Designer::Designer(int argc, char **argv):
        cat_layout=new Layout(catalogue);
        cat_layout_3d=new Layout3D(*cat_layout);
 
-       const Catalogue::TrackMap &ctracks=catalogue.get_tracks();
+       const map<unsigned, TrackType *> &ctracks=catalogue.get_tracks();
        unsigned n=0;
-       for(Catalogue::TrackMap::const_iterator i=ctracks.begin(); i!=ctracks.end(); ++i, ++n)
+       for(map<unsigned, TrackType *>::const_iterator i=ctracks.begin(); i!=ctracks.end(); ++i, ++n)
        {
-               Track *track=i->second->copy();
+               Track *track=new Track(*i->second);
                track->set_position(Point((n%11)*0.1-0.5, 0.2-n/11*0.3, 0));
                track->set_rotation(M_PI/2);
-               cat_layout->add_track(track);
+               cat_layout->add_track(*track);
        }
 
        manipulator=new Manipulator(*this);
@@ -96,14 +98,19 @@ int Designer::main()
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glEnable(GL_CULL_FACE);
 
+       GL::Texture2D *font_tex=new GL::Texture2D;
+       font_tex->set_min_filter(GL::LINEAR);
+       font_tex->load_image("dejavu-20.png");
        font=new GL::Font();
-       Parser::load(*font, "dejavu-20.font");
+       font->set_texture(*font_tex);
+       DataFile::load(*font, "dejavu-20.font");
 
        mode=SELECT;
 
        Application::main();
 
        delete font;
+       delete font_tex;
        delete input;
 
        SDL_Quit();
@@ -224,21 +231,22 @@ void Designer::tick()
                if(t3d)
                {
                        const Track &track=t3d->get_track();
+                       const TrackType &ttype=track.get_type();
                        ostringstream ss;
                        ss.precision(2);
-                       ss<<track.get_article_number()<<' '<<track.get_description();
+                       ss<<ttype.get_article_number()<<' '<<ttype.get_description();
                        if(mode!=CATALOGUE)
-                               ss<<" (slope "<<track.get_slope()/track.get_length()*100<<"%)";
+                               ss<<" (slope "<<track.get_slope()/ttype.get_total_length()*100<<"%)";
                        if(track.get_turnout_id())
                                ss<<" (turnout "<<track.get_turnout_id()<<')';
                        else if(track.get_sensor_id())
                                ss<<" (sensor "<<track.get_sensor_id()<<')';
-                       tooltip=decode<Utf8>(ss.str());
+                       tooltip=ss.str();
 
                        move_tooltip(pointer_x, pointer_y);
                }
                else
-                       tooltip=L"";
+                       tooltip="";
 
                tooltip_timeout=Time::TimeStamp();
        }
@@ -301,10 +309,10 @@ void Designer::key_press(unsigned key, unsigned mod, wchar_t ch)
                selection->select_more();
        else if(key==SDLK_l && (mod&KMOD_SHIFT))
        {
-               const TrackSeq &tracks=layout->get_tracks();
+               const set<Track *> &tracks=layout->get_tracks();
                float len=0;
-               for(TrackSeq::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
-                       len+=(*i)->get_total_length();
+               for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
+                       len+=(*i)->get_type().get_total_length();
                cout<<"Total length: "<<len<<"m\n";
        }
        else if(key==SDLK_l)
@@ -330,23 +338,23 @@ void Designer::key_press(unsigned key, unsigned mod, wchar_t ch)
        }
        else if(key==SDLK_x)
        {
-               Selection::TrackSet tracks=selection->get_tracks();
+               set<Track *> tracks=selection->get_tracks();
                selection->clear();
-               for(Selection::TrackSet::iterator i=tracks.begin(); i!=tracks.end(); ++i)
+               for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
                {
-                       layout->remove_track(*i);
+                       layout->remove_track(**i);
                        delete *i;
                }
        }
        else if(key==SDLK_f && (mod&KMOD_SHIFT))
        {
-               const Selection::TrackSet &tracks=selection->get_tracks();
-               const TrackSeq &ltracks=layout->get_tracks();
-               for(Selection::TrackSet::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
+               const set<Track *> &tracks=selection->get_tracks();
+               const set<Track *> &ltracks=layout->get_tracks();
+               for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
                {
                        (*i)->set_flex(!(*i)->get_flex());
                        (*i)->break_links();
-                       for(TrackSeq::const_iterator j=ltracks.begin(); j!=ltracks.end(); ++j)
+                       for(set<Track *>::const_iterator j=ltracks.begin(); j!=ltracks.end(); ++j)
                                if(*j!=*i)
                                        (*i)->snap_to(**j, true);
 
@@ -366,7 +374,7 @@ void Designer::key_press(unsigned key, unsigned mod, wchar_t ch)
        else if(key==SDLK_t)
        {
                Track *track=selection->get_track();
-               if(selection->size()==1 && track->get_n_routes()>1)
+               if(selection->size()==1 && track->get_type().get_n_routes()>1)
                {
                        ostringstream ss;
                        ss<<track->get_turnout_id();
@@ -379,7 +387,7 @@ void Designer::key_press(unsigned key, unsigned mod, wchar_t ch)
        else if(key==SDLK_s)
        {
                Track *track=selection->get_track();
-               if(selection->size()==1 && track->get_n_routes()==1)
+               if(selection->size()==1 && track->get_type().get_n_routes()==1)
                {
                        ostringstream ss;
                        ss<<track->get_sensor_id();
@@ -441,7 +449,7 @@ void Designer::button_press(int x, int y, float gx, float gy, unsigned btn)
                        {
                                Track *track=ctrack->get_track().copy();
                                track->set_position(Point(gx, gy, 0));
-                               layout->add_track(track);
+                               layout->add_track(*track);
 
                                selection->clear();
                                selection->add_track(track);
@@ -586,7 +594,7 @@ Track3D *Designer::pick_track(int x, int y)
 
 void Designer::manipulation_status(const string &status)
 {
-       tooltip=decode<Utf8>(status);
+       tooltip=status;
 }
 
 void Designer::manipulation_done(bool)
@@ -603,7 +611,7 @@ void Designer::measure_changed()
        ostringstream ss;
        ss.precision(3);
        ss<<"Par "<<pard<<"mm - Perp "<<perpd<<"mm - Total "<<d<<"mm - Angle "<<adiff<<"°";
-       tooltip=decode<Utf8>(ss.str());
+       tooltip=ss.str();
 }
 
 void Designer::measure_done()