From c3fae06012fbbb364cec3296c8bbe5a51888fb28 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 28 Oct 2015 05:41:54 +0100 Subject: [PATCH] Tomahawk::setupToolBarMac() provides a native NSToolBar on OSX. --- src/tomahawk/mac/TomahawkApp_Mac.h | 3 ++ src/tomahawk/mac/TomahawkApp_Mac.mm | 81 +++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/src/tomahawk/mac/TomahawkApp_Mac.h b/src/tomahawk/mac/TomahawkApp_Mac.h index 5de03cc04..ab0854013 100644 --- a/src/tomahawk/mac/TomahawkApp_Mac.h +++ b/src/tomahawk/mac/TomahawkApp_Mac.h @@ -24,6 +24,7 @@ class QString; class QObject; +class TomahawkWindow; namespace Tomahawk { @@ -49,6 +50,8 @@ void checkForUpdates(); void toggleFullscreen(); void enableFullscreen( QObject* notifier ); +void setupToolBarMac( TomahawkWindow* parent ); + }; #endif diff --git a/src/tomahawk/mac/TomahawkApp_Mac.mm b/src/tomahawk/mac/TomahawkApp_Mac.mm index 727d114a7..3715da165 100644 --- a/src/tomahawk/mac/TomahawkApp_Mac.mm +++ b/src/tomahawk/mac/TomahawkApp_Mac.mm @@ -23,6 +23,8 @@ #include "config.h" #include "TomahawkWindow.h" #include "audio/AudioEngine.h" +#include "ViewManager.h" +#include "utils/ImageRegistry.h" #include "utils/Logger.h" #import @@ -34,6 +36,7 @@ #include #include #include +#include #include @interface MacApplication :NSApplication { @@ -311,3 +314,81 @@ void Tomahawk::enableFullscreen( QObject* receiver ) } } } + + +@interface MacSearchField : NSSearchField +{ +@public + TomahawkWindow* parent; + NSString* itemIdentifier; +} +@end + +@implementation MacSearchField + +- (void)dealloc +{ + [super dealloc]; +} + +- (NSString *)itemIdentifier +{ + return self->itemIdentifier; +} + +- (void)textDidChange:(NSNotification *)obj +{ +/* NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + NSString* nsText = [self stringValue]; + QString result = QString::fromNSString( nsText ); + [pool release]; + [super textDidChange: obj];*/ +} + +- (void)textDidEndEditing:(NSNotification *)obj +{ + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + NSString* nsText = [self stringValue]; + QString result = QString::fromNSString( nsText ); + emit parent->searchEdited( result ); + [self setStringValue:@""]; + [pool release]; + [super textDidEndEditing: obj]; +} + +@end + + +void +Tomahawk::setupToolBarMac( TomahawkWindow* parent ) +{ + QMacToolBar* toolbar = new QMacToolBar( parent ); + [toolbar->nativeToolbar() setDisplayMode: NSToolbarDisplayModeIconOnly]; + [toolbar->nativeToolbar() setSizeMode: NSToolbarSizeModeSmall]; + + QMacToolBarItem* backItem = toolbar->addItem( ImageRegistry::instance()->pixmap( RESPATH "images/back.svg", QSize( 32, 32 ) ), QString( "Back" ) ); + QMacToolBarItem* forwardItem = toolbar->addItem( ImageRegistry::instance()->pixmap( RESPATH "images/forward.svg", QSize( 32, 32 ) ), QString( "Forward" ) ); + + QObject::connect( backItem, SIGNAL( activated() ), ViewManager::instance(), SLOT( historyBack() ) ); + QObject::connect( forwardItem, SIGNAL( activated() ), ViewManager::instance(), SLOT( historyForward() ) ); + + QMacToolBarItem* spacerItem = toolbar->addItem( QIcon(), QString() ); + spacerItem->setStandardItem( QMacToolBarItem::FlexibleSpace ); + + QMacToolBarItem* searchItem = toolbar->addItem( QIcon(), QString() ); + MacSearchField* searchField = [[MacSearchField alloc] init]; + searchField->itemIdentifier = [searchItem->nativeToolBarItem() itemIdentifier]; + searchField->parent = parent; + [searchItem->nativeToolBarItem() setView: searchField]; + + QMacToolBarItem* spacerRightItem = toolbar->addItem( QIcon(), QString() ); + spacerRightItem->setStandardItem( QMacToolBarItem::FlexibleSpace ); + + parent->window()->winId(); // create window->windowhandle() + toolbar->attachToWindow( parent->window()->windowHandle() ); + + NSView *nsview = (NSView *)parent->window()->winId(); + NSWindow *nswindow = [nsview window]; + if ([nswindow respondsToSelector:@selector(setTitleVisibility:)]) + nswindow.titleVisibility = NSWindowTitleHidden; +}