summaryrefslogtreecommitdiffstats
path: root/lib/widget/input.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/widget/input.h')
-rw-r--r--lib/widget/input.h155
1 files changed, 155 insertions, 0 deletions
diff --git a/lib/widget/input.h b/lib/widget/input.h
new file mode 100644
index 0000000..5dc433e
--- /dev/null
+++ b/lib/widget/input.h
@@ -0,0 +1,155 @@
+
+/** \file input.h
+ * \brief Header: WInput widget
+ */
+
+#ifndef MC__WIDGET_INPUT_H
+#define MC__WIDGET_INPUT_H
+
+#include <limits.h> /* MB_LEN_MAX */
+
+/*** 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;
+
+ GString *buffer;
+ 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 */
+ 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 */
+ 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);
+/* callback 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);
+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);
+
+/* input_complete.c */
+void input_complete (WInput * in);
+void input_complete_free (WInput * in);
+
+/* --------------------------------------------------------------------------------------------- */
+/*** inline functions ****************************************************************************/
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get text of input line.
+ *
+ * @param in input line
+ *
+ * @return newly allocated string that contains a copy of @in's text.
+ */
+static inline char *
+input_get_text (const WInput * in)
+{
+ return g_strndup (in->buffer->str, in->buffer->len);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Get pointer to input line buffer.
+ *
+ * @param in input line
+ *
+ * @return pointer to @in->buffer->str.
+ */
+static inline const char *
+input_get_ctext (const WInput * in)
+{
+ return in->buffer->str;
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+/**
+ * Is input line empty or not.
+ *
+ * @param in input line
+ *
+ * @return TRUE if buffer of @in is empty, FALSE othewise.
+ */
+static inline gboolean
+input_is_empty (const WInput * in)
+{
+ return (in->buffer->len == 0);
+}
+
+/* --------------------------------------------------------------------------------------------- */
+
+
+#endif /* MC__WIDGET_INPUT_H */