lumiera_/src/gui/widget/timeline/timeline-clip-track.hpp
Ichthyostega 670c670d55 style-adjustment: GUI indentation, naming and braces
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
2015-05-29 04:44:58 +02:00

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*/