diff --git a/src/gui/model/track.cpp b/src/gui/model/track.cpp index 7e9a3992b..d94926229 100644 --- a/src/gui/model/track.cpp +++ b/src/gui/model/track.cpp @@ -53,6 +53,7 @@ void Track::set_name(const string &name) { this->name = name; + nameChangedSignal.emit(name); } bool @@ -74,6 +75,12 @@ Track::find_descendant_track_parent( return shared_ptr(); } +sigc::signal +Track::signal_name_changed() const +{ + return nameChangedSignal; +} + string Track::print_branch_recursive(const unsigned int indentation) { diff --git a/src/gui/model/track.hpp b/src/gui/model/track.hpp index ac137d451..c59d06875 100644 --- a/src/gui/model/track.hpp +++ b/src/gui/model/track.hpp @@ -79,7 +79,17 @@ public: **/ virtual boost::shared_ptr find_descendant_track_parent(boost::shared_ptr child); - + +public: + + /** + * A signal which fires when the name changes. + * @return Returns the signal. The signal sends the new name for the + * track. + **/ + sigc::signal signal_name_changed() const; + +public: /** * A debugging helper function that prints this track, and all it's * child tracks in a human-readable form. @@ -109,6 +119,11 @@ private: * The name of this track. **/ std::string name; + + /** + * A signal which fires when the name changes. + **/ + sigc::signal nameChangedSignal; protected: /** diff --git a/src/gui/widgets/timeline/timeline-track.cpp b/src/gui/widgets/timeline/timeline-track.cpp index 6a8f4f023..1dc00cc8f 100644 --- a/src/gui/widgets/timeline/timeline-track.cpp +++ b/src/gui/widgets/timeline/timeline-track.cpp @@ -89,6 +89,11 @@ Track::Track(TimelineWidget &timeline_widget, mem_fun(timelineWidget, &TimelineWidget::on_add_track_command) ) ); context_list.push_back( Menu_Helpers::MenuElem(_("_Remove Track"), mem_fun(this, &Track::on_remove_track) ) ); + + // Connect to the model + model_track->signal_name_changed().connect(sigc::mem_fun(this, + &Track::on_name_changed)); + } Gtk::Widget& @@ -247,6 +252,13 @@ Track::on_set_name() } } +void +Track::on_name_changed(std::string new_name) +{ + if(new_name != titleMenuButton.get_label()) + update_name(); +} + void Track::on_remove_track() { diff --git a/src/gui/widgets/timeline/timeline-track.hpp b/src/gui/widgets/timeline/timeline-track.hpp index 3c7e4ee6b..97a3dcf1c 100644 --- a/src/gui/widgets/timeline/timeline-track.hpp +++ b/src/gui/widgets/timeline/timeline-track.hpp @@ -135,6 +135,11 @@ private: //----- Event Handlers -----// void on_set_name(); + + /** + * Event handler for when the track name changes + **/ + void on_name_changed(std::string new_name); void on_remove_track();