X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ftime_axis_view.h;h=31a6e07a80fd41c269c01f89ae7fb432e5fae563;hb=76c25a4a4459b8e550c3c687458d04db0beaee77;hp=754a7bbab7aab724ee661137fdf18bc060eaa1b7;hpb=e493b2b7c4fbbbfc457f02babf9546289b430177;p=ardour.git diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index 754a7bbab7..31a6e07a80 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -24,8 +24,14 @@ #include #include -#include -#include +#include +#include +#include +#include +#include +#include + +#include #include #include @@ -34,6 +40,8 @@ #include "axis_view.h" #include "enums.h" #include "editing.h" +#include "canvas.h" +#include "color.h" namespace ARDOUR { class Session; @@ -43,8 +51,12 @@ namespace ARDOUR { class Playlist; } +namespace Gtk { + class Menu; +} + class PublicEditor; -class AudioRegionSelection; +class RegionSelection; class TimeSelection; class PointSelection; class TimeAxisViewItem; @@ -60,34 +72,45 @@ class Selectable; */ class TimeAxisView : public virtual AxisView { + private: + enum NamePackingBits { + NameLabelPacked = 0x1, + NameEntryPacked = 0x2 + }; + public: enum TrackHeight { - /* canvas units. they need to be odd - valued so that there is a precise - middle. - */ - Largest = 301, - Large = 201, - Larger = 101, - Normal = 51, - Smaller = 31, - Small = 21 + Largest, + Large, + Larger, + Normal, + Smaller, + Small }; + + static uint32_t hLargest; + static uint32_t hLarge; + static uint32_t hLarger; + static uint32_t hNormal; + static uint32_t hSmaller; + static uint32_t hSmall; - TimeAxisView(ARDOUR::Session& sess, PublicEditor& ed, TimeAxisView* parent, Gtk::Widget *canvas); + static uint32_t height_to_pixels (TrackHeight); + + TimeAxisView(ARDOUR::Session& sess, PublicEditor& ed, TimeAxisView* parent, ArdourCanvas::Canvas& canvas); virtual ~TimeAxisView (); /* public data: XXX create accessor/mutators for these ?? */ PublicEditor& editor; - - guint32 height; /* in canvas units */ - guint32 effective_height; /* in canvas units */ + + TrackHeight height_style; + uint32_t height; /* in canvas units */ + uint32_t effective_height; /* in canvas units */ double y_position; int order; - - GtkCanvasItem *canvas_display; + ArdourCanvas::Group *canvas_display; Gtk::VBox *control_parent; /* The Standard LHS Controls */ @@ -99,7 +122,12 @@ class TimeAxisView : public virtual AxisView Gtk::VBox controls_vbox; Gtk::HBox name_hbox; Gtk::Frame name_frame; - Gtk::Entry name_entry; + Gtkmm2ext::FocusEntry name_entry; + + void hide_name_label (); + void hide_name_entry (); + void show_name_label (); + void show_name_entry (); /** * Display this TrackView as the nth component of the parent box, at y. @@ -128,15 +156,19 @@ class TimeAxisView : public virtual AxisView virtual void entered () {} virtual void exited () {} - /** - * Sets the height of this TrackView to one of ths TrackHeghts - * - * @param h the TrackHeight value to set - */ virtual void set_height (TrackHeight h); void reset_height(); + /** - * Steps through the defined TrackHeights for this TrackView. + * Returns a TimeAxisView* if this object covers y, or one of its children does. + * If the covering object is a child axis, then the child is returned. + * Returns 0 otherwise. + */ + + TimeAxisView* covers_y_position (double y); + + /** + * Steps through the defined heights for this TrackView. * Sets bigger to true to step up in size, set to fals eot step smaller. * * @param bigger true if stepping should increase in size, false otherwise @@ -144,13 +176,13 @@ class TimeAxisView : public virtual AxisView virtual void step_height (bool bigger); virtual ARDOUR::RouteGroup* edit_group() const { return 0; } - virtual ARDOUR::Playlist* playlist() const { return 0; } + virtual boost::shared_ptr playlist() const { return boost::shared_ptr (); } virtual void set_samples_per_unit (double); virtual void show_selection (TimeSelection&); virtual void hide_selection (); virtual void reshow_selection (TimeSelection&); - virtual void show_timestretch (jack_nframes_t start, jack_nframes_t end); + virtual void show_timestretch (nframes_t start, nframes_t end); virtual void hide_timestretch (); virtual void hide_dependent_views (TimeAxisViewItem&) {} @@ -159,18 +191,18 @@ class TimeAxisView : public virtual AxisView /* editing operations */ virtual bool cut_copy_clear (Selection&, Editing::CutCopyOp) { return false; } - virtual bool paste (jack_nframes_t, float times, Selection&, size_t nth) { return false; } + virtual bool paste (nframes_t, float times, Selection&, size_t nth) { return false; } - virtual void set_selected_regionviews (AudioRegionSelection&) {} + virtual void set_selected_regionviews (RegionSelection&) {} virtual void set_selected_points (PointSelection&) {} - virtual ARDOUR::Region* find_next_region (jack_nframes_t pos, ARDOUR::RegionPoint, int32_t dir) { - return 0; + virtual boost::shared_ptr find_next_region (nframes_t pos, ARDOUR::RegionPoint, int32_t dir) { + return boost::shared_ptr (); } - void order_selection_trims (GtkCanvasItem *item, bool put_start_on_top); + void order_selection_trims (ArdourCanvas::Item *item, bool put_start_on_top); - virtual void get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list& results); + virtual void get_selectables (nframes_t start, nframes_t end, double top, double bot, list& results); virtual void get_inverted_selectables (Selection&, list& results); /* state/serialization management */ @@ -183,33 +215,34 @@ class TimeAxisView : public virtual AxisView /* call this on the parent */ - virtual XMLNode* get_child_xml_node (std::string childname) { return 0; } + virtual XMLNode* get_child_xml_node (const string & childname) { return 0; } protected: string controls_base_unselected_name; string controls_base_selected_name; - /** - * Handle mouse press on our LHS control name entry. - * - * @param ev the event - */ - virtual gint 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 gint 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. * *@ param ev the event */ - virtual gint controls_ebox_button_release (GdkEventButton *ev); + virtual bool controls_ebox_button_release (GdkEventButton *ev); + virtual bool controls_ebox_scroll (GdkEventScroll *ev); /** * Displays the standard LHS control menu at when. @@ -229,16 +262,16 @@ class TimeAxisView : public virtual AxisView * Do anything that needs to be done to dynamically reset * the LHS control menu. */ - virtual gint handle_display_menu_map_event (GdkEventAny *ev) { return FALSE; } + virtual bool handle_display_menu_map_event (GdkEventAny *ev) { return false; } /** - * Build the standard LHS control size menu for the default TrackHeight options. + * Build the standard LHS control size menu for the default heights options. * */ virtual void build_size_menu(); /** - * Displays the standard LHS controls size menu for the TrackHeight. + * Displays the standard LHS controls size menu for the track heights * * @parem when the popup activation time */ @@ -272,7 +305,7 @@ class TimeAxisView : public virtual AxisView /* selection display */ - GtkCanvasItem *selection_group; + ArdourCanvas::Group *selection_group; list free_selection_rects; list used_selection_rects; @@ -283,6 +316,13 @@ class TimeAxisView : public virtual AxisView bool _hidden; bool _has_state; + NamePackingBits name_packing; + + static void compute_controls_size_info (); + static bool need_size_info; + + void set_height_pixels (uint32_t h); + void color_handler (ColorID, uint32_t); }; /* class TimeAxisView */