]> git.tdb.fi Git - r2c2.git/blob - source/engineer/traindialog.h
Persist most dialogs across runs
[r2c2.git] / source / engineer / traindialog.h
1 #ifndef TRAINDIALOG_H_
2 #define TRAINDIALOG_H_
3
4 #include <msp/gltk/button.h>
5 #include <msp/gltk/hslider.h>
6 #include <msp/gltk/label.h>
7 #include <msp/gltk/toggle.h>
8 #include "libr2c2/train.h"
9 #include "dynamicdialog.h"
10
11 class Engineer;
12
13 class TrainDialog: public DynamicDialog, public sigc::trackable
14 {
15 public:
16         class StateLoader: public Msp::DataFile::DerivedObjectLoader<TrainDialog, DynamicDialog::StateLoader>
17         {
18         public:
19                 StateLoader(TrainDialog &);
20
21         private:
22                 void expanded(bool);
23         };
24
25 private:
26         Engineer &engineer;
27         R2C2::Train &train;
28         Msp::GLtk::Label *lbl_title;
29         Msp::GLtk::Button *btn_expand;
30         Msp::GLtk::Label *lbl_speed;
31         Msp::GLtk::Slider *sld_speed;
32         Msp::GLtk::Toggle *tgl_forward;
33         Msp::GLtk::Label *lbl_status;
34         Msp::GLtk::Panel *pnl_expander;
35         std::list<Msp::GLtk::Panel *> panels;
36         bool updating;
37
38 public:
39         TrainDialog(Engineer &, R2C2::Train &);
40
41 private:
42         virtual void autosize_special(const Msp::GLtk::Part &, Msp::GLtk::Geometry &) const;
43
44         void ai_event(R2C2::TrainAI &, const R2C2::TrainAI::Message &);
45         void update_speed_display(float);
46         void ui_speed_changed(double);
47         void update_forward(bool);
48         void ui_forward_toggled(bool);
49         void expand_clicked();
50         void set_expanded(bool);
51         void toggle_panel(bool, Msp::GLtk::Panel *);
52
53 public:
54         virtual bool save_state(Msp::DataFile::Statement &) const;
55 };
56
57 #endif