From 19c97fd52a881b1e4ad6edc37f2cd9492e123da1 Mon Sep 17 00:00:00 2001 From: Joel Holdsworth Date: Sat, 6 Dec 2008 14:08:03 +0000 Subject: [PATCH] Replaced model::Track* with boost::shared_ptr --- src/gui/model/group-track.cpp | 9 +--- src/gui/model/group-track.hpp | 7 ++-- src/gui/model/sequence.cpp | 14 +++++-- src/gui/model/sequence.hpp | 6 ++- src/gui/model/track.cpp | 4 +- src/gui/model/track.hpp | 5 ++- src/gui/widgets/timeline-widget.cpp | 35 +++++++++------- src/gui/widgets/timeline-widget.hpp | 12 +++--- src/gui/widgets/timeline/timeline-body.cpp | 15 ++++--- src/gui/widgets/timeline/timeline-body.hpp | 7 ++-- .../timeline/timeline-header-container.cpp | 42 +++++++++++-------- .../timeline/timeline-header-container.hpp | 27 +++++++----- 12 files changed, 105 insertions(+), 78 deletions(-) diff --git a/src/gui/model/group-track.cpp b/src/gui/model/group-track.cpp index caa80731a..a71d8db6c 100644 --- a/src/gui/model/group-track.cpp +++ b/src/gui/model/group-track.cpp @@ -28,15 +28,8 @@ namespace model { GroupTrack::GroupTrack() { } - -void -GroupTrack::add_child_track(Track* child) -{ - REQUIRE(child != NULL); - children.push_back(child); -} -const std::list& +const std::list< boost::shared_ptr >& GroupTrack::get_child_tracks() const { return children; diff --git a/src/gui/model/group-track.hpp b/src/gui/model/group-track.hpp index 7b293f0d0..eb047cf37 100644 --- a/src/gui/model/group-track.hpp +++ b/src/gui/model/group-track.hpp @@ -36,13 +36,12 @@ class GroupTrack : public Track public: GroupTrack(); - void add_child_track(Track* child); - - const std::list& get_child_tracks() const; + const std::list< boost::shared_ptr >& + get_child_tracks() const; private: //----- Data -----// - std::list children; + std::list< boost::shared_ptr > children; }; } // namespace model diff --git a/src/gui/model/sequence.cpp b/src/gui/model/sequence.cpp index 8b5b77403..fa4b3a44b 100644 --- a/src/gui/model/sequence.cpp +++ b/src/gui/model/sequence.cpp @@ -22,13 +22,15 @@ #include "sequence.hpp" +using namespace boost; + namespace gui { namespace model { Sequence::Sequence() { // TEST CODE - static bool first = true; + /*static bool first = true; tracks.push_back(&video1); @@ -40,7 +42,7 @@ Sequence::Sequence() first = false; } - tracks.push_back(&video2); + tracks.push_back(&video2);*/ // END TEST CODE } @@ -57,11 +59,17 @@ Sequence::set_name(const Glib::ustring &name) this->name = name; } -const std::list& +const std::list< boost::shared_ptr >& Sequence::get_tracks() const { return tracks; } +void +Sequence::add_track(shared_ptr track) +{ + tracks.push_back(track); +} + } // namespace model } // namespace gui diff --git a/src/gui/model/sequence.hpp b/src/gui/model/sequence.hpp index 3e51337e1..9b2811597 100644 --- a/src/gui/model/sequence.hpp +++ b/src/gui/model/sequence.hpp @@ -47,7 +47,9 @@ public: void set_name(const Glib::ustring &name); - const std::list& get_tracks() const; + const std::list< boost::shared_ptr >& get_tracks() const; + + void add_track(boost::shared_ptr track); private: Glib::ustring name; @@ -60,7 +62,7 @@ private: ClipTrack video2; // END TEST CODE - std::list tracks; + std::list< boost::shared_ptr > tracks; }; } // namespace model diff --git a/src/gui/model/track.cpp b/src/gui/model/track.cpp index cf15dd24b..0734b648a 100644 --- a/src/gui/model/track.cpp +++ b/src/gui/model/track.cpp @@ -27,14 +27,14 @@ namespace gui { namespace model { -const std::list Track::NoChildren; +const std::list< boost::shared_ptr > Track::NoChildren; Track::Track() { } -const std::list& +const std::list< boost::shared_ptr >& Track::get_child_tracks() const { return NoChildren; diff --git a/src/gui/model/track.hpp b/src/gui/model/track.hpp index 85e02bac8..f38f6a4bf 100644 --- a/src/gui/model/track.hpp +++ b/src/gui/model/track.hpp @@ -39,12 +39,13 @@ public: virtual void add_child_track(Track* child) {}; - virtual const std::list& get_child_tracks() const; + virtual const std::list< boost::shared_ptr >& + get_child_tracks() const; Glib::ustring get_title(); private: - static const std::list NoChildren; + static const std::list< boost::shared_ptr > NoChildren; }; } // namespace model diff --git a/src/gui/widgets/timeline-widget.cpp b/src/gui/widgets/timeline-widget.cpp index f712b915d..05299f4c1 100644 --- a/src/gui/widgets/timeline-widget.cpp +++ b/src/gui/widgets/timeline-widget.cpp @@ -27,6 +27,7 @@ using namespace Gtk; using namespace std; +using namespace boost; using namespace gui::widgets::timeline; namespace gui { @@ -102,7 +103,7 @@ TimelineWidget::~TimelineWidget() ruler->unreference(); // Free allocated timeline tracks - pair pair; + pair pair; BOOST_FOREACH( pair, trackMap ) delete pair.second; } @@ -288,9 +289,9 @@ TimelineWidget::update_tracks() // Recalculate the total height of the timeline scrolled area totalHeight = 0; - BOOST_FOREACH(model::Track* track, sequence->get_tracks()) + BOOST_FOREACH(shared_ptr track, sequence->get_tracks()) { - ASSERT(track != NULL); + ASSERT(track); totalHeight += measure_branch_height(track); } } @@ -300,35 +301,36 @@ TimelineWidget::create_timeline_tracks() { REQUIRE(sequence); - BOOST_FOREACH(model::Track* child, sequence->get_tracks()) + BOOST_FOREACH(shared_ptr child, sequence->get_tracks()) create_timeline_tracks_from_branch(child); } void TimelineWidget::create_timeline_tracks_from_branch( - model::Track* const model_track) + shared_ptr model_track) { REQUIRE(model_track != NULL); // Is a timeline UI track present in the map already? - std::map::const_iterator iterator - = trackMap.find(model_track); + std::map::const_iterator + iterator = trackMap.find(model_track.get()); if(iterator == trackMap.end()) { // The timeline UI track is not present // We will need to create one - trackMap[model_track] = + trackMap[model_track.get()] = create_timeline_track_from_model_track(model_track); } // Recurse to child tracks - BOOST_FOREACH(model::Track* child, model_track->get_child_tracks()) + BOOST_FOREACH(boost::shared_ptr child, + model_track->get_child_tracks()) create_timeline_tracks_from_branch(child); } timeline::Track* TimelineWidget::create_timeline_track_from_model_track( - model::Track* const model_track) + boost::shared_ptr model_track) { REQUIRE(model_track); @@ -344,11 +346,12 @@ TimelineWidget::create_timeline_track_from_model_track( } timeline::Track* -TimelineWidget::lookup_timeline_track(model::Track *model_track) +TimelineWidget::lookup_timeline_track( + boost::shared_ptr model_track) { REQUIRE(sequence); - std::map::const_iterator iterator = - trackMap.find(model_track); + std::map::const_iterator + iterator = trackMap.find(model_track.get()); if(iterator == trackMap.end()) { // The track is not present in the map @@ -405,7 +408,8 @@ TimelineWidget::update_scroll() } int -TimelineWidget::measure_branch_height(model::Track* model_track) +TimelineWidget::measure_branch_height( + boost::shared_ptr model_track) { REQUIRE(model_track != NULL); @@ -416,7 +420,8 @@ TimelineWidget::measure_branch_height(model::Track* model_track) int height = timeline_track->get_height() + TrackPadding; // Recurse through all the children - BOOST_FOREACH( model::Track* child, model_track->get_child_tracks() ) + BOOST_FOREACH( boost::shared_ptr child, + model_track->get_child_tracks() ) height += measure_branch_height(child); return height; diff --git a/src/gui/widgets/timeline-widget.hpp b/src/gui/widgets/timeline-widget.hpp index 6e1c31c84..1326c7671 100644 --- a/src/gui/widgets/timeline-widget.hpp +++ b/src/gui/widgets/timeline-widget.hpp @@ -176,7 +176,7 @@ private: * @param list The parent track of the branch. **/ void create_timeline_tracks_from_branch( - model::Track* const model_track); + boost::shared_ptr model_track); /** * Creates a timeline UI track to correspond to a model track. @@ -185,7 +185,7 @@ private: * unreckognised type (this is an error condition). **/ static timeline::Track* create_timeline_track_from_model_track( - model::Track* const model_track); + boost::shared_ptr model_track); /** * Looks up a timeline UI track in trackMap that corresponds to a @@ -194,11 +194,13 @@ private: * @returns The timeline UI track found, or NULL if model_track has no * corresponding timeline UI track (this is an error condition). **/ - timeline::Track* lookup_timeline_track(model::Track *model_track); + timeline::Track* lookup_timeline_track( + boost::shared_ptr model_track); void update_scroll(); - int measure_branch_height(model::Track* model_track); + int measure_branch_height( + boost::shared_ptr model_track); int get_y_scroll_offset() const; @@ -212,7 +214,7 @@ protected: // Model Data const boost::shared_ptr sequence; - std::map trackMap; + std::map trackMap; // View State timeline::TimelineViewWindow viewWindow; diff --git a/src/gui/widgets/timeline/timeline-body.cpp b/src/gui/widgets/timeline/timeline-body.cpp index 1601ba601..a1ef65046 100644 --- a/src/gui/widgets/timeline/timeline-body.cpp +++ b/src/gui/widgets/timeline/timeline-body.cpp @@ -32,6 +32,7 @@ using namespace Gtk; using namespace std; +using namespace boost; namespace gui { namespace widgets { @@ -281,7 +282,7 @@ TimelineBody::draw_tracks(Cairo::RefPtr cr) cr->translate(0, -get_vertical_offset()); // Interate drawing each track - BOOST_FOREACH( model::Track* model_track, + BOOST_FOREACH( shared_ptr model_track, timelineWidget->sequence->get_tracks() ) draw_track_recursive(cr, model_track, allocation.get_width()); @@ -291,7 +292,7 @@ TimelineBody::draw_tracks(Cairo::RefPtr cr) void TimelineBody::draw_track_recursive(Cairo::RefPtr cr, - model::Track *model_track, const int view_width) const + shared_ptr model_track, const int view_width) const { REQUIRE(cr); REQUIRE(model_track != NULL); @@ -319,7 +320,8 @@ TimelineBody::draw_track_recursive(Cairo::RefPtr cr, cr->translate(0, height + TimelineWidget::TrackPadding); // Recurse drawing into children - BOOST_FOREACH( model::Track* child, model_track->get_child_tracks() ) + BOOST_FOREACH( shared_ptr child, + model_track->get_child_tracks() ) draw_track_recursive(cr, child, view_width); } @@ -428,7 +430,7 @@ TimelineBody::track_from_point(const int y) const int offset = -get_vertical_offset(); - BOOST_FOREACH( model::Track* model_track, + BOOST_FOREACH( shared_ptr model_track, timelineWidget->sequence->get_tracks() ) { timeline::Track* result = track_from_branch( @@ -442,7 +444,7 @@ TimelineBody::track_from_point(const int y) const } timeline::Track* TimelineBody::track_from_branch( - model::Track *model_track, + shared_ptr model_track, const int y, int &offset) const { REQUIRE(timelineWidget != NULL); @@ -462,7 +464,8 @@ timeline::Track* TimelineBody::track_from_branch( offset += height; // Recurse drawing into children - BOOST_FOREACH( model::Track* child, model_track->get_child_tracks() ) + BOOST_FOREACH( shared_ptr child, + model_track->get_child_tracks() ) { timeline::Track* result = track_from_branch(child, y, offset); if(result != NULL) diff --git a/src/gui/widgets/timeline/timeline-body.hpp b/src/gui/widgets/timeline/timeline-body.hpp index b799edfd2..14f66e7c6 100644 --- a/src/gui/widgets/timeline/timeline-body.hpp +++ b/src/gui/widgets/timeline/timeline-body.hpp @@ -119,7 +119,7 @@ private: void draw_tracks(Cairo::RefPtr cr); void draw_track_recursive(Cairo::RefPtr cr, - model::Track *track, const int view_width) const; + boost::shared_ptr track, const int view_width) const; /** * Draws the selected timeline period. @@ -141,7 +141,8 @@ private: timeline::Track* track_from_point(const int y) const; - timeline::Track* track_from_branch(model::Track *model_track, + timeline::Track* track_from_branch( + boost::shared_ptr model_track, const int y, int &offset) const; /** @@ -177,7 +178,7 @@ private: float selectionAlpha; GdkColor playbackPointColour; - gui::widgets::TimelineWidget *timelineWidget; + gui::widgets::TimelineWidget* const timelineWidget; friend class Tool; friend class ArrowTool; diff --git a/src/gui/widgets/timeline/timeline-header-container.cpp b/src/gui/widgets/timeline/timeline-header-container.cpp index 5bace4b4a..845b861f3 100644 --- a/src/gui/widgets/timeline/timeline-header-container.cpp +++ b/src/gui/widgets/timeline/timeline-header-container.cpp @@ -29,6 +29,7 @@ using namespace Gtk; using namespace std; +using namespace boost; namespace gui { namespace widgets { @@ -69,7 +70,7 @@ void TimelineHeaderContainer::update_headers() { // Add fresh headers - BOOST_FOREACH( model::Track* model_track, get_tracks() ) + BOOST_FOREACH( shared_ptr model_track, get_tracks() ) set_parent_recursive(model_track); } @@ -179,7 +180,7 @@ TimelineHeaderContainer::on_size_request (Requisition* requisition) // We don't care about the size of all the child widgets, but if we // don't send the size request down the tree, some widgets fail to // calculate their text layout correctly. - BOOST_FOREACH( model::Track* model_track, get_tracks() ) + BOOST_FOREACH( shared_ptr model_track, get_tracks() ) size_request_recursive(model_track); // Initialize the output parameter: @@ -208,7 +209,7 @@ TimelineHeaderContainer::forall_vfunc(gboolean /* include_internals */, { REQUIRE(callback != NULL); - BOOST_FOREACH( model::Track* track, get_tracks() ) + BOOST_FOREACH( shared_ptr track, get_tracks() ) { ASSERT(track != NULL); forall_vfunc_recursive(track, callback, callback_data); @@ -228,7 +229,8 @@ TimelineHeaderContainer::on_expose_event(GdkEventExpose *event) read_styles(); // Paint a border underneath all the root headers - BOOST_FOREACH( model::Track* model_track, get_tracks() ) + BOOST_FOREACH( shared_ptr model_track, + get_tracks() ) { ASSERT(model_track != NULL); @@ -277,7 +279,7 @@ TimelineHeaderContainer::layout_headers() const Allocation container_allocation = get_allocation(); const int header_width = container_allocation.get_width(); - BOOST_FOREACH( model::Track* model_track, get_tracks() ) + BOOST_FOREACH( shared_ptr model_track, get_tracks() ) layout_headers_recursive( model_track, offset, header_width, 0, true); @@ -287,8 +289,8 @@ TimelineHeaderContainer::layout_headers() void TimelineHeaderContainer::layout_headers_recursive( - model::Track *model_track, int &offset, const int header_width, - const int depth, bool parent_expanded) + shared_ptr model_track, int &offset, + const int header_width, const int depth, bool parent_expanded) { REQUIRE(depth >= 0); REQUIRE(model_track != NULL); @@ -335,7 +337,8 @@ TimelineHeaderContainer::layout_headers_recursive( widget.hide(); // Recurse through all the children - BOOST_FOREACH( model::Track* child, model_track->get_child_tracks() ) + BOOST_FOREACH( boost::shared_ptr child, + model_track->get_child_tracks() ) layout_headers_recursive( child, offset, header_width, depth + 1, timeline_track->get_expanded() && parent_expanded); @@ -343,19 +346,20 @@ TimelineHeaderContainer::layout_headers_recursive( void TimelineHeaderContainer::set_parent_recursive( - model::Track* const model_track) + boost::shared_ptr model_track) { lookup_timeline_track(model_track)-> get_header_widget().set_parent(*this); // Recurse through all the children - BOOST_FOREACH( model::Track* child, model_track->get_child_tracks() ) + BOOST_FOREACH( boost::shared_ptr child, + model_track->get_child_tracks() ) set_parent_recursive(child); } void TimelineHeaderContainer::size_request_recursive( - model::Track* const model_track) + shared_ptr const model_track) { Widget &widget = lookup_timeline_track(model_track)->get_header_widget(); @@ -363,13 +367,14 @@ TimelineHeaderContainer::size_request_recursive( widget.size_request(); // Recurse through all the children - BOOST_FOREACH( model::Track* child, model_track->get_child_tracks() ) + BOOST_FOREACH( shared_ptr child, + model_track->get_child_tracks() ) size_request_recursive(child); } void TimelineHeaderContainer::forall_vfunc_recursive( - model::Track* const model_track, GtkCallback callback, + shared_ptr model_track, GtkCallback callback, gpointer callback_data) { REQUIRE(callback != NULL); @@ -378,13 +383,14 @@ TimelineHeaderContainer::forall_vfunc_recursive( get_header_widget().gobj(), callback_data) ; // Recurse through all the children - BOOST_FOREACH( model::Track* child, model_track->get_child_tracks() ) + BOOST_FOREACH( shared_ptr child, + model_track->get_child_tracks() ) forall_vfunc_recursive(child, callback, callback_data); } void TimelineHeaderContainer::draw_header_decoration( - model::Track* const model_track, + shared_ptr model_track, const Gdk::Rectangle &clip_rect) { REQUIRE(model_track != NULL); @@ -435,7 +441,7 @@ TimelineHeaderContainer::draw_header_decoration( // Recurse through all the children if(timeline_track->get_expanded()) - BOOST_FOREACH( model::Track* child, + BOOST_FOREACH( shared_ptr child, model_track->get_child_tracks() ) draw_header_decoration(child, clip_rect); } @@ -476,7 +482,7 @@ TimelineHeaderContainer::get_expander_button_rectangle( timeline::Track* TimelineHeaderContainer::lookup_timeline_track( - model::Track *model_track) + shared_ptr model_track) { REQUIRE(model_track != NULL); REQUIRE(timelineWidget != NULL); @@ -488,7 +494,7 @@ TimelineHeaderContainer::lookup_timeline_track( return timeline_track; } -const std::list& +const std::list< boost::shared_ptr >& TimelineHeaderContainer::get_tracks() const { REQUIRE(timelineWidget != NULL); diff --git a/src/gui/widgets/timeline/timeline-header-container.hpp b/src/gui/widgets/timeline/timeline-header-container.hpp index 9775cdcde..94b98b6a8 100644 --- a/src/gui/widgets/timeline/timeline-header-container.hpp +++ b/src/gui/widgets/timeline/timeline-header-container.hpp @@ -152,34 +152,39 @@ private: * @param header_width The width of this widget in pixels. * @param depth The depth within the tree of track. **/ - void layout_headers_recursive(model::Track *track, int &offset, - const int header_width, const int depth, bool parent_expanded); + void layout_headers_recursive(boost::shared_ptr track, + int &offset, const int header_width, const int depth, + bool parent_expanded); /** * Recursively sets all the track header widgets to be child widgets * of this widget. * @param track The parent track object which will be recursed into. **/ - void set_parent_recursive(model::Track* const model_track); + void set_parent_recursive(boost::shared_ptr const + model_track); /** * Recursively causes all the visible track header widgets to call * size_request( ). **/ - void size_request_recursive(model::Track* const model_track); + void size_request_recursive( + boost::shared_ptr model_track); - void forall_vfunc_recursive(model::Track* const model_track, + void forall_vfunc_recursive( + boost::shared_ptr model_track, GtkCallback callback, gpointer callback_data); /** * Draws the border decoration around the track header. - * @param track The track to draw the decoration for. + * @param model_track The track to draw the decoration for. * @param clip_rect The clip to drawing to. * @param depth The depth within the tree of this track. This is used * to control the amount of indention. * @param offset The vertical offset of the headers in pixels. **/ - void draw_header_decoration(model::Track* const track, + void draw_header_decoration( + boost::shared_ptr model_track, const Gdk::Rectangle &clip_rect); Track* expander_button_from_point(const Gdk::Point &point); @@ -197,7 +202,8 @@ private: * @remarks If the return value is going to be NULL, an ENSURE will * fail. **/ - timeline::Track* lookup_timeline_track(model::Track *model_track); + timeline::Track* lookup_timeline_track( + boost::shared_ptr model_track); /** * A helper function which calls get_tracks within the sequence of the @@ -207,7 +213,8 @@ private: * @return Returns the track found, or returns NULL if no matching * track was found. **/ - const std::list& get_tracks() const; + const std::list< boost::shared_ptr >& + get_tracks() const; /** * Registers all the styles that this class will respond to. @@ -224,7 +231,7 @@ private: /** * The owner TimelineWidget of which this class is a helper */ - gui::widgets::TimelineWidget *timelineWidget; + gui::widgets::TimelineWidget* const timelineWidget; /** * The widget's window object.