SwingOSC – Java-based cross-platform replacements for Cocoa GUI classes
This class is meant as an emulation of SCTextView. last mod: 02-feb-09 sciss
Also refer to [JSCView] for different behaviour affecting all widgets
no-op / not working
different behaviour
string_ effective even when the view is made non-editable (in CocoaGUI, string_ doesn't work in this case)
enterInterpretsSelection uses Ctrl+Return instead
extended functionality
caretColor_ colour of the cursor (useful for dark backgrounds)
openURL loads a text file
action_ action function is called whenever text is entered, removed or caret moved
linkAction_ facility to implement hyperlink navigation
known issues / todo
textBounds not yet implemented
usesTabToFocusNextView not yet implemented
hyperlinks should add some action function to react to clicks on hyperlinks
mouseDownAction called with the regular arguments, not special cocoa clickPos
string_ doesn't clear previously used style, there should be a way to clear it
text transmission due to the trickery of the SuperCollider unicode support (a unicode
character can be reflected by more than one Char in a SuperCollider
String), there occurs a discrepency between the character count
(and hence cursor position) of the server (Swing) and the client
(SuperCollider). You'll get "Yukk" messages, indicating that
the text representation on the client (SuperCollider) might be wrong
JSCTextView a text editor
Note: please use the abstraction layer GUI.textView if possible! (see [GUI])
superclass: JSCView
see also: [Document]
*new(window, bounds);
string_ set the text
string get the text
setString(string, rangestart, rangesize)
set text into a range
selectedString get the selected text only
selectionStart get the current position in the text
selectionSize get the current size of selection in the text
stringColor_ set the color of the whole text
setStringColor(color, start, size)
set the color of a selection of text
autoHideScrollers_
hasVerticalScroller_
hasHorizontalScroller_
textBounds_ NOT YET WORKING
don't know what this is for ...
font_ set the font of the whole text
setFont( font, start, size )
set the font of a selection of text
usesTabToFocusNextView_
NOT YET WORKING
enterInterpretsSelection_
whether pressing enter should interprete the
selected text. default is 'on'. note that on SwingOSC,
since we cannot detect a difference between return and enter,
you will have to press Ctrl+Return!
//examples
(
var win;
win = JSCWindow.new;
t = JSCTextView( win, win.view.bounds.insetBy( 4, 4 ))
.resize_( 5 )
.hasVerticalScroller_( true )
.autohidesScrollers_( true )
.focus( true );
win.front;
)
t.enterInterpretsSelection_( true );
t.editable = false; // make it read-only
t.editable = true; // allow editing
t.autohidesScrollers = false; // always show the scrollbars
t.string = "Schoko";
// copy this help document into the view (style elements are not copied)
t.string = Document.current.string;
// well, we can style it afterwards...
t.setFont( JFont( "Times", 24, 1 ), 0, 8 );
t.setStringColor( Color.blue, 0, 8 );
t.setStringColor( Color( 0.5, 0.0, 0.7 ), 8, 68 );
// apply style to the whole document
t.font = JFont( "Times", 14 );
t.stringColor = Color.green( 0.4 );
t.background = Color.black;
t.caretColor = Color.white; // cursor colour (SwingOSC only)
// loading a text file (SwingOSC only). plain text, html and rtf should work
t.openURL( "file:" ++ "~/*/*.html".standardizePath.pathMatch.choose.absolutePath );
t.openURL( "http://swiki.hfbk-hamburg.de:8888/MusicTechnology/6" );
t.openURL( "file:" ++ Document.current.path ); // RTF is not properly loaded - why?
// TODO : clicking on links has no effect!
// listen for document changes
// possible states and parameters:
// \insert, <(Integer) pos>, <(Integer) length>, <(String) insertedText>
// \remove, <(Integer) pos>, <(Integer) length>
// \caret, <(Integer) pos1>, <(Integer) pos2>
// ; caret means the cursor was moved or the selection changed. with no text
// selected (cursor displayed) pos1 equals pos2, otherwise pos1 and pos2
// correspond to the selected range (pos1 may be both greater or less than pos2)!
t.action = { arg view, state ... params; ([ state ] ++ params).postcs };
// let's see what's been typed in
t.string;
t.selectedString; // just the part that's currently selected
t.selectionStart; // position of selection begins. starts at 0
t.selectionSize; // 0 means no text selected
Listening for hyperlink navigation
// NOTE: notification only works when the document is read-only,
// so the editable property needs to be set to false!
t.editable = false;
// linkAction is called when the user clicks on a link. the arguments are
// view/url/description, where url is the fully qualified URL of the link
// and description the HREF value of the corresponding HTML A-element.
// ; for special links like "javascript:...", the url is empty.
t.linkAction = { arg view, url, description; [ "activated", url, description ].postln };
// furthermore you can listen to the mouse entering or exiting a link area
t.linkEnteredAction = { arg view, url, description; [ "entered", url, description ].postln };
t.linkExitedAction = { arg view, url, description; [ "exited", url, description ].postln };
// a simple link-action to follow links
t.linkAction = { arg view, url; view.openURL( url )};