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 void selectionChanged();
198 void updateNeeded(
const QRect &);
199#if QT_CONFIG(completer)
200 void connectCompleter();
201 void disconnectCompleter();
202 void completionHighlighted(
const QString &);
204 QPoint mousePressPos;
205#if QT_CONFIG(draganddrop)
206 QBasicTimer dndTimer;
209 void textChanged(
const QString &);
210 void clearButtonClicked();
211 void controlEditingFinished();
213 QMargins textMargins;
215 QString placeholderText;
218 QWidget *addAction(QAction *newAction, QAction *before, QLineEdit::ActionPosition,
int flags = 0);
219 void removeAction(QAction *action);
221 SideWidgetParameters sideWidgetParameters()
const;
222 QIcon clearButtonIcon()
const;
223 void setClearButtonEnabled(
bool enabled);
224 void positionSideWidgets();
225 inline bool hasSideWidgets()
const {
return !leadingSideWidgets.empty() || !trailingSideWidgets.empty(); }
226 inline const SideWidgetEntryList &leftSideWidgetList()
const
227 {
return q_func()->layoutDirection() == Qt::LeftToRight ? leadingSideWidgets : trailingSideWidgets; }
228 inline const SideWidgetEntryList &rightSideWidgetList()
const
229 {
return q_func()->layoutDirection() == Qt::LeftToRight ? trailingSideWidgets : leadingSideWidgets; }
231 QMargins effectiveTextMargins()
const;
234 struct SideWidgetLocation {
235 QLineEdit::ActionPosition position;
238 bool isValid()
const {
return index >= 0; }
240 friend class QTypeInfo<SideWidgetLocation>;
243 SideWidgetLocation findSideWidget(
const QAction *a)
const;
246 SideWidgetEntryList leadingSideWidgets;
247 SideWidgetEntryList trailingSideWidgets;