+ wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
+ wxASSERT(win==m_wxCocoaInterface);
+ wxCHECK_RET(win,wxT("windowWillClose received but no wxWindow exists"));
+ win->CocoaDelegate_windowWillClose();
+}
+
+// Menu item handlers
+- (void)wxMenuItemAction: (NSMenuItem *)sender
+{
+ wxASSERT(m_wxCocoaInterface);
+ m_wxCocoaInterface->CocoaDelegate_wxMenuItemAction(sender);
+}
+
+- (BOOL)validateMenuItem: (NSMenuItem *)sender
+{
+ wxASSERT(m_wxCocoaInterface);
+ return m_wxCocoaInterface->CocoaDelegate_validateMenuItem(sender);
+}
+
+@end //implementation wxNSWindowDelegate
+
+// ============================================================================
+// class wxCocoaNSWindow
+// ============================================================================
+
+WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSWindow)
+
+wxCocoaNSWindow::wxCocoaNSWindow(wxTopLevelWindowCocoa *tlw)
+: m_wxTopLevelWindowCocoa(tlw)
+{
+ m_cocoaDelegate = [[wxNSWindowDelegate alloc] init];
+ [m_cocoaDelegate setWxCocoaInterface: this];
+}
+
+wxCocoaNSWindow::~wxCocoaNSWindow()
+{
+ [m_cocoaDelegate setWxCocoaInterface: NULL];
+ [m_cocoaDelegate release];
+}
+
+void wxCocoaNSWindow::AssociateNSWindow(WX_NSWindow cocoaNSWindow)
+{
+ if(cocoaNSWindow)
+ {
+ [cocoaNSWindow setReleasedWhenClosed: NO];
+ sm_cocoaHash.insert(wxCocoaNSWindowHash::value_type(cocoaNSWindow,this));
+ [cocoaNSWindow setDelegate: m_cocoaDelegate];
+ }
+}
+
+void wxCocoaNSWindow::DisassociateNSWindow(WX_NSWindow cocoaNSWindow)
+{
+ if(cocoaNSWindow)
+ {
+ [cocoaNSWindow setDelegate: nil];
+ sm_cocoaHash.erase(cocoaNSWindow);
+ }
+}