aboutsummaryrefslogtreecommitdiffhomepage
path: root/cocoa/ScintillaCocoa.h
diff options
context:
space:
mode:
Diffstat (limited to 'cocoa/ScintillaCocoa.h')
-rw-r--r--cocoa/ScintillaCocoa.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/cocoa/ScintillaCocoa.h b/cocoa/ScintillaCocoa.h
new file mode 100644
index 000000000..2fa2f1bfe
--- /dev/null
+++ b/cocoa/ScintillaCocoa.h
@@ -0,0 +1,203 @@
+/*
+ * ScintillaCocoa.h
+ *
+ * Mike Lischke <mlischke@sun.com>
+ *
+ * Based on ScintillaCocoa.h
+ * Original code by Evan Jones on Sun Sep 01 2002.
+ * Contributors:
+ * Shane Caraveo, ActiveState
+ * Bernd Paradies, Adobe
+ *
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+ * This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "Platform.h"
+#include "Scintilla.h"
+#include "PlatCocoa.h"
+
+#ifdef SCI_LEXER
+#include "SciLexer.h"
+#include "PropSet.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 "PositionCache.h"
+#include "Editor.h"
+#include "SString.h"
+#include "ScintillaBase.h"
+//#include "ScintillaCallTip.h"
+
+#import <Cocoa/Cocoa.h>
+
+#import <Carbon/Carbon.h> // Temporary
+
+@class ScintillaView;
+
+/**
+ * Helper class to be used as timer target (NSTimer).
+ */
+@interface TimerTarget : NSObject
+{
+ void* mTarget;
+ NSNotificationQueue* notificationQueue;
+}
+- (id) init: (void*) target;
+- (void) timerFired: (NSTimer*) timer;
+- (void) idleTimerFired: (NSTimer*) timer;
+- (void) idleTriggered: (NSNotification*) notification;
+@end
+
+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
+ * ScintillaCocoa::RegisterNotifyHandler() to register such a handler.
+ * Messgae format is:
+ * <br>
+ * WM_COMMAND: HIWORD (wParam) = notification code, LOWORD (wParam) = 0 (no control ID), lParam = ScintillaCocoa*
+ * <br>
+ * WM_NOTIFY: wParam = 0 (no control ID), lParam = ptr to SCNotification structure, with hwndFrom set to ScintillaCocoa*
+ */
+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
+
+/**
+ * Main scintilla class, implemented for OS X (Cocoa).
+ */
+class ScintillaCocoa : public ScintillaBase
+{
+private:
+ TimerTarget* timerTarget;
+ NSEvent* lastMouseEvent;
+
+ SciNotifyFunc notifyProc;
+ intptr_t notifyObj;
+
+ bool capturedMouse;
+
+ // Private so ScintillaCocoa objects can not be copied
+ ScintillaCocoa(const ScintillaCocoa &) : ScintillaBase() {}
+ ScintillaCocoa &operator=(const ScintillaCocoa &) { return * this; }
+
+ bool GetPasteboardData(NSPasteboard* board, SelectionText* selectedText);
+ void SetPasteboardData(NSPasteboard* board, const SelectionText& selectedText);
+
+ int scrollSpeed;
+ int scrollTicks;
+protected:
+ NSView* ContentView();
+ PRectangle GetClientRectangle();
+ Point ConvertPoint(NSPoint point);
+
+ virtual void Initialise();
+ virtual void Finalise();
+public:
+ ScintillaCocoa(NSView* view);
+ virtual ~ScintillaCocoa();
+
+ void RegisterNotifyCallback(intptr_t windowid, SciNotifyFunc callback);
+ sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+
+ ScintillaView* TopContainer();
+
+ void SyncPaint(void* gc, PRectangle rc);
+ void Draw(NSRect rect, CGContextRef gc);
+
+ virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+ void SetTicking(bool on);
+ bool SetIdle(bool on);
+ void SetMouseCapture(bool on);
+ bool HaveMouseCapture();
+// virtual void ScrollText(int linesToMove);
+ void SetVerticalScrollPos();
+ void SetHorizontalScrollPos();
+ bool ModifyScrollBars(int nMax, int nPage);
+ void Resize();
+ void DoScroll(float position, NSScrollerPart part, bool horizontal);
+
+ // Notifications.
+ void NotifyChange();
+ void NotifyFocus(bool focus);
+ void NotifyParent(SCNotification scn);
+ void NotifyURIDropped(const char *uri);
+
+ bool HasSelection();
+ bool CanUndo();
+ bool CanRedo();
+ 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(ScintillaCocoa *sciThis, unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+
+ void TimerFired(NSTimer* timer);
+ void IdleTimerFired();
+ int InsertText(NSString* input);
+
+ bool KeyboardInput(NSEvent* event);
+ void MouseDown(NSEvent* event);
+ void MouseMove(NSEvent* event);
+ void MouseUp(NSEvent* event);
+ void MouseEntered(NSEvent* event);
+ void MouseExited(NSEvent* event);
+ void MouseWheel(NSEvent* event);
+
+ // Drag and drop
+ void StartDrag();
+ bool GetDragData(id <NSDraggingInfo> info, NSPasteboard &pasteBoard, SelectionText* selectedText);
+ NSDragOperation DraggingEntered(id <NSDraggingInfo> info);
+ NSDragOperation DraggingUpdated(id <NSDraggingInfo> info);
+ void DraggingExited(id <NSDraggingInfo> info);
+ bool PerformDragOperation(id <NSDraggingInfo> info);
+ void DragScroll();
+
+ // virtual OSStatus ContextualMenuClick( HIPoint& location );
+//
+// virtual OSStatus ActiveStateChanged();
+//
+// virtual void CallTipClick();
+
+};
+
+
+}
+
+