///////////////////////////////////////////////////////////////////////////////
-// Name: cocoa/toplevel.mm
+// Name: src/cocoa/toplevel.mm
// Purpose: implements wxTopLevelWindow for Cocoa
-// Author: David Elliott
+// Author: David Elliott
// Modified by:
// Created: 2002/11/27
// RCS-ID: $Id$
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+
+#include "wx/toplevel.h"
+
#ifndef WX_PRECOMP
#include "wx/window.h"
- #include "wx/toplevel.h"
#include "wx/menuitem.h"
#include "wx/frame.h"
#include "wx/log.h"
#include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h"
-#import <AppKit/NSView.h>
-#import <AppKit/NSWindow.h>
+#include "wx/cocoa/objc/NSView.h"
+#include "wx/cocoa/objc/NSWindow.h"
#import <AppKit/NSPanel.h>
+
// ----------------------------------------------------------------------------
// globals
// ----------------------------------------------------------------------------
wxTopLevelWindows.Append(this);
if(!CreateBase(parent,winid,pos,size,style,wxDefaultValidator,name))
- return FALSE;
+ return false;
if ( parent )
parent->AddChild(this);
// Create frame and check and handle default position and size
int realx,
realy;
-
+
// WX has no set default position - the carbon port caps the low
// end at 20, 50. Here we do the same, except instead of setting
// it to 20 and 50, we set it to 100 and 100 if the values are too low
realx = 100;
else
realx = pos.x;
-
+
if (pos.y < 50)
realy = 100;
else
// NOTE: y-origin needs to be flipped.
NSRect cocoaRect = [NSWindow
- contentRectForFrameRect:NSMakeRect(realx,realy,realw,realh)
+ contentRectForFrameRect:NSMakeRect(realx,realy,realw,realh)
styleMask:cocoaStyle];
m_cocoaNSWindow = NULL;
m_cocoaNSView = NULL;
+ // NOTE: We may need to deal with the contentView becoming a wx NSView as well.
+ NSWindow *newWindow;
+ // Create a WXNSPanel or a WXNSWindow depending on what type of window is desired.
if(style & wxFRAME_TOOL_WINDOW)
- SetNSWindow([[NSPanel alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]);
+ newWindow = [[WXNSPanel alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO];
else
- SetNSWindow([[NSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]);
+ newWindow = [[WXNSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO];
+ // Make sure the default content view is a WXNSView
+ [newWindow setContentView: [[WX_GET_OBJC_CLASS(WXNSView) alloc] initWithFrame: [[newWindow contentView] frame]]];
+ // Associate the window and view
+ SetNSWindow(newWindow);
+
// NOTE: SetNSWindow has retained the Cocoa object for this object.
// Because we do not release on close, the following release matches the
// above alloc and thus the retain count will be 1.
if(style & wxSTAY_ON_TOP)
[m_cocoaNSWindow setLevel:NSFloatingWindowLevel];
[m_cocoaNSWindow setTitle:wxNSStringWithWxString(title)];
- return TRUE;
+ return true;
}
wxTopLevelWindowCocoa::~wxTopLevelWindowCocoa()
[cocoaNSWindow retain];
[m_cocoaNSWindow release];
m_cocoaNSWindow = cocoaNSWindow;
+ // NOTE: We are no longer using posing so we won't get events on the
+ // window's view unless it was explicitly created as the wx view class.
if(m_cocoaNSWindow)
SetNSView([m_cocoaNSWindow contentView]);
else
{
DeactivatePendingWindow();
wxLogTrace(wxTRACE_COCOA,wxT("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidBecomeKey"),this);
- wxActivateEvent event(wxEVT_ACTIVATE, TRUE, GetId());
+ wxActivateEvent event(wxEVT_ACTIVATE, true, GetId());
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
}
void wxTopLevelWindowCocoa::CocoaDelegate_windowDidResignKey(void)
{
wxLogTrace(wxTRACE_COCOA,wxT("wxTopLevelWindowCocoa=%p::CocoaDelegate_windowDidResignKey"),this);
- wxActivateEvent event(wxEVT_ACTIVATE, FALSE, GetId());
+ wxActivateEvent event(wxEVT_ACTIVATE, false, GetId());
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
}
bool wxTopLevelWindowCocoa::IsMaximized() const
{
- return false ;
+ return false ;
}
void wxTopLevelWindowCocoa::Iconize(bool iconize)
bool wxTopLevelWindowCocoa::IsIconized() const
{
- return FALSE;
+ return false;
}
void wxTopLevelWindowCocoa::Restore()
// wxTopLevelWindowCocoa misc
// ----------------------------------------------------------------------------
+void wxTopLevelWindowCocoa::SetTitle(const wxString& title)
+{
+ [m_cocoaNSWindow setTitle:wxNSStringWithWxString(title)];
+}
+
+wxString wxTopLevelWindowCocoa::GetTitle() const
+{
+ return wxStringWithNSString([m_cocoaNSWindow title]);
+}
+
bool wxTopLevelWindowCocoa::ShowFullScreen(bool show, long style)
{
- return FALSE;
+ return false;
}
bool wxTopLevelWindowCocoa::IsFullScreen() const
{
- return FALSE;
+ return false;
}
void wxTopLevelWindowCocoa::CocoaSetWxWindowSize(int width, int height)
*y=(int)cocoaRect.origin.y;
wxLogTrace(wxTRACE_COCOA_TopLevelWindow_Size,wxT("wxTopLevelWindow=%p::DoGetPosition = (%d,%d)"),this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y);
}
-