diff options
Diffstat (limited to 'gtk2_ardour/imageframe_view.h')
-rw-r--r-- | gtk2_ardour/imageframe_view.h | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/gtk2_ardour/imageframe_view.h b/gtk2_ardour/imageframe_view.h new file mode 100644 index 0000000000..6a6aa3d33a --- /dev/null +++ b/gtk2_ardour/imageframe_view.h @@ -0,0 +1,212 @@ +/* + Copyright (C) 2003 Paul Davis + + 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. + + $Id$ +*/ + +#ifndef __gtk_ardour_imageframe_view_h__ +#define __gtk_ardour_imageframe_view_h__ + +#include <string> +#include <gtk--.h> +#include <gtk-canvas.h> +#include <sigc++/signal_system.h> +#include <list> + +#include "enums.h" +#include "time_axis_view_item.h" +#include "marker_view.h" + +class ImageFrameTimeAxis; +class ImageFrameTimeAxisGroup ; + +/** + * An ImageFrameItem to display an image upon the ardour time line + * + */ +class ImageFrameView : public TimeAxisViewItem +{ + public: + //---------------------------------------------------------------------------------------// + // Constructor / Desctructor + + /** + * Constructs a new ImageFrameView upon the canvas + * + * @param item_id unique id of this item + * @param parent the parent canvas item + * @param tv the time axis view that this item is to be placed upon + * @param group the ImageFrameGroup that this item is a member of + * @param spu the current samples per canvas unit + * @param start the start frame ogf this item + * @param duration the duration of this item + * @param rgb_data the rgb data of the image + * @param width the width of the original rgb_data image data + * @param height the width of the origianl rgb_data image data + * @param num_channels the number of color channels within rgb_data + */ + ImageFrameView(std::string item_id, + GtkCanvasGroup *parent, + ImageFrameTimeAxis *tv, + ImageFrameTimeAxisGroup* group, + double spu, + GdkColor& base_color, + jack_nframes_t start, + jack_nframes_t duration, + unsigned char* rgb_data, + uint32_t width, + uint32_t height, + uint32_t num_channels) ; + + /** + * Destructor + * Reposible for removing and destroying all marker items associated with this item + */ + ~ImageFrameView() ; + + static SigC::Signal1<void,ImageFrameView*> GoingAway; + + //---------------------------------------------------------------------------------------// + // Position and duration Accessors/Mutators + + /** + * Set the position of this item to the specified value + * + * @param pos the new position + * @param src the identity of the object that initiated the change + * @return true if the position change was a success, false otherwise + */ + virtual bool set_position(jack_nframes_t pos, void* src) ; + + /** + * Sets the duration of this item + * + * @param dur the new duration of this item + * @param src the identity of the object that initiated the change + * @return true if the duration change was succesful, false otherwise + */ + virtual bool set_duration(jack_nframes_t dur, void* src) ; + + //---------------------------------------------------------------------------------------// + // Parent Component Methods + + /** + * Sets the parent ImageFrameTimeAxisGroup of thie item + * each Item must be part of exactly one group (or 'scene') upon the timeline + * + * @param group the new parent group + */ + void set_time_axis_group(ImageFrameTimeAxisGroup* group) ; + + /** + * Returns the parent group of this item + * + * @return the parent group of this item + */ + ImageFrameTimeAxisGroup* get_time_axis_group() ; + + //---------------------------------------------------------------------------------------// + // ui methods + + /** + * Set the height of this item + * + * @param h the new height + */ + virtual void set_height(gdouble h) ; + + + //---------------------------------------------------------------------------------------// + // MarkerView methods + + /** + * Adds a markerView to the list of marker views associated with this item + * + * @param item the marker item to add + * @param src the identity of the object that initiated the change + */ + void add_marker_view_item(MarkerView* item, void* src) ; + + /** + * Removes the named marker view from the list of marker view associated with this item + * The Marker view is not destroyed on removal, so the caller must handle the item themself + * + * @param markId the id/name of the item to remove + * @param src the identity of the object that initiated the change + * @return the removed marker item + */ + MarkerView* remove_named_marker_view_item(std::string markId, void* src) ; + + /** + * Removes item from the list of marker views assocaited with this item + * This method will do nothing if item if not assiciated with this item + * The Marker view is not destroyed on removal, so the caller must handle the item themself + * + * @param item the item to remove + * @param src the identity of the object that initiated the change + */ + void remove_marker_view_item(MarkerView* item, void* src) ; + + /** + * Determines if the named marker is one of those associated with this item + * + * @param markId the id/name of the item to search for + */ + bool has_marker_view_item(std::string markId) ; + + + //---------------------------------------------------------------------------------// + // Emitted Signals + + /** Emitted when a marker Item is added to this Item */ + SigC::Signal2<void,MarkerView*,void*> MarkerViewAdded ; + + /** Emitted when a Marker Item is added to this Item */ + SigC::Signal2<void,MarkerView*,void*> MarkerViewRemoved ; + + private: + /** the list of MarkerViews associated with this item */ + typedef std::list<MarkerView*> MarkerViewList ; + MarkerViewList marker_view_list ; + + + /** The parent group that this item is a member of */ + ImageFrameTimeAxisGroup* the_parent_group ; + + // ------- Image data ----------- + + /** the image data that we display */ + //unsigned char* the_rgb_data ; + + /** The width of the image contained within the_rgb_data */ + uint32_t image_data_width ; + + /** The height of the image contained within the_rgb_data */ + uint32_t image_data_height ; + + /** the number of channels contained in the_rgb_data */ + uint32_t image_data_num_channels ; + + + // ------- Our canvas element ----------- + + /** the CanvasImageFrame to display the image */ + GtkCanvasItem* imageframe ; + +} ; /* class ImageFrameView */ + +#endif /* __gtk_ardour_imageframe_view_h__ */ |