mirror of
https://github.com/rkd77/elinks.git
synced 2024-10-01 03:36:26 -04:00
108 lines
3.4 KiB
C
108 lines
3.4 KiB
C
#ifndef EL__BFU_HIERBOX_H
|
|
#define EL__BFU_HIERBOX_H
|
|
|
|
#include "bfu/common.h"
|
|
#include "bfu/listbox.h"
|
|
#include "util/lists.h"
|
|
|
|
struct session;
|
|
|
|
struct hierbox_browser_button {
|
|
unsigned char *label;
|
|
widget_handler_T *handler;
|
|
|
|
/* Should the button be displayed in anonymous mode */
|
|
unsigned int anonymous:1;
|
|
};
|
|
|
|
struct hierbox_browser {
|
|
unsigned char *title;
|
|
void (*expansion_callback)(void);
|
|
const struct hierbox_browser_button *buttons;
|
|
size_t buttons_size;
|
|
|
|
struct list_head boxes;
|
|
struct list_head dialogs;
|
|
struct listbox_item root;
|
|
const struct listbox_ops *ops;
|
|
|
|
/* For saving state */
|
|
unsigned int do_not_save_state:1;
|
|
struct listbox_data box_data;
|
|
};
|
|
|
|
#define struct_hierbox_browser(name, title, buttons, ops) \
|
|
struct hierbox_browser name = { \
|
|
title, \
|
|
NULL, \
|
|
buttons, \
|
|
sizeof_array(buttons), \
|
|
{ D_LIST_HEAD(name.boxes) }, \
|
|
{ D_LIST_HEAD(name.dialogs) }, \
|
|
{ \
|
|
NULL_LIST_HEAD, \
|
|
{ D_LIST_HEAD(name.root.child) }, \
|
|
BI_FOLDER, \
|
|
-1, \
|
|
1, \
|
|
0, \
|
|
}, \
|
|
ops, \
|
|
}
|
|
|
|
struct hierbox_dialog_list_item {
|
|
LIST_HEAD(struct hierbox_dialog_list_item);
|
|
|
|
struct dialog_data *dlg_data;
|
|
};
|
|
|
|
void done_listbox_item(struct hierbox_browser *browser, struct listbox_item *item);
|
|
void update_hierbox_browser(struct hierbox_browser *browser);
|
|
|
|
struct listbox_item *
|
|
add_listbox_item(struct hierbox_browser *browser, struct listbox_item *root,
|
|
enum listbox_item_type type, void *data, int add_position);
|
|
|
|
#define add_listbox_folder(browser, root,data) \
|
|
add_listbox_item(browser, root, BI_FOLDER, data, 1)
|
|
|
|
#define add_listbox_leaf(browser, root, data) \
|
|
add_listbox_item(browser, root, BI_LEAF, data, 1)
|
|
|
|
/* We use hierarchic listbox browsers for the various managers. They consist
|
|
* of a listbox widget and some buttons.
|
|
*
|
|
* @term The terminal where the browser should appear.
|
|
*
|
|
* @title The title of the browser. It is automatically localized.
|
|
*
|
|
* @add_size The size of extra data to be allocated with the dialog.
|
|
*
|
|
* @browser The browser structure that contains info to setup listbox data
|
|
* and manage the dialog list to keep instances of the browser in
|
|
* sync on various terminals.
|
|
*
|
|
* @udata Is a reference to any data that the dialog could use.
|
|
*
|
|
* @buttons Denotes the number of buttons given as varadic arguments.
|
|
* For each button 4 arguments are extracted:
|
|
* o First the label text. It is automatically localized.
|
|
* If NULL, this button is skipped.
|
|
* o Second a pointer to a widget handler.
|
|
* XXX: A close button will be installed by default.
|
|
*
|
|
* XXX: Note that the @listbox_data is detached and freed by the dialog handler.
|
|
* Any other requirements should be handled by installing a specific
|
|
* dlg->abort handler. */
|
|
|
|
struct dialog_data *
|
|
hierbox_browser(struct hierbox_browser *browser, struct session *ses);
|
|
|
|
widget_handler_status_T push_hierbox_info_button(struct dialog_data *dlg_data, struct widget_data *button);
|
|
widget_handler_status_T push_hierbox_goto_button(struct dialog_data *dlg_data, struct widget_data *button);
|
|
widget_handler_status_T push_hierbox_delete_button(struct dialog_data *dlg_data, struct widget_data *button);
|
|
widget_handler_status_T push_hierbox_clear_button(struct dialog_data *dlg_data, struct widget_data *button);
|
|
widget_handler_status_T push_hierbox_search_button(struct dialog_data *dlg_data, struct widget_data *button);
|
|
|
|
#endif
|