aboutsummaryrefslogtreecommitdiffhomepage
path: root/cocoa
diff options
context:
space:
mode:
Diffstat (limited to 'cocoa')
-rw-r--r--cocoa/ScintillaCocoa.mm2
-rw-r--r--cocoa/ScintillaTest/AppController.h3
-rw-r--r--cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj10
-rw-r--r--cocoa/ScintillaView.h5
-rw-r--r--cocoa/ScintillaView.mm65
5 files changed, 70 insertions, 15 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index 81dd991e7..a04c7220f 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -101,7 +101,7 @@ static const KeyToCommand macMapDefault[] =
{SCK_BACK, SCI_ALT, SCI_UNDO},
{SCK_BACK, SCI_CSHIFT, SCI_DELLINELEFT},
{'z', SCI_CMD, SCI_UNDO},
- {'y', SCI_CMD, SCI_REDO},
+ {'z', SCI_SCMD, SCI_REDO},
{'x', SCI_CMD, SCI_CUT},
{'c', SCI_CMD, SCI_COPY},
{'v', SCI_CMD, SCI_PASTE},
diff --git a/cocoa/ScintillaTest/AppController.h b/cocoa/ScintillaTest/AppController.h
index 7c4f029e5..f324615d1 100644
--- a/cocoa/ScintillaTest/AppController.h
+++ b/cocoa/ScintillaTest/AppController.h
@@ -9,9 +9,6 @@
#import <Cocoa/Cocoa.h>
-#define SCI_LEXER
-#define SCI_NAMESPACE
-
#import "ScintillaView.h"
#import "InfoBar.h"
diff --git a/cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj b/cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj
index 25aabb608..d630e1da9 100644
--- a/cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj
+++ b/cocoa/ScintillaTest/ScintillaTest.xcodeproj/project.pbxproj
@@ -286,7 +286,10 @@
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = ScintillaTest_Prefix.pch;
- GCC_PREPROCESSOR_DEFINITIONS = "";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ SCI_LEXER,
+ SCI_NAMESPACE,
+ );
HEADER_SEARCH_PATHS = "../..//**";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
@@ -309,7 +312,10 @@
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = ScintillaTest_Prefix.pch;
- GCC_PREPROCESSOR_DEFINITIONS = "";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ SCI_LEXER,
+ SCI_NAMESPACE,
+ );
HEADER_SEARCH_PATHS = "../..//**";
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
diff --git a/cocoa/ScintillaView.h b/cocoa/ScintillaView.h
index 574c2337d..8368e46c3 100644
--- a/cocoa/ScintillaView.h
+++ b/cocoa/ScintillaView.h
@@ -19,6 +19,8 @@
@class ScintillaView;
+extern NSString *SCIUpdateUINotification;
+
/**
* InnerView is the Cocoa interface to the Scintilla backend. It handles text input and
* provides a canvas for painting the output.
@@ -84,6 +86,9 @@
- (NSString*) string;
- (void) setString: (NSString*) aString;
- (void) setEditable: (BOOL) editable;
+- (NSRange) selectedRange;
+
+- (NSString*) selectedString;
// Native call through to the backend.
+ (sptr_t) directCall: (ScintillaView*) sender message: (unsigned int) message wParam: (uptr_t) wParam
diff --git a/cocoa/ScintillaView.mm b/cocoa/ScintillaView.mm
index 5ff3de720..1f428c017 100644
--- a/cocoa/ScintillaView.mm
+++ b/cocoa/ScintillaView.mm
@@ -19,6 +19,8 @@ static NSCursor* waitCursor;
// The scintilla indicator used for keyboard input.
#define INPUT_INDICATOR INDIC_MAX - 1
+NSString *SCIUpdateUINotification = @"SCIUpdateUI";
+
@implementation InnerView
@synthesize owner = mOwner;
@@ -638,35 +640,42 @@ static void notification(intptr_t windowid, unsigned int iMessage, uintptr_t wPa
switch (scn->nmhdr.code)
{
case SCN_MARGINCLICK:
+ {
if (scn->margin == 2)
{
// Click on the folder margin. Toggle the current line if possible.
int line = [editor getGeneralProperty: SCI_LINEFROMPOSITION parameter: scn->position];
[editor setGeneralProperty: SCI_TOGGLEFOLD parameter: line value: 0];
- };
+ }
break;
+ };
case SCN_MODIFIED:
+ {
// Decide depending on the modification type what to do.
// There can be more than one modification carried by one notification.
if (scn->modificationType & (SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT))
[editor sendNotification: NSTextDidChangeNotification];
break;
+ }
case SCN_ZOOM:
- {
+ {
// A zoom change happend. Notify info bar if there is one.
float zoom = [editor getGeneralProperty: SCI_GETZOOM parameter: 0];
int fontSize = [editor getGeneralProperty: SCI_STYLEGETSIZE parameter: STYLE_DEFAULT];
float factor = (zoom / fontSize) + 1;
[editor->mInfoBar notify: IBNZoomChanged message: nil location: NSZeroPoint value: factor];
- }
- break;
+ break;
+ }
case SCN_UPDATEUI:
+ {
// Triggered whenever changes in the UI state need to be reflected.
// These can be: caret changes, selection changes etc.
NSPoint caretPosition = editor->mBackend->GetCaretPosition();
[editor->mInfoBar notify: IBNCaretChanged message: nil location: caretPosition value: 0];
+ [editor sendNotification: SCIUpdateUINotification];
break;
}
+ }
break;
}
case WM_COMMAND:
@@ -979,19 +988,20 @@ static void notification(intptr_t windowid, unsigned int iMessage, uintptr_t wPa
/**
* Getter for the current text in raw form (no formatting information included).
+ * If there is no text available an empty string is returned.
*/
-- (NSString*) string
+- (NSString*) selectedString
{
NSString *result = nil;
char *buffer(0);
- const int length = mBackend->WndProc(SCI_GETLENGTH, 0, 0);
+ const int length = mBackend->WndProc(SCI_GETSELTEXT, 0, 0);
if (length > 0)
{
buffer = new char[length + 1];
try
{
- mBackend->WndProc(SCI_GETTEXT, length + 1, (sptr_t) buffer);
+ mBackend->WndProc(SCI_GETSELTEXT, length + 1, (sptr_t) buffer);
mBackend->WndProc(SCI_SETSAVEPOINT, 0, 0);
result = [NSString stringWithUTF8String: buffer];
@@ -1003,15 +1013,45 @@ static void notification(intptr_t windowid, unsigned int iMessage, uintptr_t wPa
buffer = 0;
}
}
+ else
+ result = [NSString stringWithUTF8String: ""];
return result;
}
//--------------------------------------------------------------------------------------------------
-- (void) setEditable: (BOOL) editable
+/**
+ * Getter for the current text in raw form (no formatting information included).
+ * If there is no text available an empty string is returned.
+ */
+- (NSString*) string
{
- mBackend->WndProc(SCI_SETREADONLY, editable ? 0 : 1, 0);
+ NSString *result = nil;
+
+ char *buffer(0);
+ const int length = mBackend->WndProc(SCI_GETLENGTH, 0, 0);
+ if (length > 0)
+ {
+ buffer = new char[length + 1];
+ try
+ {
+ mBackend->WndProc(SCI_GETTEXT, length + 1, (sptr_t) buffer);
+ mBackend->WndProc(SCI_SETSAVEPOINT, 0, 0);
+
+ result = [NSString stringWithUTF8String: buffer];
+ delete[] buffer;
+ }
+ catch (...)
+ {
+ delete[] buffer;
+ buffer = 0;
+ }
+ }
+ else
+ result = [NSString stringWithUTF8String: ""];
+
+ return result;
}
//--------------------------------------------------------------------------------------------------
@@ -1027,6 +1067,13 @@ static void notification(intptr_t windowid, unsigned int iMessage, uintptr_t wPa
//--------------------------------------------------------------------------------------------------
+- (void) setEditable: (BOOL) editable
+{
+ mBackend->WndProc(SCI_SETREADONLY, editable ? 0 : 1, 0);
+}
+
+//--------------------------------------------------------------------------------------------------
+
- (InnerView*) content
{
return mContent;