2 Copyright (C) 2003 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #ifndef __gtk_ardour_imageframe_view_h__
22 #define __gtk_ardour_imageframe_view_h__
25 #include <gdkmm/color.h>
26 #include <libgnomecanvas/libgnomecanvas.h>
27 #include <sigc++/signal.h>
32 #include "time_axis_view_item.h"
33 #include "marker_view.h"
35 class ImageFrameTimeAxis;
36 class ImageFrameTimeAxisGroup ;
39 * An ImageFrameItem to display an image upon the ardour time line
42 class ImageFrameView : public TimeAxisViewItem
45 //---------------------------------------------------------------------------------------//
46 // Constructor / Desctructor
49 * Constructs a new ImageFrameView upon the canvas
51 * @param item_id unique id of this item
52 * @param parent the parent canvas item
53 * @param tv the time axis view that this item is to be placed upon
54 * @param group the ImageFrameGroup that this item is a member of
55 * @param spu the current samples per canvas unit
56 * @param start the start frame ogf this item
57 * @param duration the duration of this item
58 * @param rgb_data the rgb data of the image
59 * @param width the width of the original rgb_data image data
60 * @param height the width of the origianl rgb_data image data
61 * @param num_channels the number of color channels within rgb_data
63 ImageFrameView(const std::string & item_id,
64 ArdourCanvas::Group *parent,
65 ImageFrameTimeAxis *tv,
66 ImageFrameTimeAxisGroup* group,
68 Gdk::Color& base_color,
71 unsigned char* rgb_data,
74 uint32_t num_channels) ;
78 * Reposible for removing and destroying all marker items associated with this item
82 static sigc::signal<void,ImageFrameView*> GoingAway;
84 //---------------------------------------------------------------------------------------//
85 // Position and duration Accessors/Mutators
88 * Set the position of this item to the specified value
90 * @param pos the new position
91 * @param src the identity of the object that initiated the change
92 * @return true if the position change was a success, false otherwise
94 virtual bool set_position(nframes_t pos, void* src, double* delta = 0) ;
97 * Sets the duration of this item
99 * @param dur the new duration of this item
100 * @param src the identity of the object that initiated the change
101 * @return true if the duration change was succesful, false otherwise
103 virtual bool set_duration(nframes_t dur, void* src) ;
105 //---------------------------------------------------------------------------------------//
106 // Parent Component Methods
109 * Sets the parent ImageFrameTimeAxisGroup of thie item
110 * each Item must be part of exactly one group (or 'scene') upon the timeline
112 * @param group the new parent group
114 void set_time_axis_group(ImageFrameTimeAxisGroup* group) ;
117 * Returns the parent group of this item
119 * @return the parent group of this item
121 ImageFrameTimeAxisGroup* get_time_axis_group() ;
123 //---------------------------------------------------------------------------------------//
127 * Set the height of this item
129 * @param h the new height
131 virtual void set_height(gdouble h) ;
134 //---------------------------------------------------------------------------------------//
135 // MarkerView methods
138 * Adds a markerView to the list of marker views associated with this item
140 * @param item the marker item to add
141 * @param src the identity of the object that initiated the change
143 void add_marker_view_item(MarkerView* item, void* src) ;
146 * Removes the named marker view from the list of marker view associated with this item
147 * The Marker view is not destroyed on removal, so the caller must handle the item themself
149 * @param markId the id/name of the item to remove
150 * @param src the identity of the object that initiated the change
151 * @return the removed marker item
153 MarkerView* remove_named_marker_view_item(const std::string & markId, void* src) ;
156 * Removes item from the list of marker views assocaited with this item
157 * This method will do nothing if item if not assiciated with this item
158 * The Marker view is not destroyed on removal, so the caller must handle the item themself
160 * @param item the item to remove
161 * @param src the identity of the object that initiated the change
163 void remove_marker_view_item(MarkerView* item, void* src) ;
166 * Determines if the named marker is one of those associated with this item
168 * @param markId the id/name of the item to search for
170 bool has_marker_view_item(const std::string & markId) ;
173 //---------------------------------------------------------------------------------//
176 /** Emitted when a marker Item is added to this Item */
177 sigc::signal<void,MarkerView*,void*> MarkerViewAdded ;
179 /** Emitted when a Marker Item is added to this Item */
180 sigc::signal<void,MarkerView*,void*> MarkerViewRemoved ;
183 /** the list of MarkerViews associated with this item */
184 typedef std::list<MarkerView*> MarkerViewList ;
185 MarkerViewList marker_view_list ;
188 /** The parent group that this item is a member of */
189 ImageFrameTimeAxisGroup* the_parent_group ;
191 // ------- Image data -----------
193 /** the image data that we display */
194 //unsigned char* the_rgb_data ;
196 /** The width of the image contained within the_rgb_data */
197 uint32_t image_data_width ;
199 /** The height of the image contained within the_rgb_data */
200 uint32_t image_data_height ;
202 /** the number of channels contained in the_rgb_data */
203 uint32_t image_data_num_channels ;
206 // ------- Our canvas element -----------
208 /** the CanvasImageFrame to display the image */
209 ArdourCanvas::ImageFrame* imageframe ;
211 } ; /* class ImageFrameView */
213 #endif /* __gtk_ardour_imageframe_view_h__ */