Document



Document(title, text, isPostWindow);


Document.new("this is the title", "this is the text");



Document.open(path);


Document.open("Help/Help.help.rtf");


Document.allDocuments

array where all open documents are stored.


Document.current

returns the current Document.


Document.hasEditedDocuments

returns true if there are unsaved changes in one of the open Document.


Document.closeAll(leavePostOpen)

by default the postWindow stays open.


Document.closeAllUnedited(leavePostOpen)

by default the postWindow stays open.


background_

set the background color of a Document

(

a = Document("background", "'hardly see anything");

a.background_(Color.blue(alpha:0.8));

)


stringColor_

set the text color of a Document

(

a = Document("background", "where are my glasses?");

a.background_(Color.red(alpha:0.8));

a.stringColor_(Color.red);

)


font_(font, rangestart, rangesize)

set font. if rangestart = -1 for the whole document


bounds_(Rect)

set bounds


close

close a Document


(

Task({

var doc;

doc = Document("background", "closing in 2 seconds");

doc.stringColor_(Color.red);

1.wait;

doc.background_(Color.red(alpha:0.8));

1.wait;

doc.close;

}).play(AppClock);

)


isEdited

returns true if a Document has unsaved changes unless it is the postWindow


(

Document.current.isEdited.postln;

)


syntaxColorize

same as command' 


(

a = Document.allDocuments.at(0).syntaxColorize; 

)


selectLine


(

Document.current.selectLine(1);

)


selectionStart

get the current position in the text 


(

Document.current.selectionStart.postln;

)


selectionSize

get the current size of selection in the text 


(

Document.current.selectionSize.postln;

)


selectRange(start, length)


(

Document.current.selectRange(Document.current.selectionStart, 100);

)


string(rangestart, rangesize)

get the text of a document. If no rangestart is applied the whole text is returned.


(

Document.current.string;

)


selectedString

get the currently selected text.

(

var doc;

doc = Document.current;

doc.selectRange(doc.selectionStart-40, 10);

doc.selectedString.postln;

)


string_(string, rangestart, rangesize)

set the text of a document. if rangestart is -1 (default) the whole text is replaced

(

var doc;

doc = Document(string:"");

doc.string_("set a String")

)



selectedString_

insert text at the current position


(

var doc, txt;

doc = Document.current;

txt = "doc.postln; \n";

doc.selectedString_(txt);

)


front

(

Document.allDocuments.at(0).front; 

)


keyDownAction_

register a keyDownAction. this is useful for macros


(

var doc, txt;

doc = Document.current;

doc.keyDownAction_({arg doc, key, modifiers, num;

[doc, key, modifiers].postln

});

)

(

Document.current.keyDownAction_(nil);

)


toFrontAction_

called when the window is clicked to front


example:

associate a proxyspace to two different windows.

(

s = Server.local;

s.boot;

q = ProxySpace.push(s);

q.pop;

r = ProxySpace.push(r);

r.pop;

a = Document("proxy r", "//this is proxyspace r \n x = ~out.play; \n ~out = { SinOsc.ar([400, 500]*0.9, 0, 0.2) };");

a.background_(Color(0.8, 1.0, 1.0));


b = Document( "proxy q", "//this is proxyspace q \n x = ~out.play; \n ~out = { SinOsc.ar([1400, 1500]*0.9, 0, 0.2) };");

b.background_(Color(1.0, 1.0, 0.8));


b.toFrontAction_({

if(currentEnvironment == r,{r.pop});

q.push;

});

a.toFrontAction_({

if(currentEnvironment == q,{q.pop});

r.push;


});

)

(

//need to pop proxyspace from other examples

q.pop

r.pop

)


onClose_

register a close - action.

(

Document.current.onClose_({

var doc;

doc = Document("before closing","did you call me?");


Task({

doc.stringColor_(Color.red);

0.1.wait;

doc.background_(Color.red(alpha:0.8));

0.3.wait;

doc.close;

}).play(AppClock);


})

)


mouseDownAction_

(


//add a mouse action to this document: 

//example: easy button:

//when you click in front of a 17 a SinOsc will start up;

Server.local.boot;

Document.current.mouseDownAction_({arg doc;

var char;

char = doc.rangeText(doc.selectionStart, 2);

if(char == "17",{

{EnvGen.kr(Env.perc, doneAction:2) * SinOsc.ar([600,720,300].choose, 0, 0.5)}.play;

});

if(char == "23",{

{EnvGen.kr(Env.perc, doneAction:2) * PinkNoise.ar(0.2)}.play;

});

})


)

test here and click in front of the number:

17

23





unfocusedFront_

(

Document.allDocuments.at(0).unfocusedFront

)



(


var doc;

doc = Document("", "||");

doc.background_(Color.blue(alpha: 1.0.rand));

Task({

1000.do({

doc.setFont(size: [7,8,9,24].choose);

0.08.wait;

})

}).play(AppClock);

Task({

100.do({

1.01.wait;

doc.stringColor_([Color.red(alpha: 1.0.rand), Color.green(alpha: 1.0.rand)].choose);

})

}).play(AppClock);

Task({

100.do({

1.01.wait;

doc.selectedString_(["\"\n#","||","-", "--"].choose);

})

}).play(AppClock);

Task({

var co, mul;

co = 0.1;

mul = 1.02;

100.do({

0.16.wait;

co = co * mul;

if(co > 0.99, { co = 0.1 });

doc.background_(Color.blue(alpha: co));

});

doc.close;

}).play(AppClock)


)


//

Utilities and settings for dealing with documents such as super collider code files.  By default the document directory is SuperCollider's application directory.


In Main-startUp you can set this to a more practical directory:


Document.dir = "~/Documents/SuperCollider";



*standardizePath

if it is a relative path, expand it to an absolute path relative to your document directory. expand tildes in path (your home directory), resolve symbolic links (but not aliases).

also converts from OS9 macintosh path format.

Document.standardizePath(

":Patches:newfoots:fastRuckAndTuck"

)

/Volumes/Macintosh HD/Users/cruxxial/Documents/SC3docs/Patches/newfoots/fastRuckAndTuck

Document.standardizePath(

"~/Documents/SC3docs/Patches/newfoots/fastRuckAndTuck"

)

Patches/newfoots/fastRuckAndTuck

Document.standardizePath(

"Patches/newfoots/fastRuckAndTuck"

)

Patches/newfoots/fastRuckAndTuck


*abrevPath

reduce the path relative to your document directory if possible.