summaryrefslogtreecommitdiffstats
path: root/scintilla/macosx/ScintillaMacOSX.h
diff options
context:
space:
mode:
Diffstat (limited to 'scintilla/macosx/ScintillaMacOSX.h')
-rw-r--r--scintilla/macosx/ScintillaMacOSX.h234
1 files changed, 234 insertions, 0 deletions
diff --git a/scintilla/macosx/ScintillaMacOSX.h b/scintilla/macosx/ScintillaMacOSX.h
new file mode 100644
index 0000000..f934820
--- /dev/null
+++ b/scintilla/macosx/ScintillaMacOSX.h
@@ -0,0 +1,234 @@
+/*
+ * ScintillaMacOSX.h
+ * tutorial
+ *
+ * Original code by Evan Jones on Sun Sep 01 2002.
+ * Contributors:
+ * Shane Caraveo, ActiveState
+ * Bernd Paradies, Adobe
+ *
+ */
+#include "TView.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h>
+
+#include <vector>
+
+#include "Platform.h"
+#include "Scintilla.h"
+#include "PlatMacOSX.h"
+
+
+#include "ScintillaWidget.h"
+#ifdef SCI_LEXER
+#include "SciLexer.h"
+#include "PropSet.h"
+#include "PropSetSimple.h"
+#include "Accessor.h"
+#include "KeyWords.h"
+#endif
+#include "SVector.h"
+#include "SplitVector.h"
+#include "Partitioning.h"
+#include "RunStyles.h"
+#include "ContractionState.h"
+#include "CellBuffer.h"
+#include "CallTip.h"
+#include "KeyMap.h"
+#include "Indicator.h"
+#include "XPM.h"
+#include "LineMarker.h"
+#include "Style.h"
+#include "AutoComplete.h"
+#include "ViewStyle.h"
+#include "CharClassify.h"
+#include "Decoration.h"
+#include "Document.h"
+#include "Selection.h"
+#include "PositionCache.h"
+#include "Editor.h"
+#include "ScintillaBase.h"
+#include "ScintillaCallTip.h"
+
+static const OSType scintillaMacOSType = 'Scin';
+
+namespace Scintilla {
+
+/**
+On the Mac, there is no WM_COMMAND or WM_NOTIFY message that can be sent
+back to the parent. Therefore, there must be a callback handler that acts
+like a Windows WndProc, where Scintilla can send notifications to. Use
+ScintillaMacOSX::registerNotifyHandler() to register such a handler.
+Messgae format is:
+<br>
+WM_COMMAND: HIWORD (wParam) = notification code, LOWORD (wParam) = 0 (no control ID), lParam = ScintillaMacOSX*
+<br>
+WM_NOTIFY: wParam = 0 (no control ID), lParam = ptr to SCNotification structure, with hwndFrom set to ScintillaMacOSX*
+*/
+typedef void(*SciNotifyFunc) (intptr_t windowid, unsigned int iMessage, uintptr_t wParam, uintptr_t lParam);
+
+/**
+Scintilla sends these two messages to the nofity handler. Please refer
+to the Windows API doc for details about the message format.
+*/
+#define WM_COMMAND 1001
+#define WM_NOTIFY 1002
+
+class ScintillaMacOSX : public ScintillaBase, public TView
+{
+ public:
+ HIViewRef vScrollBar;
+ HIViewRef hScrollBar;
+ SInt32 scrollBarFixedSize;
+ SciNotifyFunc notifyProc;
+ intptr_t notifyObj;
+
+ bool capturedMouse;
+ // true if scintilla initiated the drag session
+ bool inDragSession() { return inDragDrop == ddDragging; };
+ bool isTracking;
+
+ // Private so ScintillaMacOSX objects can not be copied
+ ScintillaMacOSX(const ScintillaMacOSX &) : ScintillaBase(), TView( NULL ) {}
+ ScintillaMacOSX &operator=(const ScintillaMacOSX &) { return * this; }
+
+public:
+ /** This is the class ID that we've assigned to Scintilla. */
+ static const CFStringRef kScintillaClassID;
+ static const ControlKind kScintillaKind;
+
+ ScintillaMacOSX( void* windowid );
+ virtual ~ScintillaMacOSX();
+ //~ static void ClassInit(GtkObjectClass* object_class, GtkWidgetClass *widget_class);
+
+ /** Returns the HIView object kind, needed to subclass TView. */
+ virtual ControlKind GetKind() { return kScintillaKind; }
+
+ /// Register the notify callback
+ void registerNotifyCallback(intptr_t windowid, SciNotifyFunc callback);
+private:
+ virtual void Initialise();
+ virtual void Finalise();
+
+ // pasteboard support
+ bool GetPasteboardData(PasteboardRef &pasteBoard,
+ SelectionText *selectedText, bool *isFileURL);
+ void SetPasteboardData(PasteboardRef &pasteBoard,
+ const SelectionText &selectedText);
+ char *GetStringFromCFString(CFStringRef &textString, int *textLen);
+
+ // Drag and drop
+ virtual void StartDrag();
+ Scintilla::Point GetDragPoint(DragRef inDrag);
+ bool GetDragData(DragRef inDrag, PasteboardRef &pasteBoard,
+ SelectionText *selectedText,
+ bool *isFileURL);
+ void SetDragCursor(DragRef inDrag);
+ virtual bool DragEnter(DragRef inDrag );
+ virtual bool DragWithin(DragRef inDrag );
+ virtual bool DragLeave(DragRef inDrag );
+ virtual OSStatus DragReceive(DragRef inDrag );
+ void DragScroll();
+ int scrollSpeed;
+ int scrollTicks;
+
+ EventRecord mouseDownEvent;
+ MouseTrackingRef mouseTrackingRef;
+ MouseTrackingRegionID mouseTrackingID;
+ HIPoint GetLocalPoint(::Point pt);
+
+ void InsertCharacters (const UniChar* buf, int len);
+ static pascal void IdleTimerEventHandler(EventLoopTimerRef inTimer,
+ EventLoopIdleTimerMessage inState,
+ void *scintilla );
+
+public: // Public for scintilla_send_message
+ virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+
+ void SyncPaint( void* gc, PRectangle rc);
+ //void FullPaint( void* gc );
+ virtual void Draw( RgnHandle rgn, CGContextRef gc );
+
+ virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+ virtual void SetTicking(bool on);
+ virtual bool SetIdle(bool on);
+ virtual void SetMouseCapture(bool on);
+ virtual bool HaveMouseCapture();
+ virtual PRectangle GetClientRectangle();
+
+ virtual void ScrollText(int linesToMove);
+ virtual void SetVerticalScrollPos();
+ virtual void SetHorizontalScrollPos();
+ virtual bool ModifyScrollBars(int nMax, int nPage);
+ virtual void ReconfigureScrollBars();
+ void Resize(int width, int height);
+ static pascal void LiveScrollHandler( ControlHandle control, SInt16 part );
+ bool ScrollBarHit(HIPoint location);
+
+ virtual void NotifyChange();
+ virtual void NotifyFocus(bool focus);
+ virtual void NotifyParent(SCNotification scn);
+ void NotifyKey(int key, int modifiers);
+ void NotifyURIDropped(const char *list);
+#ifndef EXT_INPUT
+ // Extended UTF8-UTF6-conversion to handle surrogate pairs correctly (CL265070)
+ virtual int KeyDefault(int key, int modifiers);
+#endif
+ static pascal OSStatus CommandEventHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* data );
+
+ bool HasSelection();
+ bool CanUndo();
+ bool CanRedo();
+ bool AlwaysTrue();
+ virtual void CopyToClipboard(const SelectionText &selectedText);
+ virtual void Copy();
+ virtual bool CanPaste();
+ virtual void Paste();
+ virtual void Paste(bool rectangular);
+ virtual void CreateCallTipWindow(PRectangle rc);
+ virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true);
+ virtual void ClaimSelection();
+
+ static sptr_t DirectFunction(ScintillaMacOSX *sciThis,
+ unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+
+ /** Timer event handler. Simply turns around and calls Tick. */
+ virtual void TimerFired( EventLoopTimerRef );
+ virtual OSStatus BoundsChanged( UInt32 inOptions, const HIRect& inOriginalBounds, const HIRect& inCurrentBounds, RgnHandle inInvalRgn );
+ virtual ControlPartCode HitTest( const HIPoint& where );
+ virtual OSStatus SetFocusPart( ControlPartCode desiredFocus, RgnHandle, Boolean, ControlPartCode* outActualFocus );
+ virtual OSStatus TextInput( TCarbonEvent& event );
+
+ // Configure the features of this control
+ virtual UInt32 GetBehaviors();
+
+ virtual OSStatus MouseDown( HIPoint& location, UInt32 modifiers, EventMouseButton button, UInt32 clickCount, TCarbonEvent& inEvent );
+ virtual OSStatus MouseDown( HIPoint& location, UInt32 modifiers, EventMouseButton button, UInt32 clickCount );
+ virtual OSStatus MouseDown( EventRecord *rec );
+ virtual OSStatus MouseUp( HIPoint& location, UInt32 modifiers, EventMouseButton button, UInt32 clickCount );
+ virtual OSStatus MouseUp( EventRecord *rec );
+ virtual OSStatus MouseDragged( HIPoint& location, UInt32 modifiers, EventMouseButton button, UInt32 clickCount );
+ virtual OSStatus MouseDragged( EventRecord *rec );
+ virtual OSStatus MouseEntered( HIPoint& location, UInt32 modifiers, EventMouseButton button, UInt32 clickCount );
+ virtual OSStatus MouseExited( HIPoint& location, UInt32 modifiers, EventMouseButton button, UInt32 clickCount );
+ virtual OSStatus MouseWheelMoved( EventMouseWheelAxis axis, SInt32 delta, UInt32 modifiers );
+ virtual OSStatus ContextualMenuClick( HIPoint& location );
+
+ virtual OSStatus ActiveStateChanged();
+
+ virtual void CallTipClick();
+
+
+public:
+ static HIViewRef Create();
+private:
+ static OSStatus Construct( HIViewRef inControl, TView** outView );
+
+};
+
+
+}