NSPredicateEditorRowTemplate and dynamic popups

2009-11-13 Thread Dave DeLong
Hi everyone,

I have an NSPredicateEditor, with some standard row templates.  I'd like to add 
a custom row template with three views:  a popup button (indicating the 
attributes this template references), a second popup button (with the 
operators), and a third popup button that's populated with a list of possible 
values.

This is very similar to a regular row template, except that the list of 
possible values is computed at runtime and can change periodically based on 
system events.

I've tried subclassing NSPredicateEditorRowTemplate, overriding -templateViews, 
and returning my 3 popup buttons (all properly populated).  This works once, 
but after the row is created, I haven't been able to figure out how to 
repopulate the popup button when the list of possible values changes.  I've 
tried setting the popup button's menu's delegate to an object that will 
repopulate it, but the delegate methods are never called.

I've also seen that when there's only one possible value, my popup button is 
replaced with a textfield.  I suppose that's OK, except that if the list of 
possible values changes, I need that textfield to change to a popup button.

How can I achieve my dynamic popup button in an NSPredicateEditorRowTemplate?

Thanks!

Dave DeLong

smime.p7s
Description: S/MIME cryptographic signature
___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Re: NSPredicateEditorRowTemplate and dynamic popups

2009-11-13 Thread Jim Turner
Try this:

Create an outlet to your row template. When you need to update the
popups, make a copy of that template. Make a copy of the rowTemplates
the predicate editor currently tracks and iterate over them replacing
the template in the list that is the same class as your custom
template.  Then set this new list of templates back onto the predicate
editor.

The net effect is that the predicate editor will rebuild all the
templates it's currently using which gives you a chance to update the
popups as needed.  I don't know what'll happen when the popup
transitions to/from the text field... there's little you can do with
that as its an optimization the predicate editor does when building
it's templates (if there's only one option, why offer a choice?)

cheap-n-dirty code sample

-(void) updateTemplates {
MyRowTemplate *_newTemplate = [[myRowTemplateOutlet copy] autorelease];
NSMutableArray *rowTemplates = [[[predicateEditor rowTemplates]
mutableCopy] autorelease];

NSInteger ctr;
for( ctr=0; ctr[rowTemplates count]; ctr++ ) {
if( [[rowTemplates objectAtIndex:ctr] 
isKindOfClass:[MyRowTemplate class]] ) {
[rowTemplates replaceObjectAtIndex:ctr 
withObject:_newTemplate];
break;
}
}
[predicateEditor setRowTemplates:rowTemplates];
}


-- 
Jim
http://nukethemfromorbit.com


On Fri, Nov 13, 2009 at 10:48 AM, Dave DeLong davedel...@me.com wrote:
 Hi everyone,

 I have an NSPredicateEditor, with some standard row templates.  I'd like to 
 add a custom row template with three views:  a popup button (indicating the 
 attributes this template references), a second popup button (with the 
 operators), and a third popup button that's populated with a list of possible 
 values.

 This is very similar to a regular row template, except that the list of 
 possible values is computed at runtime and can change periodically based on 
 system events.

 I've tried subclassing NSPredicateEditorRowTemplate, overriding 
 -templateViews, and returning my 3 popup buttons (all properly populated).  
 This works once, but after the row is created, I haven't been able to figure 
 out how to repopulate the popup button when the list of possible values 
 changes.  I've tried setting the popup button's menu's delegate to an object 
 that will repopulate it, but the delegate methods are never called.

 I've also seen that when there's only one possible value, my popup button is 
 replaced with a textfield.  I suppose that's OK, except that if the list of 
 possible values changes, I need that textfield to change to a popup button.

 How can I achieve my dynamic popup button in an NSPredicateEditorRowTemplate?

 Thanks!

 Dave DeLong
 ___

 Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

 Please do not post admin requests or moderator comments to the list.
 Contact the moderators at cocoa-dev-admins(at)lists.apple.com

 Help/Unsubscribe/Update your Subscription:
 http://lists.apple.com/mailman/options/cocoa-dev/jturner.lists%40gmail.com

 This email sent to jturner.li...@gmail.com

___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com