1 | // ================================================================= // |
---|
2 | // // |
---|
3 | // File : aw_detach.hxx // |
---|
4 | // Purpose : // |
---|
5 | // // |
---|
6 | // Coded by Ralf Westram (coder@reallysoft.de) in September 2010 // |
---|
7 | // Institute of Microbiology (Technical University Munich) // |
---|
8 | // http://www.arb-home.de/ // |
---|
9 | // // |
---|
10 | // ================================================================= // |
---|
11 | |
---|
12 | #ifndef AW_DETACH_HXX |
---|
13 | #define AW_DETACH_HXX |
---|
14 | |
---|
15 | #ifndef AW_AWAR_HXX |
---|
16 | #include "aw_awar.hxx" |
---|
17 | #endif |
---|
18 | #ifndef AW_ROOT_HXX |
---|
19 | #include "aw_root.hxx" |
---|
20 | #endif |
---|
21 | |
---|
22 | class Awar_Callback_Info : virtual Noncopyable { |
---|
23 | // this structure is used to store all information on an awar callback |
---|
24 | // and can be used to remove or remap awar callback w/o knowing anything else |
---|
25 | |
---|
26 | AW_root *awr; |
---|
27 | Awar_CB callback; |
---|
28 | AW_CL cd1, cd2; |
---|
29 | char *awar_name; |
---|
30 | char *org_awar_name; |
---|
31 | |
---|
32 | void init (AW_root *awr_, const char *awar_name_, Awar_CB2 callback_, AW_CL cd1_, AW_CL cd2_); |
---|
33 | |
---|
34 | public: |
---|
35 | Awar_Callback_Info(AW_root *awr_, const char *awar_name_, Awar_CB2 callback_, AW_CL cd1_, AW_CL cd2_) { init(awr_, awar_name_, callback_, cd1_, cd2_); } |
---|
36 | Awar_Callback_Info(AW_root *awr_, const char *awar_name_, Awar_CB1 callback_, AW_CL cd1_) { init(awr_, awar_name_, (Awar_CB2)callback_, cd1_, 0); } |
---|
37 | Awar_Callback_Info(AW_root *awr_, const char *awar_name_, Awar_CB0 callback_) { init(awr_, awar_name_, (Awar_CB2)callback_, 0, 0); } |
---|
38 | |
---|
39 | ~Awar_Callback_Info() { |
---|
40 | delete awar_name; |
---|
41 | delete org_awar_name; |
---|
42 | } |
---|
43 | |
---|
44 | void add_callback() { awr->awar(awar_name)->add_callback(callback, cd1, cd2); } |
---|
45 | void remove_callback() { awr->awar(awar_name)->remove_callback(callback, cd1, cd2); } |
---|
46 | |
---|
47 | void remap(const char *new_awar); |
---|
48 | |
---|
49 | const char *get_awar_name() const { return awar_name; } |
---|
50 | const char *get_org_awar_name() const { return org_awar_name; } |
---|
51 | |
---|
52 | AW_root *get_root() { return awr; } |
---|
53 | }; |
---|
54 | |
---|
55 | class AW_detach_information { |
---|
56 | Awar_Callback_Info *cb_info; |
---|
57 | Widget detach_button; |
---|
58 | public: |
---|
59 | AW_detach_information(Awar_Callback_Info *cb_info_) |
---|
60 | : cb_info(cb_info_), detach_button(0) {} |
---|
61 | |
---|
62 | Awar_Callback_Info *get_cb_info() { return cb_info; } |
---|
63 | Widget get_detach_button() { aw_assert(detach_button); return detach_button; } |
---|
64 | void set_detach_button(Widget w) { detach_button = w; } |
---|
65 | }; |
---|
66 | |
---|
67 | #else |
---|
68 | #error aw_detach.hxx included twice |
---|
69 | #endif // AW_DETACH_HXX |
---|