/* * Copyright 2002-2006, project beam (http://sourceforge.net/projects/beam). * All rights reserved. Distributed under the terms of the MIT License. * * Authors: * Oliver Tappe */ #include "AutoCompleter.h" #include #include #include "AutoCompleterDefaultImpl.h" // #pragma mark - DefaultPatternSelector class DefaultPatternSelector : public BAutoCompleter::PatternSelector { public: virtual void SelectPatternBounds(const BString& text, int32 caretPos, int32* start, int32* length); }; void DefaultPatternSelector::SelectPatternBounds(const BString& text, int32 caretPos, int32* start, int32* length) { if (!start || !length) return; *start = 0; *length = text.Length(); } // #pragma mark - CompletionStyle BAutoCompleter::CompletionStyle::CompletionStyle(EditView* editView, ChoiceModel* choiceModel, ChoiceView* choiceView, PatternSelector* patternSelector) : fEditView(editView), fPatternSelector(patternSelector ? patternSelector : new DefaultPatternSelector()), fChoiceModel(choiceModel), fChoiceView(choiceView) { } BAutoCompleter::CompletionStyle::~CompletionStyle() { delete fEditView; delete fChoiceModel; delete fChoiceView; delete fPatternSelector; } void BAutoCompleter::CompletionStyle::SetEditView(EditView* view) { delete fEditView; fEditView = view; } void BAutoCompleter::CompletionStyle::SetPatternSelector( PatternSelector* selector) { delete fPatternSelector; fPatternSelector = selector; } void BAutoCompleter::CompletionStyle::SetChoiceModel(ChoiceModel* model) { delete fChoiceModel; fChoiceModel = model; } void BAutoCompleter::CompletionStyle::SetChoiceView(ChoiceView* view) { delete fChoiceView; fChoiceView = view; } // #pragma mark - BAutoCompleter BAutoCompleter::BAutoCompleter(CompletionStyle* completionStyle) : fCompletionStyle(completionStyle) { } BAutoCompleter::BAutoCompleter(EditView* editView, ChoiceModel* choiceModel, ChoiceView* choiceView, PatternSelector* patternSelector) : fCompletionStyle(new BDefaultCompletionStyle(editView, choiceModel, choiceView, patternSelector)) { } BAutoCompleter::~BAutoCompleter() { delete fCompletionStyle; } bool BAutoCompleter::Select(int32 index) { if (fCompletionStyle) return fCompletionStyle->Select(index); else return false; } bool BAutoCompleter::SelectNext(bool wrap) { if (fCompletionStyle) return fCompletionStyle->SelectNext(wrap); else return false; } bool BAutoCompleter::SelectPrevious(bool wrap) { if (fCompletionStyle) return fCompletionStyle->SelectPrevious(wrap); else return false; } bool BAutoCompleter::IsChoiceSelected() const { if (fCompletionStyle) return fCompletionStyle->IsChoiceSelected(); else return false; } int32 BAutoCompleter::CountChoices() const { if (fCompletionStyle && fCompletionStyle->GetChoiceModel()) return fCompletionStyle->GetChoiceModel()->CountChoices(); else return 0; } int32 BAutoCompleter::CountVisibleChoices() const { if (fCompletionStyle && fCompletionStyle->GetChoiceView()) return fCompletionStyle->GetChoiceView()->CountVisibleChoices(); else return 0; } int32 BAutoCompleter::SelectedChoiceIndex() const { if (fCompletionStyle) return fCompletionStyle->SelectedChoiceIndex(); else return -1; } void BAutoCompleter::ApplyChoice(bool hideChoices) { if (fCompletionStyle) fCompletionStyle->ApplyChoice(hideChoices); } void BAutoCompleter::CancelChoice() { if (fCompletionStyle) fCompletionStyle->CancelChoice(); } void BAutoCompleter::EditViewStateChanged(bool updateChoices) { if (fCompletionStyle) fCompletionStyle->EditViewStateChanged(updateChoices); } void BAutoCompleter::SetEditView(EditView* view) { if (fCompletionStyle) fCompletionStyle->SetEditView(view); } void BAutoCompleter::SetPatternSelector(PatternSelector* selector) { if (fCompletionStyle) fCompletionStyle->SetPatternSelector(selector); } void BAutoCompleter::SetChoiceModel(ChoiceModel* model) { if (fCompletionStyle) fCompletionStyle->SetChoiceModel(model); } void BAutoCompleter::SetChoiceView(ChoiceView* view) { if (fCompletionStyle) fCompletionStyle->SetChoiceView(view); } void BAutoCompleter::SetCompletionStyle(CompletionStyle* style) { delete fCompletionStyle; fCompletionStyle = style; }