29 #include <QBasicTimer>
30 #include <QFontMetrics>
31 #include <QAbstractScrollArea>
37 #include "qmdiclient.h"
61 friend class QEditorFactory;
86 EnsureVisible = 0x040,
90 Internal = 0x00000fff,
92 LineWrap = 0x00001000,
94 CtrlNavigation = 0x00010000,
95 CursorJumpPastWrap = 0x00020000,
97 ReplaceTabs = 0x00100000,
98 RemoveTrailing = 0x00200000,
99 PreserveTrailingIndent = 0x00400000,
100 AdjustIndent = 0x00800000,
102 AutoCloseChars = 0x01000000,
103 AutoIndent = 0x02000000,
105 Accessible = 0xfffff000
108 Q_DECLARE_FLAGS(State, EditFlag)
116 virtual void affect(
const QStringList& base,
int ph,
const QKeyEvent *e,
int mirror, QString& after)
const = 0;
119 PlaceHolder() : length(0), autoRemove(false), affector(0) {}
120 PlaceHolder(
const PlaceHolder& ph) : length(ph.length), autoRemove(ph.autoRemove), affector(ph.affector)
123 mirrors << ph.mirrors;
139 bool flag(EditFlag)
const;
141 bool canUndo()
const;
142 bool canRedo()
const;
144 QString text()
const;
145 QString text(
int line)
const;
147 QTextCodec* codec()
const;
152 bool isCursorVisible()
const;
155 int cursorMirrorCount()
const;
161 QAction* action(
const QString& s);
163 virtual QRect cursorRect()
const;
164 virtual QRect selectionRect()
const;
165 virtual QRect lineRect(
int line)
const;
170 QString name()
const;
171 QString fileName()
const;
173 bool isContentModified()
const;
176 bool isInConflict()
const;
178 int wrapWidth()
const;
180 inline int horizontalOffset()
const
181 {
return horizontalScrollBar()->isVisible() ? horizontalScrollBar()->value() : 0; }
182 inline int verticalOffset()
const
183 {
return verticalScrollBar()->isVisible() ? verticalScrollBar()->value() * m_doc->fontMetrics().lineSpacing() : 0; }
185 inline QPoint mapToContents(
const QPoint &point)
const
187 return QPoint( point.x() + horizontalOffset(),
188 point.y() + verticalOffset() );
191 inline QPoint mapFromContents(
const QPoint &point)
const
193 return QPoint( point.x() - horizontalOffset(),
194 point.y() - verticalOffset() );
199 static int defaultFlags();
200 static void setDefaultFlags(
int f);
202 static QTextCodec* defaultCodec();
203 static void setDefaultCodec(
int mib,
int update);
204 static void setDefaultCodec(QTextCodec *c,
int update);
205 static void setDefaultCodec(
const char *name,
int update);
206 static void setDefaultCodec(
const QByteArray& name,
int update);
209 static QString defaultInputBindingId();
210 static QStringList registeredInputBindingIds();
214 static void setDefaultInputBinding(
const QString& b);
234 void indentSelection();
235 void unindentSelection();
237 void commentSelection();
238 void uncommentSelection();
240 void setLineWrapping(
bool on);
243 void save(
const QString& filename);
245 virtual void print();
247 virtual void retranslate();
249 virtual void write(
const QString& s);
251 void addAction(QAction *a,
const QString& menu,
const QString& toolbar = QString());
252 void removeAction(QAction *a,
const QString& menu,
const QString& toolbar = QString());
254 void load(
const QString& file);
255 void setText(
const QString& s);
257 void setCodec(
int mib);
258 void setCodec(QTextCodec *c);
259 void setCodec(
const char *name);
260 void setCodec(
const QByteArray& name);
276 void setPanelMargins(
int l,
int t,
int r,
int b);
277 void getPanelMargins(
int *l,
int *t,
int *r,
int *b)
const;
279 void setTitle(
const QString& title);
283 void clearPlaceHolders();
284 void removePlaceHolder(
int i);
285 void addPlaceHolder(
const PlaceHolder& p,
bool autoUpdate =
true);
287 int placeHolderCount()
const;
288 int currentPlaceHolder()
const;
290 void nextPlaceHolder();
291 void previousPlaceHolder();
292 void setPlaceHolder(
int i);
294 virtual void setFileName(
const QString& f);
297 void loaded(
QEditor *e,
const QString& s);
298 void saved(
QEditor *e,
const QString& s);
300 void contentModified(
bool y);
301 void titleChanged(
const QString& title);
303 void textEdited(QKeyEvent *e);
304 void cursorPositionChanged();
306 void copyAvailable(
bool y);
308 void undoAvailable(
bool y);
309 void redoAvailable(
bool y);
314 void checkClipboard();
315 void reconnectWatcher();
316 void fileChanged(
const QString& f);
318 void setContentClean(
bool y);
320 void emitCursorPositionChanged();
322 virtual void setContentModified(
bool y);
325 virtual bool event(QEvent *e);
327 virtual void paintEvent(QPaintEvent *e);
328 virtual void timerEvent(QTimerEvent *e);
330 virtual void keyPressEvent(QKeyEvent *e);
332 virtual void inputMethodEvent(QInputMethodEvent* e);
334 virtual void mouseMoveEvent(QMouseEvent *e);
335 virtual void mousePressEvent(QMouseEvent *e);
336 virtual void mouseReleaseEvent(QMouseEvent *e);
337 virtual void mouseDoubleClickEvent(QMouseEvent *e);
339 virtual void dragEnterEvent(QDragEnterEvent *e);
340 virtual void dragLeaveEvent(QDragLeaveEvent *e);
341 virtual void dragMoveEvent(QDragMoveEvent *e);
342 virtual void dropEvent(QDropEvent *e);
344 virtual void changeEvent(QEvent *e);
345 virtual void showEvent(QShowEvent *);
346 virtual void wheelEvent(QWheelEvent *e);
347 virtual void resizeEvent(QResizeEvent *e);
348 virtual void focusInEvent(QFocusEvent *e);
349 virtual void focusOutEvent(QFocusEvent *e);
351 virtual void contextMenuEvent(QContextMenuEvent *e);
353 virtual void closeEvent(QCloseEvent *e);
355 virtual bool focusNextPrevChild(
bool next);
357 virtual bool moveKeyEvent(
QDocumentCursor& c, QKeyEvent *e,
bool *leave);
358 virtual bool isProcessingKeyEvent(QKeyEvent *e,
int *offset = 0);
361 virtual void startDrag();
362 virtual QMimeData* createMimeDataFromSelection()
const;
363 virtual void insertFromMimeData(
const QMimeData *d);
365 virtual void scrollContentsBy(
int dx,
int dy);
369 void setFlag(EditFlag f,
bool b);
371 void pageUp(QDocumentCursor::MoveMode moveMode);
372 void pageDown(QDocumentCursor::MoveMode moveMode);
374 void selectionChange(
bool force =
false);
376 void repaintCursor();
377 void ensureCursorVisible();
378 void ensureVisible(
int line);
379 void ensureVisible(
const QRect &rect);
387 void setClipboardSelection();
388 void setCursorPosition(
const QPoint& p);
390 void setCursorPosition(
int line,
int index);
391 void getCursorPosition(
int &line,
int &index);
393 void clearCursorMirrors();
397 void documentWidthChanged(
int newWidth);
398 void documentHeightChanged(
int newWidth);
400 void repaintContent(
int i,
int n);
401 void updateContent (
int i,
int n);
405 void bindingSelected(QAction *a);
407 void lineEndingSelected(QAction *a);
408 void lineEndingChanged(
int lineEnding);
419 void init(
bool actions =
true);
420 void updateBindingsMenu();
423 QString m_name, m_fileName;
427 QHash<QString, QAction*> m_actions;
429 QMenu *m_lineEndingsMenu;
430 QActionGroup *m_lineEndingsActions;
432 QMenu *m_bindingsMenu;
433 QAction *aDefaultBinding;
434 QActionGroup *m_bindingsActions;
444 QPointer<QCodeCompletionEngine> m_completionEngine;
450 int m_curPlaceHolder, m_cphOffset;
455 QRect m_crect, m_margins;
456 QPoint m_clickPoint, m_dragPoint;
457 QBasicTimer m_blink, m_scroll, m_click, m_drag;
461 static int m_defaultFlags;
462 static QTextCodec *m_defaultCodec;
466 static QHash<QString, QEditorInputBindingInterface*> m_registeredBindings;
469 Q_DECLARE_OPERATORS_FOR_FLAGS(QEditor::State);