over time, a specific Lumiera code writing style has emerged. The GUI, as it stood, used somewhat different conventions, which now have been aligned to the common standard. Basically we use GNU style, with some adjustments for OO-programming, we prefer CamelCase, and write TypeNames uppercase, variableNames lowercase
113 lines
3 KiB
C++
113 lines
3 KiB
C++
/*
|
|
TIMELINE-CLIP-TRACK.hpp - Declaration of the timeline clip track object
|
|
|
|
Copyright (C) Lumiera.org
|
|
2008, Joel Holdsworth <joel@airwebreathe.org.uk>
|
|
|
|
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 <vector>
|
|
|
|
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<model::ClipTrack> track);
|
|
|
|
/** Draw the track in the timeline. */
|
|
void
|
|
draw_track (Cairo::RefPtr<Cairo::Context> 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<timeline::Clip>
|
|
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<model::ClipTrack>
|
|
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<model::Clip>,
|
|
shared_ptr<timeline::Clip>>
|
|
clipMap;
|
|
};
|
|
|
|
|
|
}}}// namespace gui::widget::timeline
|
|
#endif /*GUI_WIDGET_TIMELINE_CLIP_TRACK_H*/
|