X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fengineer%2Fnewvehicledialog.cpp;fp=source%2Fengineer%2Fnewvehicledialog.cpp;h=f27370fe093bdba68228ddc843c5d7c0bb9feef3;hb=b261812f040caed52bc3de783e8bcb86b222a9ed;hp=0000000000000000000000000000000000000000;hpb=fcc044d4eb24820af9acf1431042e4c422366915;p=r2c2.git diff --git a/source/engineer/newvehicledialog.cpp b/source/engineer/newvehicledialog.cpp new file mode 100644 index 0000000..f27370f --- /dev/null +++ b/source/engineer/newvehicledialog.cpp @@ -0,0 +1,65 @@ +#include +#include +#include +#include +#include "libr2c2/catalogue.h" +#include "libr2c2/layout.h" +#include "newvehicledialog.h" + +using namespace std; +using namespace Msp; +using namespace R2C2; + +static string vehicle_type_name(const VehicleType *const &vehtype) +{ + return format("%s %s", vehtype->get_article_number(), vehtype->get_name()); +} + +NewVehicleDialog::NewVehicleDialog(Train &t): + train(t), + loco_types(&vehicle_type_name), + wagon_types(&vehicle_type_name) +{ + Loader::WidgetMap widgets; + DataFile::load(*this, "data/newvehicledialog.ui", widgets); + + dynamic_cast(get_item(widgets, "lbl_title"))->set_text(format("Add vehicle to %s", train.get_name())); + + GLtk::List *lst_loco_types = dynamic_cast(get_item(widgets, "lst_loco_types")); + lst_loco_types->set_data(loco_types); + active_list = lst_loco_types; + + GLtk::List *lst_wagon_types = dynamic_cast(get_item(widgets, "lst_wagon_types")); + lst_wagon_types->set_data(wagon_types); + + dynamic_cast(get_item(widgets, "tgl_loco_types"))->signal_toggled.connect(sigc::bind(sigc::mem_fun(this, &NewVehicleDialog::toggle_list), lst_loco_types)); + dynamic_cast(get_item(widgets, "tgl_wagon_types"))->signal_toggled.connect(sigc::bind(sigc::mem_fun(this, &NewVehicleDialog::toggle_list), lst_wagon_types)); + + dynamic_cast(get_item(widgets, "btn_add"))->signal_clicked.connect(sigc::mem_fun(this, &NewVehicleDialog::add_clicked)); + + const Catalogue::VehicleMap &cat_vtypes = train.get_layout().get_catalogue().get_vehicles(); + for(Catalogue::VehicleMap::const_iterator i=cat_vtypes.begin(); i!=cat_vtypes.end(); ++i) + { + if(i->second->is_locomotive()) + loco_types.append(i->second); + else + wagon_types.append(i->second); + } +} + +void NewVehicleDialog::toggle_list(bool show, GLtk::List *lst) +{ + lst->set_visible(show); + if(show) + active_list = lst; +} + +void NewVehicleDialog::add_clicked() +{ + int index = active_list->get_selected_index(); + if(index>=0) + { + const VehicleType *vtype = static_cast &>(active_list->get_data()).get(index); + train.add_vehicle(*vtype); + } +}