Merge branch 'blender-v2.81-release'
[blender.git] / source / blender / blenkernel / BKE_suggestions.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2008, Blender Foundation
17  * All rights reserved.
18  */
19 #ifndef __BKE_SUGGESTIONS_H__
20 #define __BKE_SUGGESTIONS_H__
21
22 /** \file
23  * \ingroup bke
24  */
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 /* ****************************************************************************
31  * Suggestions should be added in sorted order although a linear sorting method is
32  * implemented. The list is then divided up based on the prefix provided by
33  * update_suggestions:
34  *
35  * Example:
36  *   Prefix: ab
37  *   aaa <-- first
38  *   aab
39  *   aba <-- firstmatch
40  *   abb <-- lastmatch
41  *   baa
42  *   bab <-- last
43  **************************************************************************** */
44
45 struct Text;
46
47 typedef struct SuggItem {
48   struct SuggItem *prev, *next;
49   char type;
50   char name[0];
51 } SuggItem;
52
53 typedef struct SuggList {
54   SuggItem *first, *last;
55   SuggItem *firstmatch, *lastmatch;
56   SuggItem *selected;
57   int top;
58 } SuggList;
59
60 /* Free all text tool memory */
61 void free_texttools(void);
62
63 /* Used to identify which Text object the current tools should appear against */
64 void texttool_text_set_active(Text *text);
65 void texttool_text_clear(void);
66 short texttool_text_is_active(Text *text);
67
68 /* Suggestions */
69 void texttool_suggest_add(const char *name, char type);
70 void texttool_suggest_prefix(const char *prefix, const int prefix_len);
71 void texttool_suggest_clear(void);
72 SuggItem *texttool_suggest_first(void);
73 SuggItem *texttool_suggest_last(void);
74 void texttool_suggest_select(SuggItem *sel);
75 SuggItem *texttool_suggest_selected(void);
76 int *texttool_suggest_top(void);
77
78 /* Documentation */
79 void texttool_docs_show(const char *docs);
80 char *texttool_docs_get(void);
81 void texttool_docs_clear(void);
82
83 #ifdef __cplusplus
84 }
85 #endif
86
87 #endif