summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
f74ce14)
Reuse Shift+L to select blocks
window.set_title("Railway Designer");
window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Designer::exit), 0));
window.set_title("Railway Designer");
window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &Designer::exit), 0));
+ selection.signal_changed.connect(sigc::mem_fun(this, &Designer::selection_changed));
manipulator.signal_status.connect(sigc::mem_fun(this, &Designer::manipulation_status));
manipulator.signal_done.connect(sigc::mem_fun(this, &Designer::manipulation_done));
measure.signal_changed.connect(sigc::mem_fun(this, &Designer::measure_changed));
manipulator.signal_status.connect(sigc::mem_fun(this, &Designer::manipulation_status));
manipulator.signal_done.connect(sigc::mem_fun(this, &Designer::manipulation_done));
measure.signal_changed.connect(sigc::mem_fun(this, &Designer::measure_changed));
else if(key==Msp::Input::KEY_PLUS)
selection.select_more();
else if(key==Msp::Input::KEY_L && (mod&Input::MOD_SHIFT))
else if(key==Msp::Input::KEY_PLUS)
selection.select_more();
else if(key==Msp::Input::KEY_L && (mod&Input::MOD_SHIFT))
- {
- const set<Track *> &tracks = layout->get_tracks();
- float len = 0;
- for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
- len += (*i)->get_type().get_total_length();
- IO::print("Total length: %.1fm\n", len);
- }
+ selection.select_blocks();
else if(key==Msp::Input::KEY_L)
selection.select_linked();
else if(key==Msp::Input::KEY_M)
else if(key==Msp::Input::KEY_L)
selection.select_linked();
else if(key==Msp::Input::KEY_M)
+void Designer::selection_changed()
+{
+ const set<Track *> &tracks = selection.get_tracks();
+ if(tracks.empty())
+ lbl_status->set_text(string());
+ else
+ {
+ float len = 0;
+ for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
+ len += (*i)->get_type().get_total_length();
+ lbl_status->set_text(format("%.2fm of track selected\n", len));
+ }
+}
+
void Designer::manipulation_status(const string &status)
{
lbl_status->set_text(status);
void Designer::manipulation_status(const string &status)
{
lbl_status->set_text(status);
void Designer::manipulation_done(bool)
{
void Designer::manipulation_done(bool)
{
- lbl_status->set_text(string());
}
void Designer::measure_changed()
}
void Designer::measure_changed()
void Designer::measure_done()
{
void Designer::measure_done()
{
- lbl_status->set_text(string());
}
void Designer::turnout_id_accept(const string &text)
}
void Designer::turnout_id_accept(const string &text)
void render();
Marklin::Track3D *pick_track(int, int);
void update_track_icon(Marklin::Track3D &);
void render();
Marklin::Track3D *pick_track(int, int);
void update_track_icon(Marklin::Track3D &);
+ void selection_changed();
void manipulation_status(const std::string &);
void manipulation_done(bool);
void measure_changed();
void manipulation_status(const std::string &);
void manipulation_done(bool);
void measure_changed();
+#include "libmarklin/block.h"
#include "selection.h"
using namespace std;
#include "selection.h"
using namespace std;
if(changed)
signal_changed.emit();
}
if(changed)
signal_changed.emit();
}
+
+void Selection::select_blocks()
+{
+ bool changed = false;
+ for(set<Track *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
+ {
+ const set<Track *> &btracks = (*i)->get_block().get_tracks();
+ for(set<Track *>::iterator j=btracks.begin(); j!=btracks.end(); ++j)
+ if(!tracks.count(*j))
+ {
+ tracks.insert(*j);
+ changed = true;
+ }
+ }
+
+ if(changed)
+ signal_changed.emit();
+}
void toggle_track(Marklin::Track *);
void select_more();
void select_linked();
void toggle_track(Marklin::Track *);
void select_more();
void select_linked();