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;
31 class CandidateListPrivate;
33 enum class CandidateLayoutHint { NotSet, Vertical, Horizontal };
35 class CandidateWordPrivate;
47 virtual void select(
InputContext *inputContext)
const = 0;
49 const Text &text()
const;
56 bool isPlaceHolder()
const;
57 bool hasCustomLabel()
const;
58 const Text &customLabel()
const;
65 const Text &comment()
const;
73 Text textWithComment(std::string separator =
" ")
const;
76 void setText(
Text text);
77 void setPlaceHolder(
bool placeHolder);
78 void resetCustomLabel();
79 void setCustomLabel(
Text text);
80 void setComment(
Text comment);
83 std::unique_ptr<CandidateWordPrivate> d_ptr;
93 virtual const Text &label(
int idx)
const = 0;
95 virtual int size()
const = 0;
96 virtual int cursorIndex()
const = 0;
97 virtual CandidateLayoutHint layoutHint()
const = 0;
119 std::unique_ptr<CandidateListPrivate> d_ptr;
127 virtual bool hasPrev()
const = 0;
128 virtual bool hasNext()
const = 0;
129 virtual void prev() = 0;
130 virtual void next() = 0;
132 virtual bool usedNextBefore()
const = 0;
135 virtual int totalPages()
const {
return -1; }
136 virtual int currentPage()
const {
return -1; }
137 virtual void setPage(
int ) {}
142 virtual void prevCandidate() = 0;
143 virtual void nextCandidate() = 0;
148 virtual void setCursorIndex(
int index) = 0;
159 virtual const CandidateWord &candidateFromAll(
int idx)
const = 0;
164 virtual int totalSize()
const = 0;
171 virtual void insert(
int idx, std::unique_ptr<CandidateWord> word) = 0;
172 virtual void remove(
int idx) = 0;
173 virtual void replace(
int idx, std::unique_ptr<CandidateWord> word) = 0;
174 virtual void move(
int from,
int to) = 0;
176 void append(std::unique_ptr<CandidateWord> word) {
177 insert(totalSize(), std::move(word));
180 template <
typename CandidateWordType,
typename... Args>
181 void append(Args &&...args) {
183 std::make_unique<CandidateWordType>(std::forward<Args>(args)...));
192 setComment(std::move(comment));
200 virtual int globalCursorIndex()
const = 0;
201 virtual void setGlobalCursorIndex(
int index) = 0;
219 virtual bool hasAction(
const CandidateWord &candidate)
const = 0;
224 virtual std::vector<CandidateAction>
230 virtual void triggerAction(
const CandidateWord &candidate,
int id) = 0;
240 void setContent(
const std::vector<std::string> &content);
241 void setContent(std::vector<Text> content);
242 void setLayoutHint(CandidateLayoutHint hint);
243 void setCursorIndex(
int index);
248 int cursorIndex()
const override;
249 int size()
const override;
250 CandidateLayoutHint layoutHint()
const override;
253 std::unique_ptr<DisplayOnlyCandidateListPrivate> d_ptr;
259 enum class CursorPositionAfterPaging { SameAsLast, DonotChange, ResetToFirst };
284 void setLabels(
const std::vector<std::string> &labels = {});
291 void setSelectionKey(
const KeyList &keyList);
293 void setPageSize(
int size);
294 int pageSize()
const;
295 void setLayoutHint(CandidateLayoutHint hint);
296 void setGlobalCursorIndex(
int index);
305 int globalCursorIndex()
const;
313 void setCursorIndex(
int index);
318 int cursorIndex()
const override;
319 int size()
const override;
322 bool hasPrev()
const override;
323 bool hasNext()
const override;
324 void prev()
override;
325 void next()
override;
327 bool usedNextBefore()
const override;
329 int totalPages()
const override;
330 int currentPage()
const override;
331 void setPage(
int page)
override;
333 CandidateLayoutHint layoutHint()
const override;
336 const CandidateWord &candidateFromAll(
int idx)
const override;
337 int totalSize()
const override;
340 void insert(
int idx, std::unique_ptr<CandidateWord> word)
override;
341 void remove(
int idx)
override;
342 void replace(
int idx, std::unique_ptr<CandidateWord> word)
override;
343 void move(
int from,
int to)
override;
346 void prevCandidate()
override;
347 void nextCandidate()
override;
350 void setCursorIncludeUnselected(
bool);
351 void setCursorKeepInSamePage(
bool);
352 void setCursorPositionAfterPaging(CursorPositionAfterPaging afterPaging);
359 void setActionableImpl(std::unique_ptr<ActionableCandidateList> actionable);
362 void fixAfterUpdate();
363 void moveCursor(
bool prev);
365 std::unique_ptr<CommonCandidateListPrivate> d_ptr;
370 #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 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.