Qt 4.8
qmaccocoaviewcontainer_mac.mm
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #import <Cocoa/Cocoa.h>
43 #include <private/qwidget_p.h>
45 #include <private/qt_mac_p.h>
46 
92 
94 {
96 public:
97  NSView *nsview;
98 #ifndef QT_MAC_USE_COCOA
100 #endif
103 };
104 
106  : nsview(0)
107 #ifndef QT_MAC_USE_COCOA
108  , wrapperView(0)
109 #endif
110 {
111 }
112 
114 {
115  [nsview release];
116 #ifndef QT_MAC_USE_COCOA
117  if (wrapperView)
118  CFRelease(wrapperView);
119 #endif
120 }
121 
133  : QWidget(*new QMacCocoaViewContainerPrivate, parent, 0)
134 {
135  if (cocoaViewToWrap)
136  setCocoaView(cocoaViewToWrap);
137 
138  // QMacCocoaViewContainer requires a native window handle.
140 }
141 
146 {
147 }
148 
155 {
157  return [[d->nsview retain] autorelease];
158 }
159 
164 void QMacCocoaViewContainer::setCocoaView(void *cocoaViewToWrap)
165 {
168  NSView *view = static_cast<NSView *>(cocoaViewToWrap);
169  NSView *oldView = d->nsview;
170  destroy(true, true);
171  [view retain];
172  d->nsview = view;
173 #ifndef QT_MAC_USE_COCOA
175  qWarning("QMacCocoaViewContainer::setCocoaView: You cannot use this class with Carbon on versions of Mac OS X less than 10.5.");
176  return;
177  }
178 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
179  if (d->wrapperView)
180  CFRelease(d->wrapperView);
181  HICocoaViewCreate(d->nsview, 0, &d->wrapperView);
182  create(WId(d->wrapperView), false, true);
183 #endif
184 #else
185  create(WId(d->nsview), false, true);
186 #endif
187  [oldView release];
188 }
189 
double d
Definition: qnumeric_p.h:62
virtual ~QMacCocoaViewContainer()
Destroy the QMacCocoaViewContainer and release the wrapped view.
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
The QWidget class is the base class of all user interface objects.
Definition: qwidget.h:150
#define Q_D(Class)
Definition: qglobal.h:2482
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
void destroy(bool destroyWindow=true, bool destroySubWindows=true)
Frees up window system resources.
struct OpaqueControlRef * HIViewRef
Q_CORE_EXPORT void qWarning(const char *,...)
void create(WId=0, bool initializeWindow=true, bool destroyOldWindow=true)
Creates a new widget window if window is 0, otherwise sets the widget&#39;s window to window...
Definition: qwidget.cpp:1454
QMacCocoaViewContainer(void *cocoaViewToWrap, QWidget *parent=0)
Create a new QMacCocoaViewContainer using the NSView pointer in cocoaViewToWrap with parent...
void * cocoaView() const
Returns the NSView that has been set on this container.
#define Q_DECLARE_PUBLIC(Class)
Definition: qglobal.h:2477
WId
Platform dependent window identifier.
void setAttribute(Qt::WidgetAttribute, bool on=true)
Sets the attribute attribute on this widget if on is true; otherwise clears the attribute.
Definition: qwidget.cpp:11087
QObject * parent
Definition: qobject.h:92
static const MacVersion MacintoshVersion
the version of the Macintosh operating system on which the application is run (Mac only)...
Definition: qglobal.h:1646
void setCocoaView(void *cocoaViewToWrap)
Sets the NSView to contain to be cocoaViewToWrap and retains it.