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