2 /******************************************************************************
3 * MODULE : wk_widget.hpp
4 * DESCRIPTION: Definition of abstract native widgets
5 * COPYRIGHT : (C) 1999 Joris van der Hoeven
6 *******************************************************************************
7 * This software falls under the GNU general public license version 3 or later.
8 * It comes WITHOUT ANY WARRANTY WHATSOEVER. For details, see the file LICENSE
9 * in the root directory or <http://www.gnu.org/licenses/gpl-3.0.html>.
10 ******************************************************************************/
15 #include "Widkit/event.hpp"
17 /******************************************************************************
18 * The abstract widkit implementation of widgets
19 ******************************************************************************/
22 class wk_widget_rep
: public widget_rep
{
24 window win
; // underlying window
25 SI ox
, oy
; // origin of widget in window
26 SI w
, h
; // width and height of widget
27 gravity grav
; // position of the origin in the widget
28 array
<wk_widget
> a
; // children of widget
29 array
<string
> name
; // names for the children
31 wk_widget_rep (array
<wk_widget
> a
, array
<string
> name
, gravity grav
);
34 void send (slot s
, blackbox val
);
35 blackbox
query (slot s
, int type_id
);
36 void notify (slot s
, blackbox new_val
);
37 widget
read (slot s
, blackbox index
);
38 void write (slot s
, blackbox index
, widget w
);
40 virtual operator tree () = 0;
41 virtual bool handle (event ev
) = 0;
42 virtual bool is_window_widget ();
44 SI
x1 (); SI
y1 (); // lower left window coordinates of widget
45 SI
x2 (); SI
y2 (); // upper right window coordinates of widget
47 void wk_error (string message
);
49 friend class wk_widget
;
54 ABSTRACT_NULL(wk_widget
);
55 inline wk_widget
operator [] (int i
) { return rep
->a
[i
]; }
56 wk_widget
operator [] (string s
);
57 inline operator tree () { return (tree
) (*rep
); }
58 inline bool operator == (wk_widget w
) { return rep
== w
.rep
; }
59 inline bool operator != (wk_widget w
) { return rep
!= w
.rep
; }
61 ABSTRACT_NULL_CODE(wk_widget
);
63 inline widget
abstract (wk_widget w
) {
64 return widget (w
.rep
); }
65 inline wk_widget
concrete (widget w
) {
66 return wk_widget ((wk_widget_rep
*) w
.rep
); }
67 array
<widget
> abstract (array
<wk_widget
> a
);
68 array
<wk_widget
> concrete (array
<widget
> a
);
70 tm_ostream
& operator << (tm_ostream
& out
, wk_widget w
);
71 wk_widget
operator << (wk_widget w
, event ev
);
73 void wk_grab_pointer (wk_widget w
);
74 void wk_ungrab_pointer (wk_widget w
);
75 bool wk_has_pointer_grab (wk_widget w
);
77 #define WK_FAILED(msg) { wk_error (msg); FAILED ("widget_error"); }
79 /******************************************************************************
80 * Exported special widgets and window widget destruction
81 ******************************************************************************/
83 wk_widget
horizontal_list (array
<wk_widget
> a
);
84 wk_widget
horizontal_list (array
<wk_widget
> a
, array
<string
> name
);
85 wk_widget
vertical_list (array
<wk_widget
> a
);
86 wk_widget
vertical_list (array
<wk_widget
> a
, array
<string
> name
);
87 wk_widget
vertical_menu (array
<wk_widget
> a
);
88 wk_widget
tile (array
<wk_widget
> a
, int cols
);
89 wk_widget
tile (array
<wk_widget
> a
, int cols
, array
<string
> name
);
90 wk_widget
horizontal_array (array
<wk_widget
> a
, int stretch_me
= -1);
91 wk_widget
horizontal_array (array
<wk_widget
> a
, array
<string
> s
,
93 wk_widget
switch_widget (array
<wk_widget
> a
, array
<string
> name
, int init
= 0);
94 wk_widget
optional_widget (wk_widget w
, bool on
= true);
95 wk_widget
glue_wk_widget (bool hx
=true, bool vx
=true, SI w
=0, SI h
=0);
96 wk_widget
separator_wk_widget (SI pre
=0, SI post
=0, bool vert
=false);
97 wk_widget
text_wk_widget (string s
, bool tsp
= false, string lan
="");
98 wk_widget
menu_text_wk_widget (string s
, color col
, bool tsp
=true,
99 string lan
="", bool tt
= false);
100 wk_widget
xpm_wk_widget (url file_name
, bool transp
= true);
101 wk_widget
command_button (wk_widget w
, command cmd
, bool button_flag
= false);
102 wk_widget
command_button (wk_widget lw
, wk_widget rw
, command cmd
);
103 wk_widget
command_button (wk_widget lw
, wk_widget cw
, wk_widget rw
,
104 command cmd
, bool e
=true, bool c
=false);
105 wk_widget
pulldown_button (wk_widget w
, wk_widget m
, bool button_flag
= false);
106 wk_widget
pullright_button (wk_widget w
, wk_widget m
, bool button_flag
= false);
107 wk_widget
pulldown_button (wk_widget w
, promise
<wk_widget
> pw
);
108 wk_widget
pullright_button (wk_widget w
, promise
<wk_widget
> pw
);
109 wk_widget
popup_widget (wk_widget w
, gravity quit
=center
);
110 wk_widget
canvas_widget (wk_widget w
, gravity grav
=north_west
);
111 wk_widget
input_text_wk_widget (command call_back
);
112 wk_widget
input_text_wk_widget (command cb
, string type
, array
<string
> def
);
113 wk_widget
inputs_list_wk_widget (command call_back
, array
<string
> prompts
);
114 wk_widget
file_chooser_wk_widget (command cmd
, string type
="texmacs",
116 wk_widget
balloon_widget (wk_widget w
, wk_widget help
);
117 wk_widget
wait_wk_widget (SI w
, SI h
, string message
);
118 wk_widget
texmacs_wk_widget (int mask
, command quit
);
119 wk_widget
plain_window_widget (wk_widget wid
, string s
);
120 wk_widget
popup_window_widget (wk_widget wid
, string s
);
121 void destroy_window_widget (wk_widget w
);
123 #endif // defined WK_WIDGET_H