diff options
Diffstat (limited to 'macosx/SciTest')
| -rw-r--r-- | macosx/SciTest/main.cpp | 480 | 
1 files changed, 255 insertions, 225 deletions
| diff --git a/macosx/SciTest/main.cpp b/macosx/SciTest/main.cpp index 374038005..4f2ef3819 100644 --- a/macosx/SciTest/main.cpp +++ b/macosx/SciTest/main.cpp @@ -1,225 +1,255 @@ -//
 -//  main.c
 -//  SciTest
 -//
 -//  Copyright (c) 2005-2006 ActiveState Software Inc.
 -//  All rights reserved.
 -//
 -//  Created by Shane Caraveo on 3/20/05.
 -//
 -
 -#include <Carbon/Carbon.h>
 -#include "TView.h"
 -#include "TCarbonEvent.h"
 -#include "ScintillaMacOSX.h"
 -
 -extern "C" HIViewRef scintilla_new(void);
 -
 -const HILayoutInfo kBindToParentLayout = {
 -  kHILayoutInfoVersionZero,
 -  { { NULL, kHILayoutBindTop }, { NULL, kHILayoutBindLeft }, { NULL, kHILayoutBindBottom }, { NULL, kHILayoutBindRight } },
 -  { { NULL, kHILayoutScaleAbsolute, 0 }, { NULL, kHILayoutScaleAbsolute, 0 } },
 -  { { NULL, kHILayoutPositionTop, 0 }, { NULL, kHILayoutPositionLeft, 0 } }
 -};
 -
 -using namespace Scintilla;
 -
 -/* XPM */
 -static char *ac_class[] = {
 -/* columns rows colors chars-per-pixel */
 -"18 12 24 1",
 -"  c black",
 -". c #403030",
 -"X c #473636",
 -"o c #4E3C3C",
 -"O c #474141",
 -"+ c #5F4C4C",
 -"@ c #756362",
 -"# c #98342C",
 -"$ c #A0392F",
 -"% c #B24235",
 -"& c #B2443C",
 -"* c #B34E3E",
 -"= c #B54E44",
 -"- c #B65146",
 -"; c #B7584F",
 -": c #B8554C",
 -"> c #B75A50",
 -", c #B95852",
 -"< c #B96259",
 -"1 c #B89B9B",
 -"2 c #BCA0A0",
 -"3 c #C1A5A5",
 -"4 c gray100",
 -"5 c None",
 -/* pixels */
 -"555555555555555555",
 -"55553$$$$$$$#@5555",
 -"55552;%&&==;=o5555",
 -"55551>&&*=;:=.5555",
 -"55551>&*=;::=.5555",
 -"55551>*==:::-X5555",
 -"55551>==:::,;.5555",
 -"55551<==:;,<>.5555",
 -"55551<;;;;<<;.5555",
 -"55551;-==;;;;X5555",
 -"55555+XX..X..O5555",
 -"555555555555555555"
 -};
 -
 -pascal OSStatus WindowEventHandler(EventHandlerCallRef	inCallRef,
 -				   EventRef		inEvent,
 -				   void*	        inUserData )
 -{
 -	HIViewRef sciView = *reinterpret_cast<HIViewRef*>( inUserData );
 -	WindowRef window = GetControlOwner(sciView);
 -	ScintillaMacOSX* scintilla;
 -	GetControlProperty( sciView, scintillaMacOSType, 0, sizeof( scintilla ), NULL, &scintilla );
 -	TCarbonEvent event( inEvent );
 -
 -	// If the window is not active, let the standard window handler execute.
 -	if ( ! IsWindowActive( window ) ) return eventNotHandledErr;
 -	
 -	const HIViewRef rootView = HIViewGetRoot( window );
 -	assert( rootView != NULL );
 -
 -	if ( event.GetKind() == kEventMouseDown )
 -		{
 -			UInt32 inKeyModifiers;
 -			event.GetParameter( kEventParamKeyModifiers, &inKeyModifiers );
 -
 -			EventMouseButton inMouseButton;
 -			event.GetParameter<EventMouseButton>( kEventParamMouseButton, typeMouseButton, &inMouseButton );
 -			if (inMouseButton == kEventMouseButtonTertiary) {
 -				if (inKeyModifiers & optionKey) {
 -					const char *test = "\001This is a test calltip This is a test calltip This is a test calltip";
 -					scintilla->WndProc( SCI_CALLTIPSHOW, 0, (long int)test );
 -				} else {
 -					char *list = "test_1?0 test_2 test_3 test_4 test_5 test_6 test_7 test_8 test_9 test_10 test_11 test_12";
 -					scintilla->WndProc( SCI_AUTOCSHOW, 0, (long int)list );
 -				}
 -				return noErr;
 -			}
 -		}
 -	
 -	return eventNotHandledErr;
 -}
 -
 -int main(int argc, char* argv[])
 -{
 -    IBNibRef 		nibRef;
 -    WindowRef 		window;
 -    
 -    OSStatus		err;
 -
 -    // Create a Nib reference passing the name of the nib file (without the .nib extension)
 -    // CreateNibReference only searches into the application bundle.
 -    err = CreateNibReference(CFSTR("main"), &nibRef);
 -    require_noerr( err, CantGetNibRef );
 -    
 -    // Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar
 -    // object. This name is set in InterfaceBuilder when the nib is created.
 -    err = SetMenuBarFromNib(nibRef, CFSTR("MenuBar"));
 -    require_noerr( err, CantSetMenuBar );
 -    
 -    // Then create a window. "MainWindow" is the name of the window object. This name is set in 
 -    // InterfaceBuilder when the nib is created.
 -    err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &window);
 -    require_noerr( err, CantCreateWindow );
 -
 -    // We don't need the nib reference anymore.
 -    DisposeNibReference(nibRef);
 -    
 -
 -    HIRect boundsRect;
 -    // GOOD and BAD methods off embedding into a window.  This is used
 -    // to test Window::SetPositionRelative under different situations.
 -#define GOOD
 -#ifdef GOOD
 -#ifdef USE_CONTROL
 -    ControlRef root;
 -    GetRootControl(window, &root);
 -#else
 -    HIViewRef root;
 -    HIViewFindByID(HIViewGetRoot(window),
 -    		   kHIViewWindowContentID,
 -    		   &root);
 -#endif
 -    HIViewGetBounds(root, &boundsRect);
 -
 -#else // BAD like mozilla
 -    HIViewRef root;
 -    root = HIViewGetRoot(window);
 -
 -    Rect cBounds, sBounds;
 -    GetWindowBounds(window, kWindowContentRgn, &cBounds);
 -    GetWindowBounds(window, kWindowStructureRgn, &sBounds);
 -    boundsRect.origin.x = cBounds.left - sBounds.left;
 -    boundsRect.origin.y = cBounds.top - sBounds.top;
 -    boundsRect.size.width = cBounds.right - cBounds.left;
 -    boundsRect.size.height = cBounds.bottom - cBounds.top;
 -#endif
 -
 -    // get a scintilla control, and add it to it's parent container
 -    HIViewRef sciView;
 -    sciView = scintilla_new();
 -    HIViewAddSubview(root, sciView);
 -
 -	// some scintilla init
 -	ScintillaMacOSX* scintilla;
 -	GetControlProperty( sciView, scintillaMacOSType, 0, sizeof( scintilla ), NULL, &scintilla );
 -
 -	scintilla->WndProc( SCI_SETLEXER, SCLEX_CPP, 0);
 -	scintilla->WndProc( SCI_SETSTYLEBITS, 5, 0);
 -	/*
 -	these fail compilation on osx now
 -	scintilla->WndProc( SCI_SETPROPERTY, "fold", (long int)"1");
 -	scintilla->WndProc( SCI_SETPROPERTY, "fold.compact", (long int)"0");
 -	scintilla->WndProc( SCI_SETPROPERTY, "fold.comment", (long int)"1");
 -	scintilla->WndProc( SCI_SETPROPERTY, "fold.preprocessor", (long int)"1");
 -	*/
 -	
 -	scintilla->WndProc( SCI_REGISTERIMAGE, 0, (long int)ac_class);
 -
 -	scintilla->WndProc( SCI_SETMARGINTYPEN, 0, (long int)SC_MARGIN_NUMBER);
 -	scintilla->WndProc( SCI_SETMARGINWIDTHN, 0, (long int)30);
 -	scintilla->WndProc( SCI_SETMARGINTYPEN, 1, (long int)SC_MARGIN_SYMBOL);
 -	scintilla->WndProc( SCI_SETMARGINMASKN, 1, (long int)SC_MASK_FOLDERS);
 -	scintilla->WndProc( SCI_SETMARGINWIDTHN, 1, (long int)20);
 -	scintilla->WndProc( SCI_SETMARGINTYPEN, 2, (long int)SC_MARGIN_SYMBOL);
 -	scintilla->WndProc( SCI_SETMARGINWIDTHN, 2, (long int)16);
 -	//scintilla->WndProc( SCI_SETWRAPMODE, SC_WRAP_WORD, 0);
 -	//scintilla->WndProc( SCI_SETWRAPVISUALFLAGS, SC_WRAPVISUALFLAG_END | SC_WRAPVISUALFLAG_START, 0);
 -	
 -    // set the size of scintilla to the size of the container
 -    HIViewSetFrame( sciView, &boundsRect );
 -
 -    // bind the size of scintilla to the size of it's container window
 -    HIViewSetLayoutInfo(sciView, &kBindToParentLayout);
 -    
 -    // setup some event handling
 -    static const EventTypeSpec kWindowMouseEvents[] =
 -      {
 -	{ kEventClassMouse, kEventMouseDown },
 -      };
 -
 -    InstallEventHandler( GetWindowEventTarget( window ), WindowEventHandler,
 -			 GetEventTypeCount( kWindowMouseEvents ), kWindowMouseEvents, &sciView, NULL );
 -    
 -    // show scintilla
 -    ShowControl(sciView);
 -	
 -    SetAutomaticControlDragTrackingEnabledForWindow(window, true);
 -	
 -    // The window was created hidden so show it.
 -    ShowWindow( window );
 -    
 -    // Call the event loop
 -    RunApplicationEventLoop();
 -
 -CantCreateWindow:
 -CantSetMenuBar:
 -CantGetNibRef:
 -	return err;
 -}
 -
 +// +//  main.c +//  SciTest +// +//  Copyright (c) 2005-2006 ActiveState Software Inc. +//  All rights reserved. +// +//  Created by Shane Caraveo on 3/20/05. +// + +#include <Carbon/Carbon.h> +#include "TView.h" +#include "TCarbonEvent.h" +#include "ScintillaMacOSX.h" + +extern "C" HIViewRef scintilla_new(void); + +const HILayoutInfo kBindToParentLayout = { +  kHILayoutInfoVersionZero, +  { { NULL, kHILayoutBindTop }, { NULL, kHILayoutBindLeft }, { NULL, kHILayoutBindBottom }, { NULL, kHILayoutBindRight } }, +  { { NULL, kHILayoutScaleAbsolute, 0 }, { NULL, kHILayoutScaleAbsolute, 0 } }, +  { { NULL, kHILayoutPositionTop, 0 }, { NULL, kHILayoutPositionLeft, 0 } } +}; + +using namespace Scintilla; + +/* XPM */ +static char *ac_class[] = { +/* columns rows colors chars-per-pixel */ +"18 12 24 1", +"  c black", +". c #403030", +"X c #473636", +"o c #4E3C3C", +"O c #474141", +"+ c #5F4C4C", +"@ c #756362", +"# c #98342C", +"$ c #A0392F", +"% c #B24235", +"& c #B2443C", +"* c #B34E3E", +"= c #B54E44", +"- c #B65146", +"; c #B7584F", +": c #B8554C", +"> c #B75A50", +", c #B95852", +"< c #B96259", +"1 c #B89B9B", +"2 c #BCA0A0", +"3 c #C1A5A5", +"4 c gray100", +"5 c None", +/* pixels */ +"555555555555555555", +"55553$$$$$$$#@5555", +"55552;%&&==;=o5555", +"55551>&&*=;:=.5555", +"55551>&*=;::=.5555", +"55551>*==:::-X5555", +"55551>==:::,;.5555", +"55551<==:;,<>.5555", +"55551<;;;;<<;.5555", +"55551;-==;;;;X5555", +"55555+XX..X..O5555", +"555555555555555555" +}; + +const char keywords[]="and and_eq asm auto bitand bitor bool break " +"case catch char class compl const const_cast continue " +"default delete do double dynamic_cast else enum explicit export extern false float for " +"friend goto if inline int long mutable namespace new not not_eq " +"operator or or_eq private protected public " +"register reinterpret_cast return short signed sizeof static static_cast struct switch " +"template this throw true try typedef typeid typename union unsigned using " +"virtual void volatile wchar_t while xor xor_eq"; + +pascal OSStatus WindowEventHandler(EventHandlerCallRef	inCallRef, +				   EventRef		inEvent, +				   void*	        inUserData ) +{ +	HIViewRef sciView = *reinterpret_cast<HIViewRef*>( inUserData ); +	WindowRef window = GetControlOwner(sciView); +	ScintillaMacOSX* scintilla; +	GetControlProperty( sciView, scintillaMacOSType, 0, sizeof( scintilla ), NULL, &scintilla ); +	TCarbonEvent event( inEvent ); + +	// If the window is not active, let the standard window handler execute. +	if ( ! IsWindowActive( window ) ) return eventNotHandledErr; + +	const HIViewRef rootView = HIViewGetRoot( window ); +	assert( rootView != NULL ); + +	if ( event.GetKind() == kEventMouseDown ) +		{ +			UInt32 inKeyModifiers; +			event.GetParameter( kEventParamKeyModifiers, &inKeyModifiers ); + +			EventMouseButton inMouseButton; +			event.GetParameter<EventMouseButton>( kEventParamMouseButton, typeMouseButton, &inMouseButton ); +			if (inMouseButton == kEventMouseButtonTertiary) { +				if (inKeyModifiers & optionKey) { +					const char *test = "\001This is a test calltip This is a test calltip This is a test calltip"; +					scintilla->WndProc( SCI_CALLTIPSHOW, 0, (long int)test ); +				} else { +					char *list = "test_1?0 test_2 test_3 test_4 test_5 test_6 test_7 test_8 test_9 test_10 test_11 test_12"; +					scintilla->WndProc( SCI_AUTOCSHOW, 0, (long int)list ); +				} +				return noErr; +			} +		} + +	return eventNotHandledErr; +} + +int main(int argc, char* argv[]) +{ +    IBNibRef 		nibRef; +    WindowRef 		window; + +    OSStatus		err; + +    // Create a Nib reference passing the name of the nib file (without the .nib extension) +    // CreateNibReference only searches into the application bundle. +    err = CreateNibReference(CFSTR("main"), &nibRef); +    require_noerr( err, CantGetNibRef ); + +    // Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar +    // object. This name is set in InterfaceBuilder when the nib is created. +    err = SetMenuBarFromNib(nibRef, CFSTR("MenuBar")); +    require_noerr( err, CantSetMenuBar ); + +    // Then create a window. "MainWindow" is the name of the window object. This name is set in +    // InterfaceBuilder when the nib is created. +    err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &window); +    require_noerr( err, CantCreateWindow ); + +    // We don't need the nib reference anymore. +    DisposeNibReference(nibRef); + +    HIRect boundsRect; +    // GOOD and BAD methods off embedding into a window.  This is used +    // to test Window::SetPositionRelative under different situations. +#define GOOD +#ifdef GOOD +#ifdef USE_CONTROL +    ControlRef root; +    GetRootControl(window, &root); +#else +    HIViewRef root; +    HIViewFindByID(HIViewGetRoot(window), +    		   kHIViewWindowContentID, +    		   &root); +#endif +    HIViewGetBounds(root, &boundsRect); + +#else // BAD like mozilla +    HIViewRef root; +    root = HIViewGetRoot(window); + +    Rect cBounds, sBounds; +    GetWindowBounds(window, kWindowContentRgn, &cBounds); +    GetWindowBounds(window, kWindowStructureRgn, &sBounds); +    boundsRect.origin.x = cBounds.left - sBounds.left; +    boundsRect.origin.y = cBounds.top - sBounds.top; +    boundsRect.size.width = cBounds.right - cBounds.left; +    boundsRect.size.height = cBounds.bottom - cBounds.top; +#endif + +    // get a scintilla control, and add it to it's parent container +    HIViewRef sciView; +    sciView = scintilla_new(); +    HIViewAddSubview(root, sciView); + +	// some scintilla init +	ScintillaMacOSX* scintilla; +	GetControlProperty( sciView, scintillaMacOSType, 0, sizeof( scintilla ), NULL, &scintilla ); + +	scintilla->WndProc( SCI_SETLEXER, SCLEX_CPP, 0); +	scintilla->WndProc( SCI_SETSTYLEBITS, 5, 0); + +	scintilla->WndProc(SCI_STYLESETFORE, 0, 0x808080);	// White space +	scintilla->WndProc(SCI_STYLESETFORE, 1, 0x007F00);	// Comment +	scintilla->WndProc(SCI_STYLESETITALIC, 1, 1);	// Comment +	scintilla->WndProc(SCI_STYLESETFORE, 2, 0x007F00);	// Line comment +	scintilla->WndProc(SCI_STYLESETITALIC, 2, 1);	// Line comment +	scintilla->WndProc(SCI_STYLESETFORE, 3, 0x3F703F);	// Doc comment +	scintilla->WndProc(SCI_STYLESETITALIC, 3, 1);	// Doc comment +	scintilla->WndProc(SCI_STYLESETFORE, 4, 0x7F7F00);	// Number +	scintilla->WndProc(SCI_STYLESETFORE, 5, 0x7F0000);	// Keyword +	scintilla->WndProc(SCI_STYLESETBOLD, 5, 1);	// Keyword +	scintilla->WndProc(SCI_STYLESETFORE, 6, 0x7F007F);	// String +	scintilla->WndProc(SCI_STYLESETFORE, 7, 0x7F007F);	// Character +	scintilla->WndProc(SCI_STYLESETFORE, 8, 0x804080);	// UUID +	scintilla->WndProc(SCI_STYLESETFORE, 9, 0x007F7F);	// Preprocessor +	scintilla->WndProc(SCI_STYLESETFORE,10, 0x000000);	// Operators +	scintilla->WndProc(SCI_STYLESETBOLD,10, 1);	// Operators +	scintilla->WndProc(SCI_STYLESETFORE,11, 0x000000);	// Identifiers + + +	scintilla->WndProc(SCI_SETKEYWORDS, 0, (sptr_t)(char *)keywords);	// Keyword + +	/* +	these fail compilation on osx now +	scintilla->WndProc( SCI_SETPROPERTY, "fold", (long int)"1"); +	scintilla->WndProc( SCI_SETPROPERTY, "fold.compact", (long int)"0"); +	scintilla->WndProc( SCI_SETPROPERTY, "fold.comment", (long int)"1"); +	scintilla->WndProc( SCI_SETPROPERTY, "fold.preprocessor", (long int)"1"); +	*/ + +	scintilla->WndProc( SCI_REGISTERIMAGE, 0, (long int)ac_class); + +	scintilla->WndProc( SCI_SETMARGINTYPEN, 0, (long int)SC_MARGIN_NUMBER); +	scintilla->WndProc( SCI_SETMARGINWIDTHN, 0, (long int)30); +	scintilla->WndProc( SCI_SETMARGINTYPEN, 1, (long int)SC_MARGIN_SYMBOL); +	scintilla->WndProc( SCI_SETMARGINMASKN, 1, (long int)SC_MASK_FOLDERS); +	scintilla->WndProc( SCI_SETMARGINWIDTHN, 1, (long int)20); +	scintilla->WndProc( SCI_SETMARGINTYPEN, 2, (long int)SC_MARGIN_SYMBOL); +	scintilla->WndProc( SCI_SETMARGINWIDTHN, 2, (long int)16); +	//scintilla->WndProc( SCI_SETWRAPMODE, SC_WRAP_WORD, 0); +	//scintilla->WndProc( SCI_SETWRAPVISUALFLAGS, SC_WRAPVISUALFLAG_END | SC_WRAPVISUALFLAG_START, 0); + +    // set the size of scintilla to the size of the container +    HIViewSetFrame( sciView, &boundsRect ); + +    // bind the size of scintilla to the size of it's container window +    HIViewSetLayoutInfo(sciView, &kBindToParentLayout); + +    // setup some event handling +    static const EventTypeSpec kWindowMouseEvents[] = +      { +	{ kEventClassMouse, kEventMouseDown }, +      }; + +    InstallEventHandler( GetWindowEventTarget( window ), WindowEventHandler, +			 GetEventTypeCount( kWindowMouseEvents ), kWindowMouseEvents, &sciView, NULL ); + +    // show scintilla +    ShowControl(sciView); + +    SetAutomaticControlDragTrackingEnabledForWindow(window, true); + +    // The window was created hidden so show it. +    ShowWindow( window ); + +    // Call the event loop +    RunApplicationEventLoop(); + +CantCreateWindow: +CantSetMenuBar: +CantGetNibRef: +	return err; +} + | 
