00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef MOUSEWATCHERGROUP_H
00016 #define MOUSEWATCHERGROUP_H
00017
00018 #include "pandabase.h"
00019 #include "mouseWatcherRegion.h"
00020
00021 #include "pointerTo.h"
00022 #include "referenceCount.h"
00023 #include "pvector.h"
00024 #include "nodePath.h"
00025 #include "lightMutex.h"
00026
00027
00028
00029
00030
00031
00032 class EXPCL_PANDA_TFORM MouseWatcherGroup : virtual public ReferenceCount {
00033 public:
00034 MouseWatcherGroup();
00035 virtual ~MouseWatcherGroup();
00036
00037 PUBLISHED:
00038 void add_region(MouseWatcherRegion *region);
00039 bool has_region(MouseWatcherRegion *region) const;
00040 bool remove_region(MouseWatcherRegion *region);
00041 MouseWatcherRegion *find_region(const string &name) const;
00042 void clear_regions();
00043
00044 void sort_regions();
00045 bool is_sorted() const;
00046
00047 int get_num_regions() const;
00048 MouseWatcherRegion *get_region(int n) const;
00049 MAKE_SEQ(get_regions, get_num_regions, get_region);
00050
00051 void output(ostream &out) const;
00052 void write(ostream &out, int indent_level = 0) const;
00053
00054 #ifndef NDEBUG
00055 void show_regions(const NodePath &render2d,
00056 const string &bin_name, int draw_order);
00057 void set_color(const LColor &color);
00058 void hide_regions();
00059
00060 void update_regions();
00061 #endif // NDEBUG
00062
00063 protected:
00064 void do_sort_regions();
00065 bool do_remove_region(MouseWatcherRegion *region);
00066
00067 #ifndef NDEBUG
00068 virtual void do_show_regions(const NodePath &render2d,
00069 const string &bin_name, int draw_order);
00070 virtual void do_hide_regions();
00071 void do_update_regions();
00072 #endif // NDEBUG
00073
00074 protected:
00075 typedef pvector< PT(MouseWatcherRegion) > Regions;
00076 Regions _regions;
00077 bool _sorted;
00078
00079
00080
00081
00082 LightMutex _lock;
00083
00084 private:
00085 #ifndef NDEBUG
00086 PandaNode *make_viz_region(MouseWatcherRegion *region);
00087
00088 typedef pvector< PT(PandaNode) > Vizzes;
00089 Vizzes _vizzes;
00090
00091 bool _show_regions;
00092 NodePath _show_regions_root;
00093 LColor _color;
00094 #endif // NDEBUG
00095
00096 public:
00097 static TypeHandle get_class_type() {
00098 ReferenceCount::init_type();
00099 return _type_handle;
00100 }
00101 static void init_type() {
00102 register_type(_type_handle, "MouseWatcherGroup",
00103 ReferenceCount::get_class_type());
00104 }
00105
00106 private:
00107 static TypeHandle _type_handle;
00108
00109 friend class MouseWatcher;
00110 friend class BlobWatcher;
00111 };
00112
00113 #endif