diff options
Diffstat (limited to 'libs/canvas/canvas/item.h')
-rw-r--r-- | libs/canvas/canvas/item.h | 49 |
1 files changed, 36 insertions, 13 deletions
diff --git a/libs/canvas/canvas/item.h b/libs/canvas/canvas/item.h index bf752f66db..ced94e1e3b 100644 --- a/libs/canvas/canvas/item.h +++ b/libs/canvas/canvas/item.h @@ -32,12 +32,12 @@ #include "canvas/types.h" #include "canvas/fill.h" #include "canvas/outline.h" +#include "canvas/lookup_table.h" namespace ArdourCanvas { class Canvas; -class Group; class Rect; class ScrollGroup; @@ -56,8 +56,8 @@ class LIBCANVAS_API Item : public Fill, public Outline { public: Item (Canvas *); - Item (Group *); - Item (Group *, Duple const& p); + Item (Item *); + Item (Item *, Duple const& p); virtual ~Item (); void redraw () const; @@ -80,13 +80,11 @@ public: * * Note that Item::add_items_at_window_point() is only intended to be * called on items already looked up in a LookupTable (i.e. by a - * parent group) and thus known to cover @param point already. + * parent) and thus known to cover @param point already. * - * Derived classes may add more items than themselves (e.g. Group). + * Derived classes may add more items than themselves (e.g. containers). */ - virtual void add_items_at_point (Duple /*point*/, std::vector<Item const *>& items) const { - items.push_back (this); - } + virtual void add_items_at_point (Duple /*point*/, std::vector<Item const *>& items) const; virtual bool covers (Duple const &) const; @@ -97,10 +95,10 @@ public: void ungrab (); void unparent (); - void reparent (Group *); + void reparent (Item *); /** @return Parent group, or 0 if this is the root group */ - Group* parent () const { + Item* parent () const { return _parent; } @@ -124,8 +122,6 @@ public: void set_y_position (Coord); void move (Duple); - virtual void scroll_to (Duple const&) {} - /** @return Position of this item in the parent's coordinates */ Duple position () const { return _position; @@ -187,6 +183,21 @@ public: void set_data (std::string const &, void *); void* get_data (std::string const &) const; + + /* nested item ("grouping") API */ + void add (Item *); + void remove (Item *); + void clear (bool with_delete = false); + std::list<Item*> const & items () const { + return _items; + } + void raise_child_to_top (Item *); + void raise_child (Item *, int); + void lower_child_to_bottom (Item *); + void child_changed (); + + static int default_items_per_cell; + /* This is a sigc++ signal because it is solely concerned with GUI stuff and is thus single-threaded @@ -243,7 +254,7 @@ protected: Canvas* _canvas; /** parent group; may be 0 if we are the root group or if we have been unparent()ed */ - Group* _parent; + Item* _parent; /** scroll parent group; may be 0 if we are the root group or if we have been unparent()ed */ ScrollGroup* _scroll_parent; /** position of this item in parent coordinates */ @@ -261,6 +272,18 @@ protected: /* XXX: this is a bit grubby */ std::map<std::string, void *> _data; + /* nesting ("grouping") API */ + + void invalidate_lut () const; + void clear_items (bool with_delete); + + void ensure_lut () const; + mutable LookupTable* _lut; + /* our items, from lowest to highest in the stack */ + std::list<Item*> _items; + + void add_child_bounding_boxes() const; + private: void init (); |