This keyword is not expanded by Git which means it's not replaced with the correct revision value in the releases made using git-based scripts and it's confusing to have lines with unexpanded "$Id$" in the released files. As expanding them with Git is not that simple (it could be done with git archive and export-subst attribute) and there are not many benefits in having them in the first place, just remove all these lines. If nothing else, this will make an eventual transition to Git simpler. Closes #14487. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
242 lines
7.4 KiB
Plaintext
242 lines
7.4 KiB
Plaintext
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/cocoa/NSWindow.mm
|
|
// Purpose: wxCocoaNSWindow
|
|
// Author: David Elliott
|
|
// Modified by:
|
|
// Created: 2003/03/16
|
|
// Copyright: (c) 2003 David Elliott
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ============================================================================
|
|
// declarations
|
|
// ============================================================================
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// headers
|
|
// ----------------------------------------------------------------------------
|
|
|
|
#include "wx/wxprec.h"
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/log.h"
|
|
#include "wx/menuitem.h"
|
|
#endif // WX_PRECOMP
|
|
|
|
#include "wx/cocoa/NSWindow.h"
|
|
|
|
#include "wx/cocoa/objc/objc_uniquifying.h"
|
|
|
|
#import <Foundation/NSNotification.h>
|
|
#import <Foundation/NSString.h>
|
|
#include "wx/cocoa/objc/NSWindow.h"
|
|
|
|
// ============================================================================
|
|
// @class wxNSWindowDelegate
|
|
// ============================================================================
|
|
@interface wxNSWindowDelegate : NSObject
|
|
{
|
|
wxCocoaNSWindow *m_wxCocoaInterface;
|
|
}
|
|
|
|
- (id)init;
|
|
- (void)setWxCocoaInterface: (wxCocoaNSWindow *)wxCocoaInterface;
|
|
- (wxCocoaNSWindow *)wxCocoaInterface;
|
|
|
|
// Delegate message handlers
|
|
- (void)windowDidBecomeKey: (NSNotification *)notification;
|
|
- (void)windowDidResignKey: (NSNotification *)notification;
|
|
- (void)windowDidBecomeMain: (NSNotification *)notification;
|
|
- (void)windowDidResignMain: (NSNotification *)notification;
|
|
- (BOOL)windowShouldClose: (id)sender;
|
|
- (void)windowWillClose: (NSNotification *)notification;
|
|
|
|
// Menu item handlers
|
|
- (void)wxMenuItemAction: (NSMenuItem *)menuItem;
|
|
- (BOOL)validateMenuItem: (NSMenuItem *)menuItem;
|
|
@end //interface wxNSWindowDelegate
|
|
WX_DECLARE_GET_OBJC_CLASS(wxNSWindowDelegate,NSObject)
|
|
|
|
@implementation wxNSWindowDelegate : NSObject
|
|
|
|
- (id)init
|
|
{
|
|
m_wxCocoaInterface = NULL;
|
|
return [super init];
|
|
}
|
|
|
|
- (void)setWxCocoaInterface: (wxCocoaNSWindow *)wxCocoaInterface
|
|
{
|
|
m_wxCocoaInterface = wxCocoaInterface;
|
|
}
|
|
|
|
- (wxCocoaNSWindow *)wxCocoaInterface
|
|
{
|
|
return m_wxCocoaInterface;
|
|
}
|
|
|
|
// Delegate message handlers
|
|
- (void)windowDidBecomeKey: (NSNotification *)notification
|
|
{
|
|
wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
|
|
wxASSERT(win==m_wxCocoaInterface);
|
|
wxCHECK_RET(win,wxT("notificationDidBecomeKey received but no wxWindow exists"));
|
|
win->CocoaDelegate_windowDidBecomeKey();
|
|
}
|
|
|
|
- (void)windowDidResignKey: (NSNotification *)notification
|
|
{
|
|
wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
|
|
wxASSERT(win==m_wxCocoaInterface);
|
|
wxCHECK_RET(win,wxT("notificationDidResignKey received but no wxWindow exists"));
|
|
win->CocoaDelegate_windowDidResignKey();
|
|
}
|
|
|
|
- (void)windowDidBecomeMain: (NSNotification *)notification
|
|
{
|
|
wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
|
|
wxASSERT(win==m_wxCocoaInterface);
|
|
wxCHECK_RET(win,wxT("notificationDidBecomeMain received but no wxWindow exists"));
|
|
win->CocoaDelegate_windowDidBecomeMain();
|
|
}
|
|
|
|
- (void)windowDidResignMain: (NSNotification *)notification
|
|
{
|
|
wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
|
|
wxASSERT(win==m_wxCocoaInterface);
|
|
wxCHECK_RET(win,wxT("notificationDidResignMain received but no wxWindow exists"));
|
|
win->CocoaDelegate_windowDidResignMain();
|
|
}
|
|
|
|
- (BOOL)windowShouldClose: (id)sender
|
|
{
|
|
wxLogTrace(wxTRACE_COCOA,wxT("windowShouldClose"));
|
|
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(sender);
|
|
wxASSERT(tlw==m_wxCocoaInterface);
|
|
if(tlw && !tlw->CocoaDelegate_windowShouldClose())
|
|
{
|
|
wxLogTrace(wxTRACE_COCOA,wxT("Window will not be closed"));
|
|
return NO;
|
|
}
|
|
wxLogTrace(wxTRACE_COCOA,wxT("Window will be closed"));
|
|
return YES;
|
|
}
|
|
|
|
- (void)windowWillClose: (NSNotification *)notification
|
|
{
|
|
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
|
|
WX_IMPLEMENT_GET_OBJC_CLASS(wxNSWindowDelegate,NSObject)
|
|
|
|
// ============================================================================
|
|
// class wxCocoaNSWindow
|
|
// ============================================================================
|
|
|
|
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSWindow)
|
|
|
|
wxCocoaNSWindow::wxCocoaNSWindow(wxTopLevelWindowCocoa *tlw)
|
|
: m_wxTopLevelWindowCocoa(tlw)
|
|
{
|
|
m_cocoaDelegate = [[WX_GET_OBJC_CLASS(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);
|
|
}
|
|
}
|
|
|
|
wxMenuBar* wxCocoaNSWindow::GetAppMenuBar(wxCocoaNSWindow *win)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
// ============================================================================
|
|
// @class WXNSWindow
|
|
// ============================================================================
|
|
@implementation WXNSWindow : NSWindow
|
|
|
|
- (BOOL)canBecomeKeyWindow
|
|
{
|
|
bool canBecome = false;
|
|
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
|
|
if(!tlw || !tlw->Cocoa_canBecomeKeyWindow(canBecome))
|
|
canBecome = [super canBecomeKeyWindow];
|
|
return canBecome;
|
|
}
|
|
|
|
- (BOOL)canBecomeMainWindow
|
|
{
|
|
bool canBecome = false;
|
|
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
|
|
if(!tlw || !tlw->Cocoa_canBecomeMainWindow(canBecome))
|
|
canBecome = [super canBecomeMainWindow];
|
|
return canBecome;
|
|
}
|
|
|
|
@end // implementation WXNSWindow
|
|
WX_IMPLEMENT_GET_OBJC_CLASS(WXNSWindow,NSWindow)
|
|
|
|
// ============================================================================
|
|
// @class WXNSPanel
|
|
// ============================================================================
|
|
@implementation WXNSPanel : NSPanel
|
|
|
|
- (BOOL)canBecomeKeyWindow
|
|
{
|
|
bool canBecome = false;
|
|
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
|
|
if(!tlw || !tlw->Cocoa_canBecomeKeyWindow(canBecome))
|
|
canBecome = [super canBecomeKeyWindow];
|
|
return canBecome;
|
|
}
|
|
|
|
- (BOOL)canBecomeMainWindow
|
|
{
|
|
bool canBecome = false;
|
|
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
|
|
if(!tlw || !tlw->Cocoa_canBecomeMainWindow(canBecome))
|
|
canBecome = [super canBecomeMainWindow];
|
|
return canBecome;
|
|
}
|
|
|
|
@end // implementation WXNSPanel
|
|
WX_IMPLEMENT_GET_OBJC_CLASS(WXNSPanel,NSPanel)
|