On Friday, July 5, 2002, at 02:37 PM, bob ackerman wrote:
> ok. i am a not-know-much. what i know, i read in the camelbones doc.
> please help me understand.
Sorry, I didn't mean that as personal criticism. I'm just trying to get
a handle on how others feel about having the ability to create custom
widgets. I thought, based on your past comments, that you considered it
a show-stopper. For my own use, I haven't found it to be very
important - but I'm quite willing to admit that I'm the odd man out in
that, if that turns out to be the case. :-)
> are you saying we can create views in ib and use them - we just can't
> create 'custom' views? which means what - subclassing?
That's precisely the difficulty - subclassing. I haven't figured out an
elegant way to handle the creation of a Perl subclass of an Objective-C
superclass. Since creating a new view object - a custom gui widget, in
other words - most often requires subclassing NSControl, that's pretty
much ruled out until subclassing is working.
On the other hand, you can use all of the standard view objects; that
is, anything that appears on the standard IB palettes, without having to
write any Objective-C code.
In my own experience, I haven't found a huge need for widgets that
aren't already provided with AppKit/IB. That, in combination with the
problem of subclassing, has put the issue pretty low on my priority
list. Like I said earlier, though, I'm quite willing to believe that I'm
the odd man out, and readjust my priorities if enough people think it's
important.
> and i still don't think i would know how to handle them in perl.
> perhaps just a few more little examples of how, in general, to
> translate obj-c into perl.
> where obj-c creates a class and calls a method with named arguments,
> what would we do in perl?
Most of the creation and connection of GUI widgets is done visually, in
Interface Builder; your Perl controller class gets passed a reference to
the object when the NIB is loaded. However, you can also create new ObjC
objects from Perl.
In general, Objective-C method calls of the form:
[object method: arg1 arg2Name: arg2];
Are called in Perl like this:
$object->method_arg2Name(arg1, arg2);
The argument names are concatenated with the method name, and ':' are
turned into '_'s. If there is a trailing '_', as there would be for a
method that took only one argument, it is removed from the Perl
equivalent.
For example, to create a mutable dictionary with an initial capacity for
five objects, and add a single string object in Objective-C looks like
this:
NSMutableDictionary *dict;
dict = [[NSMutableDictionary alloc] initWithCapacity: 5];
[dict setObject: @"This is a string" forKey: @"This is the key"];
The equivalent in Perl would look like this:
our $dict;
$dict = NSMutableDictionary->alloc->initWithCapacity(5);
$dict->setObject_forKey("This is a string", "This is the key");
Does that help clear it up any, or just muddy it further?
sherm--