X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Ftime_axis_view.h;h=299971f1ee1810d9c73e6a81bfc9a24f8ce98545;hb=4e4cb140a0713cabec624f13e86eaf9b375ab6c5;hp=e2b634c0646b3d6df72d1cbd3c081107f78ab091;hpb=1a3a77607768721f6834ddae09f532cdb6aec4a6;p=ardour.git diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h index e2b634c064..299971f1ee 100644 --- a/gtk2_ardour/time_axis_view.h +++ b/gtk2_ardour/time_axis_view.h @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_gtk_time_axis_h__ @@ -24,8 +23,14 @@ #include #include -#include -#include +#include +#include +#include +#include +#include +#include + +#include #include #include @@ -34,6 +39,8 @@ #include "axis_view.h" #include "enums.h" #include "editing.h" +#include "canvas.h" +#include "color.h" namespace ARDOUR { class Session; @@ -43,52 +50,65 @@ namespace ARDOUR { class Playlist; } +namespace Gtk { + class Menu; +} + class PublicEditor; -class AudioRegionSelection; +class RegionSelection; class TimeSelection; class PointSelection; class TimeAxisViewItem; class Selection; class Selectable; -/** - * TimeAxisView defines the abstract base class for time-axis views. +/** Abstract base class for time-axis views (horizontal editor 'strips') * * This class provides the basic LHS controls and display methods. This should be * extended to create functional time-axis based views. - * */ 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; + + static uint32_t height_to_pixels (TrackHeight); - TimeAxisView(ARDOUR::Session& sess, PublicEditor& ed, TimeAxisView* parent, Gtk::Widget *canvas); + 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 */ - double y_position; - int order; - - GnomeCanvasItem *canvas_display; - Gtk::VBox *control_parent; + TrackHeight height_style; + uint32_t height; /* in canvas units */ + uint32_t effective_height; /* in canvas units */ + double y_position; + int order; + + ArdourCanvas::Group *canvas_display; + Gtk::VBox *control_parent; /* The Standard LHS Controls */ Gtk::Frame controls_frame; @@ -99,10 +119,14 @@ 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. + /** Display this TrackView as the nth component of the parent box, at y. * * @param y * @param nth @@ -113,9 +137,7 @@ class TimeAxisView : public virtual AxisView bool touched (double top, double bot); - /** - * Hides this TrackView - */ + /** Hides this TrackView */ virtual void hide (); bool hidden() const { return _hidden; } @@ -128,15 +150,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(); + + /** + * 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 TrackHeights for this TrackView. + * 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 +170,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 +185,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 (GnomeCanvasItem *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,69 +209,60 @@ 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 bool 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 bool 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. + /** 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. + /** Display the standard LHS control menu at when. * * @param when the popup activation time */ virtual void popup_display_menu (guint32 when); - /** - * Build the standard LHS control menu. + /** Build the standard LHS control menu. * Subclasses should extend this method to add their own menu options. - * */ virtual void build_display_menu (); - /** - * Do anything that needs to be done to dynamically reset - * the LHS control menu. + /** Do whatever 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 + * @param when the popup activation time */ void popup_size_menu(guint32 when); - /** - * Handle the size option of out main menu. + /** Handle the size option of our main menu. * * @param ev the event */ @@ -260,8 +277,7 @@ class TimeAxisView : public virtual AxisView TimeAxisView* parent; - /* find the parent with state */ - + /** Find the parent with state */ TimeAxisView* get_parent_with_state(); std::vector children; @@ -272,7 +288,7 @@ class TimeAxisView : public virtual AxisView /* selection display */ - GnomeCanvasItem *selection_group; + ArdourCanvas::Group *selection_group; list free_selection_rects; list used_selection_rects; @@ -283,6 +299,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 (); }; /* class TimeAxisView */