Making pop-up menus in custom Quartz Composer patches is actually surprisingly easy.
This release is only compatible with Tiger (10.4).Please see kineme.net for Leopard-specific informations.
- Set up a QCIndexPort input. QCIndexPorts provide values from 0 to whatever max you specify using
- (void)setMaxIndexValue:(unsigned int)max;.
@interface IndexPortPopUpDemoPatch : QCPatch
{
QCIndexPort *inputPerson;
}
...
@end
- Add the “menu” key to the port’s input attributes:
<key>inputAttributes</key>
<dict>
<key>inputPerson</key>
<dict>
<key>description</key>
<string>Person</string>
<key>name</key>
<string>Person</string>
<key>menu</key>
<array>
<string>Arthur Dent</string>
<string>Ford Prefect</string>
<string>Zaphod Beeblebrox</string>
<string>Marvin</string>
<string>Trillian</string>
<string>Slartibartfast</string>
<string>Agrajag</string>
<string>Wonko the Sane</string>
</array>
</dict>
</dict>
- Make sure you set the max index value in the
initWithIdentifierfunction:
- (id)initWithIdentifier:(id)fp8
{
id z=[super initWithIdentifier:fp8];
[inputPerson setMaxIndexValue:7];
return z;
}
- Read the value out of the QCIndexPort using
- (unsigned int)indexValue;.

can you make and post a screen shot of it working within Quartz Composer itself? Holy cow I’m so excited to give this a shot this weekend :)
Submitted by cwright on 2007.07.05 @ 13:55. |
cwright -
The screenshot in the top right corner is actually QC itself.
smokris
Submitted by smokris on 2007.07.05 @ 13:58. |
Ahh, right you are. I wasn’t familiar with the Inspector window in QC :) I thought that was the Interface Builder’s Inspector guy. My Bad :)
Submitted by cwright on 2007.07.05 @ 14:18. |
To generate menu items at runtime, you have to override QCIndexPort’s initWithNode method. it looks like this:
Here’s some code to do just that:
(id)initWithNode:(id)fp8 arguments:(id)fp12 { NSMutableDictionary *config = [fp12 mutableCopy]; NSMutableDictionary *attr; NSMutableArray *menu = [[NSMutableArray alloc] init];
[config autorelease]; [menu autorelease];
attr = [config objectForKey:@”attributes”];
[menu addObject:@”foo”]; [menu addObject:@”bar”]; [menu addObject:@”baz”];
[attr setValue:menu forKey:@”menu”];
return [super initWithNode:fp8 arguments:config]; }
Submitted by cwright on 2007.07.10 @ 11:29. |
Post new comment