Re: how to manage multiple non-document windows
Re: how to manage multiple non-document windows
- Subject: Re: how to manage multiple non-document windows
- From: Jean-Daniel Dupas <email@hidden>
- Date: Fri, 25 Apr 2008 21:32:42 +0200
Le 25 avr. 08 à 21:06, Steve Christensen a écrit :
On Apr 24, 2008, at 5:01 PM, Ken Thomases wrote:
On Apr 24, 2008, at 6:39 PM, Steve Christensen wrote:
I'm rewriting an old legacy app in Cocoa and have run into a
stumbling block. The app is supposed to support having multiple
windows open, but the window content is unrelated to the concept
of a document - which is the "normal" multiple window model.
Instead the windows provide a UI to perform specific calculations,
among other things. An example of what I'm looking for would be if
you had a version of the Calculator application where you could
create multiple calculator windows so you could leave several
calculations "open" simultaneously, if that makes sense.
When I start up the app, an instance of the window is created, but
I can't figure out how to get it to repeat the process in response
to selecting New from the File menu. I've found a bunch of info on
multiple document windows, or a single non-doc window plus a
preferences window, but nothing on instantiating multiple non-
document windows. Did I just miss something basic, or is all of
the magic really focused on NSDocumentController, etc.?
If you're going to instantiating a window from a nib multiple
times, it should generally be in the nib by itself. Well, the nib
can have other objects which accompany the window, like
NSController subclasses.
Then, you load the nib once for each window that you need to
instantiate.
It's quite helpful to use NSWindowController (or custom subclass)
objects to manage each nib, its loading, and the resulting window.
Typically, the NSWindowController is not contained in the nib.
Rather it is instantiated to manage the loading of the nib from the
outside. It is often the File's Owner of the nib.
I put both the window and NSWindowController subclass in
MainMenu.nib since some of the menu items control behavior in the
window (and some of the window's current state is reflected in the
menus. So I wouldn't think that you'd want to reload the nib for
that case, right?
I've tried using -[NSWindowController initWithWindowNibName:owner:]
to create a new controller instance (in response to File>New),
figuring that it'd drag the associated window along, but the
controller's _window ivar is nil, so obviously that's not working.
Is it just going to be easier for me to go the NSDocument, etc.,
route and say that I have a "document" that I'm going to
"load" (wink, wink) in order to better fit within what appears to be
the expected multiple window model?
I also just noticed that when I close one of these windows
(configured with "release on close"), the controller still hangs
around, but that's another issue...
It will probably be easier for you to understand how nib works. Going
the NSDocument way whithout nowledge of what append will not help you.
You don't have to add an instance of your window controller to the nib.
First create a new nib file.
Select the nib owner and set it's class to your window controller
class. Then bind the owner window outlet to the Window object. and
bind your control to the owner.
And finaly, create a controller instance using -[NSWindowController
initWithWindowNibName:]; (it sets the owner to self by default)
Now, for your menu items in MainMenu, bind them to the FirstResponder
object. So the action will always be send to the Window controller
instance that own the front window.
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden