From 6effcfa0ede0e7e24fdc4d3680e0c1e7238f574c Mon Sep 17 00:00:00 2001 From: paum3 Date: Mon, 25 Dec 2023 18:22:58 +0100 Subject: [PATCH 1/4] EmacsWidget documentation (new file) --- HelpSource/Classes/EmacsWidget.schelp | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 HelpSource/Classes/EmacsWidget.schelp diff --git a/HelpSource/Classes/EmacsWidget.schelp b/HelpSource/Classes/EmacsWidget.schelp new file mode 100644 index 0000000..fa3570b --- /dev/null +++ b/HelpSource/Classes/EmacsWidget.schelp @@ -0,0 +1,34 @@ +TITLE:: EmacsWidget +SUMMARY:: Abstract superclass for Emacs widgets +CATEGORIES:: Frontends>Emacs +RELATED:: Classes/EmacsBuffer, Classes/Emacs + +DESCRIPTION:: +An abstract class for Emacs widgets such as link::Classes/EmacsButton::, link::Classes/EmacsPushButton::, link::Classes/EmacsNumber::, link::Classes/EmacsEditableField:: +and link::Classes/EmacsText::. + +CLASSMETHODS:: + +METHOD:: idmap +An link::Classes/Array:: of widget's IDs. Size of the array is fixed to 1024. + +INSTANCEMETHODS:: + +METHOD:: type + +returns:: The type of widget. + +METHOD:: buffer + +returns:: The link::Classes/EmacsBuffer::. + +METHOD:: id + +returns:: The ID of widget. + +METHOD:: enabled +Gets/sets the state of the widget. +ARGUMENT:: argValue +A link::Classes/Boolean::. +ARGUMENT:: handler +A link::Classes/Function:: which will be executed when changing state. From 40a927ddaa81b5f879c835220f8ec0573168ff43 Mon Sep 17 00:00:00 2001 From: paum3 Date: Mon, 25 Dec 2023 21:55:13 +0100 Subject: [PATCH 2/4] typo --- HelpSource/Classes/EmacsWidget.schelp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/HelpSource/Classes/EmacsWidget.schelp b/HelpSource/Classes/EmacsWidget.schelp index fa3570b..6ec20a1 100644 --- a/HelpSource/Classes/EmacsWidget.schelp +++ b/HelpSource/Classes/EmacsWidget.schelp @@ -4,8 +4,7 @@ CATEGORIES:: Frontends>Emacs RELATED:: Classes/EmacsBuffer, Classes/Emacs DESCRIPTION:: -An abstract class for Emacs widgets such as link::Classes/EmacsButton::, link::Classes/EmacsPushButton::, link::Classes/EmacsNumber::, link::Classes/EmacsEditableField:: -and link::Classes/EmacsText::. +An abstract class for Emacs widgets such as link::Classes/EmacsButton::, link::Classes/EmacsPushButton::, link::Classes/EmacsNumber::, link::Classes/EmacsEditableField:: and link::Classes/EmacsText::. CLASSMETHODS:: From 1c3f14e3ff5eee211ae5a51d6e177dcaf8e3cee0 Mon Sep 17 00:00:00 2001 From: paum3 Date: Tue, 26 Dec 2023 09:32:55 +0100 Subject: [PATCH 3/4] more comprehensive example --- HelpSource/Classes/EmacsWidget.schelp | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/HelpSource/Classes/EmacsWidget.schelp b/HelpSource/Classes/EmacsWidget.schelp index 6ec20a1..4214c13 100644 --- a/HelpSource/Classes/EmacsWidget.schelp +++ b/HelpSource/Classes/EmacsWidget.schelp @@ -31,3 +31,45 @@ ARGUMENT:: argValue A link::Classes/Boolean::. ARGUMENT:: handler A link::Classes/Function:: which will be executed when changing state. + +subsection::Example +code:: +( +p = EmacsBuffer.new; // create a buffer: +p.front; // show the buffer: + +EmacsPushButton(p, "Close").action={p.free}; + +2.do({p.gotoBob; p.newline}); // add some space above + +// make 8 numberboxes in a column +n = Array.fill(8, { |i| var e; p.gotoBob; p.newline; e = EmacsNumber.new( p, "Box "++i, [0,999999].asSpec, { |v| v.postln; }, value: 100.rand, size: 8 ); e }); + +3.do({p.gotoBob; p.newline}); // add some space above + +p.gotoBob; // goto very begining + +t = EmacsText( p, "SuperCollider", 30, \left); // args: buffer, string, size, align + +1.do({p.gotoBob; p.newline}); // space .. +p.gotoBob; + +EmacsEditableField( p, "Password", "0123" ).action_( { |v| t.string = v; } ); + +2.do({p.gotoBob; p.newline}); // space .. +p.gotoBob; + +EmacsPushButton( p, "calculate" ).action_( { f.() } ); // make a button, attach a funcion to it + +// super warp 9 function +f = { fork{200.do({n.choose.value = 999999.rand + 1; t.string = t.string.scramble;0.01.wait; })} }; +) + + +// Erase widgets / clear buffer +Emacs.evalLispExpression(p.use(['save-current-buffer', ['set-buffer', ['get-buffer', "*SCWindow*"]], ['let', [['inhibit-read-only', 't']], ['with-silent-modifications', ['remove-overlays'], ['erase-buffer']]]]).asLispString) + +EmacsText( p, "Enjoy", 30); + +p.free +:: From 24628af218a18a5f267e8a63aa162c11be804712 Mon Sep 17 00:00:00 2001 From: paum3 Date: Tue, 26 Dec 2023 10:28:46 +0100 Subject: [PATCH 4/4] buffer name as variable instead of hard coded --- HelpSource/Classes/EmacsWidget.schelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/HelpSource/Classes/EmacsWidget.schelp b/HelpSource/Classes/EmacsWidget.schelp index 4214c13..6900e3d 100644 --- a/HelpSource/Classes/EmacsWidget.schelp +++ b/HelpSource/Classes/EmacsWidget.schelp @@ -67,7 +67,7 @@ f = { fork{200.do({n.choose.value = 999999.rand + 1; t.string = t.string.scrambl // Erase widgets / clear buffer -Emacs.evalLispExpression(p.use(['save-current-buffer', ['set-buffer', ['get-buffer', "*SCWindow*"]], ['let', [['inhibit-read-only', 't']], ['with-silent-modifications', ['remove-overlays'], ['erase-buffer']]]]).asLispString) +Emacs.evalLispExpression(p.use(['save-current-buffer', ['set-buffer', ['get-buffer', p.name]], ['let', [['inhibit-read-only', 't']], ['with-silent-modifications', ['remove-overlays'], ['erase-buffer']]]]).asLispString) EmacsText( p, "Enjoy", 30);