7 #ifndef _FCITX_CANDIDATELIST_H_ 8 #define _FCITX_CANDIDATELIST_H_ 17 #include <fcitx-utils/macros.h> 18 #include <fcitx/candidateaction.h> 19 #include <fcitx/fcitxcore_export.h> 26 class PageableCandidateList;
27 class BulkCandidateList;
28 class ModifiableCandidateList;
29 class CursorMovableCandidateList;
30 class CursorModifiableCandidateList;
31 class BulkCursorCandidateList;
32 class ActionableCandidateList;
33 class TabbedCandidateList;
35 class CandidateListPrivate;
37 enum class CandidateLayoutHint { NotSet, Vertical, Horizontal };
39 class CandidateWordPrivate;
51 virtual void select(
InputContext *inputContext)
const = 0;
53 const Text &text()
const;
60 bool isPlaceHolder()
const;
61 bool hasCustomLabel()
const;
62 const Text &customLabel()
const;
69 const Text &comment()
const;
77 Text textWithComment(std::string separator =
" ")
const;
92 bool spaceBetweenComment()
const;
95 void setText(
Text text);
96 void setPlaceHolder(
bool placeHolder);
97 void resetCustomLabel();
98 void setCustomLabel(
Text text);
99 void setComment(
Text comment);
100 void setSpaceBetweenComment(
bool space);
103 std::unique_ptr<CandidateWordPrivate> d_ptr;
113 virtual const Text &label(
int idx)
const = 0;
115 virtual int size()
const = 0;
116 virtual int cursorIndex()
const = 0;
117 virtual CandidateLayoutHint layoutHint()
const = 0;
155 std::unique_ptr<CandidateListPrivate> d_ptr;
163 virtual bool hasPrev()
const = 0;
164 virtual bool hasNext()
const = 0;
165 virtual void prev() = 0;
166 virtual void next() = 0;
168 virtual bool usedNextBefore()
const = 0;
171 virtual int totalPages()
const {
return -1; }
172 virtual int currentPage()
const {
return -1; }
173 virtual void setPage(
int ) {}
178 virtual void prevCandidate() = 0;
179 virtual void nextCandidate() = 0;
184 virtual void setCursorIndex(
int index) = 0;
195 virtual const CandidateWord &candidateFromAll(
int idx)
const = 0;
200 virtual int totalSize()
const = 0;
207 virtual void insert(
int idx, std::unique_ptr<CandidateWord> word) = 0;
208 virtual void remove(
int idx) = 0;
209 virtual void replace(
int idx, std::unique_ptr<CandidateWord> word) = 0;
210 virtual void move(
int from,
int to) = 0;
212 void append(std::unique_ptr<CandidateWord> word) {
213 insert(totalSize(), std::move(word));
216 template <
typename CandidateWordType,
typename... Args>
217 void append(Args &&...args) {
219 std::make_unique<CandidateWordType>(std::forward<Args>(args)...));
228 setComment(std::move(comment));
236 virtual int globalCursorIndex()
const = 0;
237 virtual void setGlobalCursorIndex(
int index) = 0;
255 virtual bool hasAction(
const CandidateWord &candidate)
const = 0;
260 virtual std::vector<CandidateAction>
266 virtual void triggerAction(
const CandidateWord &candidate,
int id) = 0;
294 virtual std::span<const CandidateAction> tabActions() = 0;
302 virtual void triggerTabAction(
int id) = 0;
312 void setContent(
const std::vector<std::string> &content);
313 void setContent(std::vector<Text> content);
314 void setLayoutHint(CandidateLayoutHint hint);
315 void setCursorIndex(
int index);
320 int cursorIndex()
const override;
321 int size()
const override;
322 CandidateLayoutHint layoutHint()
const override;
325 std::unique_ptr<DisplayOnlyCandidateListPrivate> d_ptr;
331 enum class CursorPositionAfterPaging { SameAsLast, DonotChange, ResetToFirst };
356 void setLabels(
const std::vector<std::string> &labels = {});
363 void setSelectionKey(
const KeyList &keyList);
365 void setPageSize(
int size);
366 int pageSize()
const;
367 void setLayoutHint(CandidateLayoutHint hint);
368 void setGlobalCursorIndex(
int index);
377 int globalCursorIndex()
const;
385 void setCursorIndex(
int index);
390 int cursorIndex()
const override;
391 int size()
const override;
394 bool hasPrev()
const override;
395 bool hasNext()
const override;
396 void prev()
override;
397 void next()
override;
399 bool usedNextBefore()
const override;
401 int totalPages()
const override;
402 int currentPage()
const override;
403 void setPage(
int page)
override;
405 CandidateLayoutHint layoutHint()
const override;
408 const CandidateWord &candidateFromAll(
int idx)
const override;
409 int totalSize()
const override;
412 void insert(
int idx, std::unique_ptr<CandidateWord> word)
override;
413 void remove(
int idx)
override;
414 void replace(
int idx, std::unique_ptr<CandidateWord> word)
override;
415 void move(
int from,
int to)
override;
418 void prevCandidate()
override;
419 void nextCandidate()
override;
422 void setCursorIncludeUnselected(
bool);
423 void setCursorKeepInSamePage(
bool);
424 void setCursorPositionAfterPaging(CursorPositionAfterPaging afterPaging);
431 void setActionableImpl(std::unique_ptr<ActionableCandidateList> actionable);
439 void setTabbedImpl(std::unique_ptr<TabbedCandidateList> tabbed);
454 setFilter(
const std::function<
bool(
const CandidateWord &)> &filterFunc);
480 size_t originSize()
const;
483 void fixAfterUpdate();
484 void moveCursor(
bool prev);
486 std::unique_ptr<CommonCandidateListPrivate> d_ptr;
491 #endif // _FCITX_CANDIDATELIST_H_
Formatted string commonly used in user interface.
A class represents a formatted string.
void select(InputContext *) const override
Called when candidate is selected by user.
Interface for tab-related actions on candidate list.
Interface for trigger actions on candidates.
Base class of candidate word.
A common simple candidate list that serves most of the purpose.
An input context represents a client of Fcitx.
Class to represent a key.