]> git.tdb.fi Git - r2c2.git/commitdiff
Remove the scripting-based timetable
authorMikko Rasa <tdb@tdb.fi>
Sun, 9 Jun 2013 08:32:21 +0000 (11:32 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 9 Jun 2013 08:32:21 +0000 (11:32 +0300)
I'm going to implement a proper timetable soon, but some other changes
need to happen first.

source/engineer/timetabledialog.cpp [deleted file]
source/engineer/timetabledialog.h [deleted file]
source/engineer/trainpanel.cpp
source/engineer/trainpanel.h
source/libr2c2/timetable.cpp [deleted file]
source/libr2c2/timetable.h [deleted file]
source/libr2c2/train.cpp
source/libr2c2/train.h

diff --git a/source/engineer/timetabledialog.cpp b/source/engineer/timetabledialog.cpp
deleted file mode 100644 (file)
index 8a185cd..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <msp/gltk/button.h>
-#include <msp/io/print.h>
-#include <msp/strings/utils.h>
-#include "timetabledialog.h"
-
-using namespace std;
-using namespace Msp;
-using namespace R2C2;
-
-TimetableDialog::TimetableDialog(Timetable &tt):
-       timetable(tt)
-{
-       set_size(250, 200);
-
-       GLtk::Button *btn;
-
-       add_button(*(btn = new GLtk::Button("Cncl")), 0);
-       btn->set_geometry(GLtk::Geometry(geom.w-80, 10, 30, 25));
-       btn->set_style("red");
-
-       add_button(*(btn = new GLtk::Button("OK")), 1);
-       btn->set_geometry(GLtk::Geometry(geom.w-40, 10, 30, 25));
-       btn->set_style("green");
-
-       add(*(tgl_enabled = new GLtk::Toggle("On")));
-       tgl_enabled->set_geometry(GLtk::Geometry(10, 10, 40, 27));
-       tgl_enabled->set_value(timetable.is_enabled());
-       tgl_enabled->signal_toggled.connect(sigc::mem_fun(this, &TimetableDialog::enabled_toggled));
-
-       add(*(ent_timetable = new GLtk::Entry));
-       ent_timetable->set_geometry(GLtk::Geometry(10, 45, geom.w-20, geom.h-55));
-       ent_timetable->set_style("multiline");
-       ent_timetable->set_multiline(true);
-
-       string text;
-       for(unsigned i=0; i<timetable.get_n_rows(); ++i)
-       {
-               if(!text.empty())
-                       text += '\n';
-               text += timetable.get_row(i).str();
-       }
-       ent_timetable->set_text(text);
-}
-
-void TimetableDialog::enabled_toggled(bool value)
-{
-       timetable.set_enabled(value);
-       timetable.reset();
-}
-
-void TimetableDialog::on_response(int code)
-{
-       if(code)
-       {
-               vector<string> lines = split(ent_timetable->get_text(), '\n');
-               vector<Timetable::Row> rows;
-               rows.reserve(lines.size());
-               try
-               {
-                       for(vector<string>::const_iterator i=lines.begin(); i!=lines.end(); ++i)
-                               rows.push_back(Timetable::Row::parse(*i));
-                       timetable.clear();
-                       for(vector<Timetable::Row>::const_iterator i=rows.begin(); i!=rows.end(); ++i)
-                               timetable.append(*i);
-               }
-               catch(const exception &e)
-               {
-                       // XXX Need a better way to report errors.  Also, should not let the dialog close.
-                       IO::print("%s\n", e.what());
-               }
-       }
-}
diff --git a/source/engineer/timetabledialog.h b/source/engineer/timetabledialog.h
deleted file mode 100644 (file)
index 98afc20..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef TIMETABLEDIALOG_H_
-#define TIMETABLEDIALOG_H_
-
-#include <msp/gltk/dialog.h>
-#include <msp/gltk/entry.h>
-#include <msp/gltk/toggle.h>
-#include "libr2c2/timetable.h"
-
-class TimetableDialog: public Msp::GLtk::Dialog
-{
-private:
-       R2C2::Timetable &timetable;
-       Msp::GLtk::Entry *ent_timetable;
-       Msp::GLtk::Toggle *tgl_enabled;
-
-public:
-       TimetableDialog(R2C2::Timetable &);
-
-private:
-       void enabled_toggled(bool);
-
-       virtual void on_response(int);
-};
-
-#endif
index e6a91a8f6dc1c2b272fa38adb88c4a3adc62c165..e239b1e7a9dfdb15431f128111eb9d1ab780ba94 100644 (file)
@@ -1,13 +1,11 @@
 #include <cmath>
 #include <msp/strings/format.h>
 #include "libr2c2/aicontrol.h"
-#include "libr2c2/timetable.h"
 #include "libr2c2/trackiter.h"
 #include "libr2c2/trainrouter.h"
 #include "libr2c2/vehicletype.h"
 #include "engineer.h"
 #include "routeselect.h"
-#include "timetabledialog.h"
 #include "trainpanel.h"
 #include "trainproperties.h"
 #include "trainview.h"
@@ -120,10 +118,6 @@ TrainPanel::TrainPanel(Engineer &e, Train &t):
        btn->set_geometry(GLtk::Geometry(100, 30, 36, 25));
        btn->signal_clicked.connect(sigc::mem_fun(this, &TrainPanel::route_clicked));
 
-       pnl_extra->add(*(btn = new GLtk::Button("TTbl")));
-       btn->set_geometry(GLtk::Geometry(46, 30, 36, 25));
-       btn->signal_clicked.connect(sigc::mem_fun(this, &TrainPanel::timetable_clicked));
-
        pnl_extra->add(*(btn = new GLtk::Button("View")));
        btn->set_geometry(GLtk::Geometry(geom.w-46, 30, 36, 25));
        btn->signal_clicked.connect(sigc::mem_fun(this, &TrainPanel::view_clicked));
@@ -210,17 +204,6 @@ void TrainPanel::goto_clicked()
        pick_conn = engineer.signal_pick_done.connect(sigc::mem_fun(this, &TrainPanel::go_to));
 }
 
