#include <set>
#include <string>
#include <sys/time.h>
+#include <bitset>
#include <glibmm/ustring.h>
#include <ardour/location.h>
#include <ardour/audioregion.h>
#include <ardour/track.h>
+#include <ardour/types.h>
#include "audio_clock.h"
#include "gtk-custom-ruler.h"
class SoundFileOmega;
class RhythmFerret;
class AnalysisWindow;
+class BundleManager;
+class GlobalPortMatrixWindow;
/* <CMT Additions> */
class ImageFrameView;
void toggle_measure_visibility ();
void toggle_logo_visibility ();
+ double get_physical_screen_width () const { return physical_screen_width; };
double physical_screen_width;
double physical_screen_height;
void toggle_region_fades_visible ();
void toggle_selected_region_fades (int dir);
void update_region_fade_visibility ();
-
void toggle_auto_xfade ();
void toggle_xfades_active ();
void toggle_xfade_visibility ();
void update_layering_model ();
void toggle_link_region_and_track_selection ();
+ void toggle_automation_follows_regions ();
/* redirect shared ops menu. caller must free returned menu */
void scroll_tracks_down_line ();
void scroll_tracks_up_line ();
+ void move_selected_tracks (bool up);
+
bool new_regionviews_display_gain () { return _new_regionviews_show_envelope; }
void prepare_for_cleanup ();
void finish_cleanup ();
void toggle_meter_updating();
void show_rhythm_ferret();
+ void show_bundle_manager ();
+ void show_global_port_matrix (ARDOUR::DataType);
void goto_visual_state (uint32_t);
void save_visual_state (uint32_t);
void set_selected_track (TimeAxisView&, Selection::Operation op = Selection::Set, bool no_remove=false);
void select_all_tracks ();
-
+
int get_regionview_count_from_region_list (boost::shared_ptr<ARDOUR::Region> region);
bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false);
void add_item_with_sensitivity (Gtk::Menu_Helpers::MenuList&, Gtk::Menu_Helpers::MenuElem, bool) const;
- void handle_new_route (ARDOUR::Session::RouteList&);
+ void handle_new_route (ARDOUR::RouteList&);
void remove_route (TimeAxisView *);
bool route_removal;
ArdourCanvas::Group* cd_marker_bar_group;
/** The group containing all items that require horizontal scrolling. */
+ ArdourCanvas::Group* _background_group;
+ /*
+ The _master_group is the group containing all items
+ that require horizontal scrolling..
+ It is primarily used to separate canvas items
+ that require horizontal scrolling from those that do not.
+ */
ArdourCanvas::Group* _master_group;
/* The group containing all trackviews. Only scrolled vertically. */
static const double timebar_height;
guint32 visible_timebars;
gdouble canvas_timebars_vsize;
+ gdouble get_canvas_timebars_vsize () const { return canvas_timebars_vsize; }
Gtk::Menu *editor_ruler_menu;
ArdourCanvas::SimpleRect* tempo_bar;
sigc::connection control_scroll_connection;
gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;}
+
+ ArdourCanvas::Group* get_background_group () const { return _background_group; }
ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; }
double last_trackview_group_vertical_offset;
void tie_vertical_scrolling ();
void region_list_region_changed (ARDOUR::Change, boost::weak_ptr<ARDOUR::Region>);
void region_list_selection_changed ();
+ sigc::connection region_list_change_connection;
+ void set_selected_in_region_list(RegionSelection&);
+ bool set_selected_in_region_list_subrow(boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &, int);
bool region_list_selection_filter (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool yn);
void region_name_edit (const Glib::ustring&, const Glib::ustring&);
void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions);
/* track views */
TrackViewList track_views;
- TimeAxisView *trackview_by_y_position (double ypos);
+ std::pair<TimeAxisView*, ARDOUR::layer_t> trackview_by_y_position (double);
static Gdk::Cursor* cross_hair_cursor;
static Gdk::Cursor* trimmer_cursor;
void toggle_region_mute ();
void toggle_region_lock ();
void toggle_region_opaque ();
+ void toggle_record_enable ();
void set_region_lock_style (ARDOUR::Region::PositionLockStyle);
void raise_region ();
void raise_region_to_top ();
void bring_in_external_audio (Editing::ImportMode mode, nframes64_t& pos);
- void _do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
+ bool idle_drop_paths (std::vector<Glib::ustring> paths, nframes64_t frame, double ypos);
+ void drop_paths_part_two (const std::vector<Glib::ustring>& paths, nframes64_t frame, double ypos);
+
void do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
- bool idle_do_import (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t&);
-
- void _do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
void do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
- bool idle_do_embed (vector<Glib::ustring> paths, Editing::ImportDisposition, Editing::ImportMode mode, nframes64_t&);
int import_sndfiles (vector<Glib::ustring> paths, Editing::ImportMode mode, ARDOUR::SrcQuality, nframes64_t& pos,
- int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&, bool);
+ int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>, bool, uint32_t total);
int embed_sndfiles (vector<Glib::ustring> paths, bool multiple_files, bool& check_sample_rate, Editing::ImportMode mode,
nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::Track>&);
/* import specific info */
- ARDOUR::Session::import_status import_status;
+ struct EditorImportStatus : public ARDOUR::Session::ImportStatus {
+ Editing::ImportMode mode;
+ nframes64_t pos;
+ int target_tracks;
+ int target_regions;
+ boost::shared_ptr<ARDOUR::Track> track;
+ bool replace;
+ };
+
+ EditorImportStatus import_status;
gint import_progress_timeout (void *);
static void *_import_thread (void *);
void* import_thread ();
+ void finish_import ();
/* to support this ... */
void add_location_mark (nframes64_t where);
void add_location_from_audio_region ();
+ void add_locations_from_audio_region ();
void add_location_from_selection ();
void set_loop_from_selection (bool play);
void set_punch_from_selection ();
double snap_threshold;
void handle_gui_changes (const string &, void *);
+ bool ignore_gui_changes;
void hide_all_tracks (bool with_select);
Gtk::Menu fade_context_menu;
void popup_fade_context_menu (int, int, ArdourCanvas::Item*, ItemType);
+ void region_gain_motion_callback (ArdourCanvas::Item*, GdkEvent*);
+
void start_fade_in_grab (ArdourCanvas::Item*, GdkEvent*);
void start_fade_out_grab (ArdourCanvas::Item*, GdkEvent*);
void fade_in_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
void create_region_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void create_region_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
- bool check_region_drag_possible (RouteTimeAxisView**);
+ bool check_region_drag_possible (RouteTimeAxisView**, ARDOUR::layer_t*);
void possibly_copy_regions_during_grab (GdkEvent*);
void region_drag_splice_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void region_drag_splice_finished_callback (ArdourCanvas::Item*, GdkEvent*);
void cursor_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void cursor_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
+ void cursor_drag_finished_ensure_locate_callback (ArdourCanvas::Item*, GdkEvent*);
void marker_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void marker_drag_finished_callback (ArdourCanvas::Item*, GdkEvent*);
void control_point_drag_motion_callback (ArdourCanvas::Item*, GdkEvent*);
void start_region_brush_grab (ArdourCanvas::Item*, GdkEvent*);
void start_selection_grab (ArdourCanvas::Item*, GdkEvent*);
void start_cursor_grab (ArdourCanvas::Item*, GdkEvent*);
+ void start_cursor_grab_no_stop (ArdourCanvas::Item*, GdkEvent*);
void start_marker_grab (ArdourCanvas::Item*, GdkEvent*);
void start_control_point_grab (ArdourCanvas::Item*, GdkEvent*);
void start_line_grab_from_regionview (ArdourCanvas::Item*, GdkEvent*);
void edit_meter_section (ARDOUR::MeterSection*);
void edit_tempo_marker (ArdourCanvas::Item*);
void edit_meter_marker (ArdourCanvas::Item*);
+ void edit_control_point (ArdourCanvas::Item*);
void marker_menu_edit ();
void marker_menu_remove ();
Gtk::ToggleButton midi_tool_select_button;
Gtk::ToggleButton midi_tool_resize_button;
Gtk::ToggleButton midi_tool_erase_button;
- Gtk::ToggleButton midi_panic_button;
+ Gtk::Button midi_panic_button;
+ Gtk::ToggleButton midi_sound_notes;
GroupedButtons *midi_tool_button_set;
void midi_edit_mode_toggled (Editing::MidiEditMode m);
+ void midi_panic_button_pressed ();
+ bool sound_notes () const { return midi_sound_notes.get_active(); }
+
bool ignore_midi_edit_mode_toggle;
Gtkmm2ext::TearOff* midi_tools_tearoff;
Gtk::EventBox midi_toolbar_base;
Gtk::Frame midi_toolbar_frame;
- void midi_panic_toggle ();
void setup_midi_toolbar ();
/* selection process */
void time_selection_changed ();
void track_selection_changed ();
void region_selection_changed ();
+ sigc::connection editor_regions_selection_changed_connection;
void sensitize_the_right_region_actions (bool have_selected_regions);
void point_selection_changed ();
void marker_selection_changed ();
ArdourCanvas::SimpleRect* range_marker_drag_rect;
void update_marker_drag_item (ARDOUR::Location *);
-
+#ifdef GTKOSX
+ ArdourCanvas::SimpleRect *bogus_background_rect;
+#endif
ArdourCanvas::SimpleRect *transport_bar_range_rect;
ArdourCanvas::SimpleRect *transport_bar_preroll_rect;
ArdourCanvas::SimpleRect *transport_bar_postroll_rect;
void update_route_visibility ();
- void sync_order_keys ();
- bool ignore_route_order_sync;
+ void sync_order_keys (const char*);
+ bool route_redisplay_does_not_sync_order_keys;
+ bool route_redisplay_does_not_reset_order_keys;
bool route_list_display_button_press (GdkEventButton*);
void route_list_display_drag_data_received (const Glib::RefPtr<Gdk::DragContext>& context,
guint info,
guint time);
-
void drop_paths (const Glib::RefPtr<Gdk::DragContext>& context,
gint x,
gint y,
Gtk::ComboBoxText stretch_opts_selector;
Gtk::Label stretch_opts_label;
Gtk::ToggleButton precise_button;
+ Gtk::ToggleButton preserve_formants_button;
Gtk::HBox opts_box;
Gtk::Button* cancel_button;
void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
-
+#ifdef GTKOSX
+ void ensure_all_elements_drawn ();
+#endif
/* nudging tracks */
void nudge_track (bool use_edit_point, bool forwards);
bool entered_track_canvas (GdkEventCrossing*);
void set_entered_track (TimeAxisView*);
void set_entered_regionview (RegionView*);
+ void ensure_track_visible (TimeAxisView*);
gint left_automation_track ();
bool _new_regionviews_show_envelope;
void snap_to_internal (nframes64_t& first, int32_t direction = 0, bool for_mark = false);
RhythmFerret* rhythm_ferret;
+ BundleManager* _bundle_manager;
+ GlobalPortMatrixWindow* _global_port_matrix[ARDOUR::DataType::num_types];
void fit_tracks ();
void set_track_height (uint32_t h);
- void set_track_height_largest ();
- void set_track_height_large ();
- void set_track_height_larger ();
- void set_track_height_normal ();
- void set_track_height_smaller ();
- void set_track_height_small ();
void remove_tracks ();
void toggle_tracks_active ();
bool idle_resize();
friend gboolean _idle_resize (gpointer);
std::vector<TimeAxisView*> pending_resizes;
+
+ void visible_order_range (int*, int*) const;
+ bool y_movement_disallowed (int, int, int, int, int, std::bitset<512> const &, std::vector<int32_t> const &) const;
+
+ void located ();
+ bool _pending_locate_request;
};
#endif /* __ardour_editor_h__ */