[comp.sys.next] Why is the application kit so frustrating?

roy@prism.gatech.EDU (Roy Mongiovi) (08/18/89)

I am having an incredibly frustrating time trying to figure out what messages
to send to what objects to get my interface to behave the way I want it to.
Is this all because of the lack of documentation, is it bugs in the application
kit, or is it a deficiency in the object definitions themselves?

I've got a copy of the 0.9 technical references, but I find I still have to
basically try every combination of possibly applicable methods and objects to
get the interface to behave in the desired fashion.  I can't tell you how tired
I get of "well, let's see.  I can invoke this method of the matrix, or this
method of the cell of the matrix, or maybe it should be this method...."

I've got this setup panel that contains a matrix of 4 textfieldcells.  My
customview object has the id of the matrix.  I've got a menu item that wants
to be able to reset the values of all 4 numbers in the matrix.

I was resetting the cells with statements like:

    [[matrixobj cellAt: 0: 0] setDoubleValue: value];

If none of the cells in the matrix are selected, clicking the reset menu item
does reset all the values in the matrix, and they are displayed.  However, if
one of the textfieldcells is selected, all the values in the matrix get reset,
but the cell containing the cursor does not get redisplayed so you can't tell
that it's been reset.  Also, it had the following wierd behaviour that when I
hit the tab key to go to the next entry in the matrix, the cell I had been in
would be cleared, and then when I hit tab again the correct value would appear
in the cleared cell, and the cell I had just been in would then clear.  Very
strange.

Sending the matrix a display message does not fix the problem.

Neither of the statements:

    [matrixobj clearSelectedCell];	and
    [matrixobj selectCellAt: -1: -1];

clears the selection, and the selectCellAt method does not end editing (even
though that is one of its documented effects).

In the many incantations that I tried, I managed to get white rectangles to
appear at odd places in the window (i.e. not in the textfieldcell where they
ought to be).  I managed to get it confused so that multiple cells were
highlighted (as though they were selected) although only the one containing
the cursor really was selected.

I finally fixed the code when I came across a note under one of the method
descriptions in the technical reference manual.  The correct incantation
seems to be:

    [matrixobj displayCell: [[matrixobj cellAt: 0: 0] setDoubleValue: value]];

I still can't figure out how to deselect the selected cell, though.

All-in-all, I spent several hours trying various combinations of things in
order to get this piddly little piece of my interface to behave in the correct
manner.

Is this the way it's supposed to be?

On another note, can anyone tell me why double clicking a window's close button
makes the application hide?  Try opening an info panel and double clicking it
closed.
-- 
Roy J. Mongiovi     Systems Support Specialist     Office of Computing Services
Georgia Institute of Technology	  Atlanta, Georgia  30332-0275   (404) 894-4660
	uucp: ...!{allegra,amd,hplabs,ut-ngp}!gatech!prism!roy
	ARPA: roy@prism.gatech.edu

carlos@tybalt.caltech.edu (Carlos Salinas) (08/19/89)

The application kit is frustrating because the online documentation is
terribly lacking. Instead of a stupid text retrieval service (why not
just use microfiche? Librarian is a waste of a good machine, basically
it's a souped MAN), we need hypertext online documentation. Wouldn't it
be nice if you could call up the heirarchy of the application kit, and
click on the object you wanted info on? Wouldn't it be great to be able
to point and click on a method in a method list instead searching the
documentation. Or how about some online examples and more graphics?
As is the docs are mostly text. Ever used Hypercard? How about a Help
like that on the NeXT? One window running Interface Builder, one running
the hyperHelp, would be much more useful than the current documentation.

Carlos Salinas

greid@adobe.com (Glenn Reid) (08/22/89)

In article <1520@hydra.gatech.EDU> roy@prism.gatech.EDU (Roy Mongiovi) writes:
>I am having an incredibly frustrating time trying to figure out what messages
>to send to what objects to get my interface to behave the way I want it to.
>Is this all because of the lack of documentation, is it bugs in the
>application kit, or is it a deficiency in the object definitions themselves?
>
>I've got a copy of the 0.9 technical references, but I find I still have to
>basically try every combination of possibly applicable methods and objects to
>get the interface to behave in the desired fashion.  I can't tell you how
>tired I get of "well, let's see.  I can invoke this method of the matrix,
>or this method of the cell of the matrix, or maybe it should be this
>method...."

In my opinion, the main reason for this is that the AppKit documentation
only tells you WHAT the methods and instance variables are, but comes
up a bit short in telling you WHY or WHEN you might want to use them.
They also don't provide much sample usage.

This is especially important for object-oriented programming beginners
(like me :-) who are sure which is the cart and which is the horse,
let alone the distinction between an instance variable, a method, an
outlet, and an action.  Just make sure to keep the outlets out of
the reach of small children.

But, first things first.  It is better to have all of the elements of
the AppKit documented in a skeletal form, and hope that someone will
come back later and improve the documentation at each individual method
and instance variable.

Glenn Reid