From 38b98888a93fb6f2399d8fe4c895a4b6b5061572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Tue, 4 Nov 2014 09:04:03 -0800 Subject: [PATCH] added enabled/disabled items to the new toolbar for macosx --- custom_widgets/yacreader_macosx_toolbar.h | 3 + custom_widgets/yacreader_macosx_toolbar.mm | 122 ++++++++++++++++++++- 2 files changed, 122 insertions(+), 3 deletions(-) diff --git a/custom_widgets/yacreader_macosx_toolbar.h b/custom_widgets/yacreader_macosx_toolbar.h index 5b9c5da4..2fdbc667 100644 --- a/custom_widgets/yacreader_macosx_toolbar.h +++ b/custom_widgets/yacreader_macosx_toolbar.h @@ -17,6 +17,7 @@ public: void addWidget(QWidget * widget); void show(); void hide(); + QMap actions; signals: @@ -24,6 +25,8 @@ public slots: protected: NSToolbar * nativeToolBar; + void *delegate; + }; diff --git a/custom_widgets/yacreader_macosx_toolbar.mm b/custom_widgets/yacreader_macosx_toolbar.mm index 128dbfad..337c42b7 100644 --- a/custom_widgets/yacreader_macosx_toolbar.mm +++ b/custom_widgets/yacreader_macosx_toolbar.mm @@ -2,12 +2,16 @@ #include #include +#include + +#include #import #import - #import +//---------------------------- + @interface CustomSeparator : NSView @end @@ -23,15 +27,121 @@ @end +//---------------------------- +@interface MyToolbarDelegate : NSObject +{ +@public + YACReaderMacOSXToolbar * mytoolbar; +} -YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QObject *parent) : - QMacToolBar(parent) +- (NSToolbarItem *) toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted; +- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar; +- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar; +//- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar; +- (IBAction)itemClicked:(id)sender; +@end + + +@implementation MyToolbarDelegate + +- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar +{ + Q_UNUSED(toolbar); + + NSMutableArray *array = [[NSMutableArray alloc] init]; + + QList items = mytoolbar->items(); + foreach (const QMacToolBarItem * item, items) { + [array addObject : item->nativeToolBarItem().itemIdentifier]; + } + return array; + //return toolbarPrivate->getItemIdentifiers(toolbarPrivate->items, false); +} + +- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar +{ + Q_UNUSED(toolbar); + + NSMutableArray *array = [[NSMutableArray alloc] init]; + + QList items = mytoolbar->items(); + foreach (const QMacToolBarItem * item, items) { + [array addObject : item->nativeToolBarItem().itemIdentifier]; + } + return array; + //return toolbarPrivate->getItemIdentifiers(toolbarPrivate->allowedItems, false); +} +/* +- (NSArray *)toolbarSelectableItemIdentifiers: (NSToolbar *)toolbar +{ + Q_UNUSED(toolbar); + + NSMutableArray *array = [[NSMutableArray alloc] init]; + + QList items = mytoolbar->items(); + foreach (const QMacToolBarItem * item, items) { + [array addObject : item->nativeToolBarItem().itemIdentifier]; + } + return array; + //NSMutableArray *array = toolbarPrivate->getItemIdentifiers(toolbarPrivate->items, true); + //[array addObjectsFromArray:toolbarPrivate->getItemIdentifiers(toolbarPrivate->allowedItems, true)]; + //return array; +}*/ + +- (IBAction)itemClicked:(id)sender +{ + NSToolbarItem *item = reinterpret_cast(sender); + //toolbarPrivate->itemClicked(item); +} + +- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdentifier willBeInsertedIntoToolbar:(BOOL) willBeInserted +{ + Q_UNUSED(toolbar); + Q_UNUSED(willBeInserted); + QList items = mytoolbar->items(); + + int i = [itemIdentifier intValue]; + + foreach (const QMacToolBarItem * item, items) { + NSToolbarItem *toolbarItem = item->nativeToolBarItem(); + if([toolbarItem.itemIdentifier isEqual:itemIdentifier]) + { + + [toolbarItem setTarget:self]; + [toolbarItem setAction:@selector(itemClicked:)]; + + return toolbarItem; + } + } + return nil; +} + +- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem +{ + int i = -1; + + QString identifier = QString::fromNSString(theItem.itemIdentifier); + + if(mytoolbar->actions.contains(identifier)) + { + return mytoolbar->actions.value(identifier)->isEnabled(); + } + else return NO; +} +@end + +//---------------------------- + +YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QObject *parent) { //setup native toolbar nativeToolBar= nativeToolbar(); [nativeToolBar setSizeMode:NSToolbarSizeModeSmall]; [nativeToolBar setDisplayMode:NSToolbarDisplayModeIconOnly]; + delegate = [[MyToolbarDelegate alloc] init]; + ((MyToolbarDelegate *)delegate)->mytoolbar = this; + [nativeToolBar setDelegate:(MyToolbarDelegate *)delegate]; //button testing /*QPixmap p(100,100); @@ -56,6 +166,12 @@ void YACReaderMacOSXToolbar::addAction(QAction *action) connect(toolBarItem,SIGNAL(activated()),action, SIGNAL(triggered())); //TODO add support for enable/disable toolbaritems + NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); + //[nativeItem setTarget:[[MyToolbarDelegate alloc] init]]; + + [nativeToolBar validateVisibleItems]; + + actions.insert(QString::fromNSString(nativeItem.itemIdentifier),action); } void YACReaderMacOSXToolbar::addDropDownItem(const QList &actions, const QAction *defaultAction)