1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-06-15 23:35:34 +00:00
elinks/src/bfu/hierbox.h
Witold Filipczyk a67188413c [lists] LIST_HEAD -> LIST_HEAD_EL to not clash with libevent's LIST_HEAD. Also added curl implementation of ftpes and sftp
Implementation of ftpes and sftp is based on curl's hiperfifo example. It requires libevent.
ftpes only encrypts control channel. There were problems when both control and data were encrypted. It stucked on SIZE.
Only successful connections work, errors are not handled properly.
2023-06-19 18:43:53 +02:00

158 lines
5.0 KiB
C

#ifndef EL__BFU_HIERBOX_H
#define EL__BFU_HIERBOX_H
#include "bfu/common.h"
#include "bfu/listbox.h"
#include "util/lists.h"
#ifdef __cplusplus
extern "C" {
#endif
struct session;
/** BFU hierbox browser button */
struct hierbox_browser_button {
/** The button label text
* It is automatically localized. */
char *label;
/** The button handler
* The handler gets called when the button is activated */
widget_handler_T *handler;
/** Allow this button in anonymous mode
* Should the button be displayed in anonymous mode or not? This
* can be used to disable actions that are not safe in anonymous
* mode. */
unsigned int anonymous:1;
};
/** BFU hierbox browser
*
* Hierarchic listbox browsers are used for the various (subsystem)
* managers. They basically consist of some state data maintained
* throughout the life of the dialog (i.e. the listbox widget),
* manager specific operations (for modifying the underlying data
* structures), and some buttons.
*/
struct hierbox_browser {
/** The title of the browser
* Note, it is automatically localized. */
char *title;
/** Callback for (un)expansion of the listboxes
* Can be used by subsystems to install a handler to be called
* when listboxes are expanded and unexpanded. */
void (*expansion_callback)(void);
/** Array of browser buttons
*
* Each button represents an action for modifying or interacting
* with the items in the manager.
*
* A close button will be installed by default. */
const struct hierbox_browser_button *buttons;
/** The number of browser buttons */
size_t buttons_size;
/** List of active listbox containers
*
* Several instantiations of a manager can exist at the same
* time, if the user has more than one terminal open. This list
* contains all the listbox contains for this particular manager
* that are currently open. */
LIST_OF(struct listbox_data) boxes;
/** List of active dialogs
*
* Several instantiations of a manager can exist at the same
* time, if the user has more than one terminal open. This list
* contains all the manager dialogs for this particular manager
* that are currently open. */
LIST_OF(struct hierbox_dialog_list_item) dialogs;
/** The root listbox
* The ancestor of all listboxes in this listbox browser. */
struct listbox_item root;
/** Browser specific listbox operations
* The operations for managing the underlying data structures of
* the listboxes. */
const struct listbox_ops *ops;
/** State saved between invocations
* Each time the browser is closed, its current state is saved
* in this member so it can be restored when the browser is
* opened again. This way the currently selected item can be
* preserved across several interactions with the browser. */
struct listbox_data box_data;
/** Option for not saving the state
* Some browsers with highly dynamic content should not have
* their state restored. This member can be used to mark such
* browsers. */
unsigned int do_not_save_state:1;
};
/** Define a hierbox browser
* This macro takes care of initializing all the fields of a hierbox
* browser so it is ready to use. */
#define struct_hierbox_browser(name, title, buttons, ops) \
struct hierbox_browser name = { \
title, \
NULL, \
buttons, \
sizeof_array(buttons), \
{ D_LIST_HEAD_EL(name.boxes) }, \
{ D_LIST_HEAD_EL(name.dialogs) }, \
{ \
NULL_LIST_HEAD_EL, \
{ D_LIST_HEAD_EL(name.root.child) }, \
BI_FOLDER, \
-1, \
1, \
0, \
}, \
ops, \
}
struct hierbox_dialog_list_item {
LIST_HEAD_EL(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)
/** Open a hierbox browser
* Opens an instantiation of a hierbox browser
*
* @param browser The browser to open.
* @param ses The session (and terminal) on which it should appear.
* @return A reference to the dialog that was created or NULL.
*/
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);
#ifdef __cplusplus
}
#endif
#endif