summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2006-03-08 02:50:53 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2006-03-08 02:50:53 +0000
commit0d2c8771a7b0f70fe4cf21cfdcfca709470787c2 (patch)
treed39ee0545b79178894d5216b2c87956e8bedc14c /gtk2_ardour
parentbe60137cfb31ef1266f5132a9fd465c01ce074a9 (diff)
fix for deferred saves by StateManager-derivatives; changes to new/copy/clear playlist ops (not finished), TRUE/FALSE -> true/false in editor_mouse.cc
git-svn-id: svn://localhost/trunk/ardour2@358 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/audio_time_axis.cc93
-rw-r--r--gtk2_ardour/audio_time_axis.h9
-rw-r--r--gtk2_ardour/draginfo.h49
-rw-r--r--gtk2_ardour/editor.cc73
-rw-r--r--gtk2_ardour/editor.h44
-rw-r--r--gtk2_ardour/editor_mouse.cc167
-rw-r--r--gtk2_ardour/public_editor.h3
-rw-r--r--gtk2_ardour/selection.cc89
-rw-r--r--gtk2_ardour/streamview.cc2
9 files changed, 302 insertions, 227 deletions
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 88a0f5eb57..4ec1e3da2a 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -858,7 +858,7 @@ AudioTimeAxisView::rename_current_playlist ()
}
void
-AudioTimeAxisView::use_copy_playlist ()
+AudioTimeAxisView::use_copy_playlist (bool prompt)
{
AudioPlaylist *pl;
DiskStream *ds;
@@ -873,64 +873,74 @@ AudioTimeAxisView::use_copy_playlist ()
return;
}
- ArdourPrompter prompter (true);
- string new_name = Playlist::bump_name (pl->name(), _session);
-
- prompter.set_prompt (_("Name for playlist"));
- prompter.set_initial_text (new_name);
- prompter.show_all ();
+ name = Playlist::bump_name (pl->name(), _session);
- switch (prompter.run ()) {
- case Gtk::RESPONSE_ACCEPT:
- prompter.get_result (name);
- if (name.length()) {
- ds->use_copy_playlist ();
- pl = ds->playlist();
- pl->set_name (name);
+ if (prompt) {
+
+ ArdourPrompter prompter (true);
+
+ prompter.set_prompt (_("Name for playlist"));
+ prompter.set_initial_text (name);
+ prompter.show_all ();
+
+ switch (prompter.run ()) {
+ case Gtk::RESPONSE_ACCEPT:
+ prompter.get_result (name);
+ break;
+
+ default:
+ return;
}
- break;
+ }
- default:
- break;
+ if (name.length()) {
+ ds->use_copy_playlist ();
+ pl = ds->playlist();
+ pl->set_name (name);
}
}
void
-AudioTimeAxisView::use_new_playlist ()
+AudioTimeAxisView::use_new_playlist (bool prompt)
{
AudioPlaylist *pl;
DiskStream *ds;
string name;
-
+
/* neither conditions are supposed to be true at this
time, but to leave the design flexible, allow
them to be in the future without causing crashes
*/
-
+
if (((ds = get_diskstream()) == 0) || ((pl = ds->playlist()) == 0)) {
return;
}
-
- ArdourPrompter prompter (true);
- string new_name = Playlist::bump_name (pl->name(), _session);
-
- prompter.set_prompt (_("Name for playlist"));
- prompter.set_initial_text (new_name);
- switch (prompter.run ()) {
- case Gtk::RESPONSE_ACCEPT:
- prompter.get_result (name);
- if (name.length()) {
- ds->use_new_playlist ();
- pl = ds->playlist();
- pl->set_name (name);
+ name = Playlist::bump_name (pl->name(), _session);
+
+ if (prompt) {
+
+ ArdourPrompter prompter (true);
+
+ prompter.set_prompt (_("Name for playlist"));
+ prompter.set_initial_text (name);
+
+ switch (prompter.run ()) {
+ case Gtk::RESPONSE_ACCEPT:
+ prompter.get_result (name);
+ break;
+
+ default:
+ return;
}
- break;
+ }
- default:
- break;
+ if (name.length()) {
+ ds->use_new_playlist ();
+ pl = ds->playlist();
+ pl->set_name (name);
}
-}
+}
void
AudioTimeAxisView::clear_playlist ()
@@ -1010,7 +1020,8 @@ AudioTimeAxisView::selection_click (GdkEventButton* ev)
switch (Keyboard::selection_type (ev->state)) {
case Selection::Toggle:
- editor.get_selection().toggle (*tracks);
+ /* XXX this is not right */
+ editor.get_selection().add (*tracks);
break;
case Selection::Set:
@@ -1855,10 +1866,10 @@ AudioTimeAxisView::build_playlist_menu (Gtk::Menu * menu)
playlist_items.push_back (MenuElem (_("Rename"), mem_fun(*this, &AudioTimeAxisView::rename_current_playlist)));
playlist_items.push_back (SeparatorElem());
- playlist_items.push_back (MenuElem (_("New"), mem_fun(*this, &AudioTimeAxisView::use_new_playlist)));
- playlist_items.push_back (MenuElem (_("New Copy"), mem_fun(*this, &AudioTimeAxisView::use_copy_playlist)));
+ playlist_items.push_back (MenuElem (_("New"), mem_fun(editor, &PublicEditor::new_playlists)));
+ playlist_items.push_back (MenuElem (_("New Copy"), mem_fun(editor, &PublicEditor::copy_playlists)));
playlist_items.push_back (SeparatorElem());
- playlist_items.push_back (MenuElem (_("Clear Current"), mem_fun(*this, &AudioTimeAxisView::clear_playlist)));
+ playlist_items.push_back (MenuElem (_("Clear Current"), mem_fun(editor, &PublicEditor::clear_playlists)));
playlist_items.push_back (SeparatorElem());
playlist_items.push_back (MenuElem(_("Select"), mem_fun(*this, &AudioTimeAxisView::show_playlist_selector)));
diff --git a/gtk2_ardour/audio_time_axis.h b/gtk2_ardour/audio_time_axis.h
index c481c54ed5..0272e0fa0e 100644
--- a/gtk2_ardour/audio_time_axis.h
+++ b/gtk2_ardour/audio_time_axis.h
@@ -126,6 +126,12 @@ class AudioTimeAxisView : public RouteUI, public TimeAxisView
void set_state (const XMLNode&);
XMLNode* get_child_xml_node (const string & childname);
+ /* the editor calls these when mapping an operation across multiple tracks */
+
+ void use_new_playlist (bool prompt);
+ void use_copy_playlist (bool prompt);
+ void clear_playlist ();
+
private:
friend class StreamView;
friend class AudioRegionView;
@@ -227,9 +233,6 @@ class AudioTimeAxisView : public RouteUI, public TimeAxisView
void playlist_modified ();
void add_playlist_to_playlist_menu (ARDOUR::Playlist*);
- void use_new_playlist ();
- void use_copy_playlist ();
- void clear_playlist ();
void rename_current_playlist ();
/* automation stuff */
diff --git a/gtk2_ardour/draginfo.h b/gtk2_ardour/draginfo.h
new file mode 100644
index 0000000000..8b9213ea40
--- /dev/null
+++ b/gtk2_ardour/draginfo.h
@@ -0,0 +1,49 @@
+#ifndef __gtk2_ardour_drag_info_h_
+#define __gtk2_ardour_drag_info_h_
+
+#include <gdk/gdk.h>
+#include <stdint.h>
+
+#include "canvas.h"
+#include <ardour/types.h>
+
+namespace ARDOUR {
+ class Location;
+}
+
+class Editor;
+class TimeAxisView;
+
+struct DragInfo {
+ ArdourCanvas::Item* item;
+ void* data;
+ jack_nframes_t last_frame_position;
+ int32_t pointer_frame_offset;
+ jack_nframes_t grab_frame;
+ jack_nframes_t last_pointer_frame;
+ jack_nframes_t current_pointer_frame;
+ double grab_x, grab_y;
+ double cumulative_x_drag;
+ double cumulative_y_drag;
+ double current_pointer_x;
+ double current_pointer_y;
+ void (Editor::*motion_callback)(ArdourCanvas::Item*, GdkEvent*);
+ void (Editor::*finished_callback)(ArdourCanvas::Item*, GdkEvent*);
+ TimeAxisView* last_trackview;
+ bool x_constrained;
+ bool copy;
+ bool was_rolling;
+ bool first_move;
+ bool move_threshold_passsed;
+ bool want_move_threshold;
+ bool brushing;
+ ARDOUR::Location* copied_location;
+};
+
+struct LineDragInfo {
+ uint32_t before;
+ uint32_t after;
+};
+
+#endif /* __gtk2_ardour_drag_info_h_ */
+
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 9d788f1566..dae80439b1 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -2964,7 +2964,8 @@ Editor::restore_state (State *state)
*selection = *state->selection;
time_selection_changed ();
- region_selection_changed ();
+ cerr << "RS: RSC\n";
+ region_selection_changed ();
/* XXX other selection change handlers? */
}
@@ -3052,7 +3053,7 @@ Editor::set_selected_control_point_from_click (Selection::Operation op, bool wit
}
void
-Editor::mapover_audio_tracks (slot<void,AudioTimeAxisView&> sl)
+Editor::mapover_audio_tracks (slot<void,AudioTimeAxisView&,uint32_t> sl)
{
set<AudioTimeAxisView*> relevant_tracks;
@@ -3060,7 +3061,7 @@ Editor::mapover_audio_tracks (slot<void,AudioTimeAxisView&> sl)
for (TrackSelection::iterator ti = selection->tracks.begin(); ti != selection->tracks.end(); ++ti) {
- AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(&clicked_regionview->get_time_axis_view());
+ AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(*ti);
if (!atv) {
continue;
@@ -3094,14 +3095,17 @@ Editor::mapover_audio_tracks (slot<void,AudioTimeAxisView&> sl)
}
/* step two: apply operation to each track */
+
+ uint32_t sz = relevant_tracks.size();
for (set<AudioTimeAxisView*>::iterator ati = relevant_tracks.begin(); ati != relevant_tracks.end(); ++ati) {
- sl (**ati);
+ sl (**ati, sz);
}
}
void
-Editor::track_set_selected_regionview_from_click (AudioTimeAxisView& atv, AudioRegionView* basis, vector<AudioRegionView*>* all_equivs)
+Editor::mapped_set_selected_regionview_from_click (AudioTimeAxisView& atv, uint32_t ignored,
+ AudioRegionView* basis, vector<AudioRegionView*>* all_equivs)
{
AudioPlaylist* pl;
vector<AudioRegion*> results;
@@ -3127,19 +3131,26 @@ Editor::track_set_selected_regionview_from_click (AudioTimeAxisView& atv, AudioR
void
Editor::set_selected_regionview_from_click (Selection::Operation op, bool no_track_remove)
{
+ cerr << "In SSRfC\n";
+
vector<AudioRegionView*> all_equivalent_regions;
if (!clicked_regionview) {
return;
}
- mapover_audio_tracks (bind (mem_fun (*this, &Editor::track_set_selected_regionview_from_click),
+ mapover_audio_tracks (bind (mem_fun (*this, &Editor::mapped_set_selected_regionview_from_click),
clicked_regionview, &all_equivalent_regions));
+
+ cerr << "mapover done\n";
+
begin_reversible_command (_("set selected regionview"));
switch (op) {
case Selection::Toggle:
+ selection->toggle (clicked_regionview);
+#if 0
if (clicked_regionview->get_selected()) {
if (/* group && group->is_active() && */ selection->audio_regions.size() > 1) {
/* reduce selection down to just the one clicked */
@@ -3148,9 +3159,9 @@ Editor::set_selected_regionview_from_click (Selection::Operation op, bool no_tra
selection->remove (clicked_regionview);
}
} else {
- selection->toggle (all_equivalent_regions);
+ selection->add (all_equivalent_regions);
}
-
+#endif
set_selected_track_from_click (op, false, no_track_remove);
break;
@@ -3178,6 +3189,7 @@ Editor::set_selected_regionview_from_click (Selection::Operation op, bool no_tra
/* not defined yet */
break;
}
+ cerr << "case done\n";
commit_reversible_command () ;
}
@@ -3225,7 +3237,8 @@ Editor::set_selected_regionview_from_region_list (Region& r, Selection::Operatio
switch (op) {
case Selection::Toggle:
- selection->toggle (all_equivalent_regions);
+ /* XXX this is not correct */
+ selection->add (all_equivalent_regions);
break;
case Selection::Set:
selection->set (all_equivalent_regions);
@@ -4060,3 +4073,45 @@ Editor::restore_editing_space ()
unfullscreen();
}
+
+void
+Editor::new_playlists ()
+{
+ begin_reversible_command (_("new playlists"));
+ mapover_audio_tracks (mem_fun (*this, &Editor::mapped_use_new_playlist));
+ commit_reversible_command ();
+}
+
+void
+Editor::copy_playlists ()
+{
+ begin_reversible_command (_("copy playlists"));
+ mapover_audio_tracks (mem_fun (*this, &Editor::mapped_use_copy_playlist));
+ commit_reversible_command ();
+}
+
+void
+Editor::clear_playlists ()
+{
+ begin_reversible_command (_("clear playlists"));
+ mapover_audio_tracks (mem_fun (*this, &Editor::mapped_clear_playlist));
+ commit_reversible_command ();
+}
+
+void
+Editor::mapped_use_new_playlist (AudioTimeAxisView& atv, uint32_t sz)
+{
+ atv.use_new_playlist (sz > 1 ? false : true);
+}
+
+void
+Editor::mapped_use_copy_playlist (AudioTimeAxisView& atv, uint32_t sz)
+{
+ atv.use_copy_playlist (sz > 1 ? false : true);
+}
+
+void
+Editor::mapped_clear_playlist (AudioTimeAxisView& atv, uint32_t sz)
+{
+ atv.clear_playlist ();
+}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 57574d82ba..06d9b6035f 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -56,6 +56,7 @@
#include "enums.h"
#include "region_selection.h"
#include "canvas.h"
+#include "draginfo.h"
namespace Gtkmm2ext {
class TearOff;
@@ -254,6 +255,10 @@ class Editor : public PublicEditor
jack_nframes_t leftmost_frame;
void clear_playlist (ARDOUR::Playlist&);
+ void new_playlists ();
+ void copy_playlists ();
+ void clear_playlists ();
+
TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0);
Width editor_mixer_strip_width;
@@ -442,11 +447,14 @@ class Editor : public PublicEditor
CrossfadeView* clicked_crossfadeview;
ControlPoint* clicked_control_point;
- void mapover_audio_tracks (sigc::slot<void,AudioTimeAxisView&> sl);
+ void mapover_audio_tracks (sigc::slot<void,AudioTimeAxisView&,uint32_t> sl);
/* functions to be passed to mapover_audio_tracks(), possibly with sigc::bind()-supplied arguments */
- void track_set_selected_regionview_from_click (AudioTimeAxisView&, AudioRegionView*, vector<AudioRegionView*>*);
+ void mapped_set_selected_regionview_from_click (AudioTimeAxisView&, uint32_t, AudioRegionView*, vector<AudioRegionView*>*);
+ void mapped_use_new_playlist (AudioTimeAxisView&, uint32_t);
+ void mapped_use_copy_playlist (AudioTimeAxisView&, uint32_t);
+ void mapped_clear_playlist (AudioTimeAxisView&, uint32_t);
/* end */
@@ -1051,37 +1059,7 @@ class Editor : public PublicEditor
void hide_all_tracks (bool with_select);
- struct DragInfo {
- ArdourCanvas::Item* item;
- void* data;
- jack_nframes_t last_frame_position;
- int32_t pointer_frame_offset;
- jack_nframes_t grab_frame;
- jack_nframes_t last_pointer_frame;
- jack_nframes_t current_pointer_frame;
- double grab_x, grab_y;
- double cumulative_x_drag;
- double cumulative_y_drag;
- double current_pointer_x;
- double current_pointer_y;
- void (Editor::*motion_callback)(ArdourCanvas::Item*, GdkEvent*);
- void (Editor::*finished_callback)(ArdourCanvas::Item*, GdkEvent*);
- TimeAxisView* last_trackview;
- bool x_constrained;
- bool copy;
- bool was_rolling;
- bool first_move;
- bool move_threshold_passsed;
- bool want_move_threshold;
- bool brushing;
- ARDOUR::Location* copied_location;
- } drag_info;
-
- struct LineDragInfo {
- uint32_t before;
- uint32_t after;
- };
-
+ DragInfo drag_info;
LineDragInfo current_line_drag_info;
void start_grab (GdkEvent*, Gdk::Cursor* cursor = 0);
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 023c500c83..7ec47fe532 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -292,7 +292,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
track_canvas.grab_focus();
if (session && session->actively_recording()) {
- return TRUE;
+ return true;
}
/* in object/audition/timefx mode, any button press sets
@@ -375,7 +375,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
Keyboard::is_edit_event (&event->button))) {
/* handled by button release */
- return TRUE;
+ return true;
}
switch (event->button.button) {
@@ -397,7 +397,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
case EditCursorItem:
case PlayheadCursorItem:
start_cursor_grab (item, event);
- return TRUE;
+ return true;
case MarkerItem:
if (Keyboard::modifier_state_equals (event->button.state,
@@ -406,7 +406,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
} else {
start_marker_grab (item, event);
}
- return TRUE;
+ return true;
case TempoMarkerItem:
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::Control)) {
@@ -414,7 +414,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
} else {
start_tempo_marker_grab (item, event);
}
- return TRUE;
+ return true;
case MeterMarkerItem:
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::Control)) {
@@ -422,21 +422,21 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
} else {
start_meter_marker_grab (item, event);
}
- return TRUE;
+ return true;
case TempoBarItem:
- return TRUE;
+ return true;
case MeterBarItem:
- return TRUE;
+ return true;
case RangeMarkerBarItem:
start_range_markerbar_op (item, event, CreateRangeMarker);
- return TRUE;
+ return true;
break;
case TransportMarkerBarItem:
start_range_markerbar_op (item, event, CreateTransportMarker);
- return TRUE;
+ return true;
break;
default:
@@ -474,7 +474,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
default:
start_selection_op (item, event, CreateSelection);
}
- return TRUE;
+ return true;
break;
case MouseObject:
@@ -489,11 +489,11 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
switch (item_type) {
case FadeInHandleItem:
start_fade_in_grab (item, event);
- return TRUE;
+ return true;
case FadeOutHandleItem:
start_fade_out_grab (item, event);
- return TRUE;
+ return true;
case RegionItem:
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::Control)) {
@@ -507,27 +507,27 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
case AudioRegionViewNameHighlight:
start_trim (item, event);
- return TRUE;
+ return true;
break;
case AudioRegionViewName:
/* rename happens on edit clicks */
start_trim (clicked_regionview->get_name_highlight(), event);
- return TRUE;
+ return true;
break;
case GainAutomationControlPointItem:
case PanAutomationControlPointItem:
case RedirectAutomationControlPointItem:
start_control_point_grab (item, event);
- return TRUE;
+ return true;
break;
case GainAutomationLineItem:
case PanAutomationLineItem:
case RedirectAutomationLineItem:
start_line_grab_from_line (item, event);
- return TRUE;
+ return true;
break;
case StreamItem:
@@ -538,19 +538,19 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
/* <CMT Additions> */
case ImageFrameHandleStartItem:
imageframe_start_handle_op(item, event) ;
- return(TRUE) ;
+ return(true) ;
break ;
case ImageFrameHandleEndItem:
imageframe_end_handle_op(item, event) ;
- return(TRUE) ;
+ return(true) ;
break ;
case MarkerViewHandleStartItem:
markerview_item_start_handle_op(item, event) ;
- return(TRUE) ;
+ return(true) ;
break ;
case MarkerViewHandleEndItem:
markerview_item_end_handle_op(item, event) ;
- return(TRUE) ;
+ return(true) ;
break ;
/* </CMT Additions> */
@@ -567,7 +567,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
break;
}
}
- return TRUE;
+ return true;
break;
case MouseGain:
@@ -578,23 +578,23 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
case GainControlPointItem:
start_control_point_grab (item, event);
- return TRUE;
+ return true;
case GainLineItem:
start_line_grab_from_line (item, event);
- return TRUE;
+ return true;
case GainAutomationControlPointItem:
case PanAutomationControlPointItem:
case RedirectAutomationControlPointItem:
start_control_point_grab (item, event);
- return TRUE;
+ return true;
break;
default:
break;
}
- return TRUE;
+ return true;
break;
switch (item_type) {
@@ -619,7 +619,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
default:
break;
}
- return TRUE;
+ return true;
break;
case MouseZoom:
@@ -627,7 +627,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
start_mouse_zoom (item, event);
}
- return TRUE;
+ return true;
break;
case MouseTimeFX:
@@ -662,7 +662,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
case PanAutomationControlPointItem:
case RedirectAutomationControlPointItem:
start_control_point_grab (item, event);
- return TRUE;
+ return true;
break;
default:
@@ -674,12 +674,12 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
switch (item_type) {
case AudioRegionViewNameHighlight:
start_trim (item, event);
- return TRUE;
+ return true;
break;
case AudioRegionViewName:
start_trim (clicked_regionview->get_name_highlight(), event);
- return TRUE;
+ return true;
break;
default:
@@ -692,7 +692,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
if (event->type == GDK_BUTTON_PRESS) {
/* relax till release */
}
- return TRUE;
+ return true;
break;
@@ -702,7 +702,7 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
} else {
temporal_zoom_to_frame (true, event_frame(event));
}
- return TRUE;
+ return true;
break;
default:
@@ -789,7 +789,8 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
break;
}
- return FALSE;
+
+ return false;
}
bool
@@ -800,7 +801,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
/* no action if we're recording */
if (session && session->actively_recording()) {
- return TRUE;
+ return true;
}
/* first, see if we're finishing a drag ... */
@@ -808,7 +809,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
if (drag_info.item) {
if (end_grab (item, event)) {
/* grab dragged, so do nothing else */
- return TRUE;
+ return true;
}
}
@@ -837,7 +838,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
default:
break;
}
- return TRUE;
+ return true;
}
/* context menu events get handled here */
@@ -920,7 +921,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
break;
}
- return TRUE;
+ return true;
}
}
@@ -964,7 +965,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
default:
break;
}
- return TRUE;
+ return true;
}
switch (event->button.button) {
@@ -981,25 +982,25 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case RedirectAutomationLineItem:
case StartSelectionTrimItem:
case EndSelectionTrimItem:
- return TRUE;
+ return true;
case MarkerBarItem:
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (where, 0, true);
}
mouse_add_new_marker (where);
- return TRUE;
+ return true;
case TempoBarItem:
if (!Keyboard::modifier_state_contains (event->button.state, Keyboard::snap_modifier())) {
snap_to (where);
}
mouse_add_new_tempo_event (where);
- return TRUE;
+ return true;
case MeterBarItem:
mouse_add_new_meter_event (pixel_to_frame (event->button.x));
- return TRUE;
+ return true;
break;
default:
@@ -1015,7 +1016,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
event,
where,
event->button.y);
- return TRUE;
+ return true;
break;
default:
@@ -1027,13 +1028,13 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
switch (item_type) {
case RegionItem:
clicked_regionview->add_gain_point_event (item, event);
- return TRUE;
+ return true;
break;
case AutomationTrackItem:
dynamic_cast<AutomationTimeAxisView*>(clicked_trackview)->
add_automation_event (item, event, where, event->button.y);
- return TRUE;
+ return true;
break;
default:
break;
@@ -1055,7 +1056,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
}
- return TRUE;
+ return true;
break;
@@ -1072,7 +1073,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
} else {
// Button2 click is unused
}
- return TRUE;
+ return true;
break;
@@ -1084,7 +1085,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case MouseRange:
// x_style_paste (where, 1.0);
- return TRUE;
+ return true;
break;
default:
@@ -1099,7 +1100,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
default:
break;
}
- return FALSE;
+ return false;
}
void
@@ -1137,7 +1138,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
switch (item_type) {
case GainControlPointItem:
if (mouse_mode == MouseGain) {
- cp = reinterpret_cast<ControlPoint*>(item->get_data ("control_point"));
+ cp = static_cast<ControlPoint*>(item->get_data ("control_point"));
cp->set_visible (true);
double at_x, at_y;
@@ -1161,7 +1162,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case GainAutomationControlPointItem:
case PanAutomationControlPointItem:
case RedirectAutomationControlPointItem:
- cp = reinterpret_cast<ControlPoint*>(item->get_data ("control_point"));
+ cp = static_cast<ControlPoint*>(item->get_data ("control_point"));
cp->set_visible (true);
double at_x, at_y;
@@ -1331,7 +1332,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
break;
}
- return FALSE;
+ return false;
}
bool
@@ -1453,7 +1454,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
break;
}
- return FALSE;
+ return false;
}
gint
@@ -1463,7 +1464,7 @@ Editor::left_automation_track ()
set_entered_track (0);
clear_entered_track = false;
}
- return FALSE;
+ return false;
}
bool
@@ -1490,7 +1491,7 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
if (session && session->actively_recording()) {
/* Sorry. no dragging stuff around while we record */
- return TRUE;
+ return true;
}
drag_info.current_pointer_frame = event_frame (event, &drag_info.current_pointer_x,
@@ -1500,10 +1501,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
/* item != 0 is the best test i can think of for
dragging.
*/
- if (!drag_info.move_threshold_passsed)
- {
+ if (!drag_info.move_threshold_passsed) {
drag_info.move_threshold_passsed = (abs ((int) (drag_info.current_pointer_x - drag_info.grab_x)) > 4);
-
+
// and change the initial grab loc/frame if this drag info wants us to
if (drag_info.want_move_threshold && drag_info.move_threshold_passsed) {
drag_info.grab_frame = drag_info.current_pointer_frame;
@@ -1573,10 +1573,10 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
handled:
track_canvas_motion (event);
- return TRUE;
+ return true;
not_handled:
- return FALSE;
+ return false;
}
void
@@ -2631,40 +2631,40 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
/* this is committed in the grab finished callback. */
begin_reversible_command (_("Drag region copy"));
-
- /* duplicate the region(s) */
+ /* duplicate the region(s) */
+
vector<AudioRegionView*> new_regionviews;
-
+
set<Playlist*> affected_playlists;
pair<set<Playlist*>::iterator,bool> insert_result;
for (list<AudioRegionView*>::const_iterator i = selection->audio_regions.by_layer().begin(); i != selection->audio_regions.by_layer().end(); ++i) {
AudioRegionView* rv;
-
+
rv = (*i);
-
+
Playlist* to_playlist = rv->region.playlist();
AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*>(&rv->get_time_axis_view());
-
+
insert_result = affected_playlists.insert (to_playlist);
if (insert_result.second) {
session->add_undo (to_playlist->get_memento ());
}
latest_regionview = 0;
-
+
sigc::connection c = atv->view->AudioRegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
/* create a new region with the same name.
*/
-
+
AudioRegion* newregion = new AudioRegion (rv->region);
-
+
/* if the original region was locked, we don't care */
-
+
newregion->set_locked (false);
-
+
to_playlist->add_region (*newregion, (jack_nframes_t) (rv->region.position() * atv->get_diskstream()->speed()));
c.disconnect ();
@@ -2672,20 +2672,22 @@ Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
if (latest_regionview) {
new_regionviews.push_back (latest_regionview);
}
-
}
-
+
if (new_regionviews.empty()) {
return;
}
-
+
/* reset selection to new regionviews */
-
+
selection->set (new_regionviews);
-
+
+ /* reset drag_info data to reflect the fact that we are dragging the copies */
+
+ drag_info.data = new_regionviews.front();
drag_info.item = new_regionviews.front()->get_canvas_group ();
+
drag_info.copy = true;
- drag_info.data = new_regionviews.front();
drag_info.motion_callback = &Editor::region_drag_motion_callback;
drag_info.finished_callback = &Editor::region_drag_finished_callback;
@@ -3036,8 +3038,9 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
************************************************************/
pair<set<Playlist*>::iterator,bool> insert_result;
+ const list<AudioRegionView*>& layered_regions = selection->audio_regions.by_layer();
- for (list<AudioRegionView*>::const_iterator i = selection->audio_regions.by_layer().begin(); i != selection->audio_regions.by_layer().end(); ++i) {
+ for (list<AudioRegionView*>::const_iterator i = layered_regions.begin(); i != layered_regions.end(); ++i) {
AudioRegionView* rv;
rv = (*i);
@@ -4598,7 +4601,7 @@ Editor::mouse_rename_region (ArdourCanvas::Item* item, GdkEvent* event)
}
break;
}
- return TRUE;
+ return true;
}
void
@@ -4712,7 +4715,7 @@ Editor::track_height_step_timeout ()
if (delta.tv_sec * 1000000 + delta.tv_usec > 250000) { /* milliseconds */
current_stepping_trackview = 0;
- return FALSE;
+ return false;
}
- return TRUE;
+ return true;
}
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index a5d0df530d..38a73ee9ee 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -103,6 +103,9 @@ class PublicEditor : public Gtk::Window, public Stateful {
virtual PlaylistSelector& playlist_selector() const = 0;
virtual void route_name_changed (TimeAxisView *) = 0;
virtual void clear_playlist (ARDOUR::Playlist&) = 0;
+ virtual void new_playlists () = 0;
+ virtual void copy_playlists () = 0;
+ virtual void clear_playlists () = 0;
virtual void set_selected_mixer_strip (TimeAxisView&) = 0;
virtual void hide_track_in_display (TimeAxisView& tv) = 0;
virtual void set_follow_playhead (bool yn) = 0;
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index d6efce7264..82e8bbb682 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -152,94 +152,65 @@ Selection::clear_lines ()
void
Selection::toggle (Redirect* r)
{
- if (find (redirects.begin(), redirects.end(), r) == redirects.end()) {
+ RedirectSelection::iterator i;
+
+ if ((i = find (redirects.begin(), redirects.end(), r)) == redirects.end()) {
redirects.push_back (r);
- RedirectsChanged();
+ } else {
+ redirects.erase (i);
}
+ RedirectsChanged();
+
}
void
Selection::toggle (Playlist* pl)
{
- if (find (playlists.begin(), playlists.end(), pl) == playlists.end()) {
+ PlaylistSelection::iterator i;
+
+ if ((i = find (playlists.begin(), playlists.end(), pl)) == playlists.end()) {
pl->ref ();
playlists.push_back(pl);
- PlaylistsChanged ();
- }
-}
-
-void
-Selection::toggle (const list<Playlist*>& pllist)
-{
- bool changed = false;
-
- for (list<Playlist*>::const_iterator i = pllist.begin(); i != pllist.end(); ++i) {
- if (find (playlists.begin(), playlists.end(), (*i)) == playlists.end()) {
- (*i)->ref ();
- playlists.push_back (*i);
- changed = true;
- }
- }
-
- if (changed) {
- PlaylistsChanged ();
+ } else {
+ playlists.erase (i);
}
-}
-
-void
-Selection::toggle (const list<TimeAxisView*>& track_list)
-{
- bool changed = false;
- for (list<TimeAxisView*>::const_iterator i = track_list.begin(); i != track_list.end(); ++i) {
- if (find (tracks.begin(), tracks.end(), (*i)) == tracks.end()) {
- void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
- (*i)->GoingAway.connect (sigc::bind (mem_fun (*this, pmf), (*i)));
- tracks.push_back (*i);
- changed = true;
- }
- }
-
- if (changed) {
- TracksChanged ();
- }
+ PlaylistsChanged ();
}
void
Selection::toggle (TimeAxisView* track)
{
- if (find (tracks.begin(), tracks.end(), track) == tracks.end()) {
+ TrackSelection::iterator i;
+
+ if ((i = find (tracks.begin(), tracks.end(), track)) == tracks.end()) {
void (Selection::*pmf)(TimeAxisView*) = &Selection::remove;
track->GoingAway.connect (sigc::bind (mem_fun (*this, pmf), track));
tracks.push_back (track);
- TracksChanged();
+ } else {
+ tracks.erase (i);
}
+
+ TracksChanged();
}
void
Selection::toggle (AudioRegionView* r)
{
- if (find (audio_regions.begin(), audio_regions.end(), r) == audio_regions.end()) {
- audio_regions.add (r);
- RegionsChanged ();
- }
-}
+ AudioRegionSelection::iterator i;
-void
-Selection::toggle (vector<AudioRegionView*>& v)
-{
- bool changed = false;
+ cerr << "about to toggle a regionview\n";
- for (vector<AudioRegionView*>::iterator i = v.begin(); i != v.end(); ++i) {
- if (find (audio_regions.begin(), audio_regions.end(), (*i)) == audio_regions.end()) {
- audio_regions.add ((*i));
- changed = true;
- }
+ if ((i = find (audio_regions.begin(), audio_regions.end(), r)) == audio_regions.end()) {
+ audio_regions.add (r);
+ cerr << "\tadded\n";
+ } else {
+ audio_regions.erase (i);
+ cerr << "\tremoved\n";
}
- if (changed) {
- RegionsChanged ();
- }
+ RegionsChanged ();
+ cerr << "done\n";
}
long
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index f6426836f1..a4ee1c9c5e 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -535,6 +535,7 @@ StreamView::set_selected_regionviews (AudioRegionSelection& regions)
{
bool selected;
+ cerr << _trackview.name() << " (selected = " << regions.size() << ")" << endl;
for (list<AudioRegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
selected = false;
@@ -545,6 +546,7 @@ StreamView::set_selected_regionviews (AudioRegionSelection& regions)
}
}
+ cerr << "\tregion " << (*i)->region.name() << " selected = " << selected << endl;
(*i)->set_selected (selected, this);
}
}