7 #ifndef _FCITX_CANDIDATELIST_H_ 8 #define _FCITX_CANDIDATELIST_H_ 15 #include <fcitx-utils/macros.h> 16 #include <fcitx/candidateaction.h> 17 #include <fcitx/fcitxcore_export.h> 23 class PageableCandidateList;
24 class BulkCandidateList;
25 class ModifiableCandidateList;
26 class CursorMovableCandidateList;
27 class CursorModifiableCandidateList;
28 class BulkCursorCandidateList;
29 class ActionableCandidateList;
30 class TabbedCandidateList;
32 class CandidateListPrivate;
34 enum class CandidateLayoutHint { NotSet, Vertical, Horizontal };
36 class CandidateWordPrivate;
48 virtual void select(
InputContext *inputContext)
const = 0;
50 const Text &text()
const;
57 bool isPlaceHolder()
const;
58 bool hasCustomLabel()
const;
59 const Text &customLabel()
const;
66 const Text &comment()
const;
74 Text textWithComment(std::string separator =
" ")
const;
89 bool spaceBetweenComment()
const;
92 void setText(
Text text);
93 void setPlaceHolder(
bool placeHolder);
94 void resetCustomLabel();
95 void setCustomLabel(
Text text);
96 void setComment(
Text comment);
97 void setSpaceBetweenComment(
bool space);
100 std::unique_ptr<CandidateWordPrivate> d_ptr;
110 virtual const Text &label(
int idx)
const = 0;
112 virtual int size()
const = 0;
113 virtual int cursorIndex()
const = 0;
114 virtual CandidateLayoutHint layoutHint()
const = 0;
152 std::unique_ptr<CandidateListPrivate> d_ptr;
160 virtual bool hasPrev()
const = 0;
161 virtual bool hasNext()
const = 0;
162 virtual void prev() = 0;
163 virtual void next() = 0;
165 virtual bool usedNextBefore()
const = 0;
168 virtual int totalPages()
const {
return -1; }
169 virtual int currentPage()
const {
return -1; }
170 virtual void setPage(
int ) {}
175 virtual void prevCandidate() = 0;
176 virtual void nextCandidate() = 0;
181 virtual void setCursorIndex(
int index) = 0;
192 virtual const CandidateWord &candidateFromAll(
int idx)
const = 0;
197 virtual int totalSize()
const = 0;
204 virtual void insert(
int idx, std::unique_ptr<CandidateWord> word) = 0;
205 virtual void remove(
int idx) = 0;
206 virtual void replace(
int idx, std::unique_ptr<CandidateWord> word) = 0;
207 virtual void move(
int from,
int to) = 0;
209 void append(std::unique_ptr<CandidateWord> word) {
210 insert(totalSize(), std::move(word));
213 template <
typename CandidateWordType,
typename... Args>
214 void append(Args &&...args) {
216 std::make_unique<CandidateWordType>(std::forward<Args>(args)...));
225 setComment(std::move(comment));
233 virtual int globalCursorIndex()
const = 0;
234 virtual void setGlobalCursorIndex(
int index) = 0;
252 virtual bool hasAction(
const CandidateWord &candidate)
const = 0;
257 virtual std::vector<CandidateAction>
263 virtual void triggerAction(
const CandidateWord &candidate,
int id) = 0;
281 virtual std::vector<CandidateAction> tabActions()
const = 0;
289 virtual void triggerTabAction(
int id) = 0;
299 void setContent(
const std::vector<std::string> &content);
300 void setContent(std::vector<Text> content);
301 void setLayoutHint(CandidateLayoutHint hint);
302 void setCursorIndex(
int index);
307 int cursorIndex()
const override;
308 int size()
const override;
309 CandidateLayoutHint layoutHint()
const override;
312 std::unique_ptr<DisplayOnlyCandidateListPrivate> d_ptr;
318 enum class CursorPositionAfterPaging { SameAsLast, DonotChange, ResetToFirst };
343 void setLabels(
const std::vector<std::string> &labels = {});
350 void setSelectionKey(
const KeyList &keyList);
352 void setPageSize(
int size);
353 int pageSize()
const;
354 void setLayoutHint(CandidateLayoutHint hint);
355 void setGlobalCursorIndex(
int index);
364 int globalCursorIndex()
const;
372 void setCursorIndex(
int index);
377 int cursorIndex()
const override;
378 int size()
const override;
381 bool hasPrev()
const override;
382 bool hasNext()
const override;
383 void prev()
override;
384 void next()
override;
386 bool usedNextBefore()
const override;
388 int totalPages()
const override;
389 int currentPage()
const override;
390 void setPage(
int page)
override;
392 CandidateLayoutHint layoutHint()
const override;
395 const CandidateWord &candidateFromAll(
int idx)
const override;
396 int totalSize()
const override;
399 void insert(
int idx, std::unique_ptr<CandidateWord> word)
override;
400 void remove(
int idx)
override;
401 void replace(
int idx, std::unique_ptr<CandidateWord> word)
override;
402 void move(
int from,
int to)
override;
405 void prevCandidate()
override;
406 void nextCandidate()
override;
409 void setCursorIncludeUnselected(
bool);
410 void setCursorKeepInSamePage(
bool);
411 void setCursorPositionAfterPaging(CursorPositionAfterPaging afterPaging);
418 void setActionableImpl(std::unique_ptr<ActionableCandidateList> actionable);
426 void setTabbedImpl(std::unique_ptr<TabbedCandidateList> tabbed);
429 void fixAfterUpdate();
430 void moveCursor(
bool prev);
432 std::unique_ptr<CommonCandidateListPrivate> d_ptr;
437 #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.