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;
88 bool spaceBetweenComment()
const;
91 void setText(
Text text);
92 void setPlaceHolder(
bool placeHolder);
93 void resetCustomLabel();
94 void setCustomLabel(
Text text);
95 void setComment(
Text comment);
96 void setSpaceBetweenComment(
bool space);
99 std::unique_ptr<CandidateWordPrivate> d_ptr;
109 virtual const Text &label(
int idx)
const = 0;
111 virtual int size()
const = 0;
112 virtual int cursorIndex()
const = 0;
113 virtual CandidateLayoutHint layoutHint()
const = 0;
135 std::unique_ptr<CandidateListPrivate> d_ptr;
143 virtual bool hasPrev()
const = 0;
144 virtual bool hasNext()
const = 0;
145 virtual void prev() = 0;
146 virtual void next() = 0;
148 virtual bool usedNextBefore()
const = 0;
151 virtual int totalPages()
const {
return -1; }
152 virtual int currentPage()
const {
return -1; }
153 virtual void setPage(
int ) {}
158 virtual void prevCandidate() = 0;
159 virtual void nextCandidate() = 0;
164 virtual void setCursorIndex(
int index) = 0;
175 virtual const CandidateWord &candidateFromAll(
int idx)
const = 0;
180 virtual int totalSize()
const = 0;
187 virtual void insert(
int idx, std::unique_ptr<CandidateWord> word) = 0;
188 virtual void remove(
int idx) = 0;
189 virtual void replace(
int idx, std::unique_ptr<CandidateWord> word) = 0;
190 virtual void move(
int from,
int to) = 0;
192 void append(std::unique_ptr<CandidateWord> word) {
193 insert(totalSize(), std::move(word));
196 template <
typename CandidateWordType,
typename... Args>
197 void append(Args &&...args) {
199 std::make_unique<CandidateWordType>(std::forward<Args>(args)...));
208 setComment(std::move(comment));
216 virtual int globalCursorIndex()
const = 0;
217 virtual void setGlobalCursorIndex(
int index) = 0;
235 virtual bool hasAction(
const CandidateWord &candidate)
const = 0;
240 virtual std::vector<CandidateAction>
246 virtual void triggerAction(
const CandidateWord &candidate,
int id) = 0;
256 void setContent(
const std::vector<std::string> &content);
257 void setContent(std::vector<Text> content);
258 void setLayoutHint(CandidateLayoutHint hint);
259 void setCursorIndex(
int index);
264 int cursorIndex()
const override;
265 int size()
const override;
266 CandidateLayoutHint layoutHint()
const override;
269 std::unique_ptr<DisplayOnlyCandidateListPrivate> d_ptr;
275 enum class CursorPositionAfterPaging { SameAsLast, DonotChange, ResetToFirst };
300 void setLabels(
const std::vector<std::string> &labels = {});
307 void setSelectionKey(
const KeyList &keyList);
309 void setPageSize(
int size);
310 int pageSize()
const;
311 void setLayoutHint(CandidateLayoutHint hint);
312 void setGlobalCursorIndex(
int index);
321 int globalCursorIndex()
const;
329 void setCursorIndex(
int index);
334 int cursorIndex()
const override;
335 int size()
const override;
338 bool hasPrev()
const override;
339 bool hasNext()
const override;
340 void prev()
override;
341 void next()
override;
343 bool usedNextBefore()
const override;
345 int totalPages()
const override;
346 int currentPage()
const override;
347 void setPage(
int page)
override;
349 CandidateLayoutHint layoutHint()
const override;
352 const CandidateWord &candidateFromAll(
int idx)
const override;
353 int totalSize()
const override;
356 void insert(
int idx, std::unique_ptr<CandidateWord> word)
override;
357 void remove(
int idx)
override;
358 void replace(
int idx, std::unique_ptr<CandidateWord> word)
override;
359 void move(
int from,
int to)
override;
362 void prevCandidate()
override;
363 void nextCandidate()
override;
366 void setCursorIncludeUnselected(
bool);
367 void setCursorKeepInSamePage(
bool);
368 void setCursorPositionAfterPaging(CursorPositionAfterPaging afterPaging);
375 void setActionableImpl(std::unique_ptr<ActionableCandidateList> actionable);
378 void fixAfterUpdate();
379 void moveCursor(
bool prev);
381 std::unique_ptr<CommonCandidateListPrivate> d_ptr;
386 #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.