1 /*
2  * view.h
3  */
4  /**
5 \ingroup clish
6 \defgroup clish_view view
7 @{
8 
9 \brief This class is a container of commands.
10 
11 A particular CLI session may contain a number of different views. Each
12 view may contain its own specific commands as well as those available at
13 a global scope.
14 
15 */
16 #ifndef _clish_view_h
17 #define _clish_view_h
18 
19 typedef struct clish_view_s clish_view_t;
20 
21 typedef enum {
22 	CLISH_RESTORE_NONE,
23 	CLISH_RESTORE_DEPTH,
24 	CLISH_RESTORE_VIEW
25 } clish_view_restore_e;
26 
27 #include "lub/list.h"
28 #include "clish/command.h"
29 #include "clish/nspace.h"
30 #include "clish/var.h"
31 
32 /*=====================================
33  * VIEW INTERFACE
34  *===================================== */
35 /*-----------------
36  * meta functions
37  *----------------- */
38 clish_view_t *clish_view_new(const char *name, const char *prompt);
39 int clish_view_bt_compare(const void *clientnode, const void *clientkey);
40 void clish_view_bt_getkey(const void *clientnode, lub_bintree_key_t * key);
41 size_t clish_view_bt_offset(void);
42 
43 /*-----------------
44  * methods
45  *----------------- */
46 lub_bintree_t * clish_view__get_command_tree(clish_view_t *instance);
47 lub_list_t * clish_view__get_nspace_tree(clish_view_t *instance);
48 void clish_view_delete(clish_view_t * instance);
49 clish_command_t *clish_view_new_command(clish_view_t * instance,
50 	const char *name, const char *text);
51 clish_command_t *clish_view_find_command(clish_view_t * instance,
52 	const char *name, bool_t inherit);
53 const clish_command_t *clish_view_find_next_completion(clish_view_t * instance,
54 	const char *iter_cmd, const char *line,
55 	clish_nspace_visibility_e field, bool_t inherit);
56 clish_command_t *clish_view_resolve_command(clish_view_t * instance,
57 	const char *line, bool_t inherit);
58 clish_command_t *clish_view_resolve_prefix(clish_view_t * instance,
59 	const char *line, bool_t inherit);
60 void clish_view_dump(clish_view_t * instance);
61 void clish_view_insert_nspace(clish_view_t * instance, clish_nspace_t * nspace);
62 void clish_view_clean_proxy(clish_view_t * instance);
63 
64 /*-----------------
65  * attributes
66  *----------------- */
67 const char *clish_view__get_name(const clish_view_t * instance);
68 void clish_view__set_prompt(clish_view_t * instance, const char *prompt);
69 char *clish_view__get_prompt(const clish_view_t *instance);
70 void clish_view__set_depth(clish_view_t * instance, unsigned depth);
71 unsigned clish_view__get_depth(const clish_view_t * instance);
72 void clish_view__set_restore(clish_view_t * instance,
73 	clish_view_restore_e restore);
74 clish_view_restore_e clish_view__get_restore(const clish_view_t * instance);
75 int clish_view_insert_hotkey(const clish_view_t *instance, const char *key, const char *cmd);
76 const char *clish_view_find_hotkey(const clish_view_t *instance, int code);
77 void clish_view__set_access(clish_view_t *instance, const char *access);
78 char *clish_view__get_access(const clish_view_t *instance);
79 
80 #endif				/* _clish_view_h */
81 /** @} clish_view */
82