-void TrainPanel::timetable_clicked()
-{
-       Timetable *timetable = train.get_ai_of_type<Timetable>();
-       if(!timetable)
-               timetable = new Timetable(train);
-
-       TimetableDialog *dialog = new TimetableDialog(*timetable);
-       engineer.get_root().add(*dialog);
-       dialog->set_position(geom.x+geom.w, geom.y+geom.h-dialog->get_geometry().h);
-}
-
 void TrainPanel::view_clicked()
 {
        TrainView *dialog = new TrainView(engineer, train);
index 406e1a66fce4440110bb2420a58b7b0905cd9217..1881035615699804e0ee41da624f5fe9a196e733 100644 (file)
@@ -47,7 +47,6 @@ private:
        void edit_clicked();
        void route_clicked();
        void goto_clicked();
-       void timetable_clicked();
        void view_clicked();
        void expand_clicked();
        void speed_slider_changed(double);
diff --git a/source/libr2c2/timetable.cpp b/source/libr2c2/timetable.cpp
deleted file mode 100644 (file)
index 5be3a03..0000000
+++ /dev/null
@@ -1,498 +0,0 @@
-#include <msp/strings/format.h>
-#include <msp/time/units.h>
-#include "block.h"
-#include "catalogue.h"
-#include "driver.h"
-#include "layout.h"
-#include "timetable.h"
-#include "trackcircuit.h"
-#include "train.h"
-
-using namespace std;
-using namespace Msp;
-
-namespace R2C2 {
-
-Timetable::Timetable(Train &t):
-       TrainAI(t),
-       enabled(false),
-       current_row(0),
-       executing(true),
-       pending_block(0),
-       pending_train(0),
-       arrived(false)
-{
-       train.signal_advanced.connect(sigc::mem_fun(this, &Timetable::train_advanced));
-       train.signal_ai_event.connect(sigc::mem_fun(this, &Timetable::event));
-       Layout &layout = train.get_layout();
-       layout.signal_sensor_state_changed.connect(sigc::mem_fun(this, &Timetable::sensor_state_changed));
-       layout.signal_block_reserved.connect(sigc::mem_fun(this, &Timetable::block_reserved));
-}
-
-void Timetable::set_enabled(bool e)
-{
-       enabled = e;
-}
-
-void Timetable::reset()
-{
-       current_row = 0;
-       wait_timeout = Time::TimeStamp();
-       pending_block = 0;
-       executing = true;
-}
-
-void Timetable::clear()
-{
-       rows.clear();
-       reset();
-}
-
-void Timetable::append(const Row &row)
-{
-       rows.push_back(row);
-}
-
-void Timetable::insert(unsigned i, const Row &row)
-{
-       if(i>rows.size())
-               throw out_of_range("Timetable::insert");
-
-       rows.insert(rows.begin()+i, row);
-       if(i<=current_row)
-               ++current_row;
-}
-
-const Timetable::Row &Timetable::get_row(unsigned i) const
-{
-       if(i>=rows.size())
-               throw out_of_range("Timetable::get_row");
-       return rows[i];
-}
-
-void Timetable::tick(const Time::TimeStamp &t, const Time::TimeDelta &)
-{
-       if(rows.empty() || !enabled)
-               return;
-
-       if(wait_timeout && t>=wait_timeout)
-       {
-               wait_timeout = Time::TimeStamp();
-               current_row = (current_row+1)%rows.size();
-               executing = true;
-       }
-
-       if(executing)
-       {
-               Row &row = rows[current_row];
-               switch(row.type)
-               {
-               case GOTO_SENSOR:
-                       arrived = false;
-                       train.ai_message(Message("set-destination-block", &get_sensor(row.get_param<unsigned>(0))));
-                       break;
-               case GOTO_ZONE:
-                       arrived = false;
-                       train.ai_message(Message("set-destination-zone", &get_zone(row.get_param<string>(0))));
-                       break;
-               case TRAVEL_TO:
-                       {
-                               Block *block = &get_sensor(row.get_param<unsigned>(0));
-                               if(block->get_train()!=&train || block->get_sensor().get_state()<Sensor::MAYBE_ACTIVE)
-                               {
-                                       pending_block = block;
-                                       pending_train = &train;
-                                       executing = false;
-                               }
-                       }
-                       break;
-               case TRAVEL_PAST:
-                       pending_block = &get_turnout(row.get_param<unsigned>(0)).get_block();
-                       pending_train = (pending_block->get_train()==&train ? 0 : &train);
-                       executing = false;
-                       break;
-               case WAIT_TIME:
-                       wait_timeout = t+row.get_param<unsigned>(0)*Time::sec;
-                       executing = false;
-                       break;
-               case WAIT_UNTIL:
-                       {
-                               unsigned unixtime = t.to_unixtime();
-                               unsigned mod = row.get_param<unsigned>(1);
-                               unsigned secs = ((mod+row.get_param<unsigned>(0))-(unixtime%mod))%mod;
-                               wait_timeout = t+secs*Time::sec;
-                               executing = false;
-                       }
-                       break;
-               case WAIT_TRAIN:
-                       {
-                               Train *other_train = &train.get_layout().get_train(row.get_param<unsigned>(0));
-                               Block *block = &get_sensor(row.get_param<unsigned>(1));
-                               if(block->get_train()!=other_train || block->get_sensor().get_state()<Sensor::MAYBE_ACTIVE)
-                               {
-                                       pending_train = other_train;
-                                       pending_block = block;
-                                       executing = false;
-                               }
-                       }
-                       break;
-               case ARRIVE:
-                       if(!arrived)
-                               executing = false;
-                       arrived = false;
-                       break;
-               case SPEED:
-                       if(!arrived)
-                       {
-                               float speed = row.get_param<unsigned>(0)/3.6*train.get_layout().get_catalogue().get_scale();
-                               train.ai_message(Message("set-target-speed", speed));
-                       }
-                       break;
-               case REVERSE:
-                       train.ai_message(Message("toggle-reverse"));
-                       break;
-               case ROUTE:
-                       train.ai_message(Message("set-route", &train.get_layout().get_route(row.get_param<string>(0))));
-                       break;
-               }
-
-               if(executing)
-                       current_row = (current_row+1)%rows.size();
-       }
-}
-
-void Timetable::save(list<DataFile::Statement> &st) const
-{
-       for(vector<Row>::const_iterator i=rows.begin(); i!=rows.end(); ++i)
-               st.push_back(i->save());
-}
-
-Block &Timetable::get_sensor(unsigned id)
-{
-       return train.get_layout().get_block(id|0x1000);
-}
-
-Track &Timetable::get_turnout(unsigned id)
-{
-       Block &block = train.get_layout().get_block(id|0x2000);
-       return **block.get_tracks().begin();
-}
-
-Zone &Timetable::get_zone(const string &name)
-{
-       string::size_type space = name.rfind(' ');
-       if(space==string::npos || space==0)
-               throw invalid_argument("Timetable::get_zone");
-       unsigned number = lexical_cast<unsigned>(name.substr(space+1));
-       return train.get_layout().get_zone(name.substr(0, space), number);
-}
-
-void Timetable::sensor_state_changed(Sensor &sensor, Sensor::State state)
-{
-       if(rows.empty() || !enabled)
-               return;
-
-       Block *block = 0;
-       if(TrackCircuit *tc = dynamic_cast<TrackCircuit *>(&sensor))
-               block = &tc->get_block();
-       else
-               return;
-
-       if(block==pending_block && block->get_train()==pending_train && state>=Sensor::MAYBE_ACTIVE)
-       {
-               pending_block = 0;
-               current_row = (current_row+1)%rows.size();
-               executing = true;
-       }
-}
-
-void Timetable::block_reserved(Block &block, Train *trn)
-{
-       if(rows.empty() || !enabled)
-               return;
-
-       if(&block==pending_block && trn==pending_train)
-       {
-               Row &row = rows[current_row];
-               if(row.type==TRAVEL_PAST && !pending_train)
-               {
-                       pending_block = 0;
-                       current_row = (current_row+1)%rows.size();
-                       executing = true;
-               }
-       }
-}
-
-void Timetable::train_advanced(Block &block)
-{
-       if(rows.empty() || !enabled)
-               return;
-
-       Row &row = rows[current_row];
-       if(row.type==TRAVEL_PAST && &block==pending_block && pending_train)
-               pending_train = 0;
-}
-
-void Timetable::event(TrainAI &, const Message &ev)
-{
-       if(ev.type=="arrived")
-       {
-               if(rows.empty() || !enabled)
-                       return;
-
-               Row &row = rows[current_row];
-               if(row.type==ARRIVE)
-               {
-                       current_row = (current_row+1)%rows.size();
-                       executing = true;
-               }
-               else
-                       arrived = true;
-       }
-}
-
-
-Timetable::Row::Row(RowType t):
-       type(t)
-{ }
-
-template<typename T>
-Timetable::Row::Row(RowType t, const T &p):
-       type(t)
-{
-       params.push_back(p);
-}
-
-template<typename T>
-const T &Timetable::Row::get_param(unsigned i) const
-{
-       if(i>=params.size())
-               throw out_of_range("Timetable::Row::get_param");
-       return params[i].value<T>();
-}
-
-string Timetable::Row::str() const
-{
-       switch(type)
-       {
-       case GOTO_SENSOR:
-               return format("set route to sensor %d", get_param<unsigned>(0));
-       case GOTO_ZONE:
-               return "set route to "+get_param<string>(0);
-       case TRAVEL_TO:
-               return format("travel to sensor %d", get_param<unsigned>(0));
-       case TRAVEL_PAST:
-               return format("travel past turnout %d", get_param<unsigned>(0));
-       case WAIT_TIME:
-               return format("wait for %d seconds", get_param<unsigned>(0));
-       case WAIT_UNTIL:
-               return format("wait until %d mod %d seconds", get_param<unsigned>(0), get_param<unsigned>(1));
-       case WAIT_TRAIN:
-               return format("wait for train %d at sensor %d", get_param<unsigned>(0), get_param<unsigned>(1));
-       case ARRIVE:
-               return "travel until arrival";
-       case SPEED:
-               return format("set speed %d km/h", get_param<unsigned>(0));
-       case REVERSE:
-               return "reverse";
-       case ROUTE:
-               return "set route "+get_param<string>(0);
-       default:
-               return "invalid row";
-       }
-}
-
-DataFile::Statement Timetable::Row::save() const
-{
-       switch(type)
-       {
-       case GOTO_SENSOR:
-               return DataFile::Statement("goto_sensor"), get_param<unsigned>(0);
-       case GOTO_ZONE:
-               return DataFile::Statement("goto_zone"), get_param<string>(0);
-       case TRAVEL_TO:
-               return DataFile::Statement("travel_to"), get_param<unsigned>(0);
-       case TRAVEL_PAST:
-               return DataFile::Statement("travel_past"), get_param<unsigned>(0);
-       case WAIT_TIME:
-               return DataFile::Statement("wait"), get_param<unsigned>(0);
-       case WAIT_UNTIL:
-               return DataFile::Statement("wait_until"), get_param<unsigned>(0), get_param<unsigned>(1);
-       case WAIT_TRAIN:
-               return DataFile::Statement("wait_train"), get_param<unsigned>(0), get_param<unsigned>(1);
-       case ARRIVE:
-               return DataFile::Statement("arrive");
-       case SPEED:
-               return DataFile::Statement("speed"), get_param<unsigned>(0);
-       case REVERSE:
-               return DataFile::Statement("reverse");
-       case ROUTE:
-               return DataFile::Statement("route"), get_param<string>(0);
-       default:
-               return DataFile::Statement();
-       }
-}
-
-Timetable::Row Timetable::Row::parse(const string &s)
-{
-       if(!s.compare(0, 7, "travel "))
-       {
-               if(!s.compare(7, 10, "to sensor "))
-                       return Row(TRAVEL_TO, lexical_cast<unsigned>(s.substr(17)));
-               else if(!s.compare(7, 13, "past turnout "))
-                       return Row(TRAVEL_PAST, lexical_cast<unsigned>(s.substr(20)));
-               else if(!s.compare(7, string::npos, "until arrival"))
-                       return Row(ARRIVE);
-       }
-       else if(!s.compare(0, 9, "wait for "))
-       {
-               if(isdigit(s[9]))
-               {
-                       unsigned nondigit = 10;
-                       while(nondigit<s.size() && isdigit(s[nondigit]))
-                               ++nondigit;
-                       return Row(WAIT_TIME, lexical_cast<unsigned>(s.substr(9, nondigit-9)));
-               }
-               else if(!s.compare(9, 6, "train "))
-               {
-                       string::size_type at = s.find(" at sensor ", 15);
-                       if(at!=string::npos)
-                       {
-                               Row row(WAIT_TRAIN, lexical_cast<unsigned>(s.substr(15, at-15)));
-                               row.params.push_back(lexical_cast<unsigned>(s.substr(at+11)));
-                               return row;
-                       }
-               }
-       }
-       else if(!s.compare(0, 11, "wait until "))
-       {
-               string::size_type mod = s.find(" mod ", 11);
-               unsigned nondigit = (mod!=string::npos ? mod+5 : 11);
-               while(nondigit<s.size() && isdigit(s[nondigit]))
-                       ++nondigit;
-               if(mod!=string::npos)
-               {
-                       unsigned time = lexical_cast<unsigned>(s.substr(11, mod-11));
-                       Row row(WAIT_UNTIL, time);
-                       row.params.push_back(lexical_cast<unsigned>(s.substr(mod+5, nondigit-mod-5)));
-                       return row;
-               }
-               else
-               {
-                       unsigned time = lexical_cast<unsigned>(s.substr(11, nondigit-11));
-                       Row row(WAIT_UNTIL, time);
-                       row.params.push_back(3600);
-                       return row;
-               }
-       }
-       else if(!s.compare(0, 10, "set speed "))
-       {
-               unsigned nondigit = 11;
-               while(nondigit<s.size() && (isdigit(s[nondigit]) || s[nondigit]=='-'))
-                       ++nondigit;
-               return Row(SPEED, lexical_cast<unsigned>(s.substr(10, nondigit-10)));
-       }
-       else if(s=="reverse")
-               return Row(REVERSE);
-       else if(!s.compare(0, 10, "set route "))
-       {
-               if(!s.compare(10, 3, "to "))
-               {
-                       if(!s.compare(13, 7, "sensor "))
-                               return Row(GOTO_SENSOR, lexical_cast<unsigned>(s.substr(20)));
-                       else
-                               return Row(GOTO_ZONE, s.substr(13));
-               }
-               return Row(ROUTE, s.substr(10));
-       }
-
-       throw invalid_argument("Timetable::Row::parse");
-}
-
-
-Timetable::Loader::Loader(Timetable &tt):
-       DataFile::ObjectLoader<Timetable>(tt)
-{
-       add("arrive",      &Loader::arrive);
-       add("goto_sensor", &Loader::goto_sensor);
-       add("goto_zone",   &Loader::goto_zone);
-       add("route",       &Loader::route);
-       add("speed",       &Loader::speed);
-       add("reverse",     &Loader::reverse);
-       add("travel_to",   &Loader::travel_to);
-       add("travel_past", &Loader::travel_past);
-       add("wait",        &Loader::wait);
-       add("wait_train",  &Loader::wait_train);
-       add("wait_until",  &Loader::wait_until);
-
-       // Deprecated alias
-       add("goto",        &Loader::goto_sensor_str);
-       add("travel",      &Loader::travel_to);
-}
-
-void Timetable::Loader::arrive()
-{
-       obj.rows.push_back(Row(ARRIVE));
-}
-
-void Timetable::Loader::goto_sensor(unsigned s)
-{
-       obj.rows.push_back(Row(GOTO_SENSOR, s));
-}
-
-void Timetable::Loader::goto_sensor_str(const string &s)
-{
-       if(!s.compare(0, 7, "sensor "))
-               obj.rows.push_back(Row(GOTO_SENSOR, lexical_cast<unsigned>(s.substr(7))));
-}
-
-void Timetable::Loader::goto_zone(const string &z)
-{
-       obj.rows.push_back(Row(GOTO_ZONE, z));
-}
-
-void Timetable::Loader::route(const string &r)
-{
-       obj.rows.push_back(Row(ROUTE, r));
-}
-
-void Timetable::Loader::reverse()
-{
-       obj.rows.push_back(Row(REVERSE));
-}
-
-void Timetable::Loader::speed(unsigned s)
-{
-       obj.rows.push_back(Row(SPEED, s));
-}
-
-void Timetable::Loader::travel_to(unsigned s)
-{
-       obj.rows.push_back(Row(TRAVEL_TO, s));
-}
-
-void Timetable::Loader::travel_past(unsigned s)
-{
-       obj.rows.push_back(Row(TRAVEL_PAST, s));
-}
-
-void Timetable::Loader::wait(unsigned t)
-{
-       obj.rows.push_back(Row(WAIT_TIME, t));
-}
-
-void Timetable::Loader::wait_train(unsigned t, unsigned s)
-{
-       Row row(WAIT_TRAIN, t);
-       row.params.push_back(s);
-       obj.rows.push_back(row);
-}
-
-void Timetable::Loader::wait_until(unsigned t, unsigned m)
-{
-       Row row(WAIT_UNTIL, t);
-       row.params.push_back(m);
-       obj.rows.push_back(row);
-}
-
-} // namespace R2C2
diff --git a/source/libr2c2/timetable.h b/source/libr2c2/timetable.h
deleted file mode 100644 (file)
index f8fc8a0..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#ifndef LIBR2C2_TIMETABLE_H_
-#define LIBR2C2_TIMETABLE_H_
-
-#include <string>
-#include <vector>
-#include <sigc++/trackable.h>
-#include <msp/datafile/objectloader.h>
-#include "sensor.h"
-#include "trainai.h"
-
-namespace R2C2 {
-
-class Block;
-class Track;
-class Train;
-class Zone;
-
-class Timetable: public TrainAI, public sigc::trackable
-{
-public:
-       class Loader: public Msp::DataFile::ObjectLoader<Timetable>
-       {
-       public:
-               Loader(Timetable &);
-       private:
-               void arrive();
-               void goto_sensor(unsigned);
-               void goto_sensor_str(const std::string &);
-               void goto_zone(const std::string &);
-               void route(const std::string &);
-               void reverse();
-               void speed(unsigned);
-               void travel_to(unsigned);
-               void travel_past(unsigned);
-               void wait(unsigned);
-               void wait_train(unsigned, unsigned);
-               void wait_until(unsigned, unsigned);
-       };
-
-       enum RowType
-       {
-               GOTO_SENSOR,
-               GOTO_ZONE,
-               TRAVEL_TO,
-               TRAVEL_PAST,
-               WAIT_TIME,
-               WAIT_UNTIL,
-               WAIT_TRAIN,
-               ARRIVE,
-               SPEED,
-               REVERSE,
-               ROUTE
-       };
-
-       struct Row
-       {
-               RowType type;
-               std::vector<Msp::Variant> params;
-
-               Row(RowType);
-
-               template<typename T>
-               Row(RowType, const T &);
-
-               template<typename T>
-               const T &get_param(unsigned) const;
-
-               std::string str() const;
-
-               Msp::DataFile::Statement save() const;
-
-               static Row parse(const std::string &);
-       };
-
-private:
-       bool enabled;
-       std::vector<Row> rows;
-       unsigned current_row;
-       bool executing;
-       Block *pending_block;
-       Train *pending_train;
-       Msp::Time::TimeStamp wait_timeout;
-       bool arrived;
-
-public:
-       Timetable(Train &);
-
-       void set_enabled(bool);
-       bool is_enabled() const { return enabled; }
-       void reset();
-
-       void clear();
-       void append(const Row &);
-       void insert(unsigned, const Row &);
-       unsigned get_n_rows() const { return rows.size(); }
-       const Row &get_row(unsigned) const;
-
-       void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
-       void save(std::list<Msp::DataFile::Statement> &) const;
-private:
-       Block &get_sensor(unsigned);
-       Track &get_turnout(unsigned);
-       Zone &get_zone(const std::string &);
-       void sensor_state_changed(Sensor &, Sensor::State);
-       void block_reserved(Block &, Train *);
-       void train_advanced(Block &);
-       void event(TrainAI &, const Message &);
-};
-
-} // namespace R2C2
-
-#endif
index 7224247b5c4aaf26e8ad950d533113b24773e75b..d1fb4ed8a81b9608bb82827ccbf5071a3b395251 100644 (file)
@@ -13,7 +13,6 @@
 #include "route.h"
 #include "simplecontroller.h"
 #include "speedquantizer.h"
-#include "timetable.h"
 #include "trackcircuit.h"
 #include "trackiter.h"
 #include "tracktype.h"
@@ -388,12 +387,6 @@ void Train::save(list<DataFile::Statement> &st) const
                        router->save(ss.sub);
                        st.push_back(ss);
                }
-               else if(Timetable *timetable = dynamic_cast<Timetable *>(*i))
-               {
-                       DataFile::Statement ss("timetable");
-                       timetable->save(ss.sub);
-                       st.push_back(ss);
-               }
        }
 }
 
@@ -542,7 +535,6 @@ Train::Loader::Loader(Train &t):
        add("name",        &Loader::name);
        add("quantized_speed",  &Loader::quantized_speed);
        add("router",      &Loader::router);
-       add("timetable",   &Loader::timetable);
        add("vehicle",     &Loader::vehicle);
 }
 
@@ -578,12 +570,6 @@ void Train::Loader::router()
        load_sub(*rtr);
 }
 
-void Train::Loader::timetable()
-{
-       Timetable *ttbl = new Timetable(obj);
-       load_sub(*ttbl);
-}
-
 void Train::Loader::vehicle(ArticleNumber art_nr)
 {
        const VehicleType &vtype = obj.layout.get_catalogue().get_vehicle(art_nr);
index ece5b4bb6340351119fe162532a0fbb725198a45..e3eebe1fc5d050d2d3b2a230eaa332416c909a1f 100644 (file)
@@ -35,7 +35,6 @@ public:
                void name(const std::string &);
                void quantized_speed();
                void router();
-               void timetable();
                void vehicle(ArticleNumber);
        };