ActionButton

Superclass: Object

crucial dependencies: PageLayout

*new( layout, title, function )

if layout is nil, a new PageLayout will be created.

the size of the button will scale to that of the string

(

ActionButton(nil,"hit me",{

"yeah baby".postln

});

)

(

// bigger title... bigger button

ActionButton(nil,"hit me hit me hit me hit me hit me hit me hit me hit me hit me hit me hit me ",{

"yeah baby".postln

});

)

(

// set minimum sizes for x and y

// longer text will still cause it to expand

ActionButton(nil,"hit me",{

"yeah baby".postln

},200,40,Color.white,Color.black);

)

// accepting drags by setting the view.receiveDrag handler

the list view by default gives an integer when dragging from it.

here i am making the action button accept dragged integers.

(

Sheet({ arg f;

a = SCListView(f,100@100);

a.items = ["a","b","c"];

b = ActionButton(f,"i accept integers",{

"was hit".postln

});

b.view.canReceiveDragHandler = { SCView.currentDrag.isNumber };

b.view.receiveDragHandler = {

a.items[ SCView.currentDrag.asInteger ].postln;

};

})

)

here the list view is made to export a string when dragged from.

the action button is accepting strings dragged to it.

(

Sheet({ arg f;

a = SCListView(f,100@100);

a.items = ["a","b","c"];

a.beginDragAction = { arg listView;

listView.items[ listView.value ].debug("begin dragging");

};

b = ActionButton(f,"i accept strings",{

"butt hit".postln

});

b.view.canReceiveDrag = { SCView.currentDrag.isString };

b.view.receiveDrag = {

SCView.currentDrag.postln;

};

})

)