#include "selection_memento.h"
#include "tempo_curve.h"
+#include "ptformat/ptfformat.h"
+
namespace Gtkmm2ext {
class Bindings;
}
class Selection;
class SoundFileOmega;
class StreamView;
+class GridLines;
class TempoLines;
class TimeAxisView;
class TimeInfoBox;
double trackviews_height () const;
void cycle_snap_mode ();
- void next_snap_choice ();
- void next_snap_choice_music_only ();
- void next_snap_choice_music_and_time ();
- void prev_snap_choice ();
- void prev_snap_choice_music_only ();
- void prev_snap_choice_music_and_time ();
- void set_snap_to (Editing::SnapType);
+ void next_grid_choice ();
+ void prev_grid_choice ();
+ void set_grid_to (Editing::GridType);
void set_snap_mode (Editing::SnapMode);
- void set_snap_threshold (double pixel_distance) {snap_threshold = pixel_distance;}
Editing::SnapMode snap_mode () const;
- Editing::SnapType snap_type () const;
- bool snap_musical () const;
+ Editing::GridType grid_type () const;
+ bool grid_musical () const;
+ bool grid_nonmusical () const;
void undo (uint32_t n = 1);
void redo (uint32_t n = 1);
XMLNode& get_state ();
int set_state (const XMLNode&, int version);
- void set_mouse_mode (Editing::MouseMode, bool force=true);
+ void set_mouse_mode (Editing::MouseMode, bool force = false);
void step_mouse_mode (bool next);
Editing::MouseMode current_mouse_mode () const { return mouse_mode; }
Editing::MidiEditMode current_midi_edit_mode () const;
/* tempo */
- void set_show_measures (bool yn);
- bool show_measures () const { return _show_measures; }
+ void update_grid ();
/* analysis window */
void toggle_zero_line_visibility ();
void set_summary ();
void set_group_tabs ();
- void toggle_measure_visibility ();
/* returns the left-most and right-most time that the gui should allow the user to scroll to */
- std::pair <samplepos_t,samplepos_t> session_gui_extents( bool use_extra = true ) const;
+ std::pair <samplepos_t,samplepos_t> session_gui_extents (bool use_extra = true) const;
/* fades */
void snap_to (ARDOUR::MusicSample& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false,
- bool ensure_snap = false);
+ ARDOUR::SnapPref pref = ARDOUR::SnapToAny_Visual,
+ bool ensure_snap = false);
void snap_to_with_modifier (ARDOUR::MusicSample& first,
GdkEvent const * ev,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ ARDOUR::SnapPref pref = ARDOUR::SnapToAny_Visual);
- void snap_to (ARDOUR::MusicSample& first,
- ARDOUR::MusicSample& last,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ void set_snapped_cursor_position (samplepos_t pos);
void begin_selection_op_history ();
void begin_reversible_selection_op (std::string cmd_name);
ArdourCanvas::ScrollGroup* get_hscroll_group () const { return h_scroll_group; }
ArdourCanvas::ScrollGroup* get_hvscroll_group () const { return hv_scroll_group; }
ArdourCanvas::ScrollGroup* get_cursor_scroll_group () const { return cursor_scroll_group; }
+ ArdourCanvas::Container* get_drag_motion_group () const { return _drag_motion_group; }
ArdourCanvas::GtkCanvasViewport* get_track_canvas () const;
/* editing operations that need to be public */
void mouse_add_new_marker (samplepos_t where, bool is_cd=false);
- void split_regions_at (ARDOUR::MusicSample, RegionSelection&, bool snap = true);
+ void split_regions_at (ARDOUR::MusicSample, RegionSelection&);
void split_region_at_points (boost::shared_ptr<ARDOUR::Region>, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false);
RegionSelection get_regions_from_selection_and_mouse (samplepos_t);
void on_samples_per_pixel_changed ();
Editing::MouseMode mouse_mode;
- Editing::SnapType pre_internal_snap_type;
+ Editing::GridType pre_internal_grid_type;
Editing::SnapMode pre_internal_snap_mode;
- Editing::SnapType internal_snap_type;
+ Editing::GridType internal_grid_type;
Editing::SnapMode internal_snap_mode;
Editing::MouseMode effective_mouse_mode () const;
ArdourWidgets::VPane editor_summary_pane;
Gtk::EventBox meter_base;
- Gtk::HBox meter_box;
Gtk::EventBox marker_base;
Gtk::HBox marker_box;
Gtk::VBox scrollers_rulers_markers_box;
gint really_remove_marker (ARDOUR::Location* loc);
void goto_nth_marker (int nth);
void trigger_script (int nth);
+ void trigger_script_by_name (const std::string script_name);
void toggle_marker_lines ();
void set_marker_line_visibility (bool);
size_t push_canvas_cursor (Gdk::Cursor*);
void pop_canvas_cursor ();
- Gdk::Cursor* which_grabber_cursor () const;
Gdk::Cursor* which_track_cursor () const;
Gdk::Cursor* which_mode_cursor () const;
Gdk::Cursor* which_trim_cursor (bool left_side) const;
bool ruler_label_button_release (GdkEventButton*);
void store_ruler_visibility ();
void restore_ruler_visibility ();
+ void show_rulers_for_grid ();
-
-
- enum MinsecRulerScale {
+ enum MinsecRulerScale {
minsec_show_msecs,
minsec_show_seconds,
minsec_show_minutes,
bbt_show_16,
bbt_show_4,
bbt_show_1,
- bbt_show_beats,
- bbt_show_ticks,
- bbt_show_ticks_detail,
- bbt_show_ticks_super_detail
+ bbt_show_quarters,
+ bbt_show_eighths,
+ bbt_show_sixteenths,
+ bbt_show_thirtyseconds
};
BBTRulerScale bbt_ruler_scale;
friend class EditorCursor;
+ EditorCursor* snapped_cursor;
+
EditorCursor* playhead_cursor;
samplepos_t playhead_cursor_sample () const;
ARDOUR::samplepos_t find_next_region_boundary (ARDOUR::samplepos_t, int32_t dir, const TrackViewList&);
std::vector<ARDOUR::samplepos_t> region_boundary_cache;
+ void mark_region_boundary_cache_dirty () { _region_boundary_cache_dirty = true; }
void build_region_boundary_cache ();
+ bool _region_boundary_cache_dirty;
Gtk::HBox toplevel_hpacker;
void toggle_mute ();
void toggle_region_lock_style ();
+ void play_solo_selection (bool restart);
+
enum LayerOperation {
Raise,
RaiseToTop,
void insert_region_list_selection (float times);
- /* PT import */
- void external_pt_dialog ();
- typedef struct ptflookup {
- uint16_t index1;
- uint16_t index2;
- PBD::ID id;
-
- bool operator ==(const struct ptflookup& other) {
- return (this->index1 == other.index1);
- }
- } ptflookup_t;
-
/* import & embed */
void add_external_audio_action (Editing::ImportMode);
void external_audio_dialog ();
void session_import_dialog ();
+ /* PT import specific */
+ void external_pt_dialog ();
+ ARDOUR::ImportStatus import_pt_status;
+ static void *_import_pt_thread (void *);
+ void* import_pt_thread ();
+ PTFFormat import_ptf;
+
/* import specific info */
struct EditorImportStatus : public ARDOUR::ImportStatus {
void set_loop_start_from_edit_point ();
void set_loop_end_from_edit_point ();
- void keyboard_selection_begin ( Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE );
+ void keyboard_selection_begin (Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE);
void keyboard_selection_finish (bool add, Editing::EditIgnoreOption = Editing::EDIT_IGNORE_NONE);
bool have_pending_keyboard_selection;
samplepos_t pending_keyboard_selection_start;
void move_range_selection_start_or_end_to_region_boundary (bool, bool);
- Editing::SnapType _snap_type;
+ Editing::GridType _grid_type;
Editing::SnapMode _snap_mode;
- /// Snap threshold in pixels
- double snap_threshold;
-
bool ignore_gui_changes;
DragManager* _drags;
/* display control */
- bool _show_measures;
/// true if the editor should follow the playhead, otherwise false
bool _follow_playhead;
/// true if we scroll the tracks rather than the playhead
/// true if we are in fullscreen mode
bool _maximised;
- TempoLines* tempo_lines;
+ std::vector<ArdourCanvas::Ruler::Mark> grid_marks;
+ GridLines* grid_lines;
ArdourCanvas::Container* global_rect_group;
ArdourCanvas::Container* time_line_group;
- void hide_measures ();
- void draw_measures (std::vector<ARDOUR::TempoMap::BBTPoint>&);
+ void hide_grid_lines ();
+ void maybe_draw_grid_lines ();
void new_tempo_section ();
-
void remove_tempo_marker (ArdourCanvas::Item*);
void remove_meter_marker (ArdourCanvas::Item*);
gint real_remove_tempo_marker (ARDOUR::TempoSection*);
void toggle_marker_menu_lock ();
void toggle_marker_menu_glue ();
void marker_menu_hide ();
+ void marker_menu_set_origin ();
void marker_menu_loop_range ();
void marker_menu_select_all_selectables_using_range ();
void marker_menu_select_using_range ();
void tempo_map_changed (const PBD::PropertyChange&);
void tempometric_position_changed (const PBD::PropertyChange&);
- void redisplay_tempo (bool immediate_redraw);
+
+ void redisplay_grid (bool immediate_redraw);
uint32_t bbt_beat_subdivision;
void set_edit_mode (ARDOUR::EditMode);
void cycle_edit_mode ();
- ArdourWidgets::ArdourDropdown snap_type_selector;
- void build_snap_type_menu ();
+ ArdourWidgets::ArdourDropdown grid_type_selector;
+ void build_grid_type_menu ();
+
+ ArdourWidgets::ArdourButton snap_mode_button;
+ bool snap_mode_button_clicked (GdkEventButton *);
- ArdourWidgets::ArdourDropdown snap_mode_selector;
- void build_snap_mode_menu ();
Gtk::HBox snap_box;
- std::vector<std::string> snap_type_strings;
+ Gtk::HBox ebox_hpacker;
+ Gtk::VBox ebox_vpacker;
+
+ Gtk::HBox _box;
+
+ std::vector<std::string> grid_type_strings;
std::vector<std::string> snap_mode_strings;
- void snap_type_selection_done (Editing::SnapType);
+ void grid_type_selection_done (Editing::GridType);
void snap_mode_selection_done (Editing::SnapMode);
void snap_mode_chosen (Editing::SnapMode);
- void snap_type_chosen (Editing::SnapType);
+ void grid_type_chosen (Editing::GridType);
- Glib::RefPtr<Gtk::RadioAction> snap_type_action (Editing::SnapType);
+ Glib::RefPtr<Gtk::RadioAction> grid_type_action (Editing::GridType);
Glib::RefPtr<Gtk::RadioAction> snap_mode_action (Editing::SnapMode);
//zoom focus meu stuff
SelectionMemento* _selection_memento;
void time_selection_changed ();
+ void track_selection_changed ();
void update_time_selection_display ();
void presentation_info_changed (PBD::PropertyChange const &);
void region_selection_changed ();
void select_next_stripable (bool routes_only = true);
void select_prev_stripable (bool routes_only = true);
+ ARDOUR::MusicSample snap_to_minsec (ARDOUR::MusicSample start,
+ ARDOUR::RoundMode direction,
+ ARDOUR::SnapPref gpref);
+
+ ARDOUR::MusicSample snap_to_cd_frames (ARDOUR::MusicSample start,
+ ARDOUR::RoundMode direction,
+ ARDOUR::SnapPref gpref);
+
+ ARDOUR::MusicSample snap_to_bbt (ARDOUR::MusicSample start,
+ ARDOUR::RoundMode direction,
+ ARDOUR::SnapPref gpref);
+
+ ARDOUR::MusicSample snap_to_timecode (ARDOUR::MusicSample start,
+ ARDOUR::RoundMode direction,
+ ARDOUR::SnapPref gpref);
+
+ ARDOUR::MusicSample snap_to_grid (ARDOUR::MusicSample start,
+ ARDOUR::RoundMode direction,
+ ARDOUR::SnapPref gpref);
+
void snap_to_internal (ARDOUR::MusicSample& first,
ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false,
- bool ensure_snap = false);
+ ARDOUR::SnapPref gpref = ARDOUR::SnapToAny_Visual,
+ bool ensure_snap = false);
- void timecode_snap_to_internal (ARDOUR::MusicSample& first,
- ARDOUR::RoundMode direction = ARDOUR::RoundNearest,
- bool for_mark = false);
+ samplepos_t snap_to_marker (samplepos_t presnap,
+ ARDOUR::RoundMode direction = ARDOUR::RoundNearest);
RhythmFerret* rhythm_ferret;