qt5base-lts/tests/manual/cocoa/qt_on_cocoa/main.mm
Jani Heikkinen cb95fff1c7 Fixed license headers
Change-Id: Ibebe1318d1c2de97601aa07269705c87737083ee
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
2015-02-17 18:46:09 +00:00

206 lines
6.5 KiB
Plaintext

/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** As a special exception, The Qt Company gives you certain additional
** rights. These rights are described in The Qt Company LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QtGui>
#include <QtDeclarative>
#include <QtWidgets/QtWidgets>
#include <private/qwidgetwindow_p.h>
#include <QtGui/qpa/qplatformnativeinterface.h>
#include <QtGui/QPixmap>
#include "window.h"
#include <Cocoa/Cocoa.h>
@interface FilledView : NSView
{
}
@end
@implementation FilledView
- (void)drawRect:(NSRect)dirtyRect {
// set any NSColor for filling, say white:
[[NSColor redColor] setFill];
NSRectFill(dirtyRect);
}
@end
@interface QtMacToolbarDelegate : NSObject <NSToolbarDelegate>
{
@public
NSToolbar *toolbar;
}
- (id)init;
- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted;
- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)tb;
- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar;
- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar;
@end
@implementation QtMacToolbarDelegate
- (id)init
{
self = [super init];
if (self) {
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)tb
{
Q_UNUSED(tb);
NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];
// [array addObject : NSToolbarPrintItemIdentifier];
// [array addObject : NSToolbarShowColorsItemIdentifier];
[array addObject : @"filledView"];
return array;
}
- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)tb
{
Q_UNUSED(tb);
NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];
// [array addObject : NSToolbarPrintItemIdentifier];
// [array addObject : NSToolbarShowColorsItemIdentifier];
[array addObject : @"filledView"];
return array;
}
- (NSArray *)toolbarSelectableItemIdentifiers: (NSToolbar *)tb
{
Q_UNUSED(tb);
NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];
return array;
}
- (IBAction)itemClicked:(id)sender
{
}
- (NSToolbarItem *) toolbar: (NSToolbar *)tb itemForItemIdentifier: (NSString *) itemIdentifier willBeInsertedIntoToolbar:(BOOL) willBeInserted
{
Q_UNUSED(tb);
Q_UNUSED(willBeInserted);
//const QString identifier = toQString(itemIdentifier);
//NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease];
//return toolbarItem;
//NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease];
NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease];
FilledView *theView = [[FilledView alloc] init];
[toolbarItem setView : theView];
[toolbarItem setMinSize : NSMakeSize(400, 40)];
[toolbarItem setMaxSize : NSMakeSize(4000, 40)];
return toolbarItem;
}
@end
@interface WindowAndViewAndQtCreator : NSObject {}
- (void)createWindowAndViewAndQt;
@end
@implementation WindowAndViewAndQtCreator
- (void)createWindowAndViewAndQt {
// Create the window
NSRect frame = NSMakeRect(500, 500, 500, 500);
NSWindow* window = [[NSWindow alloc] initWithContentRect:frame
styleMask:NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask
backing:NSBackingStoreBuffered
defer:NO];
NSString *title = @"This the NSWindow window";
[window setTitle:title];
[window setBackgroundColor:[NSColor blueColor]];
// Create a tool bar, set Qt delegate
NSToolbar *toolbar = [[NSToolbar alloc] initWithIdentifier : @"foobartoolbar"];
QtMacToolbarDelegate *delegate = [[QtMacToolbarDelegate alloc] init];
[toolbar setDelegate : delegate];
[window setToolbar : toolbar];
// Create the QWindow, don't show it.
Window *qtWindow = new Window();
qtWindow->create();
//QSGView *qtWindow = new QSGView();
//qtWindow->setSource(QUrl::fromLocalFile("/Users/msorvig/code/qt5/qtdeclarative/examples/declarative/samegame/samegame.qml"));
// qtWindow->setWindowFlags(Qt::WindowType(13)); // 13: NativeEmbeddedWindow
// Get the nsview from the QWindow, set it as the content view
// on the NSWindow created above.
QPlatformNativeInterface *platformNativeInterface = QGuiApplication::platformNativeInterface();
NSView *qtView = (NSView *)platformNativeInterface->nativeResourceForWindow("nsview", qtWindow);
[window setContentView:qtView];
[window makeKeyAndOrderFront:NSApp];
}
@end
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
// fake NSApplicationMain() implementation follows:
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[NSApplication sharedApplication];
// schedule call to create the UI.
WindowAndViewAndQtCreator *windowAndViewAndQtCreator= [WindowAndViewAndQtCreator alloc];
[NSTimer scheduledTimerWithTimeInterval:0 target:windowAndViewAndQtCreator selector:@selector(createWindowAndViewAndQt) userInfo:nil repeats:NO];
[(NSApplication *)NSApp run];
[NSApp release];
[pool release];
exit(0);
return 0;
}