class UIExportSpecification;
class ExportDialog;
class Selection;
+class TempoLines;
class TimeSelection;
class TrackSelection;
class AutomationSelection;
class ControlPoint;
class SoundFileOmega;
class RhythmFerret;
+class RegionLayeringOrderEditor;
#ifdef FFT_ANALYSIS
class AnalysisWindow;
#endif
std::vector<std::string> rb_opt_strings;
#endif
- /* option editor-access */
+ //global waveform options
void set_show_waveforms (bool yn);
bool show_waveforms() const { return _show_waveforms; }
- void set_waveform_scale (Editing::WaveformScale);
+ void set_show_waveforms_rectified (bool yn);
+ bool show_waveforms_rectified() const { return _show_waveforms_rectified; }
void set_show_waveforms_recording (bool yn);
bool show_waveforms_recording() const { return _show_waveforms_recording; }
+ //per-track waveform options
+
+ void set_waveform_scale (Editing::WaveformScale);
+
/* things that need to be public to be used in the main menubar */
void new_region_from_selection ();
void separate_region_from_punch ();
void separate_region_from_loop ();
void separate_regions_using_location (ARDOUR::Location&);
- void toggle_playback (bool with_abort);
void transition_to_rolling (bool forward);
/* undo related */
void set_show_measures (bool yn);
bool show_measures () const { return _show_measures; }
- bool initial_ruler_update_required;
#ifdef FFT_ANALYSIS
/* analysis window */
void clear_playlists (TimeAxisView*);
TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0);
+ void get_onscreen_tracks (TrackViewList&);
Width editor_mixer_strip_width;
void maybe_add_mixer_strip_width (XMLNode&);
void show_editor_mixer (bool yn);
+ void create_editor_mixer ();
void set_selected_mixer_strip (TimeAxisView&);
void hide_track_in_display (TimeAxisView& tv, bool temporary = false);
void show_track_in_display (TimeAxisView& tv);
/* playhead/screen stuff */
+ void set_stationary_playhead (bool yn);
+ void toggle_stationary_playhead ();
+ bool stationary_playhead() const { return _stationary_playhead; }
+
void set_follow_playhead (bool yn);
void toggle_follow_playhead ();
bool follow_playhead() const { return _follow_playhead; }
bool dragging_playhead () const { return _dragging_playhead; }
void toggle_waveform_visibility ();
+ void toggle_waveform_rectified ();
void toggle_waveforms_while_recording ();
+
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;
+
/* SMPTE timecode & video sync */
void smpte_fps_chosen (ARDOUR::SmpteFormat format);
void update_smpte_mode();
void update_video_pullup();
void update_subframes_per_frame ();
- /* xfades */
+
+ /* fades & xfades */
+
+ void toggle_region_fades ();
+ 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 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 ();
double frames_per_unit;
nframes64_t leftmost_frame;
Editing::ZoomFocus zoom_focus;
- bool zoomed_to_region;
std::list<TAVState> track_states;
};
/* functions to be passed to mapover_audio_tracks(), possibly with sigc::bind()-supplied arguments */
void mapped_get_equivalent_regions (RouteTimeAxisView&, uint32_t, RegionView*, vector<RegionView*>*);
- void mapped_use_new_playlist (AudioTimeAxisView&, uint32_t);
- void mapped_use_copy_playlist (AudioTimeAxisView&, uint32_t);
+ void mapped_use_new_playlist (AudioTimeAxisView&, uint32_t, vector<boost::shared_ptr<ARDOUR::Playlist> > const &);
+ void mapped_use_copy_playlist (AudioTimeAxisView&, uint32_t, vector<boost::shared_ptr<ARDOUR::Playlist> > const &);
void mapped_clear_playlist (AudioTimeAxisView&, uint32_t);
/* end */
void set_selected_track (TimeAxisView&, Selection::Operation op = Selection::Set, bool no_remove=false);
void select_all_tracks ();
-
+
bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false);
void set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool no_remove=false);
void set_selected_track_as_side_effect (bool force = false);
Gtk::Menu* build_track_selection_context_menu (nframes64_t);
void add_dstream_context_items (Gtk::Menu_Helpers::MenuList&);
void add_bus_context_items (Gtk::Menu_Helpers::MenuList&);
- void add_region_context_items (AudioStreamView*, boost::shared_ptr<ARDOUR::Region>, Gtk::Menu_Helpers::MenuList&);
+ void add_region_context_items (AudioStreamView*, boost::shared_ptr<ARDOUR::Region>, Gtk::Menu_Helpers::MenuList&, nframes64_t position, bool multiple_regions_at_position);
void add_crossfade_context_items (AudioStreamView*, boost::shared_ptr<ARDOUR::Crossfade>, Gtk::Menu_Helpers::MenuList&, bool many);
void add_selection_context_items (Gtk::Menu_Helpers::MenuList&);
Gdk::Cursor* which_grabber_cursor ();
ArdourCanvas::Canvas* track_canvas;
-
- ArdourCanvas::Text* first_action_message;
ArdourCanvas::Text* verbose_canvas_cursor;
bool verbose_cursor_visible;
ArdourCanvas::Group* transport_marker_bar_group;
ArdourCanvas::Group* cd_marker_bar_group;
+ ArdourCanvas::Group* _background_group;
/*
The _master_group is the group containing all items
that require horizontal scrolling..
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;
Cursor* playhead_cursor;
ArdourCanvas::Group* cursor_group;
- void cursor_to_region_boundary (Cursor*, int32_t dir);
- void cursor_to_next_region_boundary (Cursor*);
- void cursor_to_previous_region_boundary (Cursor*);
+ nframes64_t get_region_boundary (nframes64_t pos, int32_t dir, bool with_selection, bool only_onscreen);
+
+ void cursor_to_region_boundary (bool with_selection, int32_t dir);
+ void cursor_to_next_region_boundary (bool with_selection);
+ void cursor_to_previous_region_boundary (bool with_selection);
void cursor_to_next_region_point (Cursor*, ARDOUR::RegionPoint);
void cursor_to_previous_region_point (Cursor*, ARDOUR::RegionPoint);
void cursor_to_region_point (Cursor*, ARDOUR::RegionPoint, int32_t dir);
void cursor_to_selection_start (Cursor *);
void cursor_to_selection_end (Cursor *);
- void selected_marker_to_region_boundary (int32_t dir);
- void selected_marker_to_next_region_boundary ();
- void selected_marker_to_previous_region_boundary ();
+ void selected_marker_to_region_boundary (bool with_selection, int32_t dir);
+ void selected_marker_to_next_region_boundary (bool with_selection);
+ void selected_marker_to_previous_region_boundary (bool with_selection);
void selected_marker_to_next_region_point (ARDOUR::RegionPoint);
void selected_marker_to_previous_region_point (ARDOUR::RegionPoint);
void selected_marker_to_region_point (ARDOUR::RegionPoint, int32_t dir);
Gtk::Layout controls_layout;
bool control_layout_scroll (GdkEventScroll* ev);
void controls_layout_size_request (Gtk::Requisition*);
+ sigc::connection controls_layout_size_request_connection;
Gtk::HScrollbar edit_hscrollbar;
bool _dragging_hscrollbar;
double canvas_width;
double canvas_height;
double full_canvas_height;
- nframes64_t last_canvas_frame;
bool track_canvas_map_handler (GdkEventAny*);
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 scroll_canvas_horizontally ();
void scroll_canvas_vertically ();
- void canvas_horizontally_scrolled ();
- void canvas_scroll_to (nframes64_t);
struct VisualChange {
enum Type {
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 change_region_layering_order (nframes64_t);
void lower_region ();
void lower_region_to_bottom ();
void split_region ();
void adjust_region_scale_amplitude (bool up);
void do_insert_time ();
- void insert_time (nframes64_t pos, nframes64_t distance, Editing::InsertTimeOption opt, bool ignore_music_glue, bool markers_too);
+ void insert_time (nframes64_t pos, nframes64_t distance, Editing::InsertTimeOption opt, bool ignore_music_glue, bool markers_too, bool tempo_too);
void tab_to_transient (bool forward);
void temporal_zoom_selection ();
void temporal_zoom_region (bool both_axes);
void toggle_zoom_region (bool both_axes);
- bool zoomed_to_region;
void temporal_zoom_session ();
void temporal_zoom (gdouble scale);
void temporal_zoom_by_frame (nframes64_t start, nframes64_t end, const string & op);
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::AudioTrack>&, bool);
+ int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::AudioTrack>, 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::AudioTrack>&);
+ nframes64_t& pos, int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::AudioTrack>);
int add_sources (vector<Glib::ustring> paths, ARDOUR::SourceList& sources, nframes64_t& pos, Editing::ImportMode,
int target_regions, int target_tracks, boost::shared_ptr<ARDOUR::AudioTrack>&, bool add_channel_suffix);
/* import specific info */
- ARDOUR::Session::import_status import_status;
+ struct EditorImportStatus : public ARDOUR::Session::import_status {
+ Editing::ImportMode mode;
+ nframes64_t pos;
+ int target_tracks;
+ int target_regions;
+ boost::shared_ptr<ARDOUR::AudioTrack> 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 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*);
bool track_canvas_motion_notify_event (GdkEventMotion* event);
Gtk::Allocation canvas_allocation;
- bool canvas_idle_queued;
void track_canvas_allocate (Gtk::Allocation alloc);
bool track_canvas_size_allocated ();
/* display control */
bool _show_measures;
+
bool _show_waveforms;
- bool _follow_playhead;
+ bool _show_waveforms_rectified;
bool _show_waveforms_recording;
+
+ bool _stationary_playhead;
+ bool _follow_playhead;
ARDOUR::TempoMap::BBTPointList *current_bbt_points;
- typedef vector<ArdourCanvas::SimpleLine*> TimeLineList;
- TimeLineList free_measure_lines;
- TimeLineList used_measure_lines;
-
+ TempoLines* tempo_lines;
+
ArdourCanvas::Group* time_line_group;
ArdourCanvas::SimpleLine* get_time_line ();
void hide_measures ();
void draw_measures ();
- bool lazy_hide_and_draw_measures ();
+ bool redraw_measures ();
void new_tempo_section ();
void new_transport_marker_menu_set_punch ();
void update_loop_range_view (bool visibility=false);
void update_punch_range_view (bool visibility=false);
- gint new_transport_marker_menu_popdown (GdkEventAny*);
+ void new_transport_marker_menu_popdown ();
void marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void tm_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void transport_marker_context_menu (GdkEventButton*, ArdourCanvas::Item*);
void remove_metric_marks ();
void draw_metric_marks (const ARDOUR::Metrics& metrics);
+ void compute_current_bbt_points (nframes_t left, nframes_t right);
void tempo_map_changed (ARDOUR::Change);
void redisplay_tempo (bool immediate_redraw);
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,
void redisplay_route_list();
bool ignore_route_list_reorder;
bool no_route_list_redisplay;
+ bool sync_track_view_list_and_route_list ();
void build_route_list_menu ();
void show_route_list_menu ();
void build_edit_group_list_menu ();
void activate_all_edit_groups ();
void disable_all_edit_groups ();
+ void show_all_edit_groups ();
+ void hide_all_edit_groups ();
bool in_edit_group_row_change;
void edit_group_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
guint info,
guint time);
-
void drop_paths (const Glib::RefPtr<Gdk::DragContext>& context,
gint x,
gint y,
bool write_region (string path, boost::shared_ptr<ARDOUR::AudioRegion>);
void export_region ();
void bounce_region_selection ();
- void bounce_range_selection (bool replace);
+ void bounce_range_selection (bool replace, bool enable_processing = true);
void external_edit_region ();
int write_audio_selection (TimeSelection&);
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 remove_tracks ();
void toggle_tracks_active ();
- void waveform_scale_chosen (Editing::WaveformScale);
bool _have_idled;
int resize_idle_id;
bool idle_resize();
friend gboolean _idle_resize (gpointer);
std::vector<TimeAxisView*> pending_resizes;
+
+ RegionLayeringOrderEditor* layering_order_editor;
+
+ void update_region_layering_order_editor (nframes64_t frame);
};
#endif /* __ardour_editor_h__ */