apps-gorm/Documentation/Gorm.texi

429 lines
15 KiB
Text
Raw Normal View History

\input texinfo @c -*-texinfo-*-
@c %**start of header
@settitle Guide to the Gorm application
@setfilename Gorm.info
@c %**end of header
@defcodeindex cl
@defcodeindex pr
@include version.texi
@ifinfo
@format
START-INFO-DIR-ENTRY
* Gorm:: The GNUstep Graphical Object Relationship Modeler
END-INFO-DIR-ENTRY
@end format
@end ifinfo
@ifinfo
This file documents the features and implementation of the Gorm
application.
Copyright (C) 1999,2000 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.
@ignore
Permission is granted to process this file through @TeX{} and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).
@end ignore
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
section entitled ``GNU Library General Public License'' is included exactly as
in the original, and provided that the entire resulting derived work is
distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that the section entitled ``GNU Library General Public License'' and
this permission notice may be included in translations approved by the
Free Software Foundation instead of in the original English.
@end ifinfo
@iftex
@finalout
@c @smallbook
@c @cropmarks
@end iftex
@setchapternewpage odd
@titlepage
@title Guide to the
@title Gorm application
@sp 3
@c @subtitle last updated February, 2001
@subtitle Version @value{GORM-VERSION}
@subtitle (for use with @samp{gnustep-gui} version @value{GNUSTEP-VERSION})
@author Gregory John Casamento <greg_casamento@@yahoo.com>
@author Richard Frith-Macdonald <richard@@brainstorm.co.uk>
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1999,2000 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
section entitled ``GNU Library General Public License'' is included exactly as
in the original, and provided that the entire resulting derived work is
distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that the section entitled ``GNU Library General Public License'' may be
included in a translation approved by the author instead of in the original
English.
@strong{Note: The Gorm application is in alpha release. You will
be performing a valuable service if you report any bugs you encounter.}
@end titlepage
@contents
@node Top, Copying, ,
@menu
* Copying:: GNU Public License says how you can copy
and share Gorm.
* Contributors:: People who have contributed to Gorm.
* Installation:: How to build and install Gorm.
* News:: The latest changes to Gorm.
* Overview:: Gorm in brief.
* Usage:: How Gorm is used.
* Implementation:: Implementation notes.
* Concept Index::
@end menu
@node Copying, Contributors, Top, Top
@unnumbered Copying
See the file @samp{COPYING}.
@node Contributors, Installation, Copying, Top
@unnumbered Contributors to Gorm
@itemize @bullet
@item
Gregory John Casamento <greg_casamento@@yahoo.com> Is the
current maintaner of Gorm. Has implemented lots of new
features and rewritten large portions of the existing code.
@item
Richard Frith-Macdonald <richard@@brainstorm.co.uk> wrote
Gorm as part of the GNUstep project.
@item
Pierre-Yves Rivaille <gnustep@@rivaille.net> Is also a
major contributor to the Gorm application.
@end itemize
@node Installation, News, Contributors, Top
@chapter Installing Gorm
@include install.texi
@node News, Overview, Installation, Top
@chapter News
@include news.texi
@subsection To Do
@itemize @bullet
@item Debug and stabilize existing code.
@end itemize
@node Overview, Usage, News, Top
@chapter Overview
Gorm is an application for creating the user interface (and possibly entire
applications) for a GNUstep application. Initially a close clone of the old
NeXTstep 3.3 Interface Builder application, I expect that Gorm will mutate
beyond the capabilities of that app.
GNUstep is an object-oriented programming framework and a collection of tools
developed for or using the GNUstep libraries.
You can find out more about GNUstep at
@url{http://www.gnustep.org}@*
The basic idea behind Gorm is simple - it provides a graphical user interface
with which to connect together objects from the GNUstep libraries (as well as
custom-written objects) and set their attributes in an easy to use manner.
The collection of objects is then saved as a document which can either be
re-loaded into Gorm for further editing, or can be loaded into a running
GNUstep application in order to provide that application with a user
interface or some subsystem.
@subsection Major features
@cindex features
@itemize @bullet
@item Drag-and-drop creation of GUI elements from palettes.
@item Run-time loading of additional palettes that may be written using an API
very similar to that of Apple/NeXTs interface Builder palette API.
@item Direct on-screen manipulation of GUI elements
@item Manipulation and examination of objects via inspectors.
@item Drag-and-drop creation of connections between objects.
@item Interactive test mode for interfaces/object-networks under development.
@item Saving data in a format loadable by GNUstep applications.
@end itemize
@node Usage, Implementation, Overview, Top
@chapter Usage
Here is a description of the menu structure and what each menu does -
@itemize @bullet
@item Info @*
The @samp{Info} menu item produces a submenu ...
@itemize @bullet
@item Info Panel @*
A panel giving very limited information about Gorm
@item Preferences (not implemented) @*
A panel allowing you to set preferences about how Gorm operates
@item Help (not implemented) @*
A panel providing general help on using Gorm
@end itemize
@item Document @*
The @samp{Document} menu item produces a submenu ...
@itemize @bullet
@item Open @*
This produces an open panel that lets you open a Gorm document.
You use this if you want to use Gorm to edit an exisiting document.
@item New Application @*
This creates a new application document within Gorm, you may then use the
Palettes panel to drag new objects into the document.
@item New Module @*
Contains a submenu, which also contains:
@itemize @bullet
@item New Empty @*
produces an empty document with only NSFirst and NSOwner.
@item New Inspector @*
produces a document with NSOwner, NSFirst and a window which is the correct size for an Inspector.
@item New Palette @*
produces a document which is like the one by @samp{New Inspector}, but it's window is the right size for a Palette.
@end itemize
@item Save @*
This saves the current document
@item Save As @*
This saves the current document to a new file and changes the document name
to match the new name on disk.
@item Save All @*
This saves all documents currently being edited by Gorm.
@item Revert To Saved @*
This removes all changes made to the document sunce the last save, or since
the document was opened.
@item Test Interface @*
This provides interactive testing of the active document. To end testing, you
need to select the @samp{quit} menu item.
@item Miniaturize @*
This miniaturises the active document (or whatever panel is currently key).
@item Close @*
This closes the currenly active document.
@item Debug @*
Prints some useful internal information.
@item Load Sound @*
Loads a sound into the .gorm file.
@item Image @*
Loads an image into the .gorm file.
@end itemize
@item Edit @*
In addition to the usual Cut, Copy, Paste, Delete Select All, this menu also contains:
@itemize @bullet
@item Group @*
Which produces a submenu
@itemize @bullet
@item In Splitview @*
Groups views into an NSSplitView. Gorm does this based on the relative positions of the views being grouped. It determines the orientation and the order of th views and then groups them either vertically or horizontally in the order they appear on the screen.
@item In Box @*
Simply groups all of the views into one NSBox.
@item In ScrollView @*
Simply groups all of the views into one NSScrollView.
@item Ungroup @*
Ungroups the contained views.
@end itemize
@item Set Name @*
This allows the user to set a name for a given object in the Objects view in the main document window.
@item Disable Guideline @*
This item toggles between Enable Guideline and Disable Guideline. This allows the user to turn on or off the guides which appear when placing views in a window or view in Gorm.
@end itemize
@item Classes
@item Tools
@item Windows
@item Services
@item Hide
@item Quit
@end itemize
@node Implementation, Concept Index, Usage, Top
@chapter Implementation
@menu
* Preferences::
@end menu
Notes on implementation
The IB documentation on how object selection is managed and how editors and
inspectors are used is unclear ... so I've gone my own way.
1. When a document is loaded, the document object creates an editor attached
to each top-level object in the user interface (NSMenu and NSWindow objects).
These editors must be aware of their edited objects being clicked upon, and
clicking on one of these should cause the corresponding editor to become the
active editor.
The active editor is responsible for handling selection of the edited object
(and any objects below it in the object hierarchy). Upon change of selection,
the editor is responsible for sending an IBSelectionChangedNotification with
the selection owner (normally the editor itsself) as the notification owner.
The main application watches for these notifications in order to keep track
of who has the selection.
Connections
The connection API is the same as that for IB, but with the extension that the
document object must implement [-windowAndRect:forObject:] to return the
window in which the object is being displayed, and the rectangle enclosing
the object (in window base coordinates).
This information is needed by Gorm so that it can mark the connection.
The editors mananging the drag-and-drop operation for a connection must call
[NSApp -displayConnectionBetween:and:] to tell Gorm to update its display.
This method sets the values currently returned by
[NSApp -connectSource] and [NSApp -connectDestination]
@node Preferences, , Implementation, Implementation
@unnumbered Preferences
@cindex preferences
@cindex defaults
The preferences panel contains a number of use customizable options which can
be used to modify the behavior of Gorm.
Some of these defaults can be safely modified from the command line by the user.
@itemize @bullet
@item PreloadHeaders @*
The user can define a set of headers to load when Gorm starts creation of a new .gorm file.
This is useful when the user is building a framework or a set of interfaces for a large
application.
@item ShowInspectors @*
Controls whether the inspector shows when Gorm is started.
@item ShowPalettes @*
Controls whether the palettes window shows when Gorm is started.
@item BackupFile @*
Determines if the old .gorm is moved to .gorm~ when the modified version is saved.
@end itemize
@chapter My First Application
This chapter will cover the steps taken by the user to create his/her first application with Gorm.
@subsection Getting Started
First you need to understand a few basic concepts. Gorm's main window includes a few standard entries which must be explained before we can proceed.
They are:
@itemize @bullet
@item NSOwner
@item NSFirst
@item NSFont
@end itemize
@section What is NSOwner?
NSOwner is the class which ``owns'' the interface. This is, by default, NSApplication, but it can be any class you like. You can change it by selecting NSOwner in the document window and going to the ``Custom Class'' inspector in the inspectors window. From there, you should see all of the classes which the NSOwner can assume. We'll discuss more about this later when we go over how to create a new application
@section What is NSFirst?
NSFirst is your interface to the responder chain. NSFirst is representative of the current ``first responder'' in the application. When you want a message, such as a changeFont: message, to go to the current first responder from, say, a menu, you connect the menu item to the NSFirst object in the document window. By doing this, it means that whichever object has first responder status at that time in the application will become the reciever of the ``changeFont:'' message.
@subsection Responders
A responder is any subclass of NSResponder. This includes NSWindow, NSView and all of the NSControl subclasses.
@subsection The Responder Chain
The responder chain is a sequence of objects which are called to determine where a message sent to the first responder will go. A message invoked on the first responder will be invoked on the first object in the responder chain which responds to that message.
The object which this message will be called on is determined in the method [NSApplication targetForAction:]. The call sequence is as follows, it will only proceed to the next step in each case if the current step fails to respond to the message which was invoked:
@itemize @bullet
@item The firstResponder of the keyWindow, if one exists.
@item Iterates through all responders by pulling each in the linked list of responders for the key window.
@item It then tries the keyWindow.
@item Then the keyWindow's delegate
@item if the application is document based it tries the document controller object for the key window.
@item then it tries the mainWindow's list of responders (as above)
@item the mainWindow's delegate
@item if the app is document based, it tries the document controller for the main window
@item and finally, it tries the NSApplication delegate.
@end itemize
If all of the options in this list are exhausted, it then gives up and returns nil for the object which is to respond.
@section What is NSFont
NSFont represents the NSFontManager object for the application. This object is a shared singleton. This means that, for any given app, there should be only one instance of the object. This object is generally added to the document window when another objec, such as a Font menu item, is added to the interface, which, in turn, requires that this object be added to the document.
@section Creating A New Application
First you need to start Gorm up. You can either do this by doing @samp{gopen Gorm.app} from a command line prompt, or you can invoke it from the Dock or from the workspace's file viewer.
You then need to select the @samp{Document} menu, and then @samp{New Application}. This should produce a new document window, with a menu and an empty window.
@node Concept Index, , Implementation, Top
@unnumbered Concept Index
@printindex cp
@bye