1 /* Libvisual - The audio visualisation framework.
2  *
3  * Copyright (C) 2004, 2005, 2006 Dennis Smit <ds@nerds-incorporated.org>
4  *
5  * Authors: Dennis Smit <ds@nerds-incorporated.org>
6  *
7  * $Id: lv_ui.h,v 1.42 2006/01/22 13:23:37 synap Exp $
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser General Public License as
11  * published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  */
23 
24 #ifndef _LV_UI_H
25 #define _LV_UI_H
26 
27 #include <libvisual-0.4/libvisual/lv_list.h>
28 #include <libvisual-0.4/libvisual/lv_param.h>
29 #include <libvisual-0.4/libvisual/lv_video.h>
30 #include <libvisual-0.4/libvisual/lv_common.h>
31 
32 VISUAL_BEGIN_DECLS
33 
34 #define VISUAL_UI_WIDGET(obj)				(VISUAL_CHECK_CAST ((obj), VisUIWidget))
35 #define VISUAL_UI_CONTAINER(obj)			(VISUAL_CHECK_CAST ((obj), VisUIContainer))
36 #define VISUAL_UI_BOX(obj)				(VISUAL_CHECK_CAST ((obj), VisUIBox))
37 #define VISUAL_UI_TABLE_ENTRY(obj)			(VISUAL_CHECK_CAST ((obj), VisUITableEntry))
38 #define VISUAL_UI_TABLE(obj)				(VISUAL_CHECK_CAST ((obj), VisUITable))
39 #define VISUAL_UI_NOTEBOOK(obj)				(VISUAL_CHECK_CAST ((obj), VisUINotebook))
40 #define VISUAL_UI_FRAME(obj)				(VISUAL_CHECK_CAST ((obj), VisUIFrame))
41 #define VISUAL_UI_LABEL(obj)				(VISUAL_CHECK_CAST ((obj), VisUILabel))
42 #define VISUAL_UI_IMAGE(obj)				(VISUAL_CHECK_CAST ((obj), VisUIImage))
43 #define VISUAL_UI_SEPARATOR(obj)			(VISUAL_CHECK_CAST ((obj), VisUISeparator))
44 #define VISUAL_UI_MUTATOR(obj)				(VISUAL_CHECK_CAST ((obj), VisUIMutator))
45 #define VISUAL_UI_RANGE(obj)				(VISUAL_CHECK_CAST ((obj), VisUIRange))
46 #define VISUAL_UI_ENTRY(obj)				(VISUAL_CHECK_CAST ((obj), VisUIEntry))
47 #define VISUAL_UI_SLIDER(obj)				(VISUAL_CHECK_CAST ((obj), VisUISlider))
48 #define VISUAL_UI_NUMERIC(obj)				(VISUAL_CHECK_CAST ((obj), VisUINumeric))
49 #define VISUAL_UI_COLOR(obj)				(VISUAL_CHECK_CAST ((obj), VisUIColor))
50 #define VISUAL_UI_COLORBUTTON(obj)			(VISUAL_CHECK_CAST ((obj), VisUIColorButton))
51 #define VISUAL_UI_COLORPALETTE(obj)			(VISUAL_CHECK_CAST ((obj), VisUIColorPalette))
52 #define VISUAL_UI_CHOICE_ENTRY(obj)			(VISUAL_CHECK_CAST ((obj), VisUIChoiceEntry))
53 #define VISUAL_UI_CHOICE(obj)				(VISUAL_CHECK_CAST ((obj), VisUIChoice))
54 #define VISUAL_UI_POPUP(obj)				(VISUAL_CHECK_CAST ((obj), VisUIPopup))
55 #define VISUAL_UI_LIST(obj)				(VISUAL_CHECK_CAST ((obj), VisUIList))
56 #define VISUAL_UI_RADIO(obj)				(VISUAL_CHECK_CAST ((obj), VisUIRadio))
57 #define VISUAL_UI_CHECKBOX(obj)				(VISUAL_CHECK_CAST ((obj), VisUICheckbox))
58 
59 /**
60  * Enumerate to define the different types of VisUIWidgets.
61  */
62 typedef enum {
63 	VISUAL_WIDGET_TYPE_NULL = 0,	/**< NULL widget */
64 	VISUAL_WIDGET_TYPE_WIDGET,	/**< Base widget: \a VisUIWidget. */
65 	VISUAL_WIDGET_TYPE_CONTAINER,	/**< Container widget: \a VisUIContainer. */
66 	VISUAL_WIDGET_TYPE_BOX,		/**< Box widget: \a VisUIBox. */
67 	VISUAL_WIDGET_TYPE_TABLE,	/**< Table widget: \a VisUITable. */
68 	VISUAL_WIDGET_TYPE_NOTEBOOK,	/**< Notebook widget: \a VisUINotebook. */
69 	VISUAL_WIDGET_TYPE_FRAME,	/**< Frame widget: \a VisUIFrame. */
70 	VISUAL_WIDGET_TYPE_LABEL,	/**< Label widget: \a VisUILabel. */
71 	VISUAL_WIDGET_TYPE_IMAGE,	/**< Image widget: \a VisUIImage. */
72 	VISUAL_WIDGET_TYPE_SEPARATOR,	/**< Separator widget: \a VisUISeparator. */
73 	VISUAL_WIDGET_TYPE_MUTATOR,	/**< Mutator base widget: \a VisUIMutator. */
74 	VISUAL_WIDGET_TYPE_RANGE,	/**< Range base widget: \a VisUIRange. */
75 	VISUAL_WIDGET_TYPE_ENTRY,	/**< Entry box widget: \a VisUIEntry. */
76 	VISUAL_WIDGET_TYPE_SLIDER,	/**< Slider widget: \a VisUISlider. */
77 	VISUAL_WIDGET_TYPE_NUMERIC,	/**< Numeric widget: \a VisUINumeric. */
78 	VISUAL_WIDGET_TYPE_COLOR,	/**< Color widget: \a VisUIColor. */
79 	VISUAL_WIDGET_TYPE_COLORBUTTON,	/**< Color button widget: \a VisUIColorButton. */
80 	VISUAL_WIDGET_TYPE_COLORPALETTE,/**< Color palette widget: \a VisUIColorPalette. */
81 	VISUAL_WIDGET_TYPE_CHOICE,	/**< Choice base widget: \a VisUIChoice. */
82 	VISUAL_WIDGET_TYPE_POPUP,	/**< Popup widget: \a VisUIPopup. */
83 	VISUAL_WIDGET_TYPE_LIST,	/**< List widget: \a VisUIList. */
84 	VISUAL_WIDGET_TYPE_RADIO,	/**< Radio widget: \a VisUIRadio. */
85 	VISUAL_WIDGET_TYPE_CHECKBOX	/**< Checkbox widget: \a VisUICheckbox. */
86 } VisUIWidgetType;
87 
88 /**
89  * Enumerate to define the different types of widget orientation. This is used
90  * by a few widgets that can be aligned both vertical and horizontal.
91  */
92 typedef enum {
93 	VISUAL_ORIENT_TYPE_NONE,	/**< No orientation, use the default. */
94 	VISUAL_ORIENT_TYPE_HORIZONTAL,	/**< Horizontal orientation. */
95 	VISUAL_ORIENT_TYPE_VERTICAL	/**< Vertical orientation. */
96 } VisUIOrientType;
97 
98 typedef struct _VisUIWidget VisUIWidget;
99 typedef struct _VisUIContainer VisUIContainer;
100 typedef struct _VisUIBox VisUIBox;
101 typedef struct _VisUITableEntry VisUITableEntry;
102 typedef struct _VisUITable VisUITable;
103 typedef struct _VisUINotebook VisUINotebook;
104 typedef struct _VisUIFrame VisUIFrame;
105 typedef struct _VisUILabel VisUILabel;
106 typedef struct _VisUIImage VisUIImage;
107 typedef struct _VisUISeparator VisUISeparator;
108 typedef struct _VisUIMutator VisUIMutator;
109 typedef struct _VisUIRange VisUIRange;
110 typedef struct _VisUIEntry VisUIEntry;
111 typedef struct _VisUISlider VisUISlider;
112 typedef struct _VisUINumeric VisUINumeric;
113 typedef struct _VisUIColor VisUIColor;
114 typedef struct _VisUIColorButton VisUIColorButton;
115 typedef struct _VisUIColorPalette VisUIColorPalette;
116 typedef struct _VisUIChoiceList VisUIChoiceList;
117 typedef struct _VisUIChoiceEntry VisUIChoiceEntry;
118 typedef struct _VisUIChoice VisUIChoice;
119 typedef struct _VisUIPopup VisUIPopup;
120 typedef struct _VisUIList VisUIList;
121 typedef struct _VisUIRadio VisUIRadio;
122 typedef struct _VisUICheckbox VisUICheckbox;
123 
124 /* FIXME, fix the links, they are screwed up because of the typedefs, there is some way around it
125  * but hey. */
126 /**
127  *
128  * The super class for al VisUIWidgets. All the typical VisUIWidgets
129  * derive from this. VisUIWidget is used as an intermediate user interface
130  * description. Mainly to set up configuration dialogs for plugins that
131  * are not widget set dependant.
132  *
133  * The VisUIWidget class hierarchy looks like following:
134  * - \a _VisUIWidget
135  *	- \a VisUILabel
136  *	- \a VisUIImage
137  *	- \a VisUIContainer
138  *		- \a VisUIBox
139  *		- \a VisUITable
140  *		- \a VisUINotebook
141  *		- \a VisUIFrame
142  *	- \a VisUIMutator
143  *		- \a VisUIText
144  *		- \a VisUIColor
145  *		- \a VisUIColorButton
146  *		- \a VisUIColorPalette
147  *		- \a VisUIRange
148  *			- \a VisUISlider
149  *			- \a VisUINumeric
150  *		- \a VisUIChoice
151  *			- \a VisUIPopup
152  *			- \a VisUIList
153  *			- \a VisUIRadio
154  *			- \a VisUICheckbox
155  */
156 struct _VisUIWidget {
157 	VisObject		 object;	/**< The VisObject data. */
158 
159 	VisUIWidget		*parent;	/**< Parent in which this VisUIWidget is packed.
160 						 * This is possibly NULL. */
161 
162 	VisUIWidgetType		 type;		/**< Type of VisUIWidget. */
163 
164 	const char		*tooltip;	/**< Optional tooltip text, this can be used to
165 						 * give the user some extra explanation about the
166 						 * user interface. */
167 
168 	int			 width;		/**< When size requisition is used, the width value will
169 						 * be stored in this. */
170 	int			 height;	/**< When size requisition is used. the height value will
171 						 * be stored in this. When size requisition is not being
172 						 * done both width and height will contain of -1. */
173 };
174 
175 /**
176  * The VisUIContainer is a VisUIWidget that is used to pack other widgets in.
177  * A basic container can contain just one VisUIWidget, however when VisUIBox or
178  * VisUITable is used, it's possible to add more elements.
179  */
180 struct _VisUIContainer {
181 	VisUIWidget		 widget;	/**< The VisUIWidget data. */
182 
183 	VisUIWidget		*child;		/**< Pointer to the child VisUIWidget that is packed in this VisUIContainer. */
184 };
185 
186 /**
187  * The VisUIBox inherents from VisUIContainer, but is capable to contain more childeren.
188  * The VisUIBox is used as a box of VisUIWidgets, packed vertical or horizontal.
189  */
190 struct _VisUIBox {
191 	VisUIContainer		 container;	/**< The VisUIContainer data. */
192 
193 	VisUIOrientType		 orient;	/**< Orientation, whatever the box packs the item in a vertical
194 						 * order or in a horizontal order. */
195 
196 	VisList			 childs;	/**< A list of all child VisUIWidgets. */
197 };
198 
199 /**
200  * VisUITableEntry is an entry in a VisUITable. the VisUITableEntry is not a VisUIWidget on
201  * itself. Instead it rembers the cell in which a VisUIWidget is placed in VisUITable and
202  * also has a reference to the VisUIWidget.
203  */
204 struct _VisUITableEntry {
205 	VisObject		object;		/**< The VisObject data. */
206 
207 	int			row;		/**< Row to which the VisUITableEntry is associated. */
208 	int			col;		/**< Column to which the VisUITableEntry is associated. */
209 
210 	VisUIWidget		*widget;	/**< The VisUIWidget that is connected to this entry in the VisUITable. */
211 };
212 
213 /**
214  * The VisUITable inherents from VisUIContainer, but is capable of placing VisUIWidgets in an aligned grid.
215  */
216 struct _VisUITable {
217 	VisUIContainer		 container;	/**< The VisUIContainer data. */
218 
219 	int			 rows;		/**< The number of rows in this VisUITable. */
220 	int			 cols;		/**< The number of columns in this VisUITable. */
221 
222 	VisList			 childs;	/**< A list of all VisUITableEntry items that are related to
223 						 * this table. */
224 };
225 
226 /**
227  * The VisUINotebook inherents from VisUIContainer, but is capable of placing VisUIWidgets in notebooks.
228  */
229 struct _VisUINotebook {
230 	VisUIContainer		 container;	/**< The VisUIContainer data. */
231 
232 	VisList			 labels;	/**< The labels as VisUILabels. */
233 	VisList			 childs;	/**< The child VisUIWidgets per notebook. */
234 };
235 
236 /**
237  * The VisUIFrame inherents from VisUIContainer, it's used to put a frame with a label around a VisUIWidget.
238  */
239 struct _VisUIFrame {
240 	VisUIContainer		 container;	/**< The VisUIContainer data. */
241 
242 	const char		*name;		/**< The frame label text. */
243 };
244 
245 /**
246  * The VisUILabel inherents from a VisUIWidget, it's used to as a label item in the user interface.
247  */
248 struct _VisUILabel {
249 	VisUIWidget		 widget;	/**< The VisUIWidget data. */
250 
251 	const char		*text;		/**< The label text. */
252 	int			 bold;		/**< Whatever the label is being printed in bold or not. */
253 };
254 
255 /**
256  * The VisUIImage inherents from a VisUIWidget, it's used to display a VisVideo within the user interface. For
257  * example it can be used to show a picture.
258  */
259 struct _VisUIImage {
260 	VisUIWidget		 widget;	/**< The VisUIWidget data. */
261 
262 	VisVideo		*image;		/**< The VisUIImage containing the image data. */
263 };
264 
265 /**
266  * The VisUISeparator inherents from a VisUIWidget, it's used to display a separator between different user interface
267  * elements.
268  */
269 struct _VisUISeparator {
270 	VisUIWidget		 widget;	/**< The VisUIWidget data. */
271 
272 	VisUIOrientType		 orient;	/**< The orientation, whatever the separator is drawn in vertical
273 						 * or horizontal style. */
274 };
275 
276 /**
277  * The VisUIMutator inherents from a VisUIWidget, it's used as a super class for different type of mutator VisUIWidgets.
278  * Mutator VisUIWidgets are used to change a value in a VisParamEntry.
279  */
280 struct _VisUIMutator {
281 	VisUIWidget		 widget;	/**< The VisUIWidget data. */
282 
283 	VisParamEntry		*param;		/**< The VisParamEntry parameter that is associated with this
284 						 * VisUIMutator. */
285 };
286 
287 /**
288  * The VisUIRange inherents from a VisUIMutator, it's a type of mutator widget that focus on numeric input and
289  * numeric adjustment within a range.
290  */
291 struct _VisUIRange {
292 	VisUIMutator		 mutator;	/**< The VisUIMutator data. */
293 
294 	double			 min;		/**< The minimal value. */
295 	double			 max;		/**< The maximal value. */
296 	double			 step;		/**< Increase / decrease steps. */
297 
298 	int			 precision;	/**< Precision, in the fashion of how many numbers behind
299 						 * the point. */
300 };
301 
302 /**
303  * The VisUIEntry inherents from a VisUIMutator, it's used as a way to input text.
304  */
305 struct _VisUIEntry {
306 	VisUIMutator		 mutator;	/**< The VisUIMutator data. */
307 
308 	int			 length;	/**< Maximal length for the text. */
309 };
310 
311 /**
312  * The VisUISlider inherents from a VisUIRange, it's used to display a slider which can be used
313  * to adjust a numeric value.
314  */
315 struct _VisUISlider {
316 	VisUIRange		 range;		/**< The VisUIRange data. */
317 
318 	int			 showvalue;	/**< Don't show just the slider, but also the  value it
319 						 * represents at it's current position. */
320 };
321 
322 /**
323  * The VisUINumeric inherents from a VisUIRange, it's used to display a numeric spin button that
324  * can be used to adjust a numeric value. A numeric spin button contains out of a small text field
325  * displaying the actual value, followed by two buttons which are used to increase or decrease the value.
326  *
327  * In most VisUI native implementations it's also possible to adjust the text field directly using
328  * the keyboard.
329  */
330 struct _VisUINumeric {
331 	VisUIRange		 range;		/**< The VisUIRange data. */
332 };
333 
334 /**
335  * The VisUIColor inherents from a VisUIMutator, it's used to adjust the color that is encapsulated by
336  * a VisParamEntry.
337  */
338 struct _VisUIColor {
339 	VisUIMutator		 mutator;	/**< The VisUIMutator data. */
340 };
341 
342 /**
343  * The VisUIColorButton inherents from a VisUIMutator, it's used to adjust the color that is encapsulated by
344  * a VisParamEntry. Unlike VisUIColor, it only shows a button, but when pressed you can change the color.
345  */
346 struct _VisUIColorButton {
347 	VisUIMutator		 mutator;	/**< The VisUIMutator data. */
348 };
349 
350 /**
351  * The VisUIColorPalette inherents from a VisUIMutator, it's used to adjust a small color palette that is encapsulated by
352  * a VisParamEntry. It's not allowed to change the size of the palette after it's been set.
353  */
354 struct _VisUIColorPalette {
355 	VisUITable		 table;		/**< The VisUITable data. */
356 };
357 
358 /**
359  * The VisUIChoiceList is not a VisUIWidget, but it's used by the different types of VisUIChoice widgets to
360  * store information about choices.
361  */
362 struct _VisUIChoiceList {
363 	VisObject		 object;	/**< The VisObject data. */
364 
365 	int			 count;		/**< The amount of choices that are present. */
366 	VisList			 choices;	/**< A list of VisUIChoiceEntry elements. */
367 };
368 
369 /**
370  * The VisUIChoiceEntry is not a VisUIWidget, but it's used by the different types of VisUIChoice widgets to
371  * store information regarding a choice within a VisUIChoiceList.
372  */
373 struct _VisUIChoiceEntry {
374 	VisObject		 object;	/**< The VisObject data. */
375 
376 	const char		*name;		/**< Name of this VisChoiceEntry. */
377 
378 	VisParamEntry		*value;		/**< Link to the VisParamEntry that contains the value
379 						 * for this VisChoiceEntry. */
380 };
381 
382 /**
383  * The VisUIChoice inherents from a VisUIMutator, it's used as a super class for the different types of
384  * VisUIChoice VisUIWidgets.
385  */
386 struct _VisUIChoice {
387 	VisUIMutator		 mutator;	/**< The VisUIMutator data. */
388 
389 	VisParamEntry		*param;		/**< Pointer to the VisParamEntry that is the target to
390 						 * contain the actual value. */
391 
392 	VisUIChoiceList		 choices;	/**< The different choices present. */
393 };
394 
395 /**
396  * The VisUIPopup inherents from a VisUIChoice, it's used to represent choices in a popup fashion, where you
397  * can select an item.
398  */
399 struct _VisUIPopup {
400 	VisUIChoice		 choice;	/**< The VisUIChoice data. */
401 };
402 
403 /**
404  * The VisUIList inherents from a VisUIChoice, it's used to represent choices in a list fashion.
405  */
406 struct _VisUIList {
407 	VisUIChoice		 choice;	/**< The VisUIChoice data. */
408 };
409 
410 /**
411  * The VisUIRadio inherents from a VisUIChoice, it's used to represent choices in the fashion of radio buttons. These
412  * are a grouped type of checkboxes where only one item can be active at once.
413  */
414 struct _VisUIRadio {
415 	VisUIChoice		 choice;	/**< The VisUIChoice data. */
416 
417 	VisUIOrientType		 orient;	/**< Orientation of how the different radio buttons in the VisUIRadio button
418 						 * group is ordered. */
419 };
420 
421 /**
422  * The VisUICheckbox inherents from a VisUIChoice, it's used to represent one single checkbox widget. For this reason it
423  * can only represent two choices. One for the toggled state and one for the untoggled state.
424  */
425 struct _VisUICheckbox {
426 	VisUIChoice		 choice;	/**< The VisUIChoice data. */
427 
428 	const char		*name;		/**< Optional text behind the textbox. */
429 };
430 
431 /* prototypes */
432 VisUIWidget *visual_ui_widget_new (void);
433 int visual_ui_widget_set_size_request (VisUIWidget *widget, int width, int height);
434 int visual_ui_widget_set_tooltip (VisUIWidget *widget, const char *tooltip);
435 const char *visual_ui_widget_get_tooltip (VisUIWidget *widget);
436 VisUIWidget *visual_ui_widget_get_top (VisUIWidget *widget);
437 VisUIWidget *visual_ui_widget_get_parent (VisUIWidget *widget);
438 VisUIWidgetType visual_ui_widget_get_type (VisUIWidget *widget);
439 
440 int visual_ui_container_add (VisUIContainer *container, VisUIWidget *widget);
441 VisUIWidget *visual_ui_container_get_child (VisUIContainer *container);
442 
443 VisUIWidget *visual_ui_box_new (VisUIOrientType orient);
444 int visual_ui_box_pack (VisUIBox *box, VisUIWidget *widget);
445 VisList *visual_ui_box_get_childs (VisUIBox *box);
446 VisUIOrientType visual_ui_box_get_orient (VisUIBox *box);
447 
448 VisUIWidget *visual_ui_table_new (int rows, int cols);
449 VisUITableEntry *visual_ui_table_entry_new (VisUIWidget *widget, int row, int col);
450 int visual_ui_table_attach (VisUITable *table, VisUIWidget *widget, int row, int col);
451 VisList *visual_ui_table_get_childs (VisUITable *table);
452 
453 VisUIWidget *visual_ui_notebook_new (void);
454 int visual_ui_notebook_add (VisUINotebook *notebook, VisUIWidget *widget, char *label);
455 VisList *visual_ui_notebook_get_childs (VisUINotebook *notebook);
456 VisList *visual_ui_notebook_get_childlabels (VisUINotebook *notebook);
457 
458 VisUIWidget *visual_ui_frame_new (const char *name);
459 
460 VisUIWidget *visual_ui_label_new (const char *text, int bold);
461 int visual_ui_label_set_text (VisUILabel *label, const char *text);
462 int visual_ui_label_set_bold (VisUILabel *label, int bold);
463 const char *visual_ui_label_get_text (VisUILabel *label);
464 
465 VisUIWidget *visual_ui_image_new (VisVideo *video);
466 int visual_ui_image_set_video (VisUIImage *image, VisVideo *video);
467 VisVideo *visual_ui_image_get_video (VisUIImage *image);
468 
469 VisUIWidget *visual_ui_separator_new (VisUIOrientType orient);
470 VisUIOrientType visual_ui_separator_get_orient (VisUISeparator *separator);
471 
472 int visual_ui_mutator_set_param (VisUIMutator *mutator, VisParamEntry *param);
473 VisParamEntry *visual_ui_mutator_get_param (VisUIMutator *mutator);
474 
475 int visual_ui_range_set_properties (VisUIRange *range, double min, double max, double step, int precision);
476 int visual_ui_range_set_max (VisUIRange *range, double max);
477 int visual_ui_range_set_min (VisUIRange *range, double min);
478 int visual_ui_range_set_step (VisUIRange *range, double step);
479 int visual_ui_range_set_precision (VisUIRange *range, int precision);
480 
481 VisUIWidget *visual_ui_entry_new (void);
482 int visual_ui_entry_set_length (VisUIEntry *entry, int length);
483 
484 VisUIWidget *visual_ui_slider_new (int showvalue);
485 
486 VisUIWidget *visual_ui_numeric_new (void);
487 
488 VisUIWidget *visual_ui_color_new (void);
489 
490 VisUIWidget *visual_ui_colorbutton_new (void);
491 
492 VisUIWidget *visual_ui_colorpalette_new (void);
493 
494 VisUIChoiceEntry *visual_ui_choice_entry_new (const char *name, VisParamEntry *value);
495 int visual_ui_choice_add (VisUIChoice *choice, const char *name, VisParamEntry *value);
496 int visual_ui_choice_add_many (VisUIChoice *choice, VisParamEntry *paramchoices);
497 int visual_ui_choice_free_choices (VisUIChoice *choice);
498 int visual_ui_choice_set_active (VisUIChoice *choice, int index);
499 int visual_ui_choice_get_active (VisUIChoice *choice);
500 VisUIChoiceEntry *visual_ui_choice_get_choice (VisUIChoice *choice, int index);
501 VisUIChoiceList *visual_ui_choice_get_choices (VisUIChoice *choice);
502 
503 /* FIXME look at lists with multiple selections... */
504 
505 VisUIWidget *visual_ui_popup_new (void);
506 
507 VisUIWidget *visual_ui_list_new (void);
508 
509 VisUIWidget *visual_ui_radio_new (VisUIOrientType orient);
510 
511 VisUIWidget *visual_ui_checkbox_new (const char *name, int boolcheck);
512 
513 VISUAL_END_DECLS
514 
515 #endif /* _LV_UI_H */
516