Re: Binding InfoPanel to currentDocument
Re: Binding InfoPanel to currentDocument
- Subject: Re: Binding InfoPanel to currentDocument
- From: "Gerriet M. Denkmann" <email@hidden>
- Date: Fri, 26 Oct 2012 16:55:50 +0700
On 26 Oct 2012, at 16:11, Kyle Sluder <email@hidden> wrote:
> On Oct 26, 2012, at 1:52 AM, "Gerriet M. Denkmann" <email@hidden> wrote:
>
>>
>> On 26 Oct 2012, at 01:11, Seth Willits <email@hidden> wrote:
>>
>>> On Oct 25, 2012, at 4:36 AM, Gerriet M. Denkmann wrote:
>>>
>>>> This works, but I have a strong feeling that there is a very obvious better solution which I somehow cannot see.
>>>
>>>
>>> There actually isn't an obvious solution.
>>
>> Strange.
>> I thought that having some InfoPanel which shows data of the current NSDocument would be a fairly common scenario.
>> But anyway.
>>
>> I decided to follow your suggestions.
>>
>> My app delegate now has:
>> @property (strong) GmdDocument *currentDocument;
>>
>> In applicationDidFinishLaunching: it registers for NSWindowDidBecomeMainNotification and NSWindowWillCloseNotification (not for NSWindowDidResignMainNotification because I want my InfoPanel to keep it's data when some other app becomes active).
>>
>> The notification method is:
>>
>> - (void)someWindowChanged: (NSNotification *)noti
>> {
>> NSWindow *window = [ noti object ];
>>
>> if ( ![ window isMemberOfClass: [ NSWindow class ] ] ) return; // ignore non-Windows
>
> This check is wrong because it is too strict; it will fail for NSWindow subclasses including NSPanel. The proper check here is -isKindOfClass:.
I am NOT interested if some panel closes (it probably would not become Main because being a Panel).
So I use isMemberOfClass because I am not interested in Window subclasses.
>
>>
>> NSWindowController *windowController = [ window windowController ];
>> if ( windowController == nil ) return; // ignore strange windows
>
> NSWindow has a -document accessor. Use that instead of going though the window controller.
Yes. I saw that in your previous post. But I asked both AppKiDo and Xcode and nobody showed me any documentation about this accessor.
So I am wary of using undocumented stuff.
>
>>
>> GmdDocument *document = [ windowController document ];
>> if ( ![ document isKindOfClass: [ GmdDocument class ] ] ) return; // ignore strange documents
>
> This will bail out early without setting currentDocument if the new window has no document. That's probably not want you want.
I am not interested in windows without a document. They won't belong to my NSDocument subclass, will they?
>
>>
>> if ( [ [ noti name ] isEqualToString: NSWindowWillCloseNotification ] ) document = nil;
>>
>> self.currentDocument = document;
>> }
>
>
> Actually, I wouldn't write this method at all. I'd use the new block-based NSNotification API and register different blocks for NSWindowDidCloseNotification and NSWindowDidBecomeMainNotification.
Yes. This might be more efficient. And I might try this in the near future.
Thanks for this suggestion.
Kind regards,
Gerriet.
_______________________________________________
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