/*
- Copyright (C) 2003 Paul Davis
+ 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
#include "public_editor.h"
#include "rgb_macros.h"
#include "gui_thread.h"
+#include "ardour_ui.h"
#include "i18n.h"
//---------------------------------------------------------------------------------------//
// Constructor / Desctructor
-
+
/**
* Constructs a new ImageFrameTimeAxisView.
*
ImageFrameTimeAxisView::ImageFrameTimeAxisView (ImageFrameTimeAxis& tv)
: _trackview (tv),
canvas_group (*_trackview.canvas_display),
- canvas_rect (canvas_group, 0.0, 0.0, 1000000.0, tv.height)
+ canvas_rect (canvas_group, 0.0, 0.0, 1000000.0, tv.current_height())
{
region_color = _trackview.color() ;
- stream_base_color = color_map[cImageTrackBase] ;
+ stream_base_color = ARDOUR_UI::config()->canvasvar_ImageTrack.get() ;
- canvas_rect.property_outline_color_rgba() = color_map[cImageTrackOutline];
+ canvas_rect.property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_ImageTrack.get();
canvas_rect.property_fill_color_rgba() = stream_base_color;
- canvas_rect.signal_event().connect (bind (mem_fun (_trackview.editor, &PublicEditor::canvas_imageframe_view_event), (ArdourCanvas::Item*) &canvas_rect, &tv));
+ canvas_rect.signal_event().connect (sigc::bind (sigc::mem_fun (_trackview.editor, &PublicEditor::canvas_imageframe_view_event), (ArdourCanvas::Item*) &canvas_rect, &tv));
_samples_per_unit = _trackview.editor.get_current_zoom() ;
- _trackview.editor.ZoomChanged.connect (mem_fun(*this, &ImageFrameTimeAxisView::reset_samples_per_unit)) ;
+ _trackview.editor.ZoomChanged.connect (sigc::mem_fun(*this, &ImageFrameTimeAxisView::reset_samples_per_unit)) ;
selected_imageframe_group = 0 ;
selected_imageframe_view = 0 ;
+
+ ImageFrameTimeAxisGroup::CatchDeletion.connect (*this, boost::bind (&ImageFrameTimeAxisView::remove_imageframe_group, this, _1), gui_context());
}
/**
- * Destructor
+ * Destructor
* Responsible for destroying all items tat may have been added to this time axis
*/
ImageFrameTimeAxisView::~ImageFrameTimeAxisView()
{
// Destroy all the ImageFrameGroups that we have
-
+
for(ImageFrameGroupList::iterator iter = imageframe_groups.begin(); iter != imageframe_groups.end(); ++iter)
{
ImageFrameTimeAxisGroup* iftag = (*iter) ;
-
+
ImageFrameGroupList::iterator next = iter ;
next++ ;
delete iftag ;
iftag = 0 ;
-
+
iter = next ;
}
-
+
}
//---------------------------------------------------------------------------------------//
// ui methods & data
-
+
/**
* Sets the height of the time axis view and the item upon it
*
if (h < 10.0 || h > 1000.0) {
return(-1) ;
}
-
+
canvas_rect.property_y2() = h ;
return(0) ;
}
-
+
/**
* Sets the position of this view helper on the canvas
*
/**
* Sets the current samples per unit.
* this method tells each item upon the time axis of the change
- *
+ *
* @param spu the new samples per canvas unit value
*/
-int
+int
ImageFrameTimeAxisView::set_samples_per_unit (gdouble spp)
{
if (spp < 1.0) {
}
_samples_per_unit = spp;
-
+
for(ImageFrameGroupList::const_iterator citer = imageframe_groups.begin(); citer != imageframe_groups.end(); ++citer)
{
(*citer)->set_item_samples_per_units(spp) ;
}
-
+
return(0) ;
}
//---------------------------------------------------------------------------------------//
// Child ImageFrameTimeAxisGroup Accessors/Mutators
-
+
/**
* Adds an ImageFrameTimeAxisGroup to the list of items upon this time axis view helper
* the new ImageFrameTimeAxisGroup is returned
ImageFrameTimeAxisView::add_imageframe_group(std::string group_id, void* src)
{
ImageFrameTimeAxisGroup* iftag = 0 ;
-
+
//check that there is not already a group with that id
if(get_named_imageframe_group(group_id) != 0)
{
else
{
iftag = new ImageFrameTimeAxisGroup(*this, group_id) ;
-
imageframe_groups.push_front(iftag) ;
-
- iftag->GoingAway.connect(bind(mem_fun(*this,&ImageFrameTimeAxisView::remove_imageframe_group), iftag, (void*)this)) ;
-
- ImageFrameGroupAdded(iftag, src) ; /* EMIT_SIGNAL */
+ ImageFrameGroupAdded(iftag, src) ; /* EMIT_SIGNAL */
}
return(iftag) ;
ImageFrameTimeAxisView::get_named_imageframe_group(std::string group_id)
{
ImageFrameTimeAxisGroup* iftag = 0 ;
-
+
for(ImageFrameGroupList::iterator i = imageframe_groups.begin(); i != imageframe_groups.end(); ++i)
{
if (((ImageFrameTimeAxisGroup*)*i)->get_group_name() == group_id)
break ;
}
}
-
+
return(iftag) ;
}
ImageFrameTimeAxisView::remove_named_imageframe_group(std::string group_id, void* src)
{
ImageFrameTimeAxisGroup* removed = 0 ;
-
+
for(ImageFrameGroupList::iterator iter = imageframe_groups.begin(); iter != imageframe_groups.end(); ++iter)
{
if(((ImageFrameTimeAxisGroup*)*iter)->get_group_name() == group_id)
{
removed = (*iter) ;
imageframe_groups.erase(iter) ;
-
+
if(removed == selected_imageframe_group)
{
selected_imageframe_group = 0 ;
}
-
+
ImageFrameGroupRemoved(removed->get_group_name(), src) ; /* EMIT_SIGNAL */
-
+
// break from the for loop
break ;
}
iter++ ;
}
-
+
return(removed) ;
}
void
ImageFrameTimeAxisView::remove_imageframe_group(ImageFrameTimeAxisGroup* iftag, void* src)
{
- ENSURE_GUI_THREAD(bind (mem_fun(*this, &ImageFrameTimeAxisView::remove_imageframe_group), iftag, src));
+ ENSURE_GUI_THREAD (*this, &ImageFrameTimeAxisView::remove_imageframe_group, iftag, src)
ImageFrameGroupList::iterator i;
if((i = find (imageframe_groups.begin(), imageframe_groups.end(), iftag)) != imageframe_groups.end())
{
imageframe_groups.erase(i) ;
-
+
ImageFrameGroupRemoved(iftag->get_group_name(), src) ; /* EMIT_SIGNAL */
}
}
//---------------------------------------------------------------------------------------//
// Selected group methods
-
+
/**
* Sets the currently selected group upon this time axis
*
{
selected_imageframe_group->set_selected(false) ;
}
-
+
selected_imageframe_group = iftag ;
selected_imageframe_group->set_selected(true) ;
}
}
selected_imageframe_group = 0 ;
}
-
+
/**
* Returns the currently selected group upon this time axis
*
//---------------------------------------------------------------------------------------//
// Selected item methods
-
+
/**
* Sets the currently selected imag frame view item
*
ImageFrameTimeAxisView::set_selected_imageframe_view(ImageFrameTimeAxisGroup* iftag, ImageFrameView* ifv)
{
set_selected_imageframe_group(iftag) ;
-
+
if(selected_imageframe_view)
{
selected_imageframe_view->set_selected(false) ;
}
-
+
selected_imageframe_view = ifv ;
selected_imageframe_view->set_selected(true) ;
}
{
clear_selected_imageframe_group() ;
}
-
+
if(selected_imageframe_view)
{
selected_imageframe_view->set_selected(false) ;
}
selected_imageframe_view = 0 ;
}
-
+
/**
* Returns the currently selected image frame view item upon this time axis
*
-
+
void
ImageFrameTimeAxisView::set_imageframe_duration_sec(double sec)
{
- if(selected_imageframe_group && selected_imageframe_view)
- {
- selected_imageframe_view->set_duration((nframes_t) (sec * _trackview.editor.current_session()->frame_rate()), this) ;
+ if (selected_imageframe_group && selected_imageframe_view) {
+ selected_imageframe_view->set_duration ((sec * _trackview.editor.session()->frame_rate()), this);
}
}
{
ImageFrameView* temp_item = selected_imageframe_view ;
selected_imageframe_group->remove_imageframe_item(temp_item, src) ;
-
+
// XXX although we have removed the item from the group, we need the group id still set within the
// item as the remove method requires this data when telling others about the deletion
// to fully specify the item we need the track, group and item id