3 * \brief Header: WListbox widget
6 #ifndef MC__WIDGET_LISTBOX_H
7 #define MC__WIDGET_LISTBOX_H
9 /*** typedefs(not structures) and defined constants **********************************************/
11 #define LISTBOX(x) ((WListbox *)(x))
12 #define LENTRY(x) ((WLEntry *)(x))
14 /*** enums ***************************************************************************************/
16 /* callback should return one of the following values */
19 LISTBOX_CONT
, /* continue */
20 LISTBOX_DONE
/* finish dialog */
25 LISTBOX_APPEND_AT_END
= 0, /* append at the end */
26 LISTBOX_APPEND_BEFORE
, /* insert before current */
27 LISTBOX_APPEND_AFTER
, /* insert after current */
28 LISTBOX_APPEND_SORTED
/* insert alphabetically */
31 /*** structures declarations (and typedefs of structures)*****************************************/
34 typedef lcback_ret_t (*lcback_fn
) (struct WListbox
* l
);
36 typedef struct WLEntry
38 char *text
; /* Text to display */
40 void *data
; /* Client information */
41 gboolean free_data
; /* Whether to free the data on entry's removal */
44 typedef struct WListbox
47 GQueue
*list
; /* Pointer to the list of WLEntry */
48 int top
; /* The first element displayed */
49 int current
; /* The current element displayed */
50 gboolean allow_duplicates
; /* Do we allow duplicates on the list? */
51 gboolean scrollbar
; /* Draw a scrollbar? */
52 gboolean deletable
; /* Can list entries be deleted? */
53 lcback_fn callback
; /* The callback function */
54 int cursor_x
, cursor_y
; /* Cache the values */
57 /*** global variables defined in .c file *********************************************************/
59 extern const global_keymap_t
*listbox_map
;
61 /*** declarations of public functions ************************************************************/
63 WListbox
*listbox_new (int y
, int x
, int height
, int width
, gboolean deletable
, lcback_fn callback
);
64 int listbox_search_text (WListbox
* l
, const char *text
);
65 int listbox_search_data (WListbox
* l
, const void *data
);
66 void listbox_select_first (WListbox
* l
);
67 void listbox_select_last (WListbox
* l
);
68 void listbox_set_current (WListbox
* l
, int dest
);
69 int listbox_get_length (const WListbox
* l
);
70 void listbox_get_current (WListbox
* l
, char **string
, void **extra
);
71 WLEntry
*listbox_get_nth_entry (const WListbox
* l
, int pos
);
72 GList
*listbox_get_first_link (const WListbox
* l
);
73 void listbox_remove_current (WListbox
* l
);
74 gboolean
listbox_is_empty (const WListbox
* l
);
75 void listbox_set_list (WListbox
* l
, GQueue
* list
);
76 void listbox_remove_list (WListbox
* l
);
77 char *listbox_add_item (WListbox
* l
, listbox_append_t pos
, int hotkey
, const char *text
,
78 void *data
, gboolean free_data
);
79 char *listbox_add_item_take (WListbox
* l
, listbox_append_t pos
, int hotkey
, char *text
,
80 void *data
, gboolean free_data
);
82 /*** inline functions ****************************************************************************/
84 #endif /* MC__WIDGET_LISTBOX_H */