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--

Reply via email to