/** * PANDA 3D SOFTWARE * Copyright (c) Carnegie Mellon University. All rights reserved. * * All use of this software is subject to the terms of the revised BSD * license. You should have received a copy of this license along * with this source code in a file named "LICENSE." * * @file mouseWatcherBase.h * @author rdb * @date 2014-01-13 */ #ifndef MOUSEWATCHERBASE_H #define MOUSEWATCHERBASE_H #include "pandabase.h" #include "mouseWatcherRegion.h" #include "pointerTo.h" #include "pvector.h" #include "nodePath.h" #include "lightMutex.h" #include "ordered_vector.h" /** * This represents a collection of MouseWatcherRegions that may be managed as * a group. This is the base class for both MouseWatcherGroup and * MouseWatcher, and exists so that we don't have to make MouseWatcher inherit * from ReferenceCount more than once. */ class EXPCL_PANDA_TFORM MouseWatcherBase { public: MouseWatcherBase(); virtual ~MouseWatcherBase(); PUBLISHED: void add_region(PT(MouseWatcherRegion) region); bool has_region(MouseWatcherRegion *region) const; bool remove_region(MouseWatcherRegion *region); MouseWatcherRegion *find_region(const std::string &name) const; void clear_regions(); INLINE void sort_regions(); INLINE bool is_sorted() const; MAKE_PROPERTY(sorted, is_sorted); size_t get_num_regions() const; MouseWatcherRegion *get_region(size_t n) const; MAKE_SEQ(get_regions, get_num_regions, get_region); MAKE_SEQ_PROPERTY(regions, get_num_regions, get_region); void output(std::ostream &out) const; void write(std::ostream &out, int indent_level = 0) const; #ifndef NDEBUG void show_regions(const NodePath &render2d, const std::string &bin_name, int draw_order); void set_color(const LColor &color); void hide_regions(); void update_regions(); #endif // NDEBUG protected: void do_sort_regions(); bool do_remove_region(MouseWatcherRegion *region); #ifndef NDEBUG virtual void do_show_regions(const NodePath &render2d, const std::string &bin_name, int draw_order); virtual void do_hide_regions(); void do_update_regions(); #endif // NDEBUG protected: typedef ov_set< PT(MouseWatcherRegion) > Regions; Regions _regions; bool _sorted; // This mutex protects the above list of regions, as well as the below list // of vizzes. It is also referenced directly by MouseWatcher, a derived // class. LightMutex _lock; private: #ifndef NDEBUG PandaNode *make_viz_region(MouseWatcherRegion *region); typedef pvector< PT(PandaNode) > Vizzes; Vizzes _vizzes; bool _show_regions; NodePath _show_regions_root; LColor _color; #endif // NDEBUG public: static TypeHandle get_class_type() { return _type_handle; } static void init_type() { register_type(_type_handle, "MouseWatcherBase"); } private: static TypeHandle _type_handle; friend class MouseWatcher; friend class BlobWatcher; }; #include "mouseWatcherBase.I" #endif