#include <gtkmm2ext/dndtreeview.h>
#include "pbd/stateful.h"
-#include "ardour/session.h"
+#include "pbd/signals.h"
+
+#include "ardour/import_status.h"
#include "ardour/tempo.h"
#include "ardour/location.h"
#include "ardour/audioregion.h"
#include "canvas.h"
#include "editor_summary.h"
+namespace Gnome { namespace Canvas {
+ class NoEventText;
+} }
+
namespace Gtkmm2ext {
class TearOff;
}
class Crossfade;
class ChanCount;
class MidiOperator;
+ class MidiTrack;
+ class AudioTrack;
}
namespace LADSPA {
class TimeAxisView;
class TimeFXDialog;
class TimeSelection;
-class TrackSelection;
class EditorGroupTabs;
class EditorRoutes;
class EditorRouteGroups;
class EditorRegions;
+class EditorLocations;
class EditorSnapshots;
/* <CMT Additions> */
void set_length (double units);
void set_y_axis (double position);
- sigc::signal<void, nframes64_t> PositionChanged;
+ PBD::Signal1<void, nframes64_t> PositionChanged;
};
-class Editor : public PublicEditor
+class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr
{
public:
Editor ();
~Editor ();
- void connect_to_session (ARDOUR::Session *);
- ARDOUR::Session* current_session() const { return session; }
+ void set_session (ARDOUR::Session *);
+ ARDOUR::Session* session() const { return _session; }
+
void first_idle ();
virtual bool have_idled () const { return _have_idled; }
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;
+
void undo (uint32_t n = 1);
void redo (uint32_t n = 1);
XMLNode& get_state ();
- int set_state (const XMLNode&, int version = 3000);
+ int set_state (const XMLNode&, int version);
void set_mouse_mode (Editing::MouseMode, bool force=true);
void step_mouse_mode (bool next);
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 copy_playlists (TimeAxisView* v);
void clear_playlists (TimeAxisView* v);
- TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0);
void get_onscreen_tracks (TrackViewList&);
Width editor_mixer_strip_width;
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 show_verbose_canvas_cursor_with (const std::string& txt);
void hide_verbose_canvas_cursor();
+ void center_screen (nframes64_t);
+
+ TrackViewList axis_views_from_routes (boost::shared_ptr<ARDOUR::RouteList>) const;
+
protected:
void map_transport_state ();
void map_position_change (nframes64_t);
void color_handler ();
- ARDOUR::Session *session; ///< The session that we are editing, or 0
bool constructed;
// to keep track of the playhead position for control_scroll
double frames_per_unit;
nframes64_t leftmost_frame;
Editing::ZoomFocus zoom_focus;
- bool zoomed_to_region;
std::list<TAVState> track_states;
};
CrossfadeView* clicked_crossfadeview;
ControlPoint* clicked_control_point;
- void sort_track_selection (TrackSelection* sel = 0);
+ void sort_track_selection (TrackViewList* sel = 0);
- void get_relevant_tracks (std::set<RouteTimeAxisView*>& relevant_tracks) const;
- void get_equivalent_tracks (RouteTimeAxisView*, std::set<RouteTimeAxisView*> &, ARDOUR::RouteGroup::Property) const;
void get_equivalent_regions (RegionView* rv, std::vector<RegionView*> &, ARDOUR::RouteGroup::Property) const;
RegionSelection get_equivalent_regions (RegionSelection &, ARDOUR::RouteGroup::Property) const;
void mapover_tracks (sigc::slot<void,RouteTimeAxisView&,uint32_t> sl, TimeAxisView*, ARDOUR::RouteGroup::Property) const;
void add_selection_context_items (Gtk::Menu_Helpers::MenuList&);
void handle_new_route (ARDOUR::RouteList&);
- void remove_route (TimeAxisView *);
- bool route_removal;
+ void timeaxisview_deleted (TimeAxisView *);
Gtk::HBox global_hpacker;
Gtk::VBox global_vpacker;
ArdourCanvas::Canvas* track_canvas;
- ArdourCanvas::Text* verbose_canvas_cursor;
+ ArdourCanvas::NoEventText* verbose_canvas_cursor;
bool verbose_cursor_visible;
void parameter_changed (std::string);
ArdourCanvas::Group *minsec_group;
ArdourCanvas::Pixbuf *logo_item;
ArdourCanvas::Group *bbt_group;
- ArdourCanvas::Group *smpte_group;
+ ArdourCanvas::Group *timecode_group;
ArdourCanvas::Group *frame_group;
ArdourCanvas::Group *tempo_group;
ArdourCanvas::Group *meter_group;
ArdourCanvas::Group* _region_motion_group;
enum RulerType {
- ruler_metric_smpte = 0,
+ ruler_metric_timecode = 0,
ruler_metric_bbt = 1,
ruler_metric_frames = 2,
ruler_metric_minsec = 3,
Gtk::Widget * ruler_grabbed_widget;
void initialize_rulers ();
- void update_just_smpte ();
+ void update_just_timecode ();
void compute_fixed_ruler_scale (); //calculates the RulerScale of the fixed rulers
void update_fixed_rulers ();
void update_tempo_based_rulers ();
void store_ruler_visibility ();
void restore_ruler_visibility ();
- static gint _metric_get_smpte (GtkCustomRulerMark **, gdouble, gdouble, gint);
+ static gint _metric_get_timecode (GtkCustomRulerMark **, gdouble, gdouble, gint);
static gint _metric_get_bbt (GtkCustomRulerMark **, gdouble, gdouble, gint);
static gint _metric_get_frames (GtkCustomRulerMark **, gdouble, gdouble, gint);
static gint _metric_get_minsec (GtkCustomRulerMark **, gdouble, gdouble, gint);
gint minsec_nmarks;
void set_minsec_ruler_scale (gdouble lower, gdouble upper);
- enum SMPTERulerScale {
- smpte_show_bits,
- smpte_show_frames,
- smpte_show_seconds,
- smpte_show_minutes,
- smpte_show_hours
+ enum TimecodeRulerScale {
+ timecode_show_bits,
+ timecode_show_frames,
+ timecode_show_seconds,
+ timecode_show_minutes,
+ timecode_show_hours
};
- SMPTERulerScale smpte_ruler_scale;
+ TimecodeRulerScale timecode_ruler_scale;
- nframes_t smpte_mark_interval;
- gint smpte_mark_modulo;
- gint smpte_nmarks;
- void set_smpte_ruler_scale (gdouble lower, gdouble upper);
+ nframes_t timecode_mark_interval;
+ gint timecode_mark_modulo;
+ gint timecode_nmarks;
+ void set_timecode_ruler_scale (gdouble lower, gdouble upper);
enum BBTRulerScale {
bbt_over,
uint32_t bbt_accent_modulo;
void compute_bbt_ruler_scale (nframes64_t lower, nframes64_t upper);
- gint metric_get_smpte (GtkCustomRulerMark **, gdouble, gdouble, gint);
+ gint metric_get_timecode (GtkCustomRulerMark **, gdouble, gdouble, gint);
gint metric_get_bbt (GtkCustomRulerMark **, gdouble, gdouble, gint);
gint metric_get_frames (GtkCustomRulerMark **, gdouble, gdouble, gint);
gint metric_get_minsec (GtkCustomRulerMark **, gdouble, gdouble, gint);
Gtk::Widget *_ruler_separator;
- GtkWidget *_smpte_ruler;
+ GtkWidget *_timecode_ruler;
GtkWidget *_bbt_ruler;
GtkWidget *_frames_ruler;
GtkWidget *_minsec_ruler;
- Gtk::Widget *smpte_ruler;
+ Gtk::Widget *timecode_ruler;
Gtk::Widget *bbt_ruler;
Gtk::Widget *frames_ruler;
Gtk::Widget *minsec_ruler;
Gtk::Label minsec_label;
Gtk::Label bbt_label;
- Gtk::Label smpte_label;
+ Gtk::Label timecode_label;
Gtk::Label frame_label;
Gtk::Label tempo_label;
Gtk::Label meter_label;
Gtk::HBox bottom_hbox;
Gtk::Table edit_packer;
- Gtk::VScrollbar edit_vscrollbar;
Gtk::Adjustment vertical_adjustment;
Gtk::Adjustment horizontal_adjustment;
void controls_layout_size_request (Gtk::Requisition*);
sigc::connection controls_layout_size_request_connection;
- Gtk::HScrollbar edit_hscrollbar;
- bool _dragging_hscrollbar;
-
- void reset_hscrollbar_stepping ();
-
- bool hscrollbar_button_press (GdkEventButton*);
- bool hscrollbar_button_release (GdkEventButton*);
- void hscrollbar_allocate (Gtk::Allocation &alloc);
+ void horizontal_scroll_left ();
+ void horizontal_scroll_right ();
double _canvas_width;
double _canvas_height;
void end_location_changed (ARDOUR::Location*);
- /* named selections */
-
- struct NamedSelectionDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
- NamedSelectionDisplayModelColumns() {
- add (text);
- add (selection);
- }
- Gtk::TreeModelColumn<Glib::ustring> text;
- Gtk::TreeModelColumn<ARDOUR::NamedSelection*> selection;
- };
-
- NamedSelectionDisplayModelColumns named_selection_columns;
- Glib::RefPtr<Gtk::TreeStore> named_selection_model;
-
- Gtkmm2ext::DnDTreeView<ARDOUR::NamedSelection*> named_selection_display;
- Gtk::ScrolledWindow named_selection_scroller;
-
- void create_named_selection ();
- void paste_named_selection (float times);
- void remove_selected_named_selections ();
-
- void handle_new_named_selection ();
- void add_named_selection_to_named_selection_display (ARDOUR::NamedSelection&);
- void redisplay_named_selections ();
-
- bool named_selection_display_button_release (GdkEventButton *ev);
- bool named_selection_display_key_release (GdkEventKey *ev);
- void named_selection_display_selection_changed ();
-
/* track views */
TrackViewList track_views;
std::pair<TimeAxisView*, ARDOUR::layer_t> trackview_by_y_position (double);
- TimeAxisView* axis_view_from_route (ARDOUR::Route *) const;
- TrackSelection axis_views_from_routes (std::list<ARDOUR::Route *>) const;
+ TimeAxisView* axis_view_from_route (boost::shared_ptr<ARDOUR::Route>) const;
- TrackSelection get_tracks_for_range_action () const;
+ TrackViewList get_tracks_for_range_action () const;
static Gdk::Cursor* cross_hair_cursor;
static Gdk::Cursor* trimmer_cursor;
sigc::connection scroll_connection;
nframes64_t last_update_frame;
- void center_screen (nframes64_t);
void center_screen_internal (nframes64_t, float);
void update_current_screen ();
void temporal_zoom_selection ();
void temporal_zoom_region (bool both_axes);
- void toggle_zoom_region (bool both_axes);
- bool zoomed_to_region;
+ void zoom_to_region (bool both_axes);
void temporal_zoom_session ();
void temporal_zoom (gdouble scale);
void temporal_zoom_by_frame (nframes64_t start, nframes64_t end, const std::string & op);
/* import specific info */
- struct EditorImportStatus : public ARDOUR::Session::ImportStatus {
+ struct EditorImportStatus : public ARDOUR::ImportStatus {
Editing::ImportMode mode;
nframes64_t pos;
int target_tracks;
void extend_selection_to_end_of_region (bool next);
void extend_selection_to_start_of_region (bool previous);
- Editing::SnapType snap_type;
- Editing::SnapMode snap_mode;
+ Editing::SnapType _snap_type;
+ Editing::SnapMode _snap_mode;
/// Snap threshold in pixels
double snap_threshold;
void set_fade_out_active (bool);
std::set<boost::shared_ptr<ARDOUR::Playlist> > motion_frozen_playlists;
- RegionSelection pre_drag_region_selection;
bool _dragging_playhead;
bool _dragging_edit_point;
void editor_mixer_button_toggled ();
void editor_list_button_toggled ();
- AudioClock edit_point_clock;
AudioClock zoom_range_clock;
Gtk::Button zoom_in_button;
Gtk::Button zoom_out_button;
void zoom_adjustment_changed();
- void edit_point_clock_changed();
-
void setup_toolbar ();
Gtkmm2ext::TearOff* tools_tearoff;
EditorRoutes* _routes;
EditorRegions* _regions;
EditorSnapshots* _snapshots;
+ EditorLocations* _locations;
/* diskstream/route display management */
Glib::RefPtr<Gdk::Pixbuf> rec_enabled_icon;
~State ();
};
- void store_state (State&) const;
- void restore_state (State *);
-
void instant_save ();
boost::shared_ptr<ARDOUR::AudioRegion> last_audition_region;
bool show_editor_mixer_when_tracks_arrive;
Gtk::VBox current_mixer_strip_vbox;
void cms_new (boost::shared_ptr<ARDOUR::Route>);
- void cms_deleted ();
void current_mixer_strip_hidden ();
- void current_mixer_strip_removed ();
void detach_tearoff (Gtk::Box* b, Gtk::Window* w);
void reattach_tearoff (Gtk::Box* b, Gtk::Window* w, int32_t n);
int playlist_deletion_dialog (boost::shared_ptr<ARDOUR::Playlist>);
- std::vector<sigc::connection> session_connections;
+ PBD::ScopedConnectionList session_connections;
/* tracking step changes of track height */
std::vector<std::string> edit_point_strings;
void selected_marker_moved (ARDOUR::Location*);
- sigc::connection edit_point_clock_connection_a;
- sigc::connection edit_point_clock_connection_b;
bool get_edit_op_range (nframes64_t& start, nframes64_t& end) const;
- void get_regions_at (RegionSelection&, nframes64_t where, const TrackSelection& ts) const;
- void get_regions_after (RegionSelection&, nframes64_t where, const TrackSelection& ts) const;
+ void get_regions_at (RegionSelection&, nframes64_t where, const TrackViewList& ts) const;
+ void get_regions_after (RegionSelection&, nframes64_t where, const TrackViewList& ts) const;
void get_regions_for_action (RegionSelection&, bool allow_entered = false, bool allow_edit_position = true);
void select_prev_route ();
void snap_to_internal (nframes64_t& first, int32_t direction = 0, bool for_mark = false);
+ void timecode_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 (TrackSelection &);
+ void fit_tracks (TrackViewList &);
void fit_selected_tracks ();
void set_track_height (uint32_t h);
void located ();
bool _pending_locate_request;
+ Gtk::HBox _summary_hbox;
EditorSummary* _summary;
void region_view_added (RegionView *);