--- /dev/null
+#ifndef TIMETABLEPANEL_H_
+#define TIMETABLEPANEL_H_
+
+#include <msp/gltk/dropdown.h>
+#include <msp/gltk/entry.h>
+#include <msp/gltk/label.h>
+#include <msp/gltk/list.h>
+#include <msp/gltk/panel.h>
+#include "libr2c2/timetable.h"
+#include "libr2c2/train.h"
+#include "3d/trackchain.h"
+
+class Engineer;
+
+class TimetablePanel: public Msp::GLtk::Panel, public sigc::trackable
+{
+private:
+ Engineer &engineer;
+ R2C2::Train &train;
+ R2C2::Timetable *timetable;
+ Msp::GLtk::List *lst_timetable;
+ Msp::GLtk::Dropdown *drp_type;
+ R2C2::Zone *zone;
+ Msp::GLtk::Label *lbl_zone;
+ Msp::GLtk::Entry *ent_time;
+ Msp::GLtk::BasicListData<const R2C2::Timetable::Row *> rows;
+
+ bool zone_pick;
+ R2C2::Zone *picked_zone;
+ R2C2::TrackChain3D *pick_highlight;
+
+public:
+ TimetablePanel(Engineer &, R2C2::Train &);
+
+private:
+ void row_added(unsigned, const R2C2::Timetable::Row &);
+ void row_modified(unsigned, const R2C2::Timetable::Row &);
+ void row_removed(unsigned);
+ R2C2::Timetable::Row create_row();
+
+ void row_selected(unsigned);
+ void pick_clicked();
+ void insert_clicked();
+ void delete_clicked();
+ void apply_clicked();
+
+ virtual void button_press(int, int, unsigned);
+ virtual void pointer_motion(int, int);
+};
+
+#endif