1 
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 ******************************************************************************/
11 
12 #ifndef WK_WIDGET_H
13 #define WK_WIDGET_H
14 #include "widget.hpp"
15 #include "Widkit/event.hpp"
16 
17 /******************************************************************************
18 * The abstract widkit implementation of widgets
19 ******************************************************************************/
20 
21 class wk_widget;
22 class wk_widget_rep: public widget_rep {
23 public:
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
30 
31   wk_widget_rep (array<wk_widget> a, array<string> name, gravity grav);
32   ~wk_widget_rep ();
33 
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);
39 
40   virtual operator tree () = 0;
41   virtual tm_ostream& print (tm_ostream& out);
42   virtual bool handle (event ev) = 0;
43   virtual bool is_window_widget ();
44 
45   SI    x1 (); SI y1 (); // lower left window coordinates of widget
46   SI    x2 (); SI y2 (); // upper right window coordinates of widget
47   bool  attached ();
48   void  wk_error (string message);
49 
50   friend class wk_widget;
51 };
52 
53 class wk_widget {
54 public:
55 ABSTRACT_NULL(wk_widget);
operator [](int i)56   inline wk_widget operator [] (int i) { return rep->a[i]; }
57   wk_widget operator [] (string s);
operator tree()58   inline operator tree () { return (tree) (*rep); }
operator ==(wk_widget w)59   inline bool operator == (wk_widget w) { return rep == w.rep; }
operator !=(wk_widget w)60   inline bool operator != (wk_widget w) { return rep != w.rep; }
61 };
62 ABSTRACT_NULL_CODE(wk_widget);
63 
abstract(wk_widget w)64 inline widget abstract (wk_widget w) {
65   return widget (w.rep); }
concrete(widget w)66 inline wk_widget concrete (widget w) {
67   return wk_widget ((wk_widget_rep*) w.rep); }
68 array<widget> abstract (array<wk_widget> a);
69 array<wk_widget> concrete (array<widget> a);
70 
71 tm_ostream& operator << (tm_ostream& out, wk_widget w);
72 wk_widget operator << (wk_widget w, event ev);
73 
74 void wk_grab_pointer (wk_widget w);
75 void wk_ungrab_pointer (wk_widget w);
76 bool wk_has_pointer_grab (wk_widget w);
77 
78 SI decode_length (string s, wk_widget w, int style);
79 
80 #define WK_FAILED(msg) { wk_error (msg); FAILED ("widget_error"); }
81 
82 /******************************************************************************
83 * Exported special widgets and window widget destruction
84 ******************************************************************************/
85 
86 wk_widget extend (wk_widget w, array<wk_widget> a);
87 wk_widget horizontal_list (array<wk_widget> a);
88 wk_widget horizontal_list (array<wk_widget> a, array<string> name);
89 wk_widget vertical_list (array<wk_widget> a);
90 wk_widget vertical_list (array<wk_widget> a, array<string> name);
91 wk_widget vertical_menu (array<wk_widget> a);
92 wk_widget tile (array<wk_widget> a, int cols);
93 wk_widget tile (array<wk_widget> a, int cols, array<string> name);
94 wk_widget aligned_widget (array<wk_widget> lhs, array<wk_widget> rhs,
95 			  SI hsep= 3*PIXEL, SI vsep= 3*PIXEL,
96                           SI lpad= 0, SI rpad= 0);
97 wk_widget horizontal_array (array<wk_widget> a, int stretch_me= -1);
98 wk_widget horizontal_array (array<wk_widget> a, array<string> s,
99 			    int stretch_me= -1);
100 wk_widget tabs_widget (array<wk_widget> tabs, array<wk_widget> bodies);
101 wk_widget icon_tabs_widget (array<url> us, array<wk_widget> tabs,
102                             array<wk_widget> bodies);
103 wk_widget switch_widget (array<wk_widget> a, array<string> name, int init= 0);
104 wk_widget optional_widget (wk_widget w, bool on= true);
105 wk_widget wrapped_widget (wk_widget w, command cmd);
106 wk_widget glue_wk_widget (bool hx=true, bool vx=true, SI w=0, SI h=0);
107 wk_widget glue_wk_widget (tree c, bool hx=true, bool vx=true, SI w=0, SI h=0);
108 wk_widget separator_wk_widget (SI pre=0, SI post=0, bool vert=false);
109 wk_widget text_wk_widget (string s, int style= 0, bool tsp= false);
110 wk_widget menu_text_wk_widget (string s, int style, color col,
111 			       bool tsp=true, bool tt= false);
112 wk_widget xpm_wk_widget (url file_name, bool transp= true);
113 wk_widget minibar_widget (wk_widget w);
114 wk_widget command_button (wk_widget w, command cmd, int style= 0);
115 wk_widget command_button (wk_widget lw, wk_widget rw, command cmd, int st= 0);
116 wk_widget command_button (wk_widget lw, wk_widget cw, wk_widget rw,
117 			  command c, int style= 0);
118 wk_widget pulldown_button (wk_widget w, wk_widget m, int style= 0);
119 wk_widget pullright_button (wk_widget w, wk_widget m, int style= 0);
120 wk_widget pulldown_button (wk_widget w, promise<wk_widget> pw);
121 wk_widget pullright_button (wk_widget w, promise<wk_widget> pw);
122 wk_widget toggle_wk_widget (command cmd, bool on= false, int style= 0);
123 wk_widget popup_widget (wk_widget w, gravity quit=center);
124 wk_widget canvas_widget (wk_widget w, gravity grav=north_west, bool rf= false);
125 wk_widget user_canvas_widget (wk_widget wid, int style= 0);
126 wk_widget resize_widget (wk_widget w, int style, string w1, string h1,
127                          string w2, string h2, string w3, string h3,
128                          string hpos, string vpos);
129 wk_widget hsplit_widget (wk_widget l, wk_widget r);
130 wk_widget vsplit_widget (wk_widget t, wk_widget b);
131 wk_widget input_text_wk_widget (command cb,
132 				int style= 0, string w= "1w", bool pf= true);
133 wk_widget input_text_wk_widget (command cb, string type, array<string> def,
134 				int style= 0, string w= "1w", bool pf= false);
135 wk_widget inputs_list_wk_widget (command call_back, array<string> prompts);
136 wk_widget enum_wk_widget (command cb, array<string> vals, string cur,
137                           int style= 0, string w= "1w");
138 wk_widget choice_wk_widget (command cb, array<string> vals, string val);
139 wk_widget choice_wk_widget (command cb, array<string> vals, array<string> mc);
140 wk_widget file_chooser_wk_widget (command cmd, string type);
141 wk_widget color_picker_wk_widget (command cmd, bool bg, array<tree> proposals);
142 wk_widget balloon_widget (wk_widget w, wk_widget help);
143 wk_widget wait_wk_widget (SI w, SI h, string message);
144 wk_widget ink_wk_widget (command cb);
145 wk_widget refresh_wk_widget (string tmwid, string kind);
146 wk_widget refreshable_wk_widget (object promise, string kind);
147 wk_widget texmacs_wk_widget (int mask, command quit);
148 wk_widget plain_window_widget (wk_widget wid, string s, command q= command ());
149 wk_widget popup_window_widget (wk_widget wid, string s);
150 void      destroy_window_widget (wk_widget w);
151 
152 #endif // defined WK_WIDGET_H
153