Logo Search packages:      
Sourcecode: ardour version File versions  Download package

imageframe_view.h

/*
    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: imageframe_view.h,v 1.4 2004/11/29 03:04:35 pauld Exp $
*/

#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
 *
 */
00041 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 */
00176             SigC::Signal2<void,MarkerView*,void*> MarkerViewAdded ;
            
            /** Emitted when a Marker Item is added to this Item */
00179             SigC::Signal2<void,MarkerView*,void*> MarkerViewRemoved ;

      private:
            /** the list of MarkerViews associated with this item */
00183             typedef std::list<MarkerView*> MarkerViewList ;
            MarkerViewList marker_view_list ;
            
            
            /** The parent group that this item is a member of */
00188             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 */
00196             uint32_t image_data_width ;
            
            /** The height of the image contained within the_rgb_data */
00199             uint32_t image_data_height ;
            
            /** the number of channels contained in the_rgb_data */
00202             uint32_t image_data_num_channels ;
            
            
            // ------- Our canvas element -----------
            
            /** the CanvasImageFrame to display the image */
00208             GtkCanvasItem* imageframe ;
            
} ; /* class ImageFrameView */

#endif /* __gtk_ardour_imageframe_view_h__ */

Generated by  Doxygen 1.6.0   Back to index