Go to the documentation of this file.00001
00002 #ifndef vgui_satellite_tableau_h_
00003 #define vgui_satellite_tableau_h_
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <vgui/vgui_menu.h>
00018 #include <vgui/vgui_tableau.h>
00019 #include <vgui/vgui_tableau_sptr.h>
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 template <class object, class data>
00088 struct vgui_satellite_tableau_t : public vgui_tableau
00089 {
00090 typedef bool (object::*method)(vgui_event const &, data );
00091
00092
00093
00094 object *p;
00095
00096 method m;
00097
00098
00099
00100
00101
00102
00103
00104
00105 data d;
00106
00107
00108 vcl_string n;
00109
00110
00111
00112 vgui_satellite_tableau_t(object *p_, method m_, data const &d_,
00113 vcl_string const &n_ = "")
00114 : p(p_), m(m_), d(d_), n(n_) { }
00115
00116 bool handle(vgui_event const &e) { return (p && m) && (p->*m)(e, d); }
00117
00118 vcl_string type_name() const
00119 { return vcl_string("vgui_satellite_tableau_t[") + n + vcl_string("]"); }
00120
00121 vgui_menu a_menu;
00122 void add_popup(vgui_menu &mnu) { mnu.include(a_menu); }
00123
00124 protected:
00125 ~vgui_satellite_tableau_t() { p = 0; m = 0; }
00126 };
00127
00128
00129
00130
00131
00132 template <class object>
00133 struct vgui_satellite_tableau : public vgui_tableau
00134 {
00135 typedef bool (object::*method)(vgui_event const &);
00136
00137
00138
00139 object *p;
00140
00141 method m;
00142
00143
00144 vcl_string n;
00145
00146
00147
00148 vgui_satellite_tableau(object *p_, method m_, vcl_string const &n_ = "")
00149 : p(p_), m(m_), n(n_) { }
00150
00151 bool handle(vgui_event const &e) { return (p && m) && (p->*m)(e); }
00152
00153 vcl_string type_name() const
00154 { return vcl_string("vgui_satellite_tableau[") + n + vcl_string("]"); }
00155
00156 protected:
00157 ~vgui_satellite_tableau() { p = 0; m = 0; }
00158 };
00159
00160
00161 #ifdef VCL_SUNPRO_CC_50
00162 # define quirk(x) , x
00163 #else
00164 # define quirk(x)
00165 #endif
00166
00167 template <class object, class data>
00168 struct vgui_satellite_tableau_t_new : public vgui_tableau_sptr_t<vgui_satellite_tableau_t<object, data> quirk(vgui_tableau_sptr)>
00169 {
00170
00171 typedef vgui_satellite_tableau_t<object, data> impl;
00172 typedef vgui_tableau_sptr_t<impl quirk(vgui_tableau_sptr)> base;
00173 typedef typename impl::method method;
00174 vgui_satellite_tableau_t_new(object *p, method m, data const &d,
00175 vcl_string const&n=""):base(new impl(p,m,d,n)) {}
00176 };
00177
00178
00179 template <class object>
00180 struct vgui_satellite_tableau_new : public vgui_tableau_sptr_t<vgui_satellite_tableau<object> quirk(vgui_tableau_sptr)>
00181 {
00182
00183 typedef vgui_satellite_tableau<object> impl;
00184 typedef vgui_tableau_sptr_t<impl quirk(vgui_tableau_sptr)> base;
00185 typedef typename impl::method method;
00186 vgui_satellite_tableau_new(object *p, method m, vcl_string const &n = "")
00187 : base(new impl(p, m, n)) { }
00188 };
00189 #undef quirk
00190
00191
00192
00193 #undef VGUI_SATELLITE_T_INSTANTIATE
00194 #define VGUI_SATELLITE_T_INSTANTIATE(C, A) \
00195 template struct vgui_satellite_tableau_t<C, A >; \
00196 template struct vgui_satellite_tableau_t_new<C, A >
00197
00198 #undef VGUI_SATELLITE_INSTANTIATE
00199 #define VGUI_SATELLITE_INSTANTIATE(C) \
00200 template struct vgui_satellite_tableau<C >; \
00201 template struct vgui_satellite_tableau_new<C >
00202
00203 #endif // vgui_satellite_tableau_h_