Re: [Pyobjc-dev] Using separate nib files for additional windows
Brought to you by:
ronaldoussoren
From: Ronald O. <ron...@ma...> - 2005-11-30 19:20:27
|
On 30-nov-2005, at 19:49, Daniel Weber wrote: > This is a rather long message, but it is pretty basic and easy to > follow so bear with me. Your message is not too long, I prefer longish and complete messages over short messages that only hint at the problem any day :-) > I have a controller and a main window in the > MainMenu.nib file. I want to add additional panels for custom sheets > that are contained in their own nib files. However, I'm not sure > exactly how this is implemented in PyObjC (or straight obj-c, for that > matter). If I put a panel with it's own controller in a separate nib > file, how do I start the panel as a sheet, and how would I return some > values to the main controller when the sheet is ended? Basically, how > do I get a reference to the instance of the panel in my main > controller, if it's in a different nib file? Here's some code to > illustrate: I usually just put the sheet into the same NIB as the window is it for. That should work just fine unless you have a lot of sheets or the sheet uses a lot of resources. But it should be possible by using the window controller as the File Owner of the sheet nib. You can declare a class in two nib files, their definitions will be merged at runtime. You must make sure to call NibClassBuilder.extractClasses on all NIB-files before defining the classes in Python for this to happen. You can then add a 'someDelegate' outlet to the window controller in the sheet nib and connect that to the sheet delegate. Adding connections in the other direction as well would be harder, adding an outlet to the sheet delegate that is connected to the File Owner and using the window controller as a proxy is probably easiest, although it breaks encapsulation a bit. Ronald |