Mercurial > dwindows
annotate dw.hpp @ 2914:8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
Only the lambda version currently, so will break on old compilers.
Only the main window and first page is implemented so far but...
the first page works on MacOS at least.
Fill in some missing pieces I ran into while porting dwtest to C++.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Wed, 28 Dec 2022 01:00:12 +0000 |
parents | 6981feb6210b |
children | fe43f8667d3d |
rev | line source |
---|---|
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1 /* Dynamic Windows C++ Language Bindings |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
2 * Copyright 2022 Brian Smith |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
3 * Recommends a C++11 compatible compiler. |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
4 */ |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
5 |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
6 #ifndef _HPP_DW |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
7 #define _HPP_DW |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
8 #include <dw.h> |
2907
afd2d900d1e9
C++: Need to include string.h for strlen() on some platforms.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2906
diff
changeset
|
9 #include <string.h> |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
10 |
2872
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
11 // Attempt to support compilers without nullptr type literal |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
12 #if __cplusplus >= 201103L |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
13 #define DW_CPP11 |
2872
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
14 #define DW_NULL nullptr |
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
15 #else |
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
16 #define DW_NULL NULL |
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
17 #endif |
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
18 |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
19 // Support Lambdas on C++11, Visual C 2010 or GCC 4.5 |
2897
fed0c2112985
C++: Fix a GCC and Clang warning in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2896
diff
changeset
|
20 #if defined(DW_CPP11) || (defined(_MSC_VER) && _MSC_VER >= 1600) || \ |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
21 (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4))) |
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
22 #define DW_LAMBDA |
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
23 #include <functional> |
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
24 #endif |
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
25 |
2873
0bbfb19022e7
C++: GCC prior to 4.7 does not support the override keyword.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2872
diff
changeset
|
26 // Attempt to allow compilation on GCC older than 4.7 |
0bbfb19022e7
C++: GCC prior to 4.7 does not support the override keyword.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2872
diff
changeset
|
27 #if defined(__GNUC__) && (__GNuC__ < 5 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)) |
0bbfb19022e7
C++: GCC prior to 4.7 does not support the override keyword.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2872
diff
changeset
|
28 #define override |
0bbfb19022e7
C++: GCC prior to 4.7 does not support the override keyword.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2872
diff
changeset
|
29 #endif |
0bbfb19022e7
C++: GCC prior to 4.7 does not support the override keyword.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2872
diff
changeset
|
30 |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
31 namespace DW |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
32 { |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
33 |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
34 // Forward declare these so they can be referenced |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
35 class Render; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
36 class Pixmap; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
37 class MenuItem; |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
38 class Window; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
39 |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
40 // Base handle class which allows opaque access to |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
41 // The base system handles |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
42 class Handle |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
43 { |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
44 protected: |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
45 void *handle; |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
46 void SetHandle(void *newhandle) { handle = newhandle; } |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
47 public: |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
48 void *GetHandle() { return handle; } |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
49 }; |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
50 |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
51 // Widget class allows packing and style |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
52 class Widget : public Handle |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
53 { |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
54 protected: |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
55 void SetHWND(HWND newhwnd) { |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
56 hwnd = newhwnd; |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
57 SetHandle(reinterpret_cast<void *>(newhwnd)); |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
58 // Save the C++ class pointer in the window data for later |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
59 dw_window_set_data(hwnd, "_dw_classptr", this); |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
60 } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
61 HWND hwnd; |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
62 public: |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
63 HWND GetHWND() { return hwnd; } |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
64 int Destroy() { int retval = dw_window_destroy(hwnd); delete this; return retval; } |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
65 Widget *FromID(int id) { |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
66 HWND child = dw_window_from_id(hwnd, id); |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
67 if(child) { |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
68 return reinterpret_cast<Widget *>(dw_window_get_data(child, "_dw_classptr")); |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
69 } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
70 return DW_NULL; |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
71 } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
72 void GetPreferredSize(int *width, int *height) { dw_window_get_preferred_size(hwnd, width, height); } |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
73 int SetColor(unsigned long fore, unsigned long back) { return dw_window_set_color(hwnd, fore, back); } |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
74 void SetData(const char *dataname, void *data) { dw_window_set_data(hwnd, dataname, data); } |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
75 void *GetData(const char *dataname) { return dw_window_get_data(hwnd, dataname); } |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
76 void SetPointer(int cursortype) { dw_window_set_pointer(hwnd, cursortype); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
77 void SetStyle(unsigned long flags, unsigned long mask) { dw_window_set_style(hwnd, flags, mask); } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
78 void SetStyle(unsigned long flags) { dw_window_set_style(hwnd, flags, flags); } |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
79 void SetTooltip(char *bubbletext) { dw_window_set_tooltip(hwnd, bubbletext); } |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
80 int Unpack() { return dw_box_unpack(hwnd); } |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
81 }; |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
82 |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
83 // Box class is a packable object |
2877
6f31b7991fa0
C++: Fix Combobox class by making the parent classes virtual.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2876
diff
changeset
|
84 class Boxes : virtual public Widget |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
85 { |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
86 public: |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
87 // User functions |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
88 void PackStart(Widget *item, int width, int height, int hsize, int vsize, int pad) { |
2871
4b7c4cd7a11d
OS2: Fix building the C++ bindings on OS/2 with GCC.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2870
diff
changeset
|
89 dw_box_pack_start(hwnd, item ? item->GetHWND() : DW_NOHWND, width, height, hsize, vsize, pad); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
90 void PackStart(Widget *item, int hsize, int vsize, int pad) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
91 dw_box_pack_start(hwnd, item ? item->GetHWND() : DW_NOHWND, DW_SIZE_AUTO, DW_SIZE_AUTO, hsize, vsize, pad); } |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
92 void PackEnd(Widget *item, int width, int height, int hsize, int vsize, int pad) { |
2871
4b7c4cd7a11d
OS2: Fix building the C++ bindings on OS/2 with GCC.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2870
diff
changeset
|
93 dw_box_pack_end(hwnd, item ? item->GetHWND() : DW_NOHWND, width, height, hsize, vsize, pad); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
94 void PackEnd(Widget *item, int hsize, int vsize, int pad) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
95 dw_box_pack_end(hwnd, item ? item->GetHWND() : DW_NOHWND, DW_SIZE_AUTO, DW_SIZE_AUTO, hsize, vsize, pad); } |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
96 void PackAtIndex(Widget *item, int index, int width, int height, int hsize, int vsize, int pad) { |
2871
4b7c4cd7a11d
OS2: Fix building the C++ bindings on OS/2 with GCC.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2870
diff
changeset
|
97 dw_box_pack_at_index(hwnd, item ? item->GetHWND() : DW_NOHWND, index, width, height, hsize, vsize, pad); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
98 void PackAtIndex(Widget *item, int index, int hsize, int vsize, int pad) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
99 dw_box_pack_at_index(hwnd, item ? item->GetHWND() : DW_NOHWND, index, DW_SIZE_AUTO, DW_SIZE_AUTO, hsize, vsize, pad); } |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
100 Widget *UnpackAtIndex(int index) { HWND widget = dw_box_unpack_at_index(hwnd, index); |
2872
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
101 void *classptr = widget ? dw_window_get_data(widget, "_dw_classptr") : DW_NULL; |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
102 return reinterpret_cast<Widget *>(classptr); |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
103 } |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
104 }; |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
105 |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
106 class Box : public Boxes |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
107 { |
2877
6f31b7991fa0
C++: Fix Combobox class by making the parent classes virtual.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2876
diff
changeset
|
108 public: |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
109 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
110 Box(int type, int pad) { SetHWND(dw_box_new(type, pad)); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
111 Box(int type) { SetHWND(dw_box_new(type, 0)); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
112 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
113 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
114 // Special scrollable box |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
115 class ScrollBox : public Boxes |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
116 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
117 public: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
118 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
119 ScrollBox(int type, int pad) { SetHWND(dw_scrollbox_new(type, pad)); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
120 ScrollBox(int type) { SetHWND(dw_scrollbox_new(type, 0)); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
121 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
122 // User functions |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
123 int GetRange(int orient) { return dw_scrollbox_get_range(hwnd, orient); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
124 int GetPos(int orient) { return dw_scrollbox_get_pos(hwnd, orient); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
125 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
126 |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
127 // TODO: Find a way to implement this cross platform... |
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
128 // That way we can skip adding unused signal handlers |
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
129 #define IsOverridden(a, b) true |
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
130 |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
131 // Base class for several types of widgets including buttons and menu items |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
132 class Clickable : virtual public Widget |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
133 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
134 private: |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
135 bool ClickedConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
136 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
137 std::function<int()> _ConnectClicked; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
138 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
139 int (*_ConnectClicked)(); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
140 #endif |
2911
f27fe14eef82
C++: MenuItem constructors need to call Setup() and Clickable::ClickedConnected may
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2908
diff
changeset
|
141 static int _OnClicked(HWND window, void *data) { |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
142 if(reinterpret_cast<Clickable *>(data)->_ConnectClicked) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
143 return reinterpret_cast<Clickable *>(data)->_ConnectClicked(); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
144 return reinterpret_cast<Clickable *>(data)->OnClicked(); } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
145 protected: |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
146 void Setup() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
147 _ConnectClicked = 0; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
148 if(IsOverridden(Clickable::OnClicked, this)) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
149 dw_signal_connect(hwnd, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_OnClicked), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
150 ClickedConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
151 } |
2911
f27fe14eef82
C++: MenuItem constructors need to call Setup() and Clickable::ClickedConnected may
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2908
diff
changeset
|
152 else { |
f27fe14eef82
C++: MenuItem constructors need to call Setup() and Clickable::ClickedConnected may
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2908
diff
changeset
|
153 ClickedConnected = false; |
f27fe14eef82
C++: MenuItem constructors need to call Setup() and Clickable::ClickedConnected may
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2908
diff
changeset
|
154 } |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
155 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
156 // Our signal handler functions to be overriden... |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
157 // If they are not overridden and an event is generated, remove the unused handler |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
158 virtual int OnClicked() { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
159 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_CLICKED); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
160 ClickedConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
161 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
162 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
163 public: |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
164 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
165 void ConnectClicked(std::function<int()> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
166 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
167 void ConnectClicked(int (*userfunc)()) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
168 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
169 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
170 _ConnectClicked = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
171 if(!ClickedConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
172 dw_signal_connect(hwnd, DW_SIGNAL_CLICKED, DW_SIGNAL_FUNC(_OnClicked), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
173 ClickedConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
174 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
175 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
176 }; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
177 |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
178 class Menus : public Handle |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
179 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
180 protected: |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
181 void SetHMENUI(HMENUI newmenu) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
182 menu = newmenu; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
183 SetHandle(reinterpret_cast<void *>(newmenu)); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
184 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
185 HMENUI menu; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
186 public: |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
187 // User functions |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
188 HMENUI GetHMENUI() { return menu; } |
2889
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
189 MenuItem *AppendItem(const char *title, unsigned long id, unsigned long flags, int end, int check, Menus *submenu); |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
190 MenuItem *AppendItem(const char *title, unsigned long flags, int check, Menus *submenu); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
191 MenuItem *AppendItem(const char *title, unsigned long flags, int check); |
2889
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
192 MenuItem *AppendItem(const char *title, Menus *submenu); |
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
193 MenuItem *AppendItem(const char *title); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
194 }; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
195 |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
196 class Menu : public Menus |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
197 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
198 public: |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
199 // Constructors |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
200 Menu(unsigned long id) { SetHMENUI(dw_menu_new(id)); } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
201 Menu() { SetHMENUI(dw_menu_new(0)); } |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
202 |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
203 // User functions |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
204 void Popup(Window *window, int x, int y); |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
205 void Popup(Window *window); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
206 }; |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
207 |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
208 class MenuBar : public Menus |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
209 { |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
210 public: |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
211 // Constructors |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
212 MenuBar(HWND location) { SetHMENUI(dw_menubar_new(location)); } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
213 }; |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
214 |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
215 class MenuItem : public Clickable |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
216 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
217 public: |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
218 // Constructors |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
219 MenuItem(Menus *menu, const char *title, unsigned long id, unsigned long flags, int end, int check, Menus *submenu) { |
2911
f27fe14eef82
C++: MenuItem constructors need to call Setup() and Clickable::ClickedConnected may
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2908
diff
changeset
|
220 SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, id, flags, end, check, submenu ? submenu->GetHMENUI() : DW_NOMENU)); Setup(); |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
221 } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
222 MenuItem(Menus *menu, const char *title, unsigned long flags, int check, Menus *submenu) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
223 SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, DW_MENU_AUTO, flags, TRUE, check, submenu ? submenu->GetHMENUI() : DW_NOMENU)); Setup(); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
224 } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
225 MenuItem(Menus *menu, const char *title, unsigned long flags, int check) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
226 SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, DW_MENU_AUTO, flags, TRUE, check, DW_NOMENU)); Setup(); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
227 } |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
228 MenuItem(Menus *menu, const char *title, Menus *submenu) { |
2911
f27fe14eef82
C++: MenuItem constructors need to call Setup() and Clickable::ClickedConnected may
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2908
diff
changeset
|
229 SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, DW_MENU_AUTO, 0, TRUE, FALSE, submenu ? submenu->GetHMENUI() : DW_NOMENU)); Setup(); |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
230 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
231 MenuItem(Menus *menu, const char *title) { |
2911
f27fe14eef82
C++: MenuItem constructors need to call Setup() and Clickable::ClickedConnected may
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2908
diff
changeset
|
232 SetHWND(dw_menu_append_item(menu->GetHMENUI(), title, DW_MENU_AUTO, 0, TRUE, FALSE, DW_NOMENU)); Setup(); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
233 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
234 |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
235 // User functions |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
236 void SetState(unsigned long flags) { dw_window_set_style(hwnd, flags, flags); } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
237 }; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
238 |
2889
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
239 MenuItem *Menus::AppendItem(const char *title, unsigned long id, unsigned long flags, int end, int check, Menus *submenu) { |
2891
185c1e9674a1
C++: Fix a crash caused by passing the wrong variable to the constructor.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2890
diff
changeset
|
240 return new MenuItem(this, title, id, flags, end, check, submenu); |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
241 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
242 |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
243 MenuItem *Menus::AppendItem(const char *title, unsigned long flags, int check, Menus *submenu) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
244 return new MenuItem(this, title, flags, check, submenu); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
245 } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
246 |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
247 MenuItem *Menus::AppendItem(const char *title, unsigned long flags, int check) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
248 return new MenuItem(this, title, flags, check); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
249 } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
250 |
2889
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
251 MenuItem *Menus::AppendItem(const char *title, Menus *submenu) { |
2891
185c1e9674a1
C++: Fix a crash caused by passing the wrong variable to the constructor.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2890
diff
changeset
|
252 return new MenuItem(this, title, submenu); |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
253 } |
2889
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
254 MenuItem *Menus::AppendItem(const char *title) { |
2891
185c1e9674a1
C++: Fix a crash caused by passing the wrong variable to the constructor.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2890
diff
changeset
|
255 return new MenuItem(this, title); |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
256 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
257 |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
258 |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
259 // Top-level window class is packable |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
260 class Window : public Boxes |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
261 { |
2865
fd32dce7fecd
Initial signal handler support for the C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2861
diff
changeset
|
262 private: |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
263 bool DeleteConnected, ConfigureConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
264 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
265 std::function<int()> _ConnectDelete; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
266 std::function<int(int, int)> _ConnectConfigure; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
267 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
268 int (*_ConnectDelete)(); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
269 int (*_ConnectConfigure)(int width, int height); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
270 #endif |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
271 void Setup() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
272 _ConnectDelete = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
273 _ConnectConfigure = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
274 menu = DW_NULL; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
275 if(IsOverridden(Window::OnDelete, this)) { |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
276 dw_signal_connect(hwnd, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(_OnDelete), this); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
277 DeleteConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
278 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
279 DeleteConnected = false; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
280 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
281 if(IsOverridden(Window::OnConfigure, this)) { |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
282 dw_signal_connect(hwnd, DW_SIGNAL_CONFIGURE, DW_SIGNAL_FUNC(_OnConfigure), this); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
283 ConfigureConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
284 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
285 ConfigureConnected = false; |
2906
9d6280f206bd
Minor code cleanups in the template and C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2905
diff
changeset
|
286 } |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
287 } |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
288 static int _OnDelete(HWND window, void *data) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
289 if(reinterpret_cast<Window *>(data)->_ConnectDelete) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
290 return reinterpret_cast<Window *>(data)->_ConnectDelete(); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
291 return reinterpret_cast<Window *>(data)->OnDelete(); } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
292 static int _OnConfigure(HWND window, int width, int height, void *data) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
293 if(reinterpret_cast<Window *>(data)->_ConnectConfigure) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
294 return reinterpret_cast<Window *>(data)->_ConnectConfigure(width, height); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
295 return reinterpret_cast<Window *>(data)->OnConfigure(width, height); } |
2884
06e475feaac0
C++: Split Menu and MenuBar to prevent type conflicts.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2882
diff
changeset
|
296 MenuBar *menu; |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
297 public: |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
298 // Constructors |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
299 Window(HWND owner, const char *title, unsigned long style) { SetHWND(dw_window_new(owner, title, style)); Setup(); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
300 Window(const char *title, unsigned long style) { SetHWND(dw_window_new(HWND_DESKTOP, title, style)); Setup(); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
301 Window(unsigned long style) { SetHWND(dw_window_new(HWND_DESKTOP, "", style)); Setup(); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
302 Window(const char *title) { SetHWND(dw_window_new(HWND_DESKTOP, title, DW_FCF_SYSMENU | DW_FCF_TITLEBAR | |
2865
fd32dce7fecd
Initial signal handler support for the C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2861
diff
changeset
|
303 DW_FCF_TASKLIST | DW_FCF_SIZEBORDER | DW_FCF_MINMAX)); Setup(); } |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
304 Window() { SetHWND(dw_window_new(HWND_DESKTOP, "", DW_FCF_SYSMENU | DW_FCF_TITLEBAR | |
2865
fd32dce7fecd
Initial signal handler support for the C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2861
diff
changeset
|
305 DW_FCF_TASKLIST | DW_FCF_SIZEBORDER | DW_FCF_MINMAX)); Setup(); } |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
306 |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
307 // User functions |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
308 void SetText(const char *text) { dw_window_set_text(hwnd, text); } |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
309 char *GetText() { return dw_window_get_text(hwnd); } |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
310 void SetSize(unsigned long width, unsigned long height) { dw_window_set_size(hwnd, width, height); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
311 int Show() { return dw_window_show(hwnd); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
312 int Hide() { return dw_window_hide(hwnd); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
313 void SetGravity(int horz, int vert) { dw_window_set_gravity(hwnd, horz, vert); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
314 int Minimize() { return dw_window_minimize(hwnd); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
315 int Raise() { return dw_window_raise(hwnd); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
316 int Lower() { return dw_window_lower(hwnd); } |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
317 void Redraw() { dw_window_redraw(hwnd); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
318 void Default(Widget *defaultitem) { if(defaultitem) dw_window_default(hwnd, defaultitem->GetHWND()); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
319 void SetIcon(HICN icon) { dw_window_set_icon(hwnd, icon); } |
2889
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
320 MenuBar *MenuBarNew() { if(!menu) menu = new MenuBar(hwnd); return menu; } |
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
321 void Popup(Menu *menu, int x, int y) { |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
322 if(menu) { |
2890
ab4c86ddc63a
C++: Fix a logic error reported by MSVC 2022.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2889
diff
changeset
|
323 HMENUI pmenu = menu->GetHMENUI(); |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
324 |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
325 dw_menu_popup(&pmenu, hwnd, x, y); |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
326 delete menu; |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
327 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
328 } |
2889
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
329 void Popup(Menu *menu) { |
4b075e64536c
C++: Add some simple menu code to see if things are working.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2885
diff
changeset
|
330 if(menu) { |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
331 long x, y; |
2890
ab4c86ddc63a
C++: Fix a logic error reported by MSVC 2022.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2889
diff
changeset
|
332 HMENUI pmenu = menu->GetHMENUI(); |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
333 |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
334 dw_pointer_query_pos(&x, &y); |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
335 dw_menu_popup(&pmenu, hwnd, (int)x, (int)y); |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
336 delete menu; |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
337 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
338 } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
339 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
340 void ConnectDelete(std::function<int()> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
341 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
342 void ConnectDelete(int (*userfunc)()) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
343 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
344 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
345 _ConnectDelete = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
346 if(!DeleteConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
347 dw_signal_connect(hwnd, DW_SIGNAL_DELETE, DW_SIGNAL_FUNC(_OnDelete), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
348 DeleteConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
349 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
350 DeleteConnected = false; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
351 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
352 } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
353 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
354 void ConnectConfigure(std::function<int(int, int)> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
355 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
356 void ConnectConfigure(int (*userfunc)(int, int)) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
357 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
358 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
359 _ConnectConfigure = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
360 if(!ConfigureConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
361 dw_signal_connect(hwnd, DW_SIGNAL_CONFIGURE, DW_SIGNAL_FUNC(_OnConfigure), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
362 ConfigureConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
363 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
364 ConfigureConnected = false; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
365 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
366 } |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
367 protected: |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
368 // Our signal handler functions to be overriden... |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
369 // If they are not overridden and an event is generated, remove the unused handler |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
370 virtual int OnDelete() { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
371 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_DELETE); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
372 DeleteConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
373 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
374 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
375 virtual int OnConfigure(int width, int height) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
376 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_CONFIGURE); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
377 ConfigureConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
378 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
379 }; |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
380 }; |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
381 |
2885
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
382 void Menu::Popup(Window *window, int x, int y) |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
383 { |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
384 if(window) |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
385 { |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
386 HMENUI pmenu = menu; |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
387 |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
388 dw_menu_popup(&pmenu, window->GetHWND(), x, y); |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
389 delete this; |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
390 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
391 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
392 |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
393 void Menu::Popup(Window *window) |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
394 { |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
395 if(window) { |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
396 long x, y; |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
397 HMENUI pmenu = menu; |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
398 |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
399 dw_pointer_query_pos(&x, &y); |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
400 dw_menu_popup(&pmenu, window->GetHWND(), (int)x, (int)y); |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
401 delete this; |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
402 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
403 } |
df1b7f7d1703
C++: Finish up the menu classes, not sure if this is ideal yet.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2884
diff
changeset
|
404 |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
405 // Class for focusable widgets |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
406 class Focusable : virtual public Widget |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
407 { |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
408 public: |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
409 void Enable() { dw_window_enable(hwnd); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
410 void Disable() { dw_window_disable(hwnd); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
411 void SetFocus() { dw_window_set_focus(hwnd); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
412 }; |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
413 |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
414 // Text based button |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
415 class TextButton : public Clickable, public Focusable |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
416 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
417 public: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
418 // User functions |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
419 void SetText(const char *text) { dw_window_set_text(hwnd, text); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
420 char *GetText() { return dw_window_get_text(hwnd); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
421 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
422 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
423 class Button : public TextButton |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
424 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
425 public: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
426 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
427 Button(const char *text, unsigned long id) { SetHWND(dw_button_new(text, id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
428 Button(unsigned long id) { SetHWND(dw_button_new("", id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
429 Button(const char *text) { SetHWND(dw_button_new(text, 0)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
430 Button() { SetHWND(dw_button_new("", 0)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
431 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
432 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
433 // Image based button |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
434 class BitmapButton : public Clickable, public Focusable |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
435 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
436 public: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
437 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
438 BitmapButton(const char *text, unsigned long id) { SetHWND(dw_bitmapbutton_new(text, id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
439 BitmapButton(unsigned long id) { SetHWND(dw_bitmapbutton_new("", id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
440 BitmapButton(const char *text, unsigned long id, const char *file) { SetHWND(dw_bitmapbutton_new_from_file(text, id, file)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
441 BitmapButton(const char *text, const char *file) { SetHWND(dw_bitmapbutton_new_from_file(text, 0, file)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
442 BitmapButton(const char *text, unsigned long id, const char *data, int len) { SetHWND(dw_bitmapbutton_new_from_data(text, id, data, len)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
443 BitmapButton(const char *text, const char *data, int len) { SetHWND(dw_bitmapbutton_new_from_data(text, 0, data, len)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
444 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
445 |
2877
6f31b7991fa0
C++: Fix Combobox class by making the parent classes virtual.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2876
diff
changeset
|
446 class CheckBoxes : virtual public TextButton |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
447 { |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
448 public: |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
449 // User functions |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
450 void Set(int value) { dw_checkbox_set(hwnd, value); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
451 int Get() { return dw_checkbox_get(hwnd); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
452 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
453 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
454 class CheckBox : public CheckBoxes |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
455 { |
2877
6f31b7991fa0
C++: Fix Combobox class by making the parent classes virtual.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2876
diff
changeset
|
456 public: |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
457 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
458 CheckBox(const char *text, unsigned long id) { SetHWND(dw_checkbox_new(text, id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
459 CheckBox(unsigned long id) { SetHWND(dw_checkbox_new("", id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
460 CheckBox(const char *text) { SetHWND(dw_checkbox_new(text, 0)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
461 CheckBox() { SetHWND(dw_checkbox_new("", 0)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
462 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
463 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
464 class RadioButton : public CheckBoxes |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
465 { |
2877
6f31b7991fa0
C++: Fix Combobox class by making the parent classes virtual.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2876
diff
changeset
|
466 public: |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
467 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
468 RadioButton(const char *text, unsigned long id) { SetHWND(dw_radiobutton_new(text, id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
469 RadioButton(unsigned long id) { SetHWND(dw_radiobutton_new("", id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
470 RadioButton(const char *text) { SetHWND(dw_radiobutton_new(text, 0)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
471 RadioButton() { SetHWND(dw_radiobutton_new("", 0)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
472 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
473 |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
474 // Class for handling static text widget |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
475 class TextWidget : virtual public Widget |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
476 { |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
477 public: |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
478 // User functions |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
479 void SetText(const char *text) { dw_window_set_text(hwnd, text); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
480 char *GetText() { return dw_window_get_text(hwnd); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
481 int SetFont(const char *font) { return dw_window_set_font(hwnd, font); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
482 char *GetFont() { return dw_window_get_font(hwnd); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
483 }; |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
484 |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
485 // Class for handling static text widget |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
486 class Text : public TextWidget |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
487 { |
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
488 public: |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
489 // Constructors |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
490 Text(const char *text, unsigned long id) { SetHWND(dw_text_new(text, id)); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
491 Text(const char *text) { SetHWND(dw_text_new(text, 0)); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
492 Text(unsigned long id) { SetHWND(dw_text_new("", id)); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
493 Text() { SetHWND(dw_text_new("", 0)); } |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
494 }; |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
495 |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
496 class StatusText : public TextWidget |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
497 { |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
498 public: |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
499 // Constructors |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
500 StatusText(const char *text, unsigned long id) { SetHWND(dw_status_text_new(text, id)); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
501 StatusText(const char *text) { SetHWND(dw_status_text_new(text, 0)); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
502 StatusText(unsigned long id) { SetHWND(dw_status_text_new("", id)); } |
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
503 StatusText() { SetHWND(dw_status_text_new("", 0)); } |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
504 }; |
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
505 |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
506 // Class for handing static image widget |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
507 class Bitmap : public Widget |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
508 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
509 public: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
510 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
511 Bitmap(const char *data, int len) { SetHWND(dw_bitmap_new(0)); dw_window_set_bitmap_from_data(hwnd, 0, data, len); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
512 Bitmap(const char *file) { SetHWND(dw_bitmap_new(0)); dw_window_set_bitmap(hwnd, 0, file); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
513 Bitmap(unsigned long id) { SetHWND(dw_bitmap_new(id)); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
514 Bitmap() { SetHWND(dw_bitmap_new(0)); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
515 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
516 // User functions |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
517 void Set(unsigned long id) { dw_window_set_bitmap(hwnd, id, DW_NULL); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
518 void Set(const char *file) { dw_window_set_bitmap(hwnd, 0, file); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
519 void Set(const char *data, int len) { dw_window_set_bitmap_from_data(hwnd, 0, data, len); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
520 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
521 |
2879
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
522 // Class for handing calendar widget |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
523 class Calendar : public Widget |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
524 { |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
525 public: |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
526 // Constructors |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
527 Calendar(unsigned long id) { SetHWND(dw_calendar_new(id)); } |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
528 Calendar() { SetHWND(dw_calendar_new(0)); } |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
529 |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
530 // User functions |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
531 void GetData(unsigned int *year, unsigned int *month, unsigned int *day) { dw_calendar_get_date(hwnd, year, month, day); } |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
532 void SetData(unsigned int year, unsigned int month, unsigned int day) { dw_calendar_set_date(hwnd, year, month, day); } |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
533 }; |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
534 |
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
535 |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
536 // Abstract class that defines drawing, either to screen or picture (pixmap) |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
537 class Drawable |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
538 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
539 public: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
540 virtual void DrawPoint(int x, int y) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
541 virtual void DrawLine(int x1, int y1, int x2, int y2) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
542 virtual void DrawPolygon(int flags, int npoints, int x[], int y[]) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
543 virtual void DrawRect(int fill, int x, int y, int width, int height) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
544 virtual void DrawArc(int flags, int xorigin, int yorigin, int x1, int y1, int x2, int y2) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
545 virtual void DrawText(int x, int y, const char *text) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
546 virtual int BitBltStretch(int xdest, int ydest, int width, int height, Render *src, int xsrc, int ysrc, int srcwidth, int srcheight) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
547 virtual int BitBltStretch(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc, int srcwidth, int srcheight) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
548 virtual void BitBlt(int xdest, int ydest, int width, int height, Render *src, int xsrc, int ysrc) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
549 virtual void BitBlt(int xdest, int ydest, int width, int height, Pixmap *srcp, int xsrc, int ysrc) = 0; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
550 void SetColor(unsigned long fore, unsigned long back) { dw_color_foreground_set(fore); dw_color_background_set(back); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
551 void SetBackgroundColor(unsigned long back) { dw_color_background_set(back); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
552 void SetForegroundColor(unsigned long fore) { dw_color_foreground_set(fore); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
553 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
554 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
555 class Render : public Drawable, public Widget |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
556 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
557 private: |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
558 bool ExposeConnected, ConfigureConnected, KeyPressConnected, ButtonPressConnected, ButtonReleaseConnected, MotionNotifyConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
559 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
560 std::function<int(DWExpose *)> _ConnectExpose; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
561 std::function<int(int, int)> _ConnectConfigure; |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
562 std::function<int(char c, int, int, char *)> _ConnectKeyPress; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
563 std::function<int(int, int, int)> _ConnectButtonPress; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
564 std::function<int(int, int, int)> _ConnectButtonRelease; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
565 std::function<int(int, int, int)> _ConnectMotionNotify; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
566 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
567 int (*_ConnectExpose)(DWExpose *); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
568 int (*_ConnectConfigure)(int width, int height); |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
569 int (*_ConnectKeyPress)(char c, int vk, int state, char *utf8); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
570 int (*_ConnectButtonPress)(int x, int y, int buttonmask); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
571 int (*_ConnectButtonRelease)(int x, int y, int buttonmask); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
572 int (*_ConnectMotionNotify)(int x, int y, int buttonmask); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
573 #endif |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
574 void Setup() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
575 _ConnectExpose = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
576 _ConnectConfigure = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
577 _ConnectKeyPress = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
578 _ConnectButtonPress = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
579 _ConnectButtonRelease = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
580 _ConnectMotionNotify = 0; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
581 if(IsOverridden(Render::OnExpose, this)) { |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
582 dw_signal_connect(hwnd, DW_SIGNAL_EXPOSE, DW_SIGNAL_FUNC(_OnExpose), this); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
583 ExposeConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
584 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
585 ExposeConnected = false; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
586 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
587 if(IsOverridden(Render::OnConfigure, this)) { |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
588 dw_signal_connect(hwnd, DW_SIGNAL_CONFIGURE, DW_SIGNAL_FUNC(_OnConfigure), this); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
589 ConfigureConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
590 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
591 ConfigureConnected = false; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
592 } |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
593 if(IsOverridden(Render::OnKeyPress, this)) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
594 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
595 KeyPressConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
596 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
597 KeyPressConnected = false; |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
598 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
599 if(IsOverridden(Render::OnButtonPress, this)) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
600 dw_signal_connect(hwnd, DW_SIGNAL_BUTTON_PRESS, DW_SIGNAL_FUNC(_OnButtonPress), this); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
601 ButtonPressConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
602 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
603 ButtonPressConnected = false; |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
604 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
605 if(IsOverridden(Render::OnButtonRelease, this)) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
606 dw_signal_connect(hwnd, DW_SIGNAL_BUTTON_RELEASE, DW_SIGNAL_FUNC(_OnButtonRelease), this); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
607 ButtonReleaseConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
608 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
609 ButtonReleaseConnected = false; |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
610 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
611 if(IsOverridden(Render::OnMotionNotify, this)) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
612 dw_signal_connect(hwnd, DW_SIGNAL_MOTION_NOTIFY, DW_SIGNAL_FUNC(_OnMotionNotify), this); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
613 MotionNotifyConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
614 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
615 MotionNotifyConnected = false; |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
616 } |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
617 } |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
618 static int _OnExpose(HWND window, DWExpose *exp, void *data) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
619 if(reinterpret_cast<Render *>(data)->_ConnectExpose) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
620 return reinterpret_cast<Render *>(data)->_ConnectExpose(exp); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
621 return reinterpret_cast<Render *>(data)->OnExpose(exp); } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
622 static int _OnConfigure(HWND window, int width, int height, void *data) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
623 if(reinterpret_cast<Render *>(data)->_ConnectConfigure) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
624 return reinterpret_cast<Render *>(data)->_ConnectConfigure(width, height); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
625 return reinterpret_cast<Render *>(data)->OnConfigure(width, height); } |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
626 static int _OnKeyPress(HWND window, char c, int vk, int state, void *data, char *utf8) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
627 if(reinterpret_cast<Render *>(data)->_ConnectKeyPress) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
628 return reinterpret_cast<Render *>(data)->_ConnectKeyPress(c, vk, state, utf8); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
629 return reinterpret_cast<Render *>(data)->OnKeyPress(c, vk, state, utf8); } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
630 static int _OnButtonPress(HWND window, int x, int y, int buttonmask, void *data) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
631 if(reinterpret_cast<Render *>(data)->_ConnectButtonPress) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
632 return reinterpret_cast<Render *>(data)->_ConnectButtonPress(x, y, buttonmask); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
633 return reinterpret_cast<Render *>(data)->OnButtonPress(x, y, buttonmask); } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
634 static int _OnButtonRelease(HWND window, int x, int y, int buttonmask, void *data) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
635 if(reinterpret_cast<Render *>(data)->_ConnectButtonRelease) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
636 return reinterpret_cast<Render *>(data)->_ConnectButtonRelease(x, y, buttonmask); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
637 return reinterpret_cast<Render *>(data)->OnButtonRelease(x, y, buttonmask); } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
638 static int _OnMotionNotify(HWND window, int x, int y, int buttonmask, void *data) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
639 if(reinterpret_cast<Render *>(data)->_ConnectMotionNotify) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
640 return reinterpret_cast<Render *>(data)->_ConnectMotionNotify(x, y, buttonmask); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
641 return reinterpret_cast<Render *>(data)->OnMotionNotify(x, y, buttonmask); } |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
642 public: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
643 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
644 Render(unsigned long id) { SetHWND(dw_render_new(id)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
645 Render() { SetHWND(dw_render_new(0)); Setup(); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
646 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
647 // User functions |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
648 void DrawPoint(int x, int y) { dw_draw_point(hwnd, DW_NULL, x, y); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
649 void DrawLine(int x1, int y1, int x2, int y2) { dw_draw_line(hwnd, DW_NULL, x1, y1, x2, y2); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
650 void DrawPolygon(int flags, int npoints, int x[], int y[]) { dw_draw_polygon(hwnd, DW_NULL, flags, npoints, x, y); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
651 void DrawRect(int fill, int x, int y, int width, int height) { dw_draw_rect(hwnd, DW_NULL, fill, x, y, width, height); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
652 void DrawArc(int flags, int xorigin, int yorigin, int x1, int y1, int x2, int y2) { dw_draw_arc(hwnd, DW_NULL, flags, xorigin, yorigin, x1, y1, x2, y2); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
653 void DrawText(int x, int y, const char *text) { dw_draw_text(hwnd, DW_NULL, x, y, text); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
654 int BitBltStretch(int xdest, int ydest, int width, int height, Render *src, int xsrc, int ysrc, int srcwidth, int srcheight) { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
655 return dw_pixmap_stretch_bitblt(hwnd, DW_NULL, xdest, ydest, width, height, src ? src->GetHWND() : DW_NOHWND, DW_NULL, xsrc, ysrc, srcwidth, srcheight); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
656 } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
657 int BitBltStretch(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc, int srcwidth, int srcheight); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
658 void BitBlt(int xdest, int ydest, int width, int height, Render *src, int xsrc, int ysrc) { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
659 return dw_pixmap_bitblt(hwnd, DW_NULL, xdest, ydest, width, height, src ? src->GetHWND() : DW_NOHWND, DW_NULL, xsrc, ysrc); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
660 } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
661 void BitBlt(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
662 int SetFont(const char *fontname) { return dw_window_set_font(hwnd, fontname); } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
663 void GetTextExtents(const char *text, int *width, int *height) { dw_font_text_extents_get(hwnd, DW_NULL, text, width, height); } |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
664 char *GetFont() { return dw_window_get_font(hwnd); } |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
665 void Redraw() { dw_render_redraw(hwnd); } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
666 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
667 void ConnectExpose(std::function<int(DWExpose *)> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
668 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
669 void ConnectExpose(int (*userfunc)(DWExpose *)) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
670 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
671 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
672 _ConnectExpose = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
673 if(!ExposeConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
674 dw_signal_connect(hwnd, DW_SIGNAL_EXPOSE, DW_SIGNAL_FUNC(_OnExpose), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
675 ExposeConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
676 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
677 } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
678 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
679 void ConnectConfigure(std::function<int(int, int)> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
680 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
681 void ConnectConfigure(int (*userfunc)(int, int)) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
682 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
683 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
684 _ConnectConfigure = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
685 if(!ConfigureConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
686 dw_signal_connect(hwnd, DW_SIGNAL_CONFIGURE, DW_SIGNAL_FUNC(_OnConfigure), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
687 ConfigureConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
688 } |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
689 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
690 #ifdef DW_LAMBDA |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
691 void ConnectKeyPress(std::function<int(char, int, int, char *)> userfunc) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
692 #else |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
693 void ConnectKeyPress(int (*userfunc)(char, int, int, char *)) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
694 #endif |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
695 { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
696 _ConnectKeyPress = userfunc; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
697 if(!KeyPressConnected) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
698 dw_signal_connect(hwnd, DW_SIGNAL_KEY_PRESS, DW_SIGNAL_FUNC(_OnKeyPress), this); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
699 KeyPressConnected = true; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
700 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
701 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
702 #ifdef DW_LAMBDA |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
703 void ConnectButtonPress(std::function<int(int, int, int)> userfunc) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
704 #else |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
705 void ConnectButtonPress(int (*userfunc)(int, int, int)) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
706 #endif |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
707 { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
708 _ConnectButtonPress = userfunc; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
709 if(!KeyPressConnected) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
710 dw_signal_connect(hwnd, DW_SIGNAL_BUTTON_PRESS, DW_SIGNAL_FUNC(_OnButtonPress), this); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
711 ButtonPressConnected = true; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
712 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
713 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
714 #ifdef DW_LAMBDA |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
715 void ConnectButtonRelease(std::function<int(int, int, int)> userfunc) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
716 #else |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
717 void ConnectButtonRelease(int (*userfunc)(int, int, int)) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
718 #endif |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
719 { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
720 _ConnectButtonRelease = userfunc; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
721 if(!KeyPressConnected) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
722 dw_signal_connect(hwnd, DW_SIGNAL_BUTTON_RELEASE, DW_SIGNAL_FUNC(_OnButtonRelease), this); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
723 ButtonReleaseConnected = true; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
724 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
725 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
726 #ifdef DW_LAMBDA |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
727 void ConnectMotionNotify(std::function<int(int, int, int)> userfunc) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
728 #else |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
729 void ConnectMotionNotify(int (*userfunc)(int, int, int)) |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
730 #endif |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
731 { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
732 _ConnectMotionNotify = userfunc; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
733 if(!MotionNotifyConnected) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
734 dw_signal_connect(hwnd, DW_SIGNAL_MOTION_NOTIFY, DW_SIGNAL_FUNC(_OnMotionNotify), this); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
735 MotionNotifyConnected = true; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
736 } |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
737 } |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
738 protected: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
739 // Our signal handler functions to be overriden... |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
740 // If they are not overridden and an event is generated, remove the unused handler |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
741 virtual int OnExpose(DWExpose *exp) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
742 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_EXPOSE); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
743 ExposeConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
744 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
745 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
746 virtual int OnConfigure(int width, int height) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
747 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_CONFIGURE); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
748 ConfigureConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
749 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
750 }; |
2898
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
751 virtual int OnKeyPress(char c, int vk, int state, char *utf8) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
752 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_KEY_PRESS); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
753 KeyPressConnected = false; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
754 return FALSE; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
755 }; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
756 virtual int OnButtonPress(char x, int y, int buttonmask) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
757 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_BUTTON_PRESS); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
758 ButtonPressConnected = false; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
759 return FALSE; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
760 }; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
761 virtual int OnButtonRelease(char x, int y, int buttonmask) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
762 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_BUTTON_RELEASE); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
763 ButtonReleaseConnected = false; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
764 return FALSE; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
765 }; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
766 virtual int OnMotionNotify(char x, int y, int buttonmask) { |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
767 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_MOTION_NOTIFY); |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
768 MotionNotifyConnected = false; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
769 return FALSE; |
d53fee198085
C++: Add KeyPress, ButtonPress, ButtonRelease and MotionNotify signals to Render.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2897
diff
changeset
|
770 }; |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
771 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
772 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
773 class Pixmap : public Drawable, public Handle |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
774 { |
2877
6f31b7991fa0
C++: Fix Combobox class by making the parent classes virtual.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2876
diff
changeset
|
775 private: |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
776 void SetHPIXMAP(HPIXMAP newpixmap) { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
777 hpixmap = newpixmap; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
778 SetHandle(reinterpret_cast<void *>(newpixmap)); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
779 } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
780 HPIXMAP hpixmap; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
781 public: |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
782 // Constructors |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
783 Pixmap(HWND window, unsigned long width, unsigned long height, int depth) { SetHPIXMAP(dw_pixmap_new(window, width, height, depth)); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
784 Pixmap(HWND window, unsigned long width, unsigned long height) { SetHPIXMAP(dw_pixmap_new(window, width, height, 32)); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
785 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
786 // User functions |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
787 HPIXMAP GetHPIXMAP() { return hpixmap; } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
788 void DrawPoint(int x, int y) { dw_draw_point(DW_NOHWND, hpixmap, x, y); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
789 void DrawLine(int x1, int y1, int x2, int y2) { dw_draw_line(DW_NOHWND, hpixmap, x1, y1, x2, y2); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
790 void DrawPolygon(int flags, int npoints, int x[], int y[]) { dw_draw_polygon(DW_NOHWND, hpixmap, flags, npoints, x, y); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
791 void DrawRect(int fill, int x, int y, int width, int height) { dw_draw_rect(DW_NOHWND, hpixmap, fill, x, y, width, height); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
792 void DrawArc(int flags, int xorigin, int yorigin, int x1, int y1, int x2, int y2) { dw_draw_arc(DW_NOHWND, hpixmap, flags, xorigin, yorigin, x1, y1, x2, y2); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
793 void DrawText(int x, int y, const char *text) { dw_draw_text(DW_NOHWND, hpixmap, x, y, text); } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
794 int BitBltStretch(int xdest, int ydest, int width, int height, Render *src, int xsrc, int ysrc, int srcwidth, int srcheight) { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
795 return dw_pixmap_stretch_bitblt(DW_NOHWND, hpixmap, xdest, ydest, width, height, src ? src->GetHWND() : DW_NOHWND, DW_NULL, xsrc, ysrc, srcwidth, srcheight); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
796 } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
797 int BitBltStretch(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc, int srcwidth, int srcheight) { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
798 return dw_pixmap_stretch_bitblt(DW_NOHWND, hpixmap, xdest, ydest, width, height, DW_NOHWND, src ? src->GetHPIXMAP() : DW_NULL, xsrc, ysrc, srcwidth, srcheight); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
799 } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
800 void BitBlt(int xdest, int ydest, int width, int height, Render *src, int xsrc, int ysrc) { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
801 dw_pixmap_bitblt(DW_NOHWND, hpixmap, xdest, ydest, width, height, src ? src->GetHWND() : DW_NOHWND, DW_NULL, xsrc, ysrc); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
802 } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
803 void BitBlt(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc) { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
804 dw_pixmap_bitblt(DW_NOHWND, hpixmap, xdest, ydest, width, height, DW_NOHWND, src ? src->GetHPIXMAP() : DW_NULL, xsrc, ysrc); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
805 } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
806 int SetFont(const char *fontname) { return dw_pixmap_set_font(hpixmap, fontname); } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
807 void GetTextExtents(const char *text, int *width, int *height) { dw_font_text_extents_get(DW_NOHWND, hpixmap, text, width, height); } |
2874
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
808 }; |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
809 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
810 // Need to declare these here after Pixmap is defined |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
811 int Render::BitBltStretch(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc, int srcwidth, int srcheight) |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
812 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
813 return dw_pixmap_stretch_bitblt(hwnd, DW_NULL, xdest, ydest, width, height, DW_NOHWND, src ? src->GetHPIXMAP() : DW_NULL, xsrc, ysrc, srcwidth, srcheight); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
814 } |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
815 |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
816 void Render::BitBlt(int xdest, int ydest, int width, int height, Pixmap *src, int xsrc, int ysrc) |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
817 { |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
818 dw_pixmap_bitblt(hwnd, DW_NULL, xdest, ydest, width, height, DW_NOHWND, src ? src->GetHPIXMAP() : DW_NULL, xsrc, ysrc); |
585d0053b766
C++: Implement buttons, images, render, pixmap and boxes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2873
diff
changeset
|
819 } |
2868
5ee1aaa48fc7
C++: The last signal handler change only worked with Clang/LLVM.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2867
diff
changeset
|
820 |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
821 // Class for the HTML rendering widget |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
822 class HTML : public Widget |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
823 { |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
824 private: |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
825 bool ChangedConnected, ResultConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
826 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
827 std::function<int(int, char *)> _ConnectChanged; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
828 std::function<int(int, char *, void *)> _ConnectResult; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
829 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
830 int (*_ConnectChanged)(int status, char *url); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
831 int (*_ConnectResult)(int status, char *result, void *scriptdata); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
832 #endif |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
833 void Setup() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
834 _ConnectChanged = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
835 _ConnectResult = 0; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
836 if(IsOverridden(HTML::OnChanged, this)) { |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
837 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
838 ChangedConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
839 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
840 ChangedConnected = false; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
841 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
842 if(IsOverridden(HTML::OnResult, this)) { |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
843 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnResult), this); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
844 ResultConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
845 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
846 ResultConnected = false; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
847 } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
848 } |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
849 static int _OnChanged(HWND window, int status, char *url, void *data) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
850 if(reinterpret_cast<HTML *>(data)->_ConnectChanged) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
851 return reinterpret_cast<HTML *>(data)->_ConnectChanged(status, url); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
852 return reinterpret_cast<HTML *>(data)->OnChanged(status, url); } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
853 static int _OnResult(HWND window, int status, char *result, void *scriptdata, void *data) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
854 if(reinterpret_cast<HTML *>(data)->_ConnectResult) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
855 return reinterpret_cast<HTML *>(data)->_ConnectResult(status, result, scriptdata); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
856 return reinterpret_cast<HTML *>(data)->OnResult(status, result, scriptdata); } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
857 public: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
858 // Constructors |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
859 HTML(unsigned long id) { SetHWND(dw_html_new(id)); Setup(); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
860 HTML() { SetHWND(dw_html_new(0)); Setup(); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
861 |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
862 // User functions |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
863 void Action(int action) { dw_html_action(hwnd, action); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
864 int JavascriptRun(const char *script, void *scriptdata) { return dw_html_javascript_run(hwnd, script, scriptdata); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
865 int Raw(const char *buffer) { return dw_html_raw(hwnd, buffer); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
866 int URL(const char *url) { return dw_html_url(hwnd, url); } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
867 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
868 void ConnectChanged(std::function<int(int, char *)> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
869 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
870 void ConnectChanged(int (*userfunc)(int, char *)) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
871 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
872 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
873 _ConnectChanged = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
874 if(!ChangedConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
875 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnChanged), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
876 ChangedConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
877 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
878 } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
879 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
880 void ConnectResult(std::function<int(int, char *, void *)> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
881 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
882 void ConnectResult(int (*userfunc)(int, char *, void *)) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
883 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
884 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
885 _ConnectResult = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
886 if(!ResultConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
887 dw_signal_connect(hwnd, DW_SIGNAL_HTML_CHANGED, DW_SIGNAL_FUNC(_OnResult), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
888 ResultConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
889 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
890 } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
891 protected: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
892 // Our signal handler functions to be overriden... |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
893 // If they are not overridden and an event is generated, remove the unused handler |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
894 virtual int OnChanged(int status, char *url) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
895 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_HTML_CHANGED); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
896 ChangedConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
897 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
898 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
899 virtual int OnResult(int status, char *result, void *scriptdata) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
900 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_HTML_RESULT); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
901 ResultConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
902 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
903 }; |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
904 }; |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
905 |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
906 // Base class for several widgets that allow text entry |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
907 class TextEntry : virtual public Focusable, virtual public TextWidget |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
908 { |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
909 public: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
910 // User functions |
2879
ec7f6e28166d
C++: Add Calendar widget and fix an issue in that last commit.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2878
diff
changeset
|
911 void ClickDefault(Focusable *next) { if(next) dw_window_click_default(hwnd, next->GetHWND()); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
912 void SetLimit(int limit) { dw_entryfield_set_limit(hwnd, limit);} |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
913 }; |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
914 |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
915 class Entryfield : public TextEntry |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
916 { |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
917 public: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
918 // Constructors |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
919 Entryfield(const char *text, unsigned long id) { SetHWND(dw_entryfield_new(text, id)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
920 Entryfield(unsigned long id) { SetHWND(dw_entryfield_new("", id)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
921 Entryfield(const char *text) { SetHWND(dw_entryfield_new(text, 0)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
922 Entryfield() { SetHWND(dw_entryfield_new("", 0)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
923 }; |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
924 |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
925 class EntryfieldPassword : public TextEntry |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
926 { |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
927 public: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
928 // Constructors |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
929 EntryfieldPassword(const char *text, unsigned long id) { SetHWND(dw_entryfield_password_new(text, id)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
930 EntryfieldPassword(unsigned long id) { SetHWND(dw_entryfield_password_new("", id)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
931 EntryfieldPassword(const char *text) { SetHWND(dw_entryfield_password_new(text, 0)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
932 EntryfieldPassword() { SetHWND(dw_entryfield_password_new("", 0)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
933 }; |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
934 |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
935 // Base class for several widgets that have a list of elements |
2878
a290573a8b7c
C++: Implement StatusText class, reorganize Text widgets to eliminate
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2877
diff
changeset
|
936 class ListBoxes : virtual public Focusable |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
937 { |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
938 private: |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
939 bool ListSelectConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
940 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
941 std::function<int(int)> _ConnectListSelect; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
942 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
943 int (*_ConnectListSelect)(int index); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
944 #endif |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
945 void Setup() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
946 _ConnectListSelect = 0; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
947 if(IsOverridden(ListBoxes::OnListSelect, this)) { |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
948 dw_signal_connect(hwnd, DW_SIGNAL_LIST_SELECT, DW_SIGNAL_FUNC(_OnListSelect), this); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
949 ListSelectConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
950 } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
951 } |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
952 static int _OnListSelect(HWND window, int index, void *data) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
953 if(reinterpret_cast<ListBoxes *>(data)->_ConnectListSelect) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
954 return reinterpret_cast<ListBoxes *>(data)->_ConnectListSelect(index); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
955 return reinterpret_cast<ListBoxes *>(data)->OnListSelect(index); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
956 } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
957 public: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
958 // User functions |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
959 void Append(const char *text) { dw_listbox_append(hwnd, text); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
960 void Clear() { dw_listbox_clear(hwnd); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
961 int Count() { return dw_listbox_count(hwnd); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
962 void Delete(int index) { dw_listbox_delete(hwnd, index); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
963 void GetText(unsigned int index, char *buffer, unsigned int length) { dw_listbox_get_text(hwnd, index, buffer, length); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
964 void SetText(unsigned int index, char *buffer) { dw_listbox_set_text(hwnd, index, buffer); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
965 void Insert(const char *text, int pos) { dw_listbox_insert(hwnd, text, pos); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
966 void ListAppend(char **text, int count) { dw_listbox_list_append(hwnd, text, count); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
967 void Select(int index, int state) { dw_listbox_select(hwnd, index, state); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
968 int Selected() { return dw_listbox_selected(hwnd); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
969 int Selected(int where) { return dw_listbox_selected_multi(hwnd, where); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
970 void SetTop(int top) { dw_listbox_set_top(hwnd, top); } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
971 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
972 void ConnectListSelect(std::function<int(int)> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
973 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
974 void ConnectListSelect(int (*userfunc)(int)) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
975 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
976 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
977 _ConnectListSelect = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
978 if(!ListSelectConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
979 dw_signal_connect(hwnd, DW_SIGNAL_LIST_SELECT, DW_SIGNAL_FUNC(_OnListSelect), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
980 ListSelectConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
981 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
982 } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
983 protected: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
984 // Our signal handler functions to be overriden... |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
985 // If they are not overridden and an event is generated, remove the unused handler |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
986 virtual int OnListSelect(int index) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
987 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_LIST_SELECT); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
988 ListSelectConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
989 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
990 } |
2876
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
991 }; |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
992 |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
993 class Combobox : public TextEntry, public ListBoxes |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
994 { |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
995 public: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
996 // Constructors |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
997 Combobox(const char *text, unsigned long id) { SetHWND(dw_combobox_new(text, id)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
998 Combobox(unsigned long id) { SetHWND(dw_combobox_new("", id)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
999 Combobox(const char *text) { SetHWND(dw_combobox_new(text, 0)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1000 Combobox() { SetHWND(dw_combobox_new("", 0)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1001 }; |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1002 |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1003 class Listbox : public ListBoxes |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1004 { |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1005 public: |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1006 // Constructors |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1007 Listbox(unsigned long id, int multi) { SetHWND(dw_listbox_new(id, multi)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1008 Listbox(unsigned long id) { SetHWND(dw_listbox_new(id, FALSE)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1009 Listbox(int multi) { SetHWND(dw_listbox_new(0, multi)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1010 Listbox() { SetHWND(dw_listbox_new(0, FALSE)); } |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1011 }; |
e201a984d855
C++: Implement Entryfield, EntryfieldPassword, Listbox and HTML widgets.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2874
diff
changeset
|
1012 |
2880
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1013 // Base class for several ranged type widgets |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1014 class Ranged : virtual public Widget |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1015 { |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1016 private: |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1017 bool ValueChangedConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1018 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1019 std::function<int(int)> _ConnectValueChanged; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1020 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1021 int (*_ConnectValueChanged)(int value); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1022 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1023 static int _OnValueChanged(HWND window, int value, void *data) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1024 if(reinterpret_cast<Ranged *>(data)->_ConnectValueChanged) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1025 return reinterpret_cast<Ranged *>(data)->_ConnectValueChanged(value); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1026 return reinterpret_cast<Ranged *>(data)->OnValueChanged(value); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1027 } |
2880
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1028 protected: |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1029 void Setup() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1030 _ConnectValueChanged = 0; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1031 if(IsOverridden(Ranged::OnValueChanged, this)) { |
2880
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1032 dw_signal_connect(hwnd, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(_OnValueChanged), this); |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1033 ValueChangedConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1034 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1035 ValueChangedConnected = false; |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1036 } |
2880
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1037 } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1038 // Our signal handler functions to be overriden... |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1039 // If they are not overridden and an event is generated, remove the unused handler |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1040 virtual int OnValueChanged(int value) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1041 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_VALUE_CHANGED); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1042 ValueChangedConnected = false; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1043 return FALSE; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1044 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1045 public: |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1046 #ifdef DW_LAMBDA |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1047 void ConnectValueChanged(std::function<int(int)> userfunc) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1048 #else |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1049 void ConnectValueChanged(int (*userfunc)(int)) |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1050 #endif |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1051 { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1052 _ConnectValueChanged = userfunc; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1053 if(!ValueChangedConnected) { |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1054 dw_signal_connect(hwnd, DW_SIGNAL_VALUE_CHANGED, DW_SIGNAL_FUNC(_OnValueChanged), this); |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1055 ValueChangedConnected = true; |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1056 } |
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1057 } |
2880
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1058 }; |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1059 |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1060 class Slider : public Ranged |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1061 { |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1062 public: |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1063 // Constructors |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1064 Slider(int orient, int increments, unsigned long id) { SetHWND(dw_slider_new(orient, increments, id)); Setup(); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1065 Slider(int orient, int increments) { SetHWND(dw_slider_new(orient, increments, 0)); Setup(); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1066 |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1067 // User functions |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1068 unsigned int GetPos() { return dw_slider_get_pos(hwnd); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1069 void SetPos(unsigned int position) { dw_slider_set_pos(hwnd, position); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1070 }; |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1071 |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1072 class Scrollbar : public Ranged |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1073 { |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1074 public: |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1075 // Constructors |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1076 Scrollbar(int orient, unsigned long id) { SetHWND(dw_scrollbar_new(orient, id)); Setup(); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1077 Scrollbar(int orient) { SetHWND(dw_scrollbar_new(orient, 0)); Setup(); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1078 |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1079 // User functions |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1080 unsigned int GetPos() { return dw_scrollbar_get_pos(hwnd); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1081 void SetPos(unsigned int position) { dw_scrollbar_set_pos(hwnd, position); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1082 void SetRange(unsigned int range, unsigned int visible) { dw_scrollbar_set_range(hwnd, range, visible); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1083 }; |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1084 |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1085 class SpinButton : public Ranged, public TextEntry |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1086 { |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1087 public: |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1088 // Constructors |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1089 SpinButton(const char *text, unsigned long id) { SetHWND(dw_spinbutton_new(text, id)); Setup(); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1090 SpinButton(unsigned long id) { SetHWND(dw_spinbutton_new("", id)); Setup(); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1091 SpinButton(const char *text) { SetHWND(dw_spinbutton_new(text, 0)); Setup(); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1092 SpinButton() { SetHWND(dw_spinbutton_new("", 0)); Setup(); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1093 |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1094 // User functions |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1095 long GetPos() { return dw_spinbutton_get_pos(hwnd); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1096 void SetPos(long position) { dw_spinbutton_set_pos(hwnd, position); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1097 void SetLimits(long upper, long lower) { dw_spinbutton_set_limits(hwnd, upper, lower); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1098 }; |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1099 |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1100 // Multi-line Edit widget |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1101 class MLE : public Focusable |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1102 { |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1103 public: |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1104 // Constructors |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1105 MLE(unsigned long id) { SetHWND(dw_mle_new(id)); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1106 MLE() { SetHWND(dw_mle_new(0)); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1107 |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1108 // User functions |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1109 void Freeze() { dw_mle_freeze(hwnd); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1110 void Thaw() { dw_mle_thaw(hwnd); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1111 void Clear() { dw_mle_clear(hwnd); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1112 void Delete(int startpoint, int length) { dw_mle_delete(hwnd, startpoint, length); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1113 void Export(char *buffer, int startpoint, int length) { dw_mle_export(hwnd, buffer, startpoint, length); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1114 void Import(const char *buffer, int startpoint) { dw_mle_import(hwnd, buffer, startpoint); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1115 void GetSize(unsigned long *bytes, unsigned long *lines) { dw_mle_get_size(hwnd, bytes, lines); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1116 void Search(const char *text, int point, unsigned long flags) { dw_mle_search(hwnd, text, point, flags); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1117 void SetAutoComplete(int state) { dw_mle_set_auto_complete(hwnd, state); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1118 void SetCursor(int point) { dw_mle_set_cursor(hwnd, point); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1119 void SetEditable(int state) { dw_mle_set_editable(hwnd, state); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1120 void SetVisible(int line) { dw_mle_set_visible(hwnd, line); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1121 void SetWordWrap(int state) { dw_mle_set_word_wrap(hwnd, state); } |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1122 }; |
2ba0959eb3cf
C++: Implement Slider, Scrollbar, SpinButton, and MLE.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2879
diff
changeset
|
1123 |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1124 class Notebook : public Widget |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1125 { |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1126 private: |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1127 bool SwitchPageConnected; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1128 #ifdef DW_LAMBDA |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1129 std::function<int(unsigned long)> _ConnectSwitchPage; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1130 #else |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1131 int (*_ConnectSwitchPage)(unsigned long); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1132 #endif |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1133 static int _OnSwitchPage(HWND window, unsigned long pageid, void *data) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1134 if(reinterpret_cast<Notebook *>(data)->_ConnectSwitchPage) |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1135 return reinterpret_cast<Notebook *>(data)->_ConnectSwitchPage(pageid); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1136 return reinterpret_cast<Notebook *>(data)->OnSwitchPage(pageid); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1137 } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1138 protected: |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1139 void Setup() { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1140 _ConnectSwitchPage = 0; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1141 if(IsOverridden(Notebook::OnSwitchPage, this)) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1142 dw_signal_connect(hwnd, DW_SIGNAL_SWITCH_PAGE, DW_SIGNAL_FUNC(_OnSwitchPage), this); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1143 SwitchPageConnected = true; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1144 } else { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1145 SwitchPageConnected = false; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1146 } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1147 } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1148 // Our signal handler functions to be overriden... |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1149 // If they are not overridden and an event is generated, remove the unused handler |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1150 virtual int OnSwitchPage(unsigned long pageid) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1151 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_SWITCH_PAGE); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1152 SwitchPageConnected = false; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1153 return FALSE; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1154 } |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1155 public: |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1156 // Constructors |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1157 Notebook(unsigned long id, int top) { SetHWND(dw_notebook_new(id, top)); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1158 Notebook(unsigned long id) { SetHWND(dw_notebook_new(id, TRUE)); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1159 Notebook() { SetHWND(dw_notebook_new(0, TRUE)); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1160 |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1161 // User functions |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1162 void Pack(unsigned long pageid, Widget *page) { dw_notebook_pack(hwnd, pageid, page ? page->GetHWND() : DW_NOHWND); } |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1163 void PageDestroy(unsigned long pageid) { dw_notebook_page_destroy(hwnd, pageid); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1164 unsigned long PageGet() { return dw_notebook_page_get(hwnd); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1165 unsigned long PageNew(unsigned long flags, int front) { return dw_notebook_page_new(hwnd, flags, front); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1166 void PageSet(unsigned long pageid) { dw_notebook_page_set(hwnd, pageid); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1167 void PageSetStatusText(unsigned long pageid, const char *text) { dw_notebook_page_set_status_text(hwnd, pageid, text); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1168 void PageSetText(unsigned long pageid, const char *text) { dw_notebook_page_set_text(hwnd, pageid, text); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1169 #ifdef DW_LAMBDA |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1170 void ConnectSwitchPage(std::function<int(unsigned long)> userfunc) |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1171 #else |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1172 void ConnectSwitchPage(int (*userfunc)(unsigned long)) |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1173 #endif |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1174 { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1175 _ConnectSwitchPage = userfunc; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1176 if(!SwitchPageConnected) { |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1177 dw_signal_connect(hwnd, DW_SIGNAL_SWITCH_PAGE, DW_SIGNAL_FUNC(_OnSwitchPage), this); |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1178 SwitchPageConnected = true; |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1179 } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1180 } |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1181 }; |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1182 |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1183 class ObjectView : virtual public Widget |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1184 { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1185 private: |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1186 bool ItemSelectConnected, ItemContextConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1187 #ifdef DW_LAMBDA |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1188 std::function<int(HTREEITEM, char *, void *)> _ConnectItemSelect; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1189 std::function<int(char *, int, int, void *)> _ConnectItemContext; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1190 #else |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1191 int (*_ConnectItemSelect)(HTREEITEM, char *, void *); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1192 int (*_ConnectItemContext)(char *, int, int, void *); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1193 #endif |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1194 static int _OnItemSelect(HWND window, HTREEITEM item, char *text, void *itemdata, void *data) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1195 if(reinterpret_cast<ObjectView *>(data)->_ConnectItemSelect) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1196 return reinterpret_cast<ObjectView *>(data)->_ConnectItemSelect(item, text, itemdata); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1197 return reinterpret_cast<ObjectView *>(data)->OnItemSelect(item, text, itemdata); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1198 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1199 static int _OnItemContext(HWND window, char *text, int x, int y, void *itemdata, void *data) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1200 if(reinterpret_cast<ObjectView *>(data)->_ConnectItemContext) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1201 return reinterpret_cast<ObjectView *>(data)->_ConnectItemContext(text, x, y, itemdata); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1202 return reinterpret_cast<ObjectView *>(data)->OnItemContext(text, x, y, itemdata); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1203 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1204 protected: |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1205 void SetupObjectView() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1206 _ConnectItemSelect = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1207 _ConnectItemContext = 0; |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1208 if(IsOverridden(ObjectView::OnItemSelect, this)) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1209 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1210 ItemSelectConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1211 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1212 ItemSelectConnected = false; |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1213 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1214 if(IsOverridden(ObjectView::OnItemContext, this)) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1215 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1216 ItemContextConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1217 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1218 ItemContextConnected = false; |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1219 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1220 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1221 // Our signal handler functions to be overriden... |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1222 // If they are not overridden and an event is generated, remove the unused handler |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1223 virtual int OnItemSelect(HTREEITEM item, char *text, void *itemdata) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1224 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_ITEM_SELECT); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1225 ItemSelectConnected = false; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1226 return FALSE; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1227 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1228 virtual int OnItemContext(char *text, int x, int y, void *itemdata) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1229 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_ITEM_CONTEXT); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1230 ItemContextConnected = false; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1231 return FALSE; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1232 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1233 public: |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1234 #ifdef DW_LAMBDA |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1235 void ConnectItemSelect(std::function<int(HTREEITEM, char *, void *)> userfunc) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1236 #else |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1237 void ConnectItemSelect(int (*userfunc)(HTREEITEM, char *, void *)) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1238 #endif |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1239 { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1240 _ConnectItemSelect = userfunc; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1241 if(!ItemSelectConnected) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1242 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_SELECT, DW_SIGNAL_FUNC(_OnItemSelect), this); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1243 ItemSelectConnected = true; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1244 } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1245 } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1246 #ifdef DW_LAMBDA |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1247 void ConnectItemContext(std::function<int(char *, int, int, void *)> userfunc) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1248 #else |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1249 void ConnectItemContext(int (*userfunc)(char *, int, int, void *)) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1250 #endif |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1251 { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1252 _ConnectItemContext = userfunc; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1253 if(!ItemContextConnected) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1254 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_CONTEXT, DW_SIGNAL_FUNC(_OnItemContext), this); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1255 ItemContextConnected = true; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1256 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1257 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1258 }; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1259 |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1260 class Containers : virtual public Focusable, virtual public ObjectView |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1261 { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1262 private: |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1263 bool ItemEnterConnected, ColumnClickConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1264 #ifdef DW_LAMBDA |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1265 std::function<int(char *)> _ConnectItemEnter; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1266 std::function<int(int)> _ConnectColumnClick; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1267 #else |
2893
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1268 int (*_ConnectItemEnter)(char *); |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1269 int (*_ConnectColumnClick)(int); |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1270 #endif |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1271 static int _OnItemEnter(HWND window, char *text, void *data) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1272 if(reinterpret_cast<Containers *>(data)->_ConnectItemEnter) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1273 return reinterpret_cast<Containers *>(data)->_ConnectItemEnter(text); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1274 return reinterpret_cast<Containers *>(data)->OnItemEnter(text); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1275 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1276 static int _OnColumnClick(HWND window, int column, void *data) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1277 if(reinterpret_cast<Containers *>(data)->_ConnectColumnClick) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1278 return reinterpret_cast<Containers *>(data)->_ConnectColumnClick(column); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1279 return reinterpret_cast<Containers *>(data)->OnColumnClick(column); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1280 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1281 protected: |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1282 void *allocpointer; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1283 int allocrowcount; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1284 void SetupContainer() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1285 _ConnectItemEnter = 0; |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1286 _ConnectColumnClick = 0; |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1287 if(IsOverridden(Container::OnItemEnter, this)) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1288 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1289 ItemEnterConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1290 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1291 ItemEnterConnected = false; |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1292 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1293 if(IsOverridden(Container::OnColumnClick, this)) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1294 dw_signal_connect(hwnd, DW_SIGNAL_COLUMN_CLICK, DW_SIGNAL_FUNC(_OnColumnClick), this); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1295 ColumnClickConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1296 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1297 ColumnClickConnected = false; |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1298 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1299 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1300 // Our signal handler functions to be overriden... |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1301 // If they are not overridden and an event is generated, remove the unused handler |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1302 virtual int OnItemEnter(char *text) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1303 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_ITEM_ENTER); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1304 ItemEnterConnected = false; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1305 return FALSE; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1306 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1307 virtual int OnColumnClick(int column) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1308 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_COLUMN_CLICK); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1309 ColumnClickConnected = false; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1310 return FALSE; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1311 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1312 public: |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1313 // User functions |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1314 void Alloc(int rowcount) { allocpointer = dw_container_alloc(hwnd, rowcount); allocrowcount = rowcount; } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1315 void ChangeRowTitle(int row, char *title) { dw_container_change_row_title(hwnd, row, title); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1316 void Clear(int redraw) { dw_container_clear(hwnd, redraw); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1317 void Clear() { dw_container_clear(hwnd, TRUE); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1318 void Cursor(const char *text) { dw_container_cursor(hwnd, text); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1319 void Cursor(void *data) { dw_container_cursor_by_data(hwnd, data); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1320 void Delete(int rowcount) { dw_container_delete(hwnd, rowcount); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1321 void DeleteRow(char *title) { dw_container_delete_row(hwnd, title); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1322 void DeleteRow(void *data) { dw_container_delete_row_by_data(hwnd, data); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1323 void Insert() { dw_container_insert(hwnd, allocpointer, allocrowcount); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1324 void Optimize() { dw_container_optimize(hwnd); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1325 char *QueryNext(unsigned long flags) { return dw_container_query_next(hwnd, flags); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1326 char *QueryStart(unsigned long flags) { return dw_container_query_start(hwnd, flags); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1327 void Scroll(int direction, long rows) { dw_container_scroll(hwnd, direction, rows); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1328 void SetColumnWidth(int column, int width) { dw_container_set_column_width(hwnd, column, width); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1329 void SetRowData(int row, void *data) { dw_container_set_row_data(allocpointer, row, data); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1330 void SetRowTitle(int row, const char *title) { dw_container_set_row_title(allocpointer, row, title); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1331 void SetStripe(unsigned long oddcolor, unsigned long evencolor) { dw_container_set_stripe(hwnd, oddcolor, evencolor); } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1332 #ifdef DW_LAMBDA |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1333 void ConnectItemEnter(std::function<int(char *)> userfunc) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1334 #else |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1335 void ConnectItemEnter(int (*userfunc)(char *)) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1336 #endif |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1337 { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1338 _ConnectItemEnter = userfunc; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1339 if(!ItemEnterConnected) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1340 dw_signal_connect(hwnd, DW_SIGNAL_ITEM_ENTER, DW_SIGNAL_FUNC(_OnItemEnter), this); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1341 ItemEnterConnected = true; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1342 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1343 } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1344 #ifdef DW_LAMBDA |
2892
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1345 void ConnecColumnClick(std::function<int(int)> userfunc) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1346 #else |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1347 void ConnectColumnClick(int (*userfunc)(int)) |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1348 #endif |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1349 { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1350 _ConnectColumnClick = userfunc; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1351 if(!ColumnClickConnected) { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1352 dw_signal_connect(hwnd, DW_SIGNAL_COLUMN_CLICK, DW_SIGNAL_FUNC(_OnColumnClick), this); |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1353 ColumnClickConnected = true; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1354 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1355 } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1356 }; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1357 |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1358 class Container : public Containers |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1359 { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1360 public: |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1361 // Constructors |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1362 Container(unsigned long id, int multi) { SetHWND(dw_container_new(id, multi)); SetupObjectView(); SetupContainer(); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1363 Container(int multi) { SetHWND(dw_container_new(0, multi)); SetupObjectView(); SetupContainer(); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1364 Container() { SetHWND(dw_container_new(0, FALSE)); SetupObjectView(); SetupContainer(); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1365 |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1366 // User functions |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1367 int Setup(unsigned long *flags, char **titles, int count, int separator) { return dw_container_setup(hwnd, flags, titles, count, separator); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1368 void ChangeItem(int column, int row, void *data) { dw_container_change_item(hwnd, column, row, data); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1369 int GetColumnType(int column) { return dw_container_get_column_type(hwnd, column); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1370 void SetItem(int column, int row, void *data) { dw_container_set_item(hwnd, allocpointer, column, row, data); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1371 }; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1372 |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1373 class Filesystem : public Containers |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1374 { |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1375 public: |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1376 // Constructors |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1377 Filesystem(unsigned long id, int multi) { SetHWND(dw_container_new(id, multi)); SetupObjectView(); SetupContainer(); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1378 Filesystem(int multi) { SetHWND(dw_container_new(0, multi)); SetupObjectView(); SetupContainer(); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1379 Filesystem() { SetHWND(dw_container_new(0, FALSE)); SetupObjectView(); SetupContainer(); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1380 |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1381 // User functions |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1382 int Setup(unsigned long *flags, char **titles, int count) { return dw_filesystem_setup(hwnd, flags, titles, count); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1383 void ChangeFile(int row, const char *filename, HICN icon) { dw_filesystem_change_file(hwnd, row, filename, icon); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1384 void ChangeItem(int column, int row, void *data) { dw_filesystem_change_item(hwnd, column, row, data); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1385 int GetColumnType(int column) { return dw_filesystem_get_column_type(hwnd, column); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1386 void SetColumnTitle(const char *title) { dw_filesystem_set_column_title(hwnd, title); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1387 void SetFile(int row, const char *filename, HICN icon) { dw_filesystem_set_file(hwnd, allocpointer, row, filename, icon); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1388 void SetItem(int column, int row, void *data) { dw_filesystem_set_item(hwnd, allocpointer, column, row, data); } |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1389 }; |
387a6242fa77
C++: Add the Container and Filesystem classes, plus the base for Tree.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2891
diff
changeset
|
1390 |
2893
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1391 class Tree : virtual public Focusable, virtual public ObjectView |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1392 { |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1393 private: |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1394 bool TreeExpandConnected; |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1395 #ifdef DW_LAMBDA |
2893
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1396 std::function<int(HTREEITEM)> _ConnectTreeExpand; |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1397 #else |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1398 int (*_ConnectTreeExpand)(HTREEITEM); |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1399 #endif |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1400 static int _OnTreeExpand(HWND window, HTREEITEM item, void *data) { |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1401 if(reinterpret_cast<Tree *>(data)->_ConnectTreeExpand) |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1402 return reinterpret_cast<Tree *>(data)->_ConnectTreeExpand(item); |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1403 return reinterpret_cast<Tree *>(data)->OnTreeExpand(item); |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1404 } |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1405 void SetupTree() { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1406 _ConnectTreeExpand = 0; |
2893
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1407 if(IsOverridden(Tree::OnTreeExpand, this)) { |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1408 dw_signal_connect(hwnd, DW_SIGNAL_TREE_EXPAND, DW_SIGNAL_FUNC(_OnTreeExpand), this); |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1409 TreeExpandConnected = true; |
2903
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1410 } else { |
9fd16f694a77
C++: MSVC does not seem to initialize the class fields...
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2901
diff
changeset
|
1411 TreeExpandConnected = false; |
2893
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1412 } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1413 } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1414 protected: |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1415 // Our signal handler functions to be overriden... |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1416 // If they are not overridden and an event is generated, remove the unused handler |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1417 virtual int OnTreeExpand(HTREEITEM item) { |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1418 dw_signal_disconnect_by_name(hwnd, DW_SIGNAL_TREE_EXPAND); |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1419 TreeExpandConnected = false; |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1420 return FALSE; |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1421 } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1422 public: |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1423 // Constructors |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1424 Tree(unsigned long id) { SetHWND(dw_tree_new(id)); SetupObjectView(); SetupTree(); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1425 Tree() { SetHWND(dw_tree_new(0)); SetupObjectView(); SetupTree(); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1426 |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1427 // User functions |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1428 void Clear() { dw_tree_clear(hwnd); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1429 HTREEITEM GetParent(HTREEITEM item) { return dw_tree_get_parent(hwnd, item); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1430 char *GetTitle(HTREEITEM item) { return dw_tree_get_title(hwnd, item); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1431 HTREEITEM Insert(const char *title, HICN icon, HTREEITEM parent, void *itemdata) { return dw_tree_insert(hwnd, title, icon, parent, itemdata); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1432 HTREEITEM Insert(const char *title, HTREEITEM item, HICN icon, HTREEITEM parent, void *itemdata) { return dw_tree_insert_after(hwnd, item, title, icon, parent, itemdata); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1433 void Change(HTREEITEM item, const char *title, HICN icon) { dw_tree_item_change(hwnd, item, title, icon); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1434 void Collapse(HTREEITEM item) { dw_tree_item_collapse(hwnd, item); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1435 void Delete(HTREEITEM item) { dw_tree_item_delete(hwnd, item); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1436 void Expand(HTREEITEM item) { dw_tree_item_expand(hwnd, item); } |
2896
d91aaffca1fc
C++: Fix missing return in DW::Tree::GetData().
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2895
diff
changeset
|
1437 void *GetData(HTREEITEM item) { return dw_tree_item_get_data(hwnd, item); } |
2893
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1438 void Select(HTREEITEM item) { dw_tree_item_select(hwnd, item); } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1439 void SetData(HTREEITEM item, void *itemdata) { dw_tree_item_set_data(hwnd, item, itemdata); } |
2895
5a6bf6bd3001
C++: Divide up C++11 and Lambda support since some compilers can
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2893
diff
changeset
|
1440 #ifdef DW_LAMBDA |
2893
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1441 void ConnectTreeExpand(std::function<int(HTREEITEM)> userfunc) |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1442 #else |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1443 void ConnectTreeExpand(int (*userfunc)(HTREEITEM)) |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1444 #endif |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1445 { |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1446 _ConnectTreeExpand = userfunc; |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1447 if(!TreeExpandConnected) { |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1448 dw_signal_connect(hwnd, DW_SIGNAL_TREE_EXPAND, DW_SIGNAL_FUNC(_OnTreeExpand), this); |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1449 TreeExpandConnected = true; |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1450 } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1451 } |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1452 }; |
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1453 |
2899
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1454 class SplitBar : public Widget |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1455 { |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1456 public: |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1457 // Constructors |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1458 SplitBar(int orient, Widget *topleft, Widget *bottomright, unsigned long id) { |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1459 SetHWND(dw_splitbar_new(orient, topleft ? topleft->GetHWND() : DW_NOHWND, bottomright ? bottomright->GetHWND() : DW_NOHWND, id)); } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1460 SplitBar(int orient, Widget *topleft, Widget *bottomright) { |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1461 SetHWND(dw_splitbar_new(orient, topleft ? topleft->GetHWND() : DW_NOHWND, bottomright ? bottomright->GetHWND() : DW_NOHWND, 0)); } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1462 |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1463 // User functions |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1464 float Get() { return dw_splitbar_get(hwnd); } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1465 void Set(float percent) { dw_splitbar_set(hwnd, percent); } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1466 }; |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1467 |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1468 class Dialog : public Handle |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1469 { |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1470 private: |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1471 DWDialog *dialog; |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1472 public: |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1473 // Constructors |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1474 Dialog(void *data) { dialog = dw_dialog_new(data); SetHandle(reinterpret_cast<void *>(dialog)); } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1475 Dialog() { dialog = dw_dialog_new(DW_NULL); SetHandle(reinterpret_cast<void *>(dialog)); } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1476 |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1477 // User functions |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1478 void *Wait() { void *retval = dw_dialog_wait(dialog); delete this; return retval; } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1479 int Dismiss(void *data) { return dw_dialog_dismiss(dialog, data); } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1480 int Dismiss() { return dw_dialog_dismiss(dialog, NULL); } |
425dc0126818
C++: Implement SplitBar and Dialog classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2898
diff
changeset
|
1481 }; |
2893
5ae86b395927
C++: Implement the Tree widget.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2892
diff
changeset
|
1482 |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1483 class Mutex : public Handle |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1484 { |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1485 private: |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1486 HMTX mutex; |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1487 public: |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1488 // Constructors |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1489 Mutex() { mutex = dw_mutex_new(); SetHandle(reinterpret_cast<void *>(mutex)); } |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1490 // Destructor |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1491 ~Mutex() { dw_mutex_close(mutex); mutex = 0; } |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1492 |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1493 // User functions |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1494 void Close() { dw_mutex_close(mutex); mutex = 0; delete this; } |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1495 void Lock() { dw_mutex_lock(mutex); } |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1496 int TryLock() { return dw_mutex_trylock(mutex); } |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1497 void Unlock() { dw_mutex_unlock(mutex); } |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1498 }; |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1499 |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1500 class Event : public Handle |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1501 { |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1502 private: |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1503 HEV event, named; |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1504 public: |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1505 // Constructors |
2913
6981feb6210b
C++/OS2: HEV is not a pointer type on OS/2, use 0 instead.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2912
diff
changeset
|
1506 Event() { event = dw_event_new(); named = 0; SetHandle(reinterpret_cast<void *>(event)); } |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1507 Event(const char *name) { |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1508 // Try to attach to an existing event |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1509 named = dw_named_event_get(name); |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1510 if(!named) { |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1511 // Otherwise try to create a new one |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1512 named = dw_named_event_new(name); |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1513 } |
2913
6981feb6210b
C++/OS2: HEV is not a pointer type on OS/2, use 0 instead.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2912
diff
changeset
|
1514 event = 0; |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1515 SetHandle(reinterpret_cast<void *>(named)); |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1516 } |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1517 // Destructor |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1518 virtual ~Event() { if(event) { dw_event_close(&event); } if(named) { dw_named_event_close(named); } } |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1519 |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1520 // User functions |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1521 int Close() { |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1522 int retval = DW_ERROR_UNKNOWN; |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1523 |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1524 if(event) { |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1525 retval = dw_event_close(&event); |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1526 } else if(named) { |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1527 retval = dw_named_event_close(named); |
2913
6981feb6210b
C++/OS2: HEV is not a pointer type on OS/2, use 0 instead.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2912
diff
changeset
|
1528 named = 0; |
2908
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1529 } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1530 delete this; |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1531 return retval; |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1532 } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1533 int Post() { return (named ? dw_named_event_post(named) : dw_event_post(event)); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1534 int Reset() { return (named ? dw_named_event_reset(named) : dw_event_reset(event)); } |
1567f787b965
C++: Add Notebook class and add named event support to the Event class.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2907
diff
changeset
|
1535 int Wait(unsigned long timeout) { return (named ? dw_named_event_wait(named, timeout) : dw_event_wait(event, timeout)); } |
2900
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1536 }; |
fe31d4535270
C++: Implement Event and Mutex classes.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2899
diff
changeset
|
1537 |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1538 class Timer : public Handle |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1539 { |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1540 private: |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1541 HTIMER timer; |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1542 #ifdef DW_LAMBDA |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1543 std::function<int()> _ConnectTimer; |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1544 #else |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1545 int (*_ConnectTimer)(); |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1546 #endif |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1547 static int _OnTimer(void *data) { |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1548 if(reinterpret_cast<Timer *>(data)->_ConnectTimer) |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1549 return reinterpret_cast<Timer *>(data)->_ConnectTimer(); |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1550 return reinterpret_cast<Timer *>(data)->OnTimer(); |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1551 } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1552 public: |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1553 // Constructors |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1554 Timer(int interval) { _ConnectTimer = 0; timer = dw_timer_connect(interval, DW_SIGNAL_FUNC(_OnTimer), this); SetHandle(reinterpret_cast<void *>(timer)); } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1555 #ifdef DW_LAMBDA |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1556 Timer(int interval, std::function<int()> userfunc) |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1557 #else |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1558 Timer(int interval, int (*userfunc)()) |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1559 #endif |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1560 { |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1561 _ConnectTimer = userfunc; |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1562 timer = dw_timer_connect(interval, DW_SIGNAL_FUNC(_OnTimer), this); |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1563 SetHandle(reinterpret_cast<void *>(timer)); |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1564 } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1565 // Destructor |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1566 virtual ~Timer() { if(timer) { dw_timer_disconnect(timer); timer = 0; } } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1567 |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1568 // User functions |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1569 HTIMER GetHTIMER() { return timer; } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1570 void Disconnect() { if(timer) { dw_timer_disconnect(timer); timer = 0; } delete this; } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1571 protected: |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1572 // Our signal handler functions to be overriden... |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1573 // If they are not overridden and an event is generated, remove the unused handler |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1574 virtual int OnTimer() { |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1575 if(timer) |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1576 dw_timer_disconnect(timer); |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1577 delete this; |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1578 return FALSE; |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1579 } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1580 }; |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1581 |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1582 class App |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1583 { |
2866
6ea67d0809eb
Convert DW::App class into a singleton so subsequent DW::App::Init() calls
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2865
diff
changeset
|
1584 protected: |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1585 App() { } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1586 static App *_app; |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1587 public: |
2870
7b4e30c19757
C++: Disable singleton safety code for non C++11 compilers.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2869
diff
changeset
|
1588 // Allow the code to compile if handicapped on older compilers |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1589 #ifdef DW_CPP11 |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1590 // Singletons should not be cloneable. |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1591 App(App &other) = delete; |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1592 // Singletons should not be assignable. |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1593 void operator=(const App &) = delete; |
2870
7b4e30c19757
C++: Disable singleton safety code for non C++11 compilers.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2869
diff
changeset
|
1594 #endif |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1595 // Initialization functions for creating App |
2872
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
1596 static App *Init() { if(!_app) { _app = new App; dw_init(TRUE, 0, DW_NULL); } return _app; } |
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
1597 static App *Init(const char *appid) { if(!_app) { _app = new App(); dw_app_id_set(appid, DW_NULL); dw_init(TRUE, 0, DW_NULL); } return _app; } |
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
1598 static App *Init(const char *appid, const char *appname) { if(!_app) { _app = new App(); dw_app_id_set(appid, appname); dw_init(TRUE, 0, DW_NULL); } return _app; } |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1599 static App *Init(int argc, char *argv[]) { if(!_app) { _app = new App(); dw_init(TRUE, argc, argv); } return _app; } |
2872
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
1600 static App *Init(int argc, char *argv[], const char *appid) { if(!_app) { _app = new App(); dw_app_id_set(appid, DW_NULL); dw_init(TRUE, argc, argv); } return _app; } |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1601 static App *Init(int argc, char *argv[], const char *appid, const char *appname) { if(!_app) { _app = new App(); dw_app_id_set(appid, appname); dw_init(TRUE, argc, argv); } return _app; } |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1602 // Destrouctor |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1603 ~App() { dw_exit(0); } |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1604 |
2882
99311a9091af
C++: Add lambda support via Connect functions on C++11, on older compilers
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2880
diff
changeset
|
1605 // User functions |
2869
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1606 void Main() { dw_main(); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1607 void MainIteration() { dw_main_iteration(); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1608 void MainQuit() { dw_main_quit(); } |
c873b6f862b9
C++: Add text widget and packing to the window.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2868
diff
changeset
|
1609 void Exit(int exitcode) { dw_exit(exitcode); } |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1610 void Shutdown() { dw_shutdown(); } |
2901
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1611 int MessageBox(const char *title, int flags, const char *format, ...) { |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1612 int retval; |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1613 va_list args; |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1614 |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1615 va_start(args, format); |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1616 retval = dw_vmessagebox(title, flags, format, args); |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1617 va_end(args); |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1618 |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1619 return retval; |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1620 } |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1621 void Debug(const char *format, ...) { |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1622 va_list args; |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1623 |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1624 va_start(args, format); |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1625 dw_vdebug(format, args); |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1626 va_end(args); |
761b7a12b079
Add va_list versions of dw_debug() and dw_messagebox() for use in C++ bindings.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2900
diff
changeset
|
1627 } |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1628 void Beep(int freq, int dur) { dw_beep(freq, dur); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1629 char *GetDir() { return dw_app_dir(); } |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1630 void GetEnvironment(DWEnv *env) { dw_environment_query(env); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1631 int GetScreenWidth() { return dw_screen_width(); } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1632 int GetScreenHeight() { return dw_screen_height(); } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1633 unsigned long GetColorDepth() { return dw_color_depth_get(); } |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1634 char *GetClipboard() { return dw_clipboard_get_text(); } |
2912
08fcbd5fa069
C++: Fix a warning and implement a few features in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2911
diff
changeset
|
1635 void SetClipboard(const char *text) { if(text) dw_clipboard_set_text(text, (int)strlen(text)); } |
08fcbd5fa069
C++: Fix a warning and implement a few features in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2911
diff
changeset
|
1636 void SetClipboard(const char *text, int len) { if(text) dw_clipboard_set_text(text, len); } |
2905
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1637 void SetDefaultFont(const char *fontname) { dw_font_set_default(fontname); } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1638 unsigned long ColorChoose(unsigned long initial) { return dw_color_choose(initial); } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1639 char *FileBrowse(const char *title, const char *defpath, const char *ext, int flags) { return dw_file_browse(title, defpath, ext, flags); } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1640 char *FontChoose(const char *currfont) { return dw_font_choose(currfont); } |
0f5008c05134
C++: Implement Timer class, a bunch of destructors and functions in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2903
diff
changeset
|
1641 void Free(void *buff) { dw_free(buff); } |
2912
08fcbd5fa069
C++: Fix a warning and implement a few features in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2911
diff
changeset
|
1642 int GetFeature(DWFEATURE feature) { return dw_feature_get(feature); } |
08fcbd5fa069
C++: Fix a warning and implement a few features in App.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2911
diff
changeset
|
1643 int SetFeature(DWFEATURE feature, int state) { return dw_feature_set(feature, state); } |
2914
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1644 HICN LoadIcon(unsigned long id) { return dw_icon_load(0, id); } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1645 HICN LoadIcon(const char *filename) { return dw_icon_load_from_file(filename); } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1646 HICN LoadIcon(const char *data, int len) { return dw_icon_load_from_data(data, len); } |
8af64b6d75a9
C++: Start rewriting dwtest in C++ as dwtestoo.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2913
diff
changeset
|
1647 void FreeIcon(HICN icon) { dw_icon_free(icon); } |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1648 }; |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1649 |
2866
6ea67d0809eb
Convert DW::App class into a singleton so subsequent DW::App::Init() calls
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2865
diff
changeset
|
1650 // Static singleton reference declared outside of the class |
2872
e62fc9b3b09c
C++: Add DW_NULL which is nullptr on C++11 and NULL on older versions.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2871
diff
changeset
|
1651 App* App::_app = DW_NULL; |
2866
6ea67d0809eb
Convert DW::App class into a singleton so subsequent DW::App::Init() calls
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
2865
diff
changeset
|
1652 |
2861
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1653 } /* namespace DW */ |
ef7a414f9b71
Add initial C++ binding header and example program.
bsmith@81767d24-ef19-dc11-ae90-00e081727c95
parents:
diff
changeset
|
1654 #endif |