<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>This may be a good moment to discuss some of the ideas regarding the creation of LUI, the "Lisp User Interface as a cross platform, but Mac first" open source GUI tool.</div><div><br></div><div>At this point a very early prototype exists for CCLmac Intel/PPC with classes implemented in Cocoa including: buttons, windows, sliders, labels, editable text, images, sound, speech, Web browser view, OpenGL, ..</div><div><br></div><div>The main question is how to bring this to Windows or more specifically to CCL windows. Who has some ideas, time to hack stuff, experience with Windows lisp hacking etc. Some ideas tossed around so far are: Cocotron, GNUstep, native win32, .NET,</div><div><br></div><div>The initial implementation of the core GUI classes was quite simple and short (single short file) in Cocoa with CCL. Thank you Clozure for the nice Cocoa Objective-C integration!</div><div><br></div><div>Some fundamental ideas of LUI are:</div><div>- separation of platform specific and independent code: write platform independent code or create specific Cocoa based extensions </div><div>- separation of procedural (Lisp) and declarative (XML syntax but it is really Lisp: X-expressions <a href="http://www.cs.colorado.edu/~ralex/papers/PDF/X-expressions.pdf)">http://www.cs.colorado.edu/~ralex/papers/PDF/X-expressions.pdf)</a> GUI information</div><div>- layout managers: interfaces that stretch and don't need, but do allow, hardcoded coordinates/sizes. In the example below the window can be stretched updating the size of the editable fields.</div><div><br></div><div><br></div><div><br></div><div>;;; ------- Here is the complete code to Currency Converter in LUI:</div><div>;; editable numbers contain valid numbers and have number, instead of string, setters/getters</div><div><br></div><div><br></div><div><div>(defmethod CONVERT-CURRENCY-ACTION ((w application-window) (Button button))</div><div> (setf (value (view-named w "amount"))</div><div> (* (value (view-named w "rate"))</div><div> (value (view-named w "dollars")))))</div><div><br></div><div><br></div><div><application-window title="Currency Converter" width="300" height="180"></div><div> <column align="stretch" valign="stretch" padding="9"></div><div> <row align="stretch" minimize="vertical" valign="bottom"></div><div> <label text="Exchange Rate per $1:" align="right" flex="2"/></div><div> <editable-number name="rate" text="1.0" flex="1"/></div><div> </row></div><div> <row align="stretch" minimize="vertical" valign="bottom"></div><div> <label text="Dollars to Convert:" align="right" flex="2"/></div><div> <editable-number name="dollars" text="1.0" flex="1"/></div><div> </row></div><div> <row align="stretch" minimize="vertical" valign="bottom"></div><div> <label text="Amount in the other Currency:" align="right" flex="2"/></div><div> <editable-number name="amount" text="1.0" flex="1"/></div><div> </row></div><div> <row align="right" valign="bottom" vflex="1"></div><div> <button text="Convert" action="convert-currency-action" default-button="true"/></div><div> </row></div><div> </column></div><div></application-window></div><div><br></div><div><br></div></div><div><img height="219" width="354" apple-width="yes" apple-height="yes" src="cid:6EB4032D-00EC-4DF8-AC62-73A79F7B78DC"></div><div><br></div><div><br></div><div><span class="Apple-style-span" style="font-family: Times; font-size: 16px; "><p style="font-size: 10pt; font-family: Arial, Helvetica, sans-serif; margin-left: 20pt; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; "><br></p><div><font class="Apple-style-span" face="Arial" size="3"><span class="Apple-style-span" style="font-size: 13px;">;;-------- Example mixing 2D and 3D:</span></font></div><div><font class="Apple-style-span" face="Arial" size="3"><span class="Apple-style-span" style="font-size: 13px;"><br></span></font></div></span></div><div><img height="347" width="332" src="cid:0D3719E1-417E-45C7-BF41-9D377C164B15"></div><div><br></div><div>;; complete code here:<br><br>(defclass TRIANGLE-OPENGL-DIALOG (opengl-dialog)<br>())<br><br>;; the "#_" syntax needs to go to make this more platform independent, readable and symbol completable<br>(defmethod DRAW ((Self triangle-opengl-dialog))<br>(#_glBegin #$GL_TRIANGLES)<br> (#_glColor3f (value (view-named (window Self) "red")) 0.0 0.0)<br> (#_glVertex3f 0.0 0.6 0.0)<br> (#_glColor3f 0.0 (value (view-named (window Self) "green")) 0.0)<br> (#_glVertex3f -0.6 -0.3 0.0)<br> (#_glColor3f 0.0 0.0 (value (view-named (window Self) "blue")))<br> (#_glVertex3f 0.6 -0.3 0.0)<br>(#_glEnd))<br><br><br><div>(defmethod ADJUST-VERTEX-COLOR-ACTION ((W application-window) (S slider))</div><div> ;; openGL view update</div><div> (display (view-named W "opengl"))</div><div> (display (view-named W "opengl2"))</div><div> (display (view-named W "opengl3"))</div><div> ;; labels update</div><div> (setf (text (view-named W "red label")) (format nil "~,2F" (value (view-named W "red"))))</div><div> (setf (text (view-named W "green label")) (format nil "~,2F" (value (view-named W "green"))))</div><div> (setf (text (view-named W "blue label")) (format nil "~,2F" (value (view-named W "blue")))))</div><div><br></div><br><application-window title="OpenGL 3D" margin="12" width="300" height="300"><br><column align="stretch" valign="stretch"><br> <row minimize="vertical" align="stretch" valign="middle"><br> <label text="red" align="right" width="50"/><br> <slider name="red" action="adjust-vertex-color-action" max-value="1.0" flex="1"/><br> <label text="0.00" name="red label" width="40"/><br> </row><br> <row minimize="vertical" align="stretch" valign="middle"><br> <label text="green" align="right" width="50"/><br> <slider name="green" action="adjust-vertex-color-action" max-value="1.0" flex="1"/><br> <label text="0.00" name="green label" width="40"/><br> </row><br> <row minimize="vertical" align="stretch" valign="middle"><br> <label text="blue" align="right" width="50"/><br> <slider name="blue" action="adjust-vertex-color-action" max-value="1.0" flex="1"/><br> <label text="0.00" name="blue label" width="40"/><br> </row><br> <spacer height="12"/><br> <triangle-opengl-dialog name="opengl" vflex="1"/><br> <spacer height="12"/><br> <row align="stretch" valign="stretch" vflex="2"><br> <triangle-opengl-dialog name="opengl2" flex="1"/><br> <spacer height="12" width="12"/><br> <triangle-opengl-dialog name="opengl3" flex="1"/><br> </row><br></column><br></application-window><br><br></div><div><br></div><div>Happy New Year,</div><div><br></div><div>Alex</div><div><br></div><br><div apple-content-edited="true"> <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">Prof. Alexander Repenning</font></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px">University of Colorado</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Computer Science Department</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Boulder, CO 80309-430</p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">vCard: <a href="http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf">http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf</a></font></p><br class="Apple-interchange-newline"></span></span></span></div></span> </div><br></body></html>