fix background of ArdourButtons with no Body
[ardour.git] / gtk2_ardour / time_axis_view.h
index 682514acfae51cf6b2e76bdc6ac84c226bcda795..1920d668a72e40f7b25f3b698bdbeb20a8720c43 100644 (file)
@@ -39,7 +39,9 @@
 #include "pbd/signals.h"
 
 #include "ardour/types.h"
+#include "ardour/presentation_info.h"
 #include "ardour/region.h"
+
 #include "evoral/Parameter.hpp"
 
 #include "canvas/line.h"
@@ -55,6 +57,7 @@ namespace ARDOUR {
        class Session;
        class RouteGroup;
        class Playlist;
+       class Stripable;
 }
 
 namespace Gtk {
@@ -78,6 +81,8 @@ class RegionView;
 class GhostRegion;
 class StreamView;
 class ArdourDialog;
+class ItemCounts;
+class PasteContext;
 
 /** Abstract base class for time-axis views (horizontal editor 'strips')
  *
@@ -98,15 +103,17 @@ class TimeAxisView : public virtual AxisView
 
        static PBD::Signal1<void,TimeAxisView*> CatchDeletion;
 
+       static void setup_sizes ();
+
+       virtual boost::shared_ptr<ARDOUR::Stripable> stripable() const = 0;
+       virtual ARDOUR::PresentationInfo const & presentation_info () const = 0;
+
        /** @return index of this TimeAxisView within its parent */
        int order () const { return _order; }
 
        /** @return maximum allowable value of order */
        static int max_order () { return _max_order; }
 
-       virtual void enter_internal_edit_mode () {}
-       virtual void leave_internal_edit_mode () {}
-
        ArdourCanvas::Container* canvas_display () { return _canvas_display; }
        ArdourCanvas::Container* ghost_group () { return _ghost_group; }
 
@@ -122,7 +129,7 @@ class TimeAxisView : public virtual AxisView
 
        uint32_t current_height() const { return height; }
 
-       void idle_resize (uint32_t);
+       void idle_resize (int32_t);
 
        virtual guint32 show_at (double y, int& nth, Gtk::VBox *parent);
        virtual void hide ();
@@ -132,7 +139,7 @@ class TimeAxisView : public virtual AxisView
        /** @return true if hidden, otherwise false */
        bool hidden () const { return _hidden; }
 
-       void set_selected (bool);
+       virtual bool selectable() const { return true; }
 
        /**
         * potential handler for entered events
@@ -141,7 +148,13 @@ class TimeAxisView : public virtual AxisView
        virtual void entered () {}
        virtual void exited () {}
 
-       virtual void set_height (uint32_t h);
+       enum TrackHeightMode {
+               OnlySelf,
+               TotalHeight,
+               HeightPerLane
+       };
+
+       virtual void set_height (uint32_t h, TrackHeightMode m = OnlySelf);
        void set_height_enum (Height, bool apply_to_selection = false);
        void reset_height();
 
@@ -165,7 +178,15 @@ class TimeAxisView : public virtual AxisView
        /* editing operations */
 
        virtual void cut_copy_clear (Selection&, Editing::CutCopyOp) {}
-       virtual bool paste (ARDOUR::framepos_t, float /*times*/, Selection&, size_t /*nth*/) { return false; }
+
+       /** Paste a selection.
+        *  @param pos Position to paste to (session frames).
+        *  @param selection Selection to paste.
+        *  @param ctx Paste context.
+        */
+       virtual bool paste (ARDOUR::framepos_t pos,
+                           const Selection&   selection,
+                           PasteContext&      ctx) { return false; }
 
        virtual void set_selected_regionviews (RegionSelection&) {}
        virtual void set_selected_points (PointSelection&) {}
@@ -178,7 +199,7 @@ class TimeAxisView : public virtual AxisView
 
        void order_selection_trims (ArdourCanvas::Item *item, bool put_start_on_top);
 
-       virtual void get_selectables (ARDOUR::framepos_t, ARDOUR::framepos_t, double, double, std::list<Selectable*>&);
+       virtual void get_selectables (ARDOUR::framepos_t, ARDOUR::framepos_t, double, double, std::list<Selectable*>&, bool within = false);
        virtual void get_inverted_selectables (Selection&, std::list<Selectable *>& results);
 
        void add_ghost (RegionView*);
@@ -214,9 +235,7 @@ class TimeAxisView : public virtual AxisView
        Gtk::VBox              time_axis_vbox;
        Gtk::HBox              time_axis_hbox;
        Gtk::Frame             time_axis_frame;
-       Gtk::HBox              name_hbox;
        Gtk::HBox              top_hbox;
-       Gtk::Label             name_label;
        Gtk::Fixed             scroomer_placeholder;
        bool                  _name_editing;
        uint32_t               height;  /* in canvas units */
@@ -239,17 +258,12 @@ class TimeAxisView : public virtual AxisView
 
        virtual bool can_edit_name() const;
 
-       bool name_entry_key_release (GdkEventKey *ev);
-       bool name_entry_key_press (GdkEventKey *ev);
-       bool name_entry_focus_out (GdkEventFocus *ev);
-
-       Gtk::Entry* name_entry;
        void begin_name_edit ();
-       void end_name_edit (int);
+       void end_name_edit (std::string, int);
 
        /* derived classes can override these */
 
-       virtual void name_entry_changed ();
+       virtual bool name_entry_changed (std::string const&);
 
        /** Handle mouse relaese on our LHS control name ebox.
         *
@@ -292,14 +306,18 @@ class TimeAxisView : public virtual AxisView
 
        void build_size_menu ();
 
-private:
+  protected:
+       void show_selected ();
+
+  private:
        Gtk::VBox*            control_parent;
        int                  _order;
        uint32_t             _effective_height;
        double               _resize_drag_start;
+       bool                 _did_resize;
        GdkCursor*           _preresize_cursor;
        bool                 _have_preresize_cursor;
-       bool                  _ebox_release_can_act;
+       bool                 _ebox_release_can_act;
 
        static uint32_t button_height;
        static uint32_t extra_height;