diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2005-12-12 20:54:55 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2005-12-12 20:54:55 +0000 |
commit | 3733c995c5269756ca5941a9db50c6a965787508 (patch) | |
tree | e2152d49f8bd6daadf616d7b68aed2c8350d105a /gtk2_ardour | |
parent | 088a5289dc41b9066e9f518b94af546f80601d56 (diff) |
editor window layout changes, and lots more
git-svn-id: svn://localhost/trunk/ardour2@187 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
26 files changed, 389 insertions, 592 deletions
diff --git a/gtk2_ardour/ardour.bindings b/gtk2_ardour/ardour.bindings index c559cc9eb2..fdbc336783 100644 --- a/gtk2_ardour/ardour.bindings +++ b/gtk2_ardour/ardour.bindings @@ -2,10 +2,16 @@ (gtk_accel_path "<Actions>/Common/Quit" "<Control>q") (gtk_accel_path "<Actions>/Common/Save" "<Control>s") -(gtk_accel_path "<Actions>/Editor/toggle-playback" "space") (gtk_accel_path "<Actions>/Common/TransportForward" "Right") (gtk_accel_path "<Actions>/Common/TransportRewind" "Left") (gtk_accel_path "<Actions>/Common/TransportRecord" "R") (gtk_accel_path "<Actions>/Common/TransportGotoStart" "<Control>a") (gtk_accel_path "<Actions>/Common/TransportGotoEnd" "<Control>e") +(gtk_accel_path "<Actions>/Editor/toggle-playback" "space") +(gtk_accel_path "<Actions>/Editor/set-playhead" "p") +(gtk_accel_path "<Actions>/Editor/set-edit-cursor" "e") +(gtk_accel_path "<Actions>/Editor/undo" "<Control>z") +(gtk_accel_path "<Actions>/Editor/redo" "<Control>r") + + diff --git a/gtk2_ardour/ardour2_ui.rc b/gtk2_ardour/ardour2_ui.rc index 691d05685f..bfa1acaff7 100644 --- a/gtk2_ardour/ardour2_ui.rc +++ b/gtk2_ardour/ardour2_ui.rc @@ -511,6 +511,13 @@ style "track_name_display" bg[ACTIVE] = { 0.26, 0.26, 0.26 } } +style "active_track_name_display" +{ + font_name = "sans medium 10" + text[NORMAL] = { 0.26, 0.26, 0.26 } + base[NORMAL] = { 0.89, 0.89, 0.89 } +} + style "track_separator" { bg[NORMAL] = { 0.40, 0.40, 0.40 } @@ -993,6 +1000,8 @@ widget "*TrackEditIndicator6*" style "edit_group_3" widget "*TrackEditIndicator7*" style "edit_group_3" widget "*EditorTrackNameDisplay" style "track_name_display" widget "*EditorTrackNameDisplay*" style "track_name_display" +widget "*EditorActiveTrackNameDisplay" style "active_track_name_display" +widget "*EditorActiveTrackNameDisplay*" style "active_track_name_display" widget "*EditorRegionList" style "region_list_display" widget "*CrossfadeEditAuditionButton" style "red_when_active" widget "*CrossfadeEditAuditionButton*" style "red_when_active" diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index c3063b6ed5..903cc0276c 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -358,10 +358,7 @@ ARDOUR_UI::setup_transport () ARDOUR_UI::Clock.connect (bind (mem_fun (secondary_clock, &AudioClock::set), false)); primary_clock.set_mode (AudioClock::SMPTE); - primary_clock.set_name ("TransportClockDisplay"); secondary_clock.set_mode (AudioClock::BBT); - secondary_clock.set_name ("TransportClockDisplay"); - primary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::primary_clock_value_changed)); secondary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed)); diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 83d8f6644c..550b7c311f 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -296,23 +296,39 @@ AudioClock::setup_events () ms_hours_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Hours)); ms_minutes_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Minutes)); ms_seconds_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Seconds)); - - Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2); - - Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2); - - Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2); } void AudioClock::on_realize () { HBox::on_realize (); + + /* styles are not available until the widgets are bound to a window */ + + switch (_mode) { + case SMPTE: + Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2); + break; + + case BBT: + Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2); + break; + + case MinSec: + Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2); + break; + + case Frames: + Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2); + + } } void @@ -469,7 +485,7 @@ AudioClock::set_session (Session *s) } } -gint +bool AudioClock::field_key_release_event (GdkEventKey *ev, Field field) { Label *label = 0; @@ -693,7 +709,7 @@ AudioClock::field_key_release_event (GdkEventKey *ev, Field field) return TRUE; } -gint +bool AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field) { key_entry_state = 0; @@ -750,7 +766,7 @@ AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field) return FALSE; } -gint +bool AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field) { switch (field) { @@ -807,7 +823,7 @@ AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field) return FALSE; } -gint +bool AudioClock::field_button_release_event (GdkEventButton *ev, Field field) { @@ -887,7 +903,7 @@ AudioClock::field_button_release_event (GdkEventButton *ev, Field field) return TRUE; } -gint +bool AudioClock::field_button_press_event (GdkEventButton *ev, Field field) { if (session == 0) return FALSE; @@ -964,7 +980,7 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field) return TRUE; } -gint +bool AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field) { if (session == 0 || !dragging) { @@ -1675,20 +1691,36 @@ AudioClock::set_mode (Mode m) switch (_mode) { case SMPTE: clock_base.add (smpte_packer_hbox); + Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2); break; + case BBT: clock_base.add (bbt_packer_hbox); + Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2); break; + case MinSec: clock_base.add (minsec_packer_hbox); + Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2); break; + case Frames: clock_base.add (frames_packer_hbox); + Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2); + case Off: break; } - + set (last_when, true); clock_base.show_all (); key_entry_state = 0; } + diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h index 0f25eb884b..dd06f7cf44 100644 --- a/gtk2_ardour/audio_clock.h +++ b/gtk2_ardour/audio_clock.h @@ -150,12 +150,12 @@ class AudioClock : public Gtk::HBox void on_realize (); - gint field_motion_notify_event (GdkEventMotion *ev, Field); - gint field_button_press_event (GdkEventButton *ev, Field); - gint field_button_release_event (GdkEventButton *ev, Field); - gint field_key_release_event (GdkEventKey *, Field); - gint field_focus_in_event (GdkEventFocus *, Field); - gint field_focus_out_event (GdkEventFocus *, Field); + bool field_motion_notify_event (GdkEventMotion *ev, Field); + bool field_button_press_event (GdkEventButton *ev, Field); + bool field_button_release_event (GdkEventButton *ev, Field); + bool field_key_release_event (GdkEventKey *, Field); + bool field_focus_in_event (GdkEventFocus *, Field); + bool field_focus_out_event (GdkEventFocus *, Field); void set_smpte (jack_nframes_t, bool); void set_bbt (jack_nframes_t, bool); diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 1f7f813a47..0b0da6fe04 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -168,11 +168,6 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, Route& rt visual_button.signal_clicked().connect (mem_fun(*this, &AudioTimeAxisView::visual_click)); hide_button.signal_clicked().connect (mem_fun(*this, &AudioTimeAxisView::hide_click)); - name_entry.signal_activate().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_activated)); - name_entry.signal_button_press_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_button_press_handler)); - name_entry.signal_button_release_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_button_release_handler)); - name_entry.signal_key_release_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_key_release_handler)); - if (is_audio_track()) { controls_table.attach (*rec_enable_button, 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0); } @@ -1090,45 +1085,6 @@ AudioTimeAxisView::playlist () const } } -gint -AudioTimeAxisView::name_entry_button_press_handler (GdkEventButton *ev) -{ - if (ev->button == 3) { - return stop_signal (name_entry, "button_press_event"); - } - return FALSE; -} - -gint -AudioTimeAxisView::name_entry_button_release_handler (GdkEventButton *ev) -{ - return FALSE; -} - -gint -AudioTimeAxisView::name_entry_key_release_handler (GdkEventKey* ev) -{ - switch (ev->keyval) { - case GDK_Tab: - case GDK_Up: - case GDK_Down: - name_entry_changed (); - return TRUE; - - default: - return FALSE; - } -} - -void -AudioTimeAxisView::name_entry_activated () -{ - /* this should drop focus from the entry, - and cause a call to name_entry_changed() - */ - controls_ebox.grab_focus(); -} - void AudioTimeAxisView::name_entry_changed () { diff --git a/gtk2_ardour/audio_time_axis.h b/gtk2_ardour/audio_time_axis.h index 6f4405b5a7..cec7d3c089 100644 --- a/gtk2_ardour/audio_time_axis.h +++ b/gtk2_ardour/audio_time_axis.h @@ -178,11 +178,8 @@ class AudioTimeAxisView : public RouteUI, public TimeAxisView void take_name_changed (void *); void route_name_changed (void *); - void name_entry_activated (); void name_entry_changed (); - gint name_entry_key_release_handler (GdkEventKey*); - gint name_entry_button_release_handler (GdkEventButton*); - gint name_entry_button_press_handler (GdkEventButton*); + void on_area_realize (); virtual void label_view (); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 3e8402bbca..3245843304 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -147,6 +147,66 @@ Gdk::Cursor* Editor::speaker_cursor = 0; Gdk::Cursor* Editor::wait_cursor = 0; Gdk::Cursor* Editor::timebar_cursor = 0; +bool +Editor::on_key_press_event (GdkEventKey* ev) +{ + GtkWindow* win = gobj(); + + /* This exists to allow us to override the way GTK handles + key events. The normal sequence is: + + a) event is delivered to a GtkWindow + b) accelerators/mnemonics are activated + c) if (b) didn't handle the event, propagate to + the focus widget and/or focus chain + + The problem with this is that if the accelerators include + keys without modifiers, such as the space bar or the + letter "e", then pressing the key while typing into + a text entry widget results in the accelerator being + activated, instead of the desired letter appearing + in the text entry. + + There is no good way of fixing this, but this + represents a compromise. The idea is that + key events involving modifiers (not Shift) + get routed into the activation pathway first, then + get propagated to the focus widget if necessary. + + If the key event doesn't involve modifiers, + we deliver to the focus widget first, thus allowing + it to get "normal text" without interference + from acceleration. + + Of course, this can also be problematic: if there + is a widget with focus, then it will swallow + all "normal text" accelerators. + */ + + if (ev->state & ~Gdk::SHIFT_MASK) { + /* modifiers in effect, accelerate first */ + if (!gtk_window_activate_key (win, ev)) { + return gtk_window_propagate_key_event (win, ev); + } else { + return true; + } + } + + /* no modifiers, propagate first */ + + if (!gtk_window_propagate_key_event (win, ev)) { + return gtk_window_activate_key (win, ev); + } + + return true; +} + +void +show_me_the_size (Requisition* r, const char* what) +{ + cerr << "size of " << what << " = " << r->width << " x " << r->height << endl; +} + Editor::Editor (AudioEngine& eng) : engine (eng), @@ -163,8 +223,13 @@ Editor::Editor (AudioEngine& eng) transport_mark_label (_("Loop/Punch Ranges")), edit_packer (3, 3, false), - edit_hscroll_left_arrow (Gtk::ARROW_LEFT, Gtk::SHADOW_OUT), - edit_hscroll_right_arrow (Gtk::ARROW_RIGHT, Gtk::SHADOW_OUT), + + /* the values here don't matter: layout widgets + reset them as needed. + */ + + vertical_adjustment (0.0, 0.0, 400.0, 10), + horizontal_adjustment (0.0, 0.0, 1200.0, 20), /* tool bar related */ @@ -262,6 +327,7 @@ Editor::Editor (AudioEngine& eng) _xfade_visibility = true; editor_ruler_menu = 0; no_ruler_shown_update = false; + edit_hscroll_dragging = false; edit_group_list_menu = 0; route_list_menu = 0; region_list_menu = 0; @@ -277,7 +343,6 @@ Editor::Editor (AudioEngine& eng) region_edit_menu_split_item = 0; temp_location = 0; region_edit_menu_split_multichannel_item = 0; - edit_hscroll_dragging = false; leftmost_frame = 0; ignore_mouse_mode_toggle = false; current_stepping_trackview = 0; @@ -309,45 +374,30 @@ Editor::Editor (AudioEngine& eng) initialize_rulers (); initialize_canvas (); - track_canvas_scroller.add (track_canvas); - track_canvas_scroller.set_policy (POLICY_NEVER, POLICY_NEVER); - track_canvas_scroller.set_name ("TrackCanvasScroller"); - - track_canvas_scroller.get_vadjustment()->signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling)); - track_canvas_scroller.get_vadjustment()->set_step_increment (10.0); - - track_canvas_scroller.get_hadjustment()->set_lower (0.0); - track_canvas_scroller.get_hadjustment()->set_upper (1200.0); - track_canvas_scroller.get_hadjustment()->set_step_increment (20.0); - track_canvas_scroller.get_hadjustment()->signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled)); - - edit_vscrollbar.set_adjustment(*track_canvas_scroller.get_vadjustment()); - edit_hscrollbar.set_adjustment(*track_canvas_scroller.get_hadjustment()); - - edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscroll_slider_button_press)); - edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscroll_slider_button_release)); - edit_hscrollbar.signal_size_allocate().connect (mem_fun(*this, &Editor::hscroll_slider_allocate)); + edit_controls_vbox.set_spacing (track_spacing); + horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled)); + vertical_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling)); - time_canvas_scroller.add (time_canvas); - time_canvas_scroller.set_policy (POLICY_NEVER, POLICY_NEVER); - time_canvas_scroller.set_hadjustment (*track_canvas_scroller.get_hadjustment()); - time_canvas_scroller.set_name ("TimeCanvasScroller"); + track_canvas.set_hadjustment (horizontal_adjustment); + track_canvas.set_vadjustment (vertical_adjustment); + time_canvas.set_hadjustment (horizontal_adjustment); - track_canvas_scroller.signal_map_event().connect (mem_fun (*this, &Editor::track_canvas_map_handler)); - time_canvas_scroller.signal_map_event().connect (mem_fun (*this, &Editor::time_canvas_map_handler)); + track_canvas.signal_map_event().connect (mem_fun (*this, &Editor::track_canvas_map_handler)); + time_canvas.signal_map_event().connect (mem_fun (*this, &Editor::time_canvas_map_handler)); - edit_controls_vbox.set_spacing (track_spacing); - edit_controls_hbox.pack_start (edit_controls_vbox, true, true); - edit_controls_scroller.add (edit_controls_hbox); - edit_controls_scroller.set_name ("EditControlsBase"); - edit_controls_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER); + // edit_controls_hbox.pack_start (edit_controls_vbox, true, true); + controls_layout.add (edit_controls_vbox); + controls_layout.set_name ("EditControlsBase"); + + controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK); + controls_layout.signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release)); - Viewport* viewport = static_cast<Viewport*> (edit_controls_scroller.get_child()); + edit_vscrollbar.set_adjustment (vertical_adjustment); + edit_hscrollbar.set_adjustment (horizontal_adjustment); - viewport->set_shadow_type (Gtk::SHADOW_NONE); - viewport->set_name ("EditControlsBase"); - viewport->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK); - viewport->signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release)); + edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscrollbar_button_press)); + edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscrollbar_button_release)); + edit_hscrollbar.signal_size_allocate().connect (mem_fun(*this, &Editor::hscrollbar_allocate)); build_cursors (); setup_toolbar (); @@ -358,7 +408,7 @@ Editor::Editor (AudioEngine& eng) time_canvas_vbox.pack_start (*smpte_ruler, false, false); time_canvas_vbox.pack_start (*frames_ruler, false, false); time_canvas_vbox.pack_start (*bbt_ruler, false, false); - time_canvas_vbox.pack_start (time_canvas_scroller, true, true); + time_canvas_vbox.pack_start (time_canvas, true, true); time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars)); bbt_label.set_name ("EditorTimeButton"); @@ -416,25 +466,24 @@ Editor::Editor (AudioEngine& eng) for the canvas areas. */ - track_canvas_event_box.add (track_canvas_scroller); + track_canvas_event_box.add (track_canvas); time_canvas_event_box.add (time_canvas_vbox); time_canvas_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK); - edit_packer.set_col_spacings (0); edit_packer.set_row_spacings (0); edit_packer.set_homogeneous (false); edit_packer.set_name ("EditorWindow"); - edit_packer.attach (edit_hscrollbar, 1, 2, 0, 1, FILL|EXPAND, FILL, 0, 0); + edit_packer.attach (edit_hscrollbar, 1, 2, 0, 1, FILL|EXPAND, FILL, 0, 0); - edit_packer.attach (time_button_event_box, 0, 1, 1, 2, FILL, FILL, 0, 0); - edit_packer.attach (time_canvas_event_box, 1, 2, 1, 2, FILL|EXPAND, FILL, 0, 0); + edit_packer.attach (time_button_event_box, 0, 1, 1, 2, FILL, FILL, 0, 0); + edit_packer.attach (time_canvas_event_box, 1, 2, 1, 2, FILL|EXPAND, FILL, 0, 0); - edit_packer.attach (edit_controls_scroller, 0, 1, 2, 3, FILL,FILL, 0, 0); - edit_packer.attach (track_canvas_event_box, 1, 2, 2, 3, FILL|EXPAND, FILL|EXPAND, 0, 0); - edit_packer.attach (edit_vscrollbar, 2, 3, 2, 3, FILL, FILL|EXPAND, 0, 0); + edit_packer.attach (controls_layout, 0, 1, 2, 3, FILL, FILL, 0, 0); + edit_packer.attach (track_canvas_event_box, 1, 2, 2, 3, FILL|EXPAND, FILL|EXPAND, 0, 0); + edit_packer.attach (edit_vscrollbar, 2, 3, 2, 3, FILL, FILL|EXPAND, 0, 0); edit_frame.set_name ("BaseFrame"); edit_frame.set_shadow_type (SHADOW_IN); @@ -761,9 +810,9 @@ Editor::show_window () void Editor::tie_vertical_scrolling () { - edit_controls_scroller.get_vadjustment()->set_value (track_canvas_scroller.get_vadjustment()->get_value()); + double y1 = vertical_adjustment.get_value(); + controls_layout.get_vadjustment()->set_value (y1); - float y1 = track_canvas_scroller.get_vadjustment()->get_value(); playhead_cursor->set_y_axis(y1); edit_cursor->set_y_axis(y1); } @@ -804,12 +853,11 @@ Editor::set_frames_per_unit (double fpu) */ if (session) { - track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit); + horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit); } if (!no_zoom_repos_update) { - track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit); - update_hscroller (); + horizontal_adjustment.set_value (leftmost_frame/frames_per_unit); update_fixed_rulers (); tempo_map_changed (Change (0)); } @@ -849,10 +897,10 @@ Editor::reposition_x_origin (jack_nframes_t frame) if (frame != leftmost_frame) { leftmost_frame = frame; double pixel = frame_to_pixel (frame); - if (pixel >= track_canvas_scroller.get_hadjustment()->get_upper()) { - track_canvas_scroller.get_hadjustment()->set_upper (frame_to_pixel (frame + (current_page_frames()))); + if (pixel >= horizontal_adjustment.get_upper()) { + horizontal_adjustment.set_upper (frame_to_pixel (frame + (current_page_frames()))); } - track_canvas_scroller.get_hadjustment()->set_value (frame/frames_per_unit); + horizontal_adjustment.set_value (frame/frames_per_unit); XOriginChanged (); /* EMIT_SIGNAL */ } } @@ -889,14 +937,8 @@ Editor::zoom_adjustment_changed () void Editor::canvas_horizontally_scrolled () { - /* XXX note the potential loss of accuracy here caused by - adjustments being 32bit floats with only a 24 bit mantissa, - whereas jack_nframes_t is at least a 32 bit uint32_teger. - */ - - leftmost_frame = (jack_nframes_t) floor (track_canvas_scroller.get_hadjustment()->get_value() * frames_per_unit); + leftmost_frame = (jack_nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit); - update_hscroller (); update_fixed_rulers (); if (!edit_hscroll_dragging) { @@ -1060,11 +1102,9 @@ Editor::handle_new_duration () reset_scrolling_region (); if (session) { - track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit); - track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit); + horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit); + horizontal_adjustment.set_value (leftmost_frame/frames_per_unit); } - - update_hscroller (); } void @@ -1231,10 +1271,9 @@ Editor::connect_to_session (Session *t) leftmost_frame = 0; - track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit); - track_canvas_scroller.get_hadjustment()->set_value (0); + horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit); + horizontal_adjustment.set_value (0); - update_hscroller (); restore_ruler_visibility (); tempo_map_changed (Change (0)); @@ -2047,8 +2086,7 @@ Editor::set_state (const XMLNode& node) } set_default_size(width, height); - // GTK2FIX - // set_position(x, y-yoff); + move (x, y-yoff); if ((prop = node.property ("zoom-focus"))) { set_zoom_focus ((ZoomFocus) atoi (prop->value())); @@ -3584,27 +3622,6 @@ Editor::point_selection_changed () } } -void -Editor::run_sub_event_loop () -{ - sub_event_loop_status = 0; - Main::run (); -} - -void -Editor::finish_sub_event_loop (int status) -{ - Main::quit (); - sub_event_loop_status = status; -} - -gint -Editor::finish_sub_event_loop_on_delete (GdkEventAny *ignored, int32_t status) -{ - finish_sub_event_loop (status); - return TRUE; -} - gint Editor::mouse_select_button_release (GdkEventButton* ev) { @@ -3816,7 +3833,7 @@ void Editor::end_location_changed (Location* location) { ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::end_location_changed), location)); - track_canvas_scroller.get_hadjustment()->set_upper (location->end() / frames_per_unit); + horizontal_adjustment.set_upper (location->end() / frames_per_unit); } int diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 7ce050fc87..446a861a96 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -638,49 +638,21 @@ class Editor : public PublicEditor Gtk::Frame edit_frame; Gtk::VScrollbar edit_vscrollbar; - /* the horizontal scroller works in a rather different way - than a regular scrollbar, since its used for - zoom control/indication as well. But more importantly, - its different components (slider, left arrow, right arrow) - have to be packed separately into the edit_packer. - */ + Gtk::Adjustment vertical_adjustment; + Gtk::Adjustment horizontal_adjustment; + + Gtk::Layout controls_layout; Gtk::HScrollbar edit_hscrollbar; - Gtk::DrawingArea edit_hscroll_slider; - Gtk::Arrow edit_hscroll_left_arrow; - Gtk::Arrow edit_hscroll_right_arrow; - Gtk::EventBox edit_hscroll_left_arrow_event; - Gtk::EventBox edit_hscroll_right_arrow_event; - gint edit_hscroll_slider_width; - gint edit_hscroll_slider_height; - static const gint edit_hscroll_edge_width = 3; bool edit_hscroll_dragging; - double edit_hscroll_drag_last; - - void hscroll_slider_allocate (Gtk::Allocation &); - gint hscroll_slider_expose (GdkEventExpose*); - gint hscroll_slider_button_press (GdkEventButton*); - gint hscroll_slider_button_release (GdkEventButton*); - gint hscroll_slider_motion (GdkEventMotion*); - - gint hscroll_trough_expose (GdkEventExpose*); - gint hscroll_trough_button_press (GdkEventButton*); - gint hscroll_trough_button_release (GdkEventButton*); - - void update_hscroller (); - - gint hscroll_left_arrow_button_press (GdkEventButton *); - gint hscroll_left_arrow_button_release (GdkEventButton *); - gint hscroll_right_arrow_button_press (GdkEventButton *); - gint hscroll_right_arrow_button_release (GdkEventButton *); + bool hscrollbar_button_press (GdkEventButton*); + bool hscrollbar_button_release (GdkEventButton*); + void hscrollbar_allocate (Gtk::Allocation &alloc); + double canvas_width; double canvas_height; - Gtk::ScrolledWindow track_canvas_scroller; - Gtk::ScrolledWindow time_canvas_scroller; - Gtk::ScrolledWindow edit_controls_scroller; - bool track_canvas_map_handler (GdkEventAny*); bool time_canvas_map_handler (GdkEventAny*); @@ -1134,9 +1106,6 @@ class Editor : public PublicEditor /* Canvas event handlers */ - // FIXED FOR GTK2 - - bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*); bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*); bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*); @@ -1208,13 +1177,6 @@ class Editor : public PublicEditor void reset_scrolling_region (Gtk::Allocation* alloc = 0); void scroll_canvas (); - /* sub-event loop handling */ - - int32_t sub_event_loop_status; - void run_sub_event_loop (); - void finish_sub_event_loop (int status); - gint finish_sub_event_loop_on_delete (GdkEventAny*, int32_t status); - /* display control */ bool _show_measures; @@ -1586,10 +1548,9 @@ class Editor : public PublicEditor ExportDialog *export_dialog; void export_range (jack_nframes_t start, jack_nframes_t end); - int write_region_selection(AudioRegionSelection&); + int write_region_selection(AudioRegionSelection&); bool write_region (string path, ARDOUR::AudioRegion&); void export_region (); - void write_a_region (); void bounce_region_selection (); void bounce_range_selection (); void external_edit_region (); @@ -1808,6 +1769,8 @@ class Editor : public PublicEditor typedef std::map<Editing::ColorID,std::string> ColorStyleMap; void init_colormap (); + + bool on_key_press_event (GdkEventKey*); }; #endif /* __ardour_editor_h__ */ diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index b81013a941..3c437cd4b0 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -89,8 +89,8 @@ Editor::register_actions () ActionManager::register_action (editor_actions, "set-playhead", _("set playhead"), mem_fun(*this, &Editor::kbd_set_playhead_cursor)); ActionManager::register_action (editor_actions, "set-edit-cursor", _("set edit cursor"), mem_fun(*this, &Editor::kbd_set_edit_cursor)); - ActionManager::register_action (editor_actions, "set-undo", _("set undo"), bind (mem_fun(*this, &Editor::undo), 1U)); - ActionManager::register_action (editor_actions, "set-redo", _("set redo"), bind (mem_fun(*this, &Editor::redo), 1U)); + ActionManager::register_action (editor_actions, "undo", _("undo"), bind (mem_fun(*this, &Editor::undo), 1U)); + ActionManager::register_action (editor_actions, "redo", _("redo"), bind (mem_fun(*this, &Editor::redo), 1U)); ActionManager::register_action (editor_actions, "export-session", _("export session"), mem_fun(*this, &Editor::export_session)); ActionManager::register_action (editor_actions, "export-range", _("export range"), mem_fun(*this, &Editor::export_selection)); diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 1e02d34ce9..993ad24006 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -304,10 +304,7 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc) edit_cursor->set_position (edit_cursor->current_frame); playhead_cursor->set_position (playhead_cursor->current_frame); - double last_canvas_unit = ceil ((double) max_frames / frames_per_unit); - - track_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height); - time_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height); + reset_scrolling_region (); if (edit_cursor) edit_cursor->set_length (canvas_height); if (playhead_cursor) playhead_cursor->set_length (canvas_height); @@ -357,19 +354,41 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc) void Editor::reset_scrolling_region (Gtk::Allocation* alloc) { + TreeModel::Children rows = route_display_model->children(); + TreeModel::Children::iterator i; + double pos; + + for (pos = 0, i = rows.begin(); i != rows.end(); ++i) { + TimeAxisView *tv = (*i)[route_display_columns.tv]; + pos += tv->effective_height; + } + + RefPtr<Gdk::Screen> screen = get_screen(); + + if (!screen) { + screen = Gdk::Screen::get_default(); + } + + edit_controls_hbox.set_size_request (-1, min ((gint) pos, (screen->get_height() - 400))); + edit_controls_vbox.set_size_request (-1, min ((gint) pos, (screen->get_height() - 400))); + double last_canvas_unit = ceil ((double) max_frames / frames_per_unit); + track_canvas.set_scroll_region (0.0, 0.0, max (last_canvas_unit, canvas_width), pos); + + // XXX what is the correct height value for the time canvas ? this overstates it + time_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height); } bool Editor::track_canvas_map_handler (GdkEventAny* ev) { - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); return false; } bool Editor::time_canvas_map_handler (GdkEventAny* ev) { - time_canvas_scroller.get_window()->set_cursor (*timebar_cursor); + time_canvas.get_window()->set_cursor (*timebar_cursor); return false; } diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc index a68a94a4e8..8b498f0000 100644 --- a/gtk2_ardour/editor_export_audio.cc +++ b/gtk2_ardour/editor_export_audio.cc @@ -94,33 +94,6 @@ Editor::export_region () dialog->start_export(); } -void -Editor::write_a_region () -{ - if (clicked_regionview == 0) { - return; - } - - FileSelection file_selector; - - file_selector.get_selection_entry()->signal_activate().connect (sigc::bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1)); - file_selector.get_cancel_button()->signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), -1)); - file_selector.get_ok_button()->signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1)); - file_selector.signal_delete_event().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop_on_delete), -1)); - - file_selector.show_all(); - - run_sub_event_loop (); - - if (sub_event_loop_status == 1) { - string path = file_selector.get_filename(); - printf ("got region: %s\n", path.c_str()); - if (path.length()) { - write_region (path, clicked_regionview->region); - } - } -} - int Editor::write_region_selection (AudioRegionSelection& regions) { diff --git a/gtk2_ardour/editor_hscroller.cc b/gtk2_ardour/editor_hscroller.cc index d918983f94..049f19b85f 100644 --- a/gtk2_ardour/editor_hscroller.cc +++ b/gtk2_ardour/editor_hscroller.cc @@ -26,244 +26,32 @@ using namespace std; using namespace ARDOUR; void -Editor::hscroll_slider_allocate (Gtk::Allocation &alloc) +Editor::hscrollbar_allocate (Gtk::Allocation &alloc) { - //edit_hscroll_slider_width = alloc->width; - //edit_hscroll_slider_height = alloc->height ; - - if (session) { - track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit); - } - -} - -gint -Editor::hscroll_slider_expose (GdkEventExpose *ev) -{ - GdkRectangle draw_rect; - GdkRectangle bar_rect; - gint bar_max = edit_hscroll_slider_width - 2; - - bar_rect.y = 1; - bar_rect.height = edit_hscroll_slider_height - 2; - if (session) { - bar_rect.width = (gint) floor (bar_max * ((canvas_width * frames_per_unit) / session->current_end_frame())); - - if (bar_rect.width > bar_max) { - bar_rect.x = 1; - bar_rect.width = bar_max; - } else { - bar_rect.x = 1 + (gint) floor (bar_max * ((double) leftmost_frame / session->current_end_frame())); - } - - } else { - bar_rect.x = 1; - bar_rect.width = bar_max; + horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit); } - /* make sure we can see the bar at all times, and have enough to do zoom-trim on */ - - bar_rect.width = max ((guint16) (edit_hscroll_edge_width+5), (guint16) bar_rect.width); - - gdk_rectangle_intersect (&ev->area, &bar_rect, &draw_rect); - - gtk_paint_box (edit_hscroll_slider.get_style()->gobj(), - edit_hscroll_slider.get_window()->gobj(), - GTK_STATE_ACTIVE, - GTK_SHADOW_IN, - &ev->area, - GTK_WIDGET(edit_hscroll_slider.gobj()), - "trough", - 0, 0, -1, -1); - - gtk_paint_box (edit_hscroll_slider.get_style()->gobj(), - edit_hscroll_slider.get_window()->gobj(), - GTK_STATE_NORMAL, - GTK_SHADOW_OUT, - &draw_rect, - GTK_WIDGET(edit_hscroll_slider.gobj()), - "hscale", - bar_rect.x, bar_rect.y, bar_rect.width, bar_rect.height); - - - return TRUE; } -gint -Editor::hscroll_slider_button_press (GdkEventButton *ev) +bool +Editor::hscrollbar_button_press (GdkEventButton *ev) { - if (!session) { - return TRUE; - } - edit_hscroll_dragging = true; - //cerr << "PRESS" << endl; - - return TRUE; - - gint start; - gint width; - gint end; - gint x; - - start = (gint) floor (edit_hscroll_slider_width * ((double) leftmost_frame / session->current_end_frame())); - width = (gint) floor (edit_hscroll_slider_width * ((canvas_width * frames_per_unit) / session->current_end_frame())); - - end = start + width - 1; - x = (gint) max (0.0, ev->x); - - if (x >= start && x <= end) { - - edit_hscroll_drag_last = x; - edit_hscroll_dragging = true; - edit_hscroll_slider.add_modal_grab(); - } - - return TRUE; -} - -gint -Editor::hscroll_slider_button_release (GdkEventButton *ev) -{ - if (!session) { - return TRUE; - } - - gint start; - gint width; - gint end; - gint x; - gint bar_max = edit_hscroll_slider_width - 2; - jack_nframes_t new_leftmost = 0; - - //cerr << "RELESAE" << endl; - - if (edit_hscroll_dragging) { - // lets do a tempo redisplay now only, because it is dog slow - tempo_map_changed (Change (0)); - edit_hscroll_dragging = false; - } - - return TRUE; - - start = (gint) floor (bar_max * ((double) leftmost_frame / session->current_end_frame())); - width = (gint) floor (bar_max * ((canvas_width * frames_per_unit) / session->current_end_frame())); - - end = start + width - 1; - x = (gint) max (0.0, ev->x); - - if (!edit_hscroll_dragging) { - - new_leftmost = (jack_nframes_t) floor (((double) x/bar_max) * session->current_end_frame()); - reposition_x_origin (new_leftmost); - } - - if (edit_hscroll_dragging) { - // lets do a tempo redisplay now only, because it is dog slow - tempo_map_changed (Change (0)); - edit_hscroll_dragging = false; - edit_hscroll_slider.remove_modal_grab(); - } - - return TRUE; + return true; } -gint -Editor::hscroll_slider_motion (GdkEventMotion *ev) +bool +Editor::hscrollbar_button_release (GdkEventButton *ev) { - gint x, y; - Gdk::ModifierType state; - gint bar_max = edit_hscroll_slider_width - 2; - - if (!session || !edit_hscroll_dragging) { - return TRUE; - } - - edit_hscroll_slider.get_window()->get_pointer (x, y, state); - - jack_nframes_t new_frame; - jack_nframes_t frames; - double distance; - double fract; - - distance = x - edit_hscroll_drag_last; - fract = fabs (distance) / bar_max; - frames = (jack_nframes_t) floor (session->current_end_frame() * fract); - - if (distance < 0) { - if (leftmost_frame < frames) { - new_frame = 0; - } else { - new_frame = leftmost_frame - frames; - } - } else { - if (leftmost_frame > max_frames - frames) { - new_frame = max_frames; - } else { - new_frame = leftmost_frame + frames; + if (session) { + if (edit_hscroll_dragging) { + // lets do a tempo redisplay only on button release, because it is dog slow + tempo_map_changed (Change (0)); + edit_hscroll_dragging = false; } } - if (new_frame != leftmost_frame) { - reposition_x_origin (new_frame); - } - - edit_hscroll_drag_last = x; - - return TRUE; -} - -void -Editor::update_hscroller () -{ - //edit_hscroll_slider.queue_draw (); -// if (session) { -// track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit); -// track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit); -// } -} - -gint -Editor::hscroll_left_arrow_button_press (GdkEventButton *ev) -{ - if (!session) { - return FALSE; - } - - start_canvas_autoscroll (-1); - return TRUE; -} - -gint -Editor::hscroll_right_arrow_button_press (GdkEventButton *ev) -{ - if (!session) { - return FALSE; - } - - start_canvas_autoscroll (1); - return TRUE; + return true; } -gint -Editor::hscroll_left_arrow_button_release (GdkEventButton *ev) -{ - if (!session) { - return FALSE; - } - - stop_canvas_autoscroll (); - return TRUE; -} - -gint -Editor::hscroll_right_arrow_button_release (GdkEventButton *ev) -{ - if (!session) { - return FALSE; - } - - stop_canvas_autoscroll (); - return TRUE; -} diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc index 391a9972f0..4df43c1d7a 100644 --- a/gtk2_ardour/editor_imageframe.cc +++ b/gtk2_ardour/editor_imageframe.cc @@ -94,8 +94,10 @@ Editor::connect_to_image_compositor() void Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item) { - jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ; - + // GTK2FIX + //jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ; + jack_nframes_t offset = 0; + jack_nframes_t x_pos = 0 ; if(item->get_position() < offset) { diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc index 0ba4432391..20dbea52ca 100644 --- a/gtk2_ardour/editor_keyboard.cc +++ b/gtk2_ardour/editor_keyboard.cc @@ -34,10 +34,14 @@ Editor::kbd_driver (sigc::slot<void,GdkEvent*> theslot, bool use_track_canvas, b Glib::RefPtr<Gdk::Window> evw = track_canvas.get_window()->get_pointer (x, y, mask); bool doit = false; + cerr << "editor keyboard driver\n"; + if (use_track_canvas && track_canvas_event_box.get_window()->get_pointer(x, y, mask) != 0) { + cerr << "in track canvas\n"; doit = true; } else if (use_time_canvas && time_canvas_event_box.get_window()->get_pointer(x, y, mask)!= 0) { + cerr << "in time canvas\n"; doit = true; } diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 47982ff728..466aa09acd 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -730,8 +730,6 @@ Editor::marker_menu_rename () Dialog dialog; Entry entry; - Button ok_button (_("OK")); - Button cancel_button (_("Cancel")); if (loc->is_mark()) { dialog.set_title (_("ardour: rename mark")); @@ -744,35 +742,24 @@ Editor::marker_menu_rename () dialog.set_position (Gtk::WIN_POS_MOUSE); dialog.set_modal (true); - dialog.get_vbox()->set_border_width (10); - dialog.get_vbox()->pack_start (entry); - dialog.get_action_area()->pack_start (ok_button); - dialog.get_action_area()->pack_start (cancel_button); + dialog.add_action_widget (entry, RESPONSE_ACCEPT); + dialog.add_button (Stock::OK, RESPONSE_ACCEPT); + dialog.add_button (Stock::CANCEL, RESPONSE_ACCEPT); entry.set_text (loc->name()); entry.set_name ("MarkerNameDisplay"); - ok_button.set_name ("EditorGTKButton"); - cancel_button.set_name ("EditorGTKButton"); - - entry.signal_activate().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1)); - cancel_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), -1)); - ok_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1)); - dialog.signal_delete_event().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop_on_delete), -1)); dialog.show_all (); entry.grab_focus (); - run_sub_event_loop (); - - if (sub_event_loop_status == 1) { - - Location* l; - bool is_start; - - if ((l = find_location_from_marker (marker, is_start)) != 0) { - l->set_name (entry.get_text()); - } + switch (dialog.run ()) { + case RESPONSE_ACCEPT: + break; + default: + return; } + + loc->set_name (entry.get_text()); } gint diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index d95d4a3e47..c9c452ed44 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -242,7 +242,7 @@ Editor::set_mouse_mode (MouseMode m, bool force) ignore_mouse_mode_toggle = false; if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor(*current_canvas_cursor); + track_canvas.get_window()->set_cursor(*current_canvas_cursor); } } @@ -1141,7 +1141,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ show_verbose_canvas_cursor (); if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*fader_cursor); + track_canvas.get_window()->set_cursor (*fader_cursor); } } break; @@ -1165,7 +1165,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ show_verbose_canvas_cursor (); if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*fader_cursor); + track_canvas.get_window()->set_cursor (*fader_cursor); } break; @@ -1175,7 +1175,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ if (line) line->property_fill_color_rgba() = color_map[cEnteredGainLine]; if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*fader_cursor); + track_canvas.get_window()->set_cursor (*fader_cursor); } } break; @@ -1189,13 +1189,13 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ line->property_fill_color_rgba() = color_map[cEnteredAutomationLine]; } if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*fader_cursor); + track_canvas.get_window()->set_cursor (*fader_cursor); } break; case AudioRegionViewNameHighlight: if (is_drawable() && mouse_mode == MouseObject) { - track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor); + track_canvas.get_window()->set_cursor (*trimmer_cursor); } break; @@ -1209,14 +1209,14 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ /* </CMT Additions> */ if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor); + track_canvas.get_window()->set_cursor (*trimmer_cursor); } break; case EditCursorItem: case PlayheadCursorItem: if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*grabber_cursor); + track_canvas.get_window()->set_cursor (*grabber_cursor); } break; @@ -1226,7 +1226,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ if (!reinterpret_cast<AudioRegionView *> (item->get_data ("regionview"))->name_active()) { if (mouse_mode == MouseObject && is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor); + track_canvas.get_window()->set_cursor (*trimmer_cursor); } } break; @@ -1247,7 +1247,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ break; } - track_canvas_scroller.get_window()->set_cursor (*cursor); + track_canvas.get_window()->set_cursor (*cursor); AutomationTimeAxisView* atv; if ((atv = static_cast<AutomationTimeAxisView*>(item->get_data ("trackview"))) != 0) { @@ -1263,7 +1263,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case MeterBarItem: case TempoBarItem: if (is_drawable()) { - time_canvas_scroller.get_window()->set_cursor (*timebar_cursor); + time_canvas.get_window()->set_cursor (*timebar_cursor); } break; @@ -1276,7 +1276,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case MeterMarkerItem: case TempoMarkerItem: if (is_drawable()) { - time_canvas_scroller.get_window()->set_cursor (*timebar_cursor); + time_canvas.get_window()->set_cursor (*timebar_cursor); } break; case FadeInHandleItem: @@ -1345,7 +1345,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ } if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); } hide_verbose_canvas_cursor (); @@ -1363,7 +1363,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case MarkerViewHandleEndItem: /* </CMT Additions> */ if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); } break; @@ -1378,7 +1378,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ line->property_fill_color_rgba() = al->get_line_color(); } if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); } break; @@ -1386,7 +1386,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ /* see enter_handler() for notes */ if (!reinterpret_cast<AudioRegionView *> (item->get_data ("regionview"))->name_active()) { if (is_drawable() && mouse_mode == MouseObject) { - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); } } break; @@ -1397,7 +1397,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case TempoBarItem: case MarkerBarItem: if (is_drawable()) { - time_canvas_scroller.get_window()->set_cursor (*timebar_cursor); + time_canvas.get_window()->set_cursor (*timebar_cursor); } break; @@ -1412,7 +1412,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case TempoMarkerItem: if (is_drawable()) { - time_canvas_scroller.get_window()->set_cursor (*timebar_cursor); + time_canvas.get_window()->set_cursor (*timebar_cursor); } break; @@ -1431,7 +1431,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_ case AutomationTrackItem: if (is_drawable()) { - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); clear_entered_track = true; Glib::signal_idle().connect (mem_fun(*this, &Editor::left_automation_track)); } @@ -3651,7 +3651,7 @@ Editor::drag_selection (ArdourCanvas::Item* item, GdkEvent* event) break; } - if (event->button.x >= track_canvas_scroller.get_hadjustment()->get_value() + canvas_width) { + if (event->button.x >= horizontal_adjustment.get_value() + canvas_width) { start_canvas_autoscroll (1); } @@ -4183,7 +4183,7 @@ Editor::drag_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event) break; } - if (event->button.x >= track_canvas_scroller.get_hadjustment()->get_value() + canvas_width) { + if (event->button.x >= horizontal_adjustment.get_value() + canvas_width) { start_canvas_autoscroll (1); } diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 260d2ce387..3190b04a45 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -973,8 +973,7 @@ Editor::scroll_tracks_down () cnt = (int) floor (prefix); } - Gtk::Adjustment *adj = track_canvas_scroller.get_vadjustment(); - adj->set_value (adj->get_value() + (cnt * adj->get_page_size())); + vertical_adjustment.set_value (vertical_adjustment.get_value() + (cnt * vertical_adjustment.get_page_size())); } void @@ -990,8 +989,7 @@ Editor::scroll_tracks_up () cnt = (int) floor (prefix); } - Gtk::Adjustment *adj = track_canvas_scroller.get_vadjustment(); - adj->set_value (adj->get_value() - (cnt * adj->get_page_size())); + vertical_adjustment.set_value (vertical_adjustment.get_value() - (cnt * vertical_adjustment.get_page_size())); } void @@ -2101,7 +2099,7 @@ Editor::embed_sndfile (string path, bool split, bool multiple_files, bool& check } } - track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH)); + track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH)); ARDOUR_UI::instance()->flush_pending (); /* make the proper number of channels in the region */ @@ -2149,7 +2147,7 @@ Editor::embed_sndfile (string path, bool split, bool multiple_files, bool& check } out: - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); } void @@ -2287,7 +2285,7 @@ Editor::insert_sndfile_into (string path, bool multi, AudioTimeAxisView* tv, jac return; } - track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH)); + track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH)); ARDOUR_UI::instance()->flush_pending (); /* make the proper number of channels in the region */ @@ -2330,7 +2328,7 @@ Editor::insert_sndfile_into (string path, bool multi, AudioTimeAxisView* tv, jac } out: - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); return; } @@ -2918,7 +2916,7 @@ Editor::freeze_route () pthread_create (&itt.thread, 0, _freeze_thread, this); - track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH)); + track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH)); while (!itt.done && !itt.cancel) { gtk_main_iteration (); @@ -2927,7 +2925,7 @@ Editor::freeze_route () interthread_progress_connection.disconnect (); interthread_progress_window->hide_all (); current_interthread_info = 0; - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); } void @@ -3458,7 +3456,7 @@ Editor::normalize_region () begin_reversible_command (_("normalize")); - track_canvas_scroller.get_window()->set_cursor (*wait_cursor); + track_canvas.get_window()->set_cursor (*wait_cursor); gdk_flush (); for (AudioRegionSelection::iterator r = selection->audio_regions.begin(); r != selection->audio_regions.end(); ++r) { @@ -3468,7 +3466,7 @@ Editor::normalize_region () } commit_reversible_command (); - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); } @@ -3515,7 +3513,7 @@ Editor::apply_filter (AudioFilter& filter, string command) begin_reversible_command (command); - track_canvas_scroller.get_window()->set_cursor (*wait_cursor); + track_canvas.get_window()->set_cursor (*wait_cursor); gdk_flush (); for (AudioRegionSelection::iterator r = selection->audio_regions.begin(); r != selection->audio_regions.end(); ) { @@ -3544,7 +3542,7 @@ Editor::apply_filter (AudioFilter& filter, string command) selection->audio_regions.clear (); out: - track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor); + track_canvas.get_window()->set_cursor (*current_canvas_cursor); } void diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc index 5df85489b7..9cdc981eb0 100644 --- a/gtk2_ardour/editor_route_list.cc +++ b/gtk2_ardour/editor_route_list.cc @@ -155,7 +155,7 @@ Editor::route_display_selection_changed () for (i = rows.begin(); i != rows.end(); ++i) { tv = (*i)[route_display_columns.tv]; - if (selection->is_selected (i)) { + if (!selection->is_selected (i)) { tv->set_marked_for_display (false); } else { AudioTimeAxisView *atv; @@ -225,7 +225,7 @@ Editor::route_list_reordered () TreeModel::Children rows = route_display_model->children(); TreeModel::Children::iterator i; long order; -int n; + int n; for (n = 0, order = 0, i = rows.begin(); i != rows.end(); ++i, ++order) { TimeAxisView *tv = (*i)[route_display_columns.tv]; @@ -250,7 +250,8 @@ int n; n++; } - edit_controls_scroller.queue_resize (); + + // controls_layout.queue_resize (); reset_scrolling_region (); return FALSE; } diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 93af2a18be..1fe4e0711c 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -520,7 +520,7 @@ Editor::update_ruler_visibility () lab_children.clear(); - // leave the last one (the time_canvas_scroller) intact + // leave the last one (the time_canvas) intact while (ruler_children.size() > 1) { ruler_children.pop_front(); } diff --git a/gtk2_ardour/imageframe_time_axis.cc b/gtk2_ardour/imageframe_time_axis.cc index 00d20129df..f15c8d79e8 100644 --- a/gtk2_ardour/imageframe_time_axis.cc +++ b/gtk2_ardour/imageframe_time_axis.cc @@ -116,20 +116,6 @@ ImageFrameTimeAxis::~ImageFrameTimeAxis () image_action_menu = 0 ; } - for(list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) - { - delete (*i)->rect; - delete (*i)->start_trim; - delete (*i)->end_trim; - } - - for(list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) - { - delete (*i)->rect; - delete (*i)->start_trim; - delete (*i)->end_trim; - } - if (selection_group) { delete selection_group; diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc index 8a9ac674fc..8a75492a30 100644 --- a/gtk2_ardour/marker.cc +++ b/gtk2_ardour/marker.cc @@ -246,6 +246,7 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, con mark->property_points() = *points; mark->property_fill_color_rgba() = rgba; mark->property_outline_color() = "black"; + mark->property_width_pixels() = 1; Pango::FontDescription font = get_font_for_style (N_("MarkerText")); diff --git a/gtk2_ardour/marker_time_axis.cc b/gtk2_ardour/marker_time_axis.cc index e8673e6fe3..973bb5d221 100644 --- a/gtk2_ardour/marker_time_axis.cc +++ b/gtk2_ardour/marker_time_axis.cc @@ -92,27 +92,7 @@ MarkerTimeAxis::MarkerTimeAxis (PublicEditor& ed, ARDOUR::Session& sess, Canvas& */ MarkerTimeAxis::~MarkerTimeAxis() { - GoingAway() ; /* EMIT_SIGNAL */ - - for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i) - { - delete (*i)->rect; - delete (*i)->start_trim; - delete (*i)->end_trim; - } - - for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i) - { - delete (*i)->rect; - delete (*i)->start_trim; - delete (*i)->end_trim; - } - - if(selection_group) - { - delete selection_group; - selection_group = 0 ; - } + GoingAway() ; /* EMIT_SIGNAL */ // destroy the view helper // this handles removing and destroying individual marker items diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 5d8f88eeeb..a85a589ae3 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -435,14 +435,11 @@ Mixer_UI::show_strip (MixerStrip* ms) if (ms->route().master() || ms->route().control()) { out_packer.pack_start (*ms, false, false); - cerr << "Packed master strip @ " << ms << endl; } else { - strip_packer.pack_start (*ms, false, false); - cerr << "Packed strip @ " << ms << endl; + strip_packer.pack_start (*ms, false, false); } ms->set_packed (true); ms->show (); - } } diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 6c97e24199..b9ff987d53 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -78,6 +78,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie effective_height = 0; parent = rent; _has_state = false; + last_name_entry_key_press_event = 0; /* Create the standard LHS Controls @@ -88,7 +89,10 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie name_entry.set_name ("EditorTrackNameDisplay"); name_entry.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_release)); name_entry.signal_button_press_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_press)); - + name_entry.signal_key_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_key_release)); + name_entry.signal_activate().connect (mem_fun(*this, &TimeAxisView::name_entry_activated)); + name_entry.signal_focus_in_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_in)); + name_entry.signal_focus_out_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_out)); Gtkmm2ext::set_size_request_to_display_given_text (name_entry, N_("gTortnam"), 10, 10); // just represents a short name name_label.set_name ("TrackLabel"); @@ -356,6 +360,86 @@ TimeAxisView::set_height (TrackHeight h) } bool +TimeAxisView::name_entry_key_release (GdkEventKey* ev) +{ + switch (ev->keyval) { + case GDK_Tab: + case GDK_Up: + case GDK_Down: + name_entry_changed (); + return true; + + default: + break; + } + +#ifdef TIMEOUT_NAME_EDIT + /* adapt the timeout to reflect the user's typing speed */ + + guint32 name_entry_timeout; + + if (last_name_entry_key_press_event) { + /* timeout is 1/2 second or 5 times their current inter-char typing speed */ + name_entry_timeout = std::max (500U, (5 * (ev->time - last_name_entry_key_press_event))); + } else { + /* start with a 1 second timeout */ + name_entry_timeout = 1000; + } + + last_name_entry_key_press_event = ev->time; + + /* wait 1 seconds and if no more keys are pressed, act as if they pressed enter */ + + name_entry_key_timeout.disconnect(); + name_entry_key_timeout = Glib::signal_timeout().connect (mem_fun (*this, &TimeAxisView::name_entry_key_timed_out), name_entry_timeout); +#endif + + return false; +} + +bool +TimeAxisView::name_entry_focus_in (GdkEventFocus* ev) +{ + name_entry.select_region (0, -1); + name_entry.set_name ("EditorActiveTrackNameDisplay"); + return false; +} + +bool +TimeAxisView::name_entry_focus_out (GdkEventFocus* ev) +{ + /* clean up */ + + last_name_entry_key_press_event = 0; + name_entry_key_timeout.disconnect (); + name_entry.set_name ("EditorTrackNameDisplay"); + + /* do the real stuff */ + + name_entry_changed (); + + return false; +} + +bool +TimeAxisView::name_entry_key_timed_out () +{ + name_entry_activated(); + return false; +} + +void +TimeAxisView::name_entry_activated () +{ + controls_ebox.grab_focus(); +} + +void +TimeAxisView::name_entry_changed () +{ +} + +bool TimeAxisView::name_entry_button_press (GdkEventButton *ev) { if (ev->button == 3) { diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index 1b132322e4..7cd2cc8e38 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -199,19 +199,19 @@ class TimeAxisView : public virtual AxisView string controls_base_unselected_name; string controls_base_selected_name; - /** - * Handle mouse press on our LHS control name entry. - * - * @param ev the event - */ - virtual bool name_entry_button_press (GdkEventButton *ev); + bool name_entry_button_press (GdkEventButton *ev); + bool name_entry_button_release (GdkEventButton *ev); + bool name_entry_key_release (GdkEventKey *ev); + void name_entry_activated (); + sigc::connection name_entry_key_timeout; + bool name_entry_key_timed_out (); + guint32 last_name_entry_key_press_event; + + /* derived classes can override these */ - /** - * Handle mouse relaese on our LHS control name entry. - * - *@ param ev the event - */ - virtual bool name_entry_button_release (GdkEventButton *ev); + virtual void name_entry_changed (); + virtual bool name_entry_focus_in (GdkEventFocus *ev); + virtual bool name_entry_focus_out (GdkEventFocus *ev); /** * Handle mouse relaese on our LHS control name ebox. |