mc/lib/widget/input.h
Andrew Borodin ddd336ad4d Ticket #3225: first Backspace/Delete ignored after mouse click in an input widget.
Initial commit: WInput: refactoring of text marking.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
2014-08-03 14:54:16 +04:00

106 lines
4.1 KiB
C

/** \file input.h
* \brief Header: WInput widget
*/
#ifndef MC__WIDGET_INPUT_H
#define MC__WIDGET_INPUT_H
#include "lib/keybind.h" /* global_keymap_t */
/*** typedefs(not structures) and defined constants **********************************************/
#define INPUT(x) ((WInput *)(x))
/* For history load-save functions */
#define INPUT_LAST_TEXT ((char *) 2)
/*** enums ***************************************************************************************/
typedef enum
{
WINPUTC_MAIN, /* color used */
WINPUTC_MARK, /* color for marked text */
WINPUTC_UNCHANGED, /* color for inactive text (Is first keystroke) */
WINPUTC_HISTORY, /* color for history list */
WINPUTC_COUNT_COLORS /* count of used colors */
} input_colors_enum_t;
/* completion flags */
typedef enum
{
INPUT_COMPLETE_NONE = 0,
INPUT_COMPLETE_FILENAMES = 1 << 0,
INPUT_COMPLETE_HOSTNAMES = 1 << 1,
INPUT_COMPLETE_COMMANDS = 1 << 2,
INPUT_COMPLETE_VARIABLES = 1 << 3,
INPUT_COMPLETE_USERNAMES = 1 << 4,
INPUT_COMPLETE_CD = 1 << 5,
INPUT_COMPLETE_SHELL_ESC = 1 << 6,
} input_complete_t;
/*** structures declarations (and typedefs of structures)*****************************************/
typedef int input_colors_t[WINPUTC_COUNT_COLORS];
typedef struct
{
Widget widget;
const int *color;
int point; /* cursor position in the input line in characters */
int mark; /* the mark position in characters; negative value means no marked text */
int term_first_shown; /* column of the first shown character */
size_t current_max_size; /* maximum length of input line (bytes) */
gboolean first; /* is first keystroke? */
int disable_update; /* do we want to skip updates? */
gboolean is_password; /* is this a password input line? */
gboolean init_from_history; /* init text will be get from history */
char *buffer; /* pointer to editing buffer */
gboolean need_push; /* need to push the current Input on hist? */
gboolean strip_password; /* need to strip password before placing string to history */
char **completions; /* possible completions array */
input_complete_t completion_flags;
char charbuf[MB_LEN_MAX]; /* buffer for multibytes characters */
size_t charpoint; /* point to end of mulibyte sequence in charbuf */
WLabel *label; /* label associated with this input line */
struct input_history_t
{
char *name; /* name of history for loading and saving */
GList *list; /* the history */
GList *current; /* current history item */
gboolean changed; /* the history has changed */
} history;
} WInput;
/*** global variables defined in .c file *********************************************************/
extern int quote;
extern const global_keymap_t *input_map;
/* Color styles for normal and command line input widgets */
extern input_colors_t input_colors;
/*** declarations of public functions ************************************************************/
WInput *input_new (int y, int x, const int *colors,
int len, const char *text, const char *histname,
input_complete_t completion_flags);
/* callbac is public; needed for command line */
cb_ret_t input_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data);
void input_set_default_colors (void);
cb_ret_t input_handle_char (WInput * in, int key);
int input_key_is_in_map (WInput * in, int key);
void input_assign_text (WInput * in, const char *text);
void input_insert (WInput * in, const char *text, gboolean insert_extra_space);
void input_set_point (WInput * in, int pos);
void input_update (WInput * in, gboolean clear_first);
void input_enable_update (WInput * in);
void input_disable_update (WInput * in);
void input_clean (WInput * in);
void input_free_completions (WInput * in);
/*** inline functions ****************************************************************************/
#endif /* MC__WIDGET_INPUT_H */