99 Q_DECLARE_PUBLIC(QLineEdit)
101 enum SideWidgetFlag {
102 SideWidgetFadeInWithText = 0x1,
103 SideWidgetCreatedByWidgetAction = 0x2,
104 SideWidgetClearButton = 0x4
107 struct SideWidgetEntry {
108 explicit SideWidgetEntry(QWidget *w =
nullptr, QAction *a =
nullptr,
int _flags = 0) : widget(w), action(a), flags(_flags) {}
114 typedef std::vector<SideWidgetEntry> SideWidgetEntryList;
116 struct SideWidgetParameters {
124 : control(
nullptr), frame(1), contextMenuEnabled(1), cursorVisible(0),
125 dragEnabled(0), clickCausedFocus(0), edited(0), hscroll(0), vscroll(0),
126 alignment(Qt::AlignLeading | Qt::AlignVCenter),
127 textMargins{0, 0, 0, 0},
128 lastTextSize(0), mouseYThreshold(0)
136 QWidgetLineControl *control;
138#ifndef QT_NO_CONTEXTMENU
139 QPointer<QAction> selectAllAction;
141 void init(
const QString&);
142 void initMouseYThreshold();
144 QRect adjustedControlRect(
const QRect &)
const;
146 int xToPos(
int x, QTextLine::CursorPosition = QTextLine::CursorBetweenCharacters)
const;
147 bool inSelection(
int x)
const;
148 QRect cursorRect()
const;
149 void setCursorVisible(
bool visible);
150 void setText(
const QString& text);
152 QString textBeforeCursor(
int curPos)
const;
153 QString textAfterCursor(
int curPos)
const;
154 void updatePasswordEchoEditing(
bool);
156 void resetInputMethod();
158 inline bool shouldEnableInputMethod()
const
160#if defined (Q_OS_ANDROID)
161 return !control->isReadOnly() || control->isSelectableByMouse();
163 return !control->isReadOnly();
166 inline bool shouldShowPlaceholderText()
const
168 return control->text().isEmpty() && control->preeditAreaText().isEmpty()
169 && !((alignment & Qt::AlignHCenter) && q_func()->hasFocus());
172 static inline QLineEditPrivate *get(QLineEdit *lineEdit) {
173 return lineEdit->d_func();
177 QBasicTimer tripleClickTimer;
179 uint contextMenuEnabled : 1;
180 uint cursorVisible : 1;
181 uint dragEnabled : 1;
182 uint clickCausedFocus : 1;
187 static const int verticalMargin;
188 static const int horizontalMargin;
190 bool sendMouseEventToInputContext(QMouseEvent *e);
192 QRect adjustedContentsRect()
const;
194 void handleWindowActivate();
195 void textEdited(
const QString &);
196 void cursorPositionChanged(
int,
int);
197#ifdef QT_KEYPAD_NAVIGATION
198 void editFocusChange(
bool);
200 void selectionChanged();
201 void updateNeeded(
const QRect &);
202#if QT_CONFIG(completer)
203 void connectCompleter();
204 void disconnectCompleter();
205 void completionHighlighted(
const QString &);
207 QPoint mousePressPos;
208#if QT_CONFIG(draganddrop)
209 QBasicTimer dndTimer;
212 void textChanged(
const QString &);
213 void clearButtonClicked();
214 void controlEditingFinished();
216 QMargins textMargins;
218 QString placeholderText;
221 QWidget *addAction(QAction *newAction, QAction *before, QLineEdit::ActionPosition,
int flags = 0);
222 void removeAction(QAction *action);
224 SideWidgetParameters sideWidgetParameters()
const;
225 QIcon clearButtonIcon()
const;
226 void setClearButtonEnabled(
bool enabled);
227 void positionSideWidgets();
228 inline bool hasSideWidgets()
const {
return !leadingSideWidgets.empty() || !trailingSideWidgets.empty(); }
229 inline const SideWidgetEntryList &leftSideWidgetList()
const
230 {
return q_func()->layoutDirection() == Qt::LeftToRight ? leadingSideWidgets : trailingSideWidgets; }
231 inline const SideWidgetEntryList &rightSideWidgetList()
const
232 {
return q_func()->layoutDirection() == Qt::LeftToRight ? trailingSideWidgets : leadingSideWidgets; }
234 QMargins effectiveTextMargins()
const;
237 struct SideWidgetLocation {
238 QLineEdit::ActionPosition position;
241 bool isValid()
const {
return index >= 0; }
243 friend class QTypeInfo<SideWidgetLocation>;
246 SideWidgetLocation findSideWidget(
const QAction *a)
const;
249 SideWidgetEntryList leadingSideWidgets;
250 SideWidgetEntryList trailingSideWidgets;