98 Q_DECLARE_PUBLIC(QLineEdit)
100 enum SideWidgetFlag {
101 SideWidgetFadeInWithText = 0x1,
102 SideWidgetCreatedByWidgetAction = 0x2,
103 SideWidgetClearButton = 0x4
106 struct SideWidgetEntry {
107 explicit SideWidgetEntry(QWidget *w =
nullptr, QAction *a =
nullptr,
int _flags = 0) : widget(w), action(a), flags(_flags) {}
113 typedef std::vector<SideWidgetEntry> SideWidgetEntryList;
115 struct SideWidgetParameters {
123 : control(
nullptr), frame(1), contextMenuEnabled(1), cursorVisible(0),
124 dragEnabled(0), clickCausedFocus(0), edited(0), hscroll(0), vscroll(0),
125 alignment(Qt::AlignLeading | Qt::AlignVCenter),
126 textMargins{0, 0, 0, 0},
127 lastTextSize(0), mouseYThreshold(0)
135 QWidgetLineControl *control;
137#ifndef QT_NO_CONTEXTMENU
138 QPointer<QAction> selectAllAction;
140 void init(
const QString&);
141 void initMouseYThreshold();
143 QRect adjustedControlRect(
const QRect &)
const;
145 int xToPos(
int x, QTextLine::CursorPosition = QTextLine::CursorBetweenCharacters)
const;
146 bool inSelection(
int x)
const;
147 QRect cursorRect()
const;
148 void setCursorVisible(
bool visible);
149 void setText(
const QString& text);
151 QString textBeforeCursor(
int curPos)
const;
152 QString textAfterCursor(
int curPos)
const;
153 void updatePasswordEchoEditing(
bool);
155 void resetInputMethod();
157 inline bool shouldEnableInputMethod()
const
159#if defined (Q_OS_ANDROID)
160 return !control->isReadOnly() || control->isSelectableByMouse();
162 return !control->isReadOnly();
165 inline bool shouldShowPlaceholderText()
const
167 return control->text().isEmpty() && control->preeditAreaText().isEmpty()
168 && !((alignment & Qt::AlignHCenter) && q_func()->hasFocus());
171 static inline QLineEditPrivate *get(QLineEdit *lineEdit) {
172 return lineEdit->d_func();
176 QBasicTimer tripleClickTimer;
178 uint contextMenuEnabled : 1;
179 uint cursorVisible : 1;
180 uint dragEnabled : 1;
181 uint clickCausedFocus : 1;
186 static const int verticalMargin;
187 static const int horizontalMargin;
189 bool sendMouseEventToInputContext(QMouseEvent *e);
191 QRect adjustedContentsRect()
const;
193 void handleWindowActivate();
194 void textEdited(
const QString &);
195 void cursorPositionChanged(
int,
int);
196#ifdef QT_KEYPAD_NAVIGATION
197 void editFocusChange(
bool);
199 void selectionChanged();
200 void updateNeeded(
const QRect &);
201#if QT_CONFIG(completer)
202 void connectCompleter();
203 void disconnectCompleter();
204 void completionHighlighted(
const QString &);
206 QPoint mousePressPos;
207#if QT_CONFIG(draganddrop)
208 QBasicTimer dndTimer;
211 void textChanged(
const QString &);
212 void clearButtonClicked();
213 void controlEditingFinished();
215 QMargins textMargins;
217 QString placeholderText;
220 QWidget *addAction(QAction *newAction, QAction *before, QLineEdit::ActionPosition,
int flags = 0);
221 void removeAction(QAction *action);
223 SideWidgetParameters sideWidgetParameters()
const;
224 QIcon clearButtonIcon()
const;
225 void setClearButtonEnabled(
bool enabled);
226 void positionSideWidgets();
227 inline bool hasSideWidgets()
const {
return !leadingSideWidgets.empty() || !trailingSideWidgets.empty(); }
228 inline const SideWidgetEntryList &leftSideWidgetList()
const
229 {
return q_func()->layoutDirection() == Qt::LeftToRight ? leadingSideWidgets : trailingSideWidgets; }
230 inline const SideWidgetEntryList &rightSideWidgetList()
const
231 {
return q_func()->layoutDirection() == Qt::LeftToRight ? trailingSideWidgets : leadingSideWidgets; }
233 QMargins effectiveTextMargins()
const;
236 struct SideWidgetLocation {
237 QLineEdit::ActionPosition position;
240 bool isValid()
const {
return index >= 0; }
242 friend class QTypeInfo<SideWidgetLocation>;
245 SideWidgetLocation findSideWidget(
const QAction *a)
const;
248 SideWidgetEntryList leadingSideWidgets;
249 SideWidgetEntryList trailingSideWidgets;