1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
//
// Copyright (c) 1990-2011, Scientific Toolworks, Inc.
//
// The License.txt file describes the conditions under which this software may be distributed.
//
// Author: Jason Haslam
//
// Additions Copyright (c) 2011 Archaeopteryx Software, Inc. d/b/a Wingware
// ScintillaWidget.h - Qt widget that wraps ScintillaQt and provides events and scrolling
#ifndef SCINTILLAEDITBASE_H
#define SCINTILLAEDITBASE_H
#include "Platform.h"
#include "Scintilla.h"
#include <QAbstractScrollArea>
#include <QMimeData>
#include <QTime>
#ifdef SCI_NAMESPACE
namespace Scintilla {
#endif
class ScintillaQt;
class SurfaceImpl;
struct SCNotification;
#ifdef WIN32
#ifdef MAKING_LIBRARY
#define EXPORT_IMPORT_API __declspec(dllexport)
#else
// Defining dllimport upsets moc
#define EXPORT_IMPORT_API __declspec(dllimport)
//#define EXPORT_IMPORT_API
#endif
#else
#define EXPORT_IMPORT_API
#endif
class EXPORT_IMPORT_API ScintillaEditBase : public QAbstractScrollArea {
Q_OBJECT
public:
explicit ScintillaEditBase(QWidget *parent = 0);
virtual ~ScintillaEditBase();
virtual sptr_t send(
unsigned int iMessage,
uptr_t wParam = 0,
sptr_t lParam = 0) const;
virtual sptr_t sends(
unsigned int iMessage,
uptr_t wParam = 0,
const char *s = 0) const;
public slots:
// Scroll events coming from GUI to be sent to Scintilla.
void scrollHorizontal(int value);
void scrollVertical(int value);
// Emit Scintilla notifications as signals.
void notifyParent(SCNotification scn);
void event_command(uptr_t wParam, sptr_t lParam);
signals:
void horizontalScrolled(int value);
void verticalScrolled(int value);
void horizontalRangeChanged(int max, int page);
void verticalRangeChanged(int max, int page);
void notifyChange();
void linesAdded(int linesAdded);
// Clients can use this hook to add additional
// formats (e.g. rich text) to the MIME data.
void aboutToCopy(QMimeData *data);
// Scintilla Notifications
void styleNeeded(int position);
void charAdded(int ch);
void savePointChanged(bool dirty);
void modifyAttemptReadOnly();
void key(int key);
void doubleClick(int position, int line);
void updateUi();
void modified(int type, int position, int length, int linesAdded,
const QByteArray &text, int line, int foldNow, int foldPrev);
void macroRecord(int message, uptr_t wParam, sptr_t lParam);
void marginClicked(int position, int modifiers, int margin);
void textAreaClicked(int line, int modifiers);
void needShown(int position, int length);
void painted();
void userListSelection(); // Wants some args.
void uriDropped(); // Wants some args.
void dwellStart(int x, int y);
void dwellEnd(int x, int y);
void zoom(int zoom);
void hotSpotClick(int position, int modifiers);
void hotSpotDoubleClick(int position, int modifiers);
void callTipClick();
void autoCompleteSelection(int position, const QString &text);
void autoCompleteCancelled();
// Base notifications for compatibility with other Scintilla implementations
void notify(SCNotification *pscn);
void command(uptr_t wParam, sptr_t lParam);
// GUI event notifications needed under Qt
void buttonPressed(QMouseEvent *event);
void buttonReleased(QMouseEvent *event);
void keyPressed(QKeyEvent *event);
void resized();
protected:
virtual bool event(QEvent *event);
virtual void paintEvent(QPaintEvent *event);
virtual void wheelEvent(QWheelEvent *event);
virtual void focusInEvent(QFocusEvent *event);
virtual void focusOutEvent(QFocusEvent *event);
virtual void resizeEvent(QResizeEvent *event);
virtual void keyPressEvent(QKeyEvent *event);
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void mouseDoubleClickEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
virtual void contextMenuEvent(QContextMenuEvent *event);
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dragLeaveEvent(QDragLeaveEvent *event);
virtual void dragMoveEvent(QDragMoveEvent *event);
virtual void dropEvent(QDropEvent *event);
virtual void inputMethodEvent(QInputMethodEvent *event);
virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
virtual void scrollContentsBy(int, int) {}
private:
ScintillaQt *sqt;
QTime time;
int preeditPos;
QString preeditString;
int wheelDelta;
static bool IsHangul(const QChar qchar);
void MoveImeCarets(int offset);
void DrawImeIndicator(int indicator, int len);
};
#ifdef SCI_NAMESPACE
}
#endif
#endif /* SCINTILLAEDITBASE_H */
|