/* TIMELINE-CLIP-TRACK.hpp - Declaration of the timeline clip track object Copyright (C) Lumiera.org 2008, Joel Holdsworth This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /** * @file timeline-clip-track.hpp * timeline track objects which contain clips. */ #ifndef GUI_WIDGET_TIMELINE_CLIP_TRACK_H #define GUI_WIDGET_TIMELINE_CLIP_TRACK_H #include "gui/widget/timeline/basic-draw-strategy.hpp" #include "gui/widget/timeline/timeline-track.hpp" #include "gui/model/clip-track.hpp" #include "lib/time/timevalue.hpp" #include namespace gui { namespace widget { namespace timeline { using lib::time::Time; class Clip; class TimelineViewWindow; class ClipTrack : public timeline::Track { public: ClipTrack(TimelineWidget& timelineWidget, shared_ptr track); /** Draw the track in the timeline. */ void draw_track (Cairo::RefPtr cairo, TimelineViewWindow* const window) const; /** * Gets the clip that is occupying the given time. * If there is no track, return a NULL pointer. * @param the given time */ shared_ptr getClipAt(Time position) const; private: /** * Ensures timeline UI clips have been created for every model clip in track. */ void createTimelineClips(); /** * Gets the modelTrack as a ClipTrack. */ shared_ptr getModelTrack (); /** * An event handler that receives notifications * for when the models clip list has been changed. */ void onClipListChanged(); /** * Removes any UI clips which no longer have corresponding model clips present in the * sequence. */ void removeOrphanedClips(); /** * Update the attached timeline clips. */ void updateClips(); /** * The clipMap maps model clips to timeline widget clips * which are responsible for the UI representation of a clip. */ std::map, shared_ptr> clipMap; }; }}}// namespace gui::widget::timeline #endif /*GUI_WIDGET_TIMELINE_CLIP_TRACK_H*/