using namespace Msp;
using namespace R2C2;
-class TrainItem: public GLtk::List::Item
+class TrainItem: public GLtk::List::MultiColumnItem
{
-private:
- GLtk::Label address;
- GLtk::Label name;
-
-public:
+public:
typedef R2C2::Train *ValueType;
TrainItem(ValueType);
-
-private:
- virtual void on_style_change();
};
const map<unsigned, Train *> <rains = layout.get_trains();
for(map<unsigned, Train *>::const_iterator i=ltrains.begin(); i!=ltrains.end(); ++i)
+ {
trains.append(i->second);
+ i->second->signal_name_changed.connect(sigc::hide(sigc::bind(sigc::mem_fun(this, &TrainListDialog::train_name_changed), sigc::ref(*i->second))));
+ }
+
+ layout.signal_train_added.connect(sigc::mem_fun(this, &TrainListDialog::train_added));
+ layout.signal_train_removed.connect(sigc::mem_fun(this, &TrainListDialog::train_removed));
}
void TrainListDialog::new_clicked()
{
TrainDialog *dlg = new TrainDialog(engineer, *trains.get(index));
find_ancestor<GLtk::Root>()->add(*dlg);
- dlg->autosize();
}
}
+void TrainListDialog::train_added(Train &train)
+{
+ unsigned n_items = trains.size();
+ unsigned i;
+ for(i=0; i<n_items; ++i)
+ if(trains.get(i)->get_address()>train.get_address())
+ break;
+ trains.insert(i, &train);
+
+ train.signal_name_changed.connect(sigc::hide(sigc::bind(sigc::mem_fun(this, &TrainListDialog::train_name_changed), sigc::ref(train))));
+}
-TrainItem::TrainItem(ValueType train):
- address(lexical_cast<string>(train->get_address())),
- name(train->get_name())
+void TrainListDialog::train_removed(Train &train)
{
- add(address);
- add(name);
+ int i = trains.find(&train);
+ if(i>=0)
+ trains.remove(i);
}
-void TrainItem::on_style_change()
+void TrainListDialog::train_name_changed(Train &train)
{
- if(!style)
- return;
+ trains.refresh(&train);
+}
- address.autosize();
- name.autosize();
- if(const GLtk::Part *part = style->get_part("children"))
- {
- const GLtk::Sides &margin = part->get_margin();
- address.set_position(margin.left, margin.bottom);
- name.set_position(margin.left+30, margin.bottom);
- }
+TrainItem::TrainItem(ValueType train)
+{
+ add(*new GLtk::Label(train->get_protocol()));
+ add(*new GLtk::Label(lexical_cast<string>(train->get_address())));
+ add(*new GLtk::Label(train->get_name()));
}
+