<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">All,<div><br></div><div>I finally checked in a completely new revision of my contrib: .../ccl/cocoa-ide/krueger/InterfaceProjects/...</div><div><br></div><div><b>All code requires OSX 10.7 or higher and CCL 1.9 or higher.</b></div><div><br></div><div>Synopsis of features:</div><div><ul class="MailOutline"><li>Documentation</li><ul><li>UserInterfaceTutorial.pdf is an extensive description of how to construct Cocoa user interfaces without having to resort to Xcode or InterfaceBuilder. It makes heavy use of Cocoa's layout constraint functionality.</li><li>CCL Cocoa Developer Tools Tutorial.pdf explains how to install and use application build/test code within the CCL IDE to construct apps that you can also run within the IDE for testing before creating stand-alone applications.</li><li>Lisp-KVO Reference & Tutorial.pdf explains functionality that lets you make slots in standard Lisp classes be KVO compliant and supports binding between Objective-C view properties and those slots. </li><li>LispController Reference.pdf describes how to use the lisp-controller class as a lisp-friendly controller to manage view objects like NSTableView NSOutlineView.</li></ul><li>Code Highlights</li><ul><li>Major Functionality</li><ul><li>Support for running Lisp apps under the CCL IDE, including swapping of the main menu</li><li>Tools for creating stand-along Lisp apps</li><li>Support for binding between Objective-C objects and Lisp slots</li><li>Extensive Lisp/Objective-C data conversion support via a coerce-obj method</li><li>Conversion of standard-instance objects to a format that can be archived to disk and restored correctly.</li><li>Initialize-instance :after methods for 20 common Objective-C classes that let you call make-instance for them using typical lisp keyword initialization syntax with all necessary data conversion done automatically for you. As a design principle, no default behavior is modified by these methods unless explicitly requested via a keyword argument. These are self-documenting via a window that can be invoked from the CCL Tools menu which shows and lets you search class hierarchies and see permitted initialization keywords, acceptable keyword values, and allowed binding targets.</li><li>Lisp interface for Apple's layout constraint functionality including the addition of several common layout idioms to make window design easier. See Appendix B in UserInterfaceTutorial.pdf for a complete description.</li></ul><li>Special purpose utility classes and functionality</li><ul><li>An N-dimensional sparse associative array</li><li>A Lisp attributed string stream class</li><li>Date manipulation and formatting utilities</li><li>Bundle interface code</li><li>NIB interface code</li><li>Lisp interface to Cocoa "undo" functionality</li><li>Lisp-document class which provides support for saving, loading, undo'ing, and printing documents defined with lisp data slots</li><li>Lisp-window-controller class which supports window "loading" using a lisp function rather than loading from a NIB file</li><li>Lisp interface to the Cocoa notification functionality.</li><li>A thread-safe queue implementation</li></ul><li>Custom view classes and view-supporting classes</li><ul><li>combo-box source class</li><li>Support for acting as a data source for NSTableView and NSOutlineView objects</li><li>Menu and menuitem creation functions for both common and custom items</li><li>Lisp interface to NSOpenPanel and NSSavePanel</li><li>Lisp button class that lets buttons call lisp methods</li><li>An organized-box-view that arranges subviews as directed</li><li>A resizable-box-view that dynamically rearranges its content views into a reasonable array as the box size changes</li><li>A radio-button box view which calls lisp methods when buttons are selected</li><li>A scrolled text view</li><li>A scrolled text view which can act as a Lisp output stream</li><li>Label view</li><li>Labeled text field</li><li>A form-view which is an aligned set of text fields with labels</li></ul></ul></ul><div><br></div></div><div>If you run into any problems, please contact me directly and I'll try to address them. Any suggestions or other comments are welcomed.</div><div><br></div><div>Paul</div><div><br></div></body></html>