From 447d621e93e71b710fed0920b473350122426b97 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Wed, 4 Jun 2008 23:51:10 +0000 Subject: [PATCH 1/1] Add locomotive types Buttons for locomotive functions Various enhancements around the code UI graphics for dropdown --- engineer.res | 57 ++++++++++++++++++++++++++++ gui.blend | Bin 512024 -> 529140 bytes gui.png | Bin 2941 -> 3195 bytes source/engineer/engineer.cpp | 55 +++++++++++++-------------- source/engineer/engineer.h | 5 ++- source/engineer/mainpanel.cpp | 2 +- source/engineer/trainpanel.cpp | 38 +++++++++++++++++-- source/engineer/trainpanel.h | 5 ++- source/engineer/trainproperties.cpp | 27 ++++++++++--- source/engineer/trainproperties.h | 3 ++ source/libmarklin/catalogue.cpp | 27 ++++++++++++- source/libmarklin/catalogue.h | 7 +++- source/libmarklin/locomotive.cpp | 8 +++- source/libmarklin/locomotive.h | 6 ++- source/libmarklin/locotype.cpp | 24 ++++++++++++ source/libmarklin/locotype.h | 37 ++++++++++++++++++ 16 files changed, 254 insertions(+), 47 deletions(-) create mode 100644 source/libmarklin/locotype.cpp create mode 100644 source/libmarklin/locotype.h diff --git a/engineer.res b/engineer.res index 7f75ae4..c5650af 100644 --- a/engineer.res +++ b/engineer.res @@ -68,6 +68,19 @@ graphic "entrycursor" slice 54 74 2 12; }; +graphic "dropdownbg" +{ + texture "gui.png"; + slice 58 72 30 16; + border { top 4; right 20; bottom 4; left 2; }; +}; + +graphic "dropdownarrow" +{ + texture "gui.png"; + slice 90 75 10 8; +}; + graphic "yellowlamp" { texture "gui.png"; @@ -291,3 +304,47 @@ style "root" { special "children"; }; + +style "dropdown" +{ + font_color 0.0 0.0 0.0; + + part + { + graphic NORMAL "dropdownbg"; + }; + + part + { + graphic NORMAL "dropdownarrow"; + align 1.0 0.5; + fill 0.0 0.0; + margin { right 2; }; + }; + + special "text" + { + align 0.0 0.5; + fill 0.0 0.0; + margin { left 2; }; + }; + + special "list"; +}; + +style "list" +{ + font_color 0.0 0.0 0.0; + + part + { + graphic NORMAL "entrybg"; + }; + + special "items" + { + margin { top 2; right 2; bottom 2; left 2; }; + }; +}; + +style "vslider"; diff --git a/gui.blend b/gui.blend index f53efdaa83519a4d35cafb958bdf09a9308387d6..9407d861862eb0fb707693304464c216474a37f1 100644 GIT binary patch delta 54080 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 rD6{S8J#j^S+^U(HzneKOC>)hR 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 delta 48197 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 E1F35_?EnA( diff --git a/gui.png b/gui.png index cb71fa154c327fdca7e46e41667c28c33e534916..b0fec5b3b9912f030ebedf78fa43f355130be3c9 100644 GIT binary patch delta 3176 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 &args=getopt.get_args(); if(args.empty()) @@ -92,37 +93,33 @@ Engineer::~Engineer() delete trfc_mgr; } -Train *Engineer::add_train(unsigned addr) +void Engineer::add_train() { - if(addr==0) - { - train_prop=new TrainProperties(*this, ui_res, 0); - root->add(*train_prop); - train_prop->signal_ok.connect(sigc::mem_fun(this, &Engineer::dismiss_train_prop)); - train_prop_stale=false; - train_prop->set_visible(true); + train_prop=new TrainProperties(*this, ui_res, 0); + root->add(*train_prop); + train_prop->signal_ok.connect(sigc::mem_fun(this, &Engineer::dismiss_train_prop)); + train_prop_stale=false; + train_prop->set_visible(true); +} - return 0; - } - else - { - Locomotive *loco=new Locomotive(control, addr); - Train *train=new Train(*trfc_mgr, *loco); - train->set_name(format("Train %d", trfc_mgr->get_trains().size())); - - TrainPanel *tpanel=new TrainPanel(*this, ui_res, *train); - root->add(*tpanel); - int y=main_panel->get_geometry().y; - for(list::iterator i=train_panels.begin(); i!=train_panels.end(); ++i) - y-=(*i)->get_geometry().h; - tpanel->set_position(0, y-tpanel->get_geometry().h); - train_panels.push_back(tpanel); - tpanel->set_visible(true); - - place_train(*train); - - return train; - } +Train *Engineer::add_train(const LocoType &type, unsigned addr) +{ + Locomotive *loco=new Locomotive(type, control, addr); + Train *train=new Train(*trfc_mgr, *loco); + train->set_name(format("Train %d", trfc_mgr->get_trains().size())); + + TrainPanel *tpanel=new TrainPanel(*this, ui_res, *train); + root->add(*tpanel); + int y=main_panel->get_geometry().y; + for(list::iterator i=train_panels.begin(); i!=train_panels.end(); ++i) + y-=(*i)->get_geometry().h; + tpanel->set_position(0, y-tpanel->get_geometry().h); + train_panels.push_back(tpanel); + tpanel->set_visible(true); + + place_train(*train); + + return train; } void Engineer::place_train(Train &train) diff --git a/source/engineer/engineer.h b/source/engineer/engineer.h index 3552bad..f6e23bc 100644 --- a/source/engineer/engineer.h +++ b/source/engineer/engineer.h @@ -8,6 +8,7 @@ #include #include "libmarklin/catalogue.h" #include "libmarklin/control.h" +#include "libmarklin/locotype.h" #include "libmarklin/trafficmanager.h" #include "libmarklin/train.h" #include "3d/layout.h" @@ -48,8 +49,10 @@ public: Engineer(int argc, char **argv); ~Engineer(); + const Marklin::Catalogue &get_catalogue() const { return catalogue; } Marklin::Control &get_control() { return control; } - Marklin::Train *add_train(unsigned); + void add_train(); + Marklin::Train *add_train(const Marklin::LocoType &, unsigned); void place_train(Marklin::Train &); int main(); void quit() { exit(0); } diff --git a/source/engineer/mainpanel.cpp b/source/engineer/mainpanel.cpp index c89060a..7866a1c 100644 --- a/source/engineer/mainpanel.cpp +++ b/source/engineer/mainpanel.cpp @@ -71,7 +71,7 @@ void MainPanel::power_off() void MainPanel::new_loc() { - engineer.add_train(0); + engineer.add_train(); } void MainPanel::quit() diff --git a/source/engineer/trainpanel.cpp b/source/engineer/trainpanel.cpp index cd41c23..8c23f26 100644 --- a/source/engineer/trainpanel.cpp +++ b/source/engineer/trainpanel.cpp @@ -13,7 +13,7 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t): engineer(e), train(t) { - set_size(200, 131); + set_size(200, 172); add(*(lbl_addr=new GLtk::Label(res, format("%2d", train.get_locomotive().get_address())))); lbl_addr->set_style("digital"); @@ -35,13 +35,31 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t): lbl_speed->set_geometry(GLtk::Geometry(10, geom.h-63, 35, 24)); train.get_locomotive().signal_speed_changed.connect(sigc::mem_fun(this, &TrainPanel::loco_speed_changed)); + GLtk::Button *btn; + + const map &funcs=train.get_locomotive().get_type().get_functions(); + unsigned x=10; + for(map::const_iterator i=funcs.begin(); i!=funcs.end(); ++i, x+=40) + { + string fname=i->second; + fname[0]=toupper(fname[0]); + add(*(btn=new GLtk::Button(res, fname))); + btn->set_geometry(GLtk::Geometry(x, 68, 40, 24)); + btn->signal_clicked.connect(sigc::bind(sigc::mem_fun(this, &TrainPanel::func_clicked), i->first)); + + GLtk::Indicator *ind=new GLtk::Indicator(res); + add(*ind); + ind->set_geometry(GLtk::Geometry(x, 92, 40, 12)); + ind->set_active(train.get_locomotive().get_function(i->first)); + ind_funcs[i->first]=ind; + } + train.get_locomotive().signal_function_changed.connect(sigc::mem_fun(this, &TrainPanel::loco_function_changed)); + add(*(lbl_status=new GLtk::Label(res, train.get_status()))); lbl_status->set_style("digital"); - lbl_status->set_geometry(GLtk::Geometry(10, geom.h-92, geom.w-20, 24)); + lbl_status->set_geometry(GLtk::Geometry(10, 39, geom.w-20, 24)); train.signal_status_changed.connect(sigc::mem_fun(this, &TrainPanel::train_status_changed)); - GLtk::Button *btn; - add(*(btn=new GLtk::Button(res, "Edit"))); btn->set_geometry(GLtk::Geometry(geom.w-50, 10, 40, 24)); @@ -60,6 +78,13 @@ void TrainPanel::loco_speed_changed(unsigned speed) lbl_speed->set_text(format("%2d", speed)); } +void TrainPanel::loco_function_changed(unsigned func, bool value) +{ + map::iterator i=ind_funcs.find(func); + if(i!=ind_funcs.end()) + i->second->set_active(value); +} + void TrainPanel::train_status_changed(const string &s) { lbl_status->set_text(s); @@ -69,3 +94,8 @@ void TrainPanel::place_clicked() { engineer.place_train(train); } + +void TrainPanel::func_clicked(unsigned func) +{ + train.get_locomotive().set_function(func, !train.get_locomotive().get_function(func)); +} diff --git a/source/engineer/trainpanel.h b/source/engineer/trainpanel.h index 87e17c9..63e6e73 100644 --- a/source/engineer/trainpanel.h +++ b/source/engineer/trainpanel.h @@ -2,6 +2,7 @@ #define TRAINPANEL_H_ #include +#include #include #include #include "libmarklin/train.h" @@ -16,17 +17,19 @@ private: Msp::GLtk::Label *lbl_addr; Msp::GLtk::Label *lbl_name; Msp::GLtk::HSlider *sld_speed; - Marklin::Locomotive *loco; Msp::GLtk::Label *lbl_speed; Msp::GLtk::Label *lbl_status; + std::map ind_funcs; public: TrainPanel(Engineer &, const Msp::GLtk::Resources &, Marklin::Train &); private: void speed_slider_changed(double); void loco_speed_changed(unsigned); + void loco_function_changed(unsigned, bool); void train_status_changed(const std::string &); void place_clicked(); + void func_clicked(unsigned); }; #endif diff --git a/source/engineer/trainproperties.cpp b/source/engineer/trainproperties.cpp index 1a918ad..36f9325 100644 --- a/source/engineer/trainproperties.cpp +++ b/source/engineer/trainproperties.cpp @@ -1,8 +1,10 @@ #include +#include #include #include "engineer.h" #include "trainproperties.h" +using namespace std; using namespace Msp; using namespace Marklin; @@ -16,6 +18,13 @@ TrainProperties::TrainProperties(Engineer &e, GLtk::Resources &r, Train *t): add(*(ent_addr=new GLtk::Entry(res))); ent_addr->set_geometry(GLtk::Geometry(10, geom.h-30, 40, 20)); + add(*(drp_type=new GLtk::Dropdown(res))); + drp_type->set_geometry(GLtk::Geometry(60, geom.h-30, geom.w-70, 20)); + + const map &locos=engineer.get_catalogue().get_locomotives(); + for(map::const_iterator i=locos.begin(); i!=locos.end(); ++i) + drp_type->append(format("%d %s", i->second->get_article_number(), i->second->get_name())); + add(*(ent_name=new GLtk::Entry(res, "Train"))); ent_name->set_geometry(GLtk::Geometry(10, geom.h-55, geom.w-20, 20)); @@ -29,17 +38,23 @@ TrainProperties::TrainProperties(Engineer &e, GLtk::Resources &r, Train *t): add(*(btn=new GLtk::Button(res, "Cncl"))); btn->set_style("red"); btn->set_geometry(GLtk::Geometry(geom.w-80, 10, 30, 25)); + btn->signal_clicked.connect(sigc::mem_fun(this, &TrainProperties::cancel_clicked)); } void TrainProperties::ok_clicked() { - if(train) - { - } - else + if(!train) { - train=engineer.add_train(lexical_cast(ent_addr->get_text())); - train->set_name(ent_name->get_text()); + const map &locos=engineer.get_catalogue().get_locomotives(); + map::const_iterator i=locos.begin(); + advance(i, drp_type->get_selected_index()); + train=engineer.add_train(*i->second, lexical_cast(ent_addr->get_text())); } + + train->set_name(ent_name->get_text()); signal_ok.emit(); } + +void TrainProperties::cancel_clicked() +{ +} diff --git a/source/engineer/trainproperties.h b/source/engineer/trainproperties.h index 5d24613..20ab334 100644 --- a/source/engineer/trainproperties.h +++ b/source/engineer/trainproperties.h @@ -1,6 +1,7 @@ #ifndef TRAINPROPERTIES_H_ #define TRAINPROPERTIES_H_ +#include #include #include #include @@ -13,6 +14,7 @@ private: Engineer &engineer; Marklin::Train *train; Msp::GLtk::Entry *ent_addr; + Msp::GLtk::Dropdown *drp_type; Msp::GLtk::Entry *ent_name; public: @@ -21,6 +23,7 @@ public: TrainProperties(Engineer &, Msp::GLtk::Resources &, Marklin::Train *); private: void ok_clicked(); + void cancel_clicked(); }; #endif diff --git a/source/libmarklin/catalogue.cpp b/source/libmarklin/catalogue.cpp index 00c2773..3ab96a9 100644 --- a/source/libmarklin/catalogue.cpp +++ b/source/libmarklin/catalogue.cpp @@ -1,6 +1,7 @@ #include #include #include "catalogue.h" +#include "locotype.h" #include "tracktype.h" using namespace std; @@ -14,7 +15,7 @@ Catalogue::~Catalogue() delete i->second; } -TrackType &Catalogue::get_track(unsigned art_nr) +TrackType &Catalogue::get_track(unsigned art_nr) const { map::const_iterator i=tracks.find(art_nr); if(i==tracks.end()) @@ -23,6 +24,15 @@ TrackType &Catalogue::get_track(unsigned art_nr) return *i->second; } +LocoType &Catalogue::get_locomotive(unsigned art_nr) const +{ + map::const_iterator i=locos.find(art_nr); + if(i==locos.end()) + throw KeyError("Unknown locomotive type"); + + return *i->second; +} + void Catalogue::load(const string &fn) { IO::File in(fn.c_str()); @@ -36,9 +46,22 @@ void Catalogue::load(const string &fn) Catalogue::Loader::Loader(Catalogue &c): cat(c) { + add("locomotive", &Loader::locomotive); add("track", &Loader::track); } +void Catalogue::Loader::locomotive(unsigned art_no) +{ + map::iterator i=cat.locos.find(art_no); + if(i!=cat.locos.end()) + throw Exception("Duplicate locomotive number"); + + RefPtr loco=new LocoType(art_no); + load_sub(*loco); + unsigned art_nr=loco->get_article_number(); + cat.locos[art_nr]=loco.release(); +} + void Catalogue::Loader::track(unsigned art_no) { map::iterator i=cat.tracks.find(art_no); @@ -48,7 +71,7 @@ void Catalogue::Loader::track(unsigned art_no) RefPtr trk=new TrackType(art_no); load_sub(*trk); unsigned art_nr=trk->get_article_number(); - cat.tracks.insert(map::value_type(art_nr, trk.release())); + cat.tracks[art_nr]=trk.release(); } } // namespace Marklin diff --git a/source/libmarklin/catalogue.h b/source/libmarklin/catalogue.h index 66e3466..4179ea7 100644 --- a/source/libmarklin/catalogue.h +++ b/source/libmarklin/catalogue.h @@ -6,6 +6,7 @@ namespace Marklin { +class LocoType; class TrackType; class Catalogue @@ -18,17 +19,21 @@ public: private: Catalogue &cat; + void locomotive(unsigned); void track(unsigned); }; private: std::map tracks; + std::map locos; public: ~Catalogue(); - TrackType &get_track(unsigned); + TrackType &get_track(unsigned) const; const std::map &get_tracks() const { return tracks; } + LocoType &get_locomotive(unsigned) const; + const std::map &get_locomotives() const { return locos; } void load(const std::string &); }; diff --git a/source/libmarklin/locomotive.cpp b/source/libmarklin/locomotive.cpp index 0de0110..530a111 100644 --- a/source/libmarklin/locomotive.cpp +++ b/source/libmarklin/locomotive.cpp @@ -10,7 +10,8 @@ using namespace Msp; namespace Marklin { -Locomotive::Locomotive(Control &c, unsigned a): +Locomotive::Locomotive(const LocoType &t, Control &c, unsigned a): + type(t), control(c), addr(a), speed(0), @@ -56,6 +57,8 @@ void Locomotive::set_function(unsigned func, bool state) funcs&=~(1<>i)&1); } } diff --git a/source/libmarklin/locomotive.h b/source/libmarklin/locomotive.h index eae99f5..a127a17 100644 --- a/source/libmarklin/locomotive.h +++ b/source/libmarklin/locomotive.h @@ -9,10 +9,12 @@ namespace Marklin { class Control; +class LocoType; class Locomotive { private: + const LocoType &type; Control &control; unsigned addr; unsigned speed; @@ -21,9 +23,11 @@ private: public: sigc::signal signal_speed_changed; + sigc::signal signal_function_changed; - Locomotive(Control &, unsigned); + Locomotive(const LocoType &, Control &, unsigned); + const LocoType &get_type() const { return type; } void set_speed(unsigned); void set_reverse(bool); void set_function(unsigned, bool); diff --git a/source/libmarklin/locotype.cpp b/source/libmarklin/locotype.cpp new file mode 100644 index 0000000..31a995a --- /dev/null +++ b/source/libmarklin/locotype.cpp @@ -0,0 +1,24 @@ +#include "locotype.h" + +using namespace std; + +namespace Marklin { + +LocoType::LocoType(unsigned an): + art_nr(an) +{ } + + +LocoType::Loader::Loader(LocoType <): + ltype(lt) +{ + add("function", &Loader::function); + add("name", &LocoType::name); +} + +void LocoType::Loader::function(unsigned i, const string &f) +{ + ltype.funcs[i]=f; +} + +} // namespace Marklin diff --git a/source/libmarklin/locotype.h b/source/libmarklin/locotype.h new file mode 100644 index 0000000..bce5c57 --- /dev/null +++ b/source/libmarklin/locotype.h @@ -0,0 +1,37 @@ +#ifndef LIBMARKLIN_LOCOTYPE_H_ +#define LIBMARKLIN_LOCOTYPE_H_ + +#include + +namespace Marklin { + +class LocoType +{ +public: + class Loader: public Msp::DataFile::Loader + { + private: + LocoType <ype; + + public: + Loader(LocoType &); + LocoType &get_object() const { return ltype; } + private: + void function(unsigned, const std::string &); + }; + +private: + unsigned art_nr; + std::string name; + std::map funcs; + +public: + LocoType(unsigned); + unsigned get_article_number() const { return art_nr; } + const std::string &get_name() const { return name; } + const std::map &get_functions() const { return funcs; } +}; + +} // namespace Marklin + +#endif -- 2.43.0