diff options
Diffstat (limited to 'src/AutoComplete.cxx')
-rw-r--r-- | src/AutoComplete.cxx | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/AutoComplete.cxx b/src/AutoComplete.cxx new file mode 100644 index 000000000..c3ec29c3c --- /dev/null +++ b/src/AutoComplete.cxx @@ -0,0 +1,104 @@ +// Scintilla source code edit control +// AutoComplete.cxx - defines the auto completion list box +// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#include <stdlib.h> +#include <string.h> + +#include "Platform.h" + +#include "AutoComplete.h" + +AutoComplete::AutoComplete() { + lb = 0; + active = false; + posStart = 0; + strcpy(stopChars, ""); +} + +AutoComplete::~AutoComplete() { + lb.Destroy(); +} + +bool AutoComplete::Active() { + return active; +} + +void AutoComplete::Start(Window &parent, int ctrlID, int position, int startLen_) { + if (!lb.Created()) { + lb.Create(parent, ctrlID); + } + lb.Clear(); + active = true; + startLen = startLen_; + posStart = position; +} + +void AutoComplete::SetStopChars(const char *stopChars_) { + strncpy(stopChars, stopChars_, sizeof(stopChars)); + stopChars[sizeof(stopChars) - 1] = '\0'; +} + +bool AutoComplete::IsStopChar(char ch) { + return ch && strchr(stopChars, ch); +} + +int AutoComplete::SetList(const char *list) { + int maxStrLen = 12; + lb.Clear(); + char *words = new char[strlen(list) + 1]; + if (words) { + strcpy(words, list); + char *startword = words; + int i = 0; + for (; words && words[i]; i++) { + if (words[i] == ' ') { + words[i] = '\0'; + lb.Append(startword); + maxStrLen = Platform::Maximum(maxStrLen, strlen(startword)); + startword = words + i + 1; + } + } + if (startword) { + lb.Append(startword); + maxStrLen = Platform::Maximum(maxStrLen, strlen(startword)); + } + delete []words; + } + lb.Sort(); + return maxStrLen; +} + +void AutoComplete::Show() { + lb.Show(); + lb.Select(0); +} + +void AutoComplete::Cancel() { + if (lb.Created()) { + lb.Destroy(); + lb = 0; + active = false; + } +} + + +void AutoComplete::Move(int delta) { + int count = lb.Length(); + int current = lb.GetSelection(); + current += delta; + if (current >= count) + current = count - 1; + if (current < 0) + current = 0; + lb.Select(current); +} + +void AutoComplete::Select(const char *word) { + int pos = lb.Find(word); + //Platform::DebugPrintf("Autocompleting at <%s> %d\n", wordCurrent, pos); + if (pos != -1) + lb.Select(pos); +} + |