source: trunk/SL/CB/rootAsWin.h

Last change on this file was 10349, checked in by westram, 11 years ago
  • reintegrated branch 'dbui'
    • change detachment of item-infowindows (removed several hacks)
    • AW_detach_information and Awar_Callback_Info are now obsolete
    • generalized a bit more of item-dependant code
File size: 2.4 KB
Line 
1// ============================================================ //
2//                                                              //
3//   File      : rootAsWin.h                                    //
4//   Purpose   :                                                //
5//                                                              //
6//   Coded by Ralf Westram (coder@reallysoft.de) in July 2013   //
7//   Institute of Microbiology (Technical University Munich)    //
8//   http://www.arb-home.de/                                    //
9//                                                              //
10// ============================================================ //
11
12#ifndef ROOTASWIN_H
13#define ROOTASWIN_H
14
15#ifndef CB_H
16#include <cb.h>
17#endif
18
19class RootAsWindowCallback {
20    // Allows to use any RootCallback where a WindowCallback is expected.
21
22    RootCallback rcb;
23    void call(AW_window *aww) const { rcb(aww->get_root()); }
24    RootAsWindowCallback(const RootCallback& rcb_) : rcb(rcb_) {}
25
26    static void window_cb(AW_window *aww, const RootAsWindowCallback *rawcb) { rawcb->call(aww); }
27    static void delete_raw_cb(RootAsWindowCallback *raw_cb) { delete raw_cb; }
28
29    template<typename T>
30    static void call_root_as_win(AW_window *aww, void (*root_cb)(AW_root*, T), T t) { root_cb(aww->get_root(), t); }
31
32    static void call_root_as_win(AW_window *aww, void (*root_cb)(AW_root*)) { root_cb(aww->get_root()); }
33
34public:
35
36    static WindowCallback reuse(const RootCallback& rcb) {
37        // It's not recommended to use this widely, mainly this is a helper for refactoring.
38        // Normally you should better adapt your callback-type.
39        //
40        // Use it in cases where a user-provided callback has to be used
41        // both as RootCallback and as WindowCallback.
42
43        return makeWindowCallback(window_cb, delete_raw_cb, new RootAsWindowCallback(rcb));
44    }
45
46    template<typename T>
47    static WindowCallback simple(void (*root_cb)(AW_root*, T), T t) {
48        // usable for simple root callbacks with only one argument
49        // (automatically creates one general wrapper function for each type T)
50        return makeWindowCallback(call_root_as_win, root_cb, t);
51    }
52
53    static WindowCallback simple(void (*root_cb)(AW_root*)) {
54        // usable for simple root callbacks with no argument
55        return makeWindowCallback(call_root_as_win, root_cb);
56    }
57};
58
59#else
60#error rootAsWin.h included twice
61#endif // ROOTASWIN_H
Note: See TracBrowser for help on using the repository browser.