diff --git a/YACReader/YACReader.pri b/YACReader/YACReader.pri index 7145728c..44f458b1 100644 --- a/YACReader/YACReader.pri +++ b/YACReader/YACReader.pri @@ -49,7 +49,7 @@ CONFIG += objective_c QT += macextras -LIBS += -framework Foundation -framework ApplicationServices +LIBS += -framework Foundation -framework ApplicationServices -framework AppKit OBJECTIVE_SOURCES += $$PWD/../common/pdf_comic.mm HEADERS += $$PWD/../common/pdf_comic.h diff --git a/YACReader/main_window_viewer.cpp b/YACReader/main_window_viewer.cpp index 43ae0987..fa979022 100644 --- a/YACReader/main_window_viewer.cpp +++ b/YACReader/main_window_viewer.cpp @@ -33,7 +33,7 @@ #include #include - +/* TODO remove, no longer used #ifdef Q_OS_MAC class MacToolBarSeparator : public QWidget { @@ -66,7 +66,7 @@ public: painter.fillRect(1,0,1,height(),lG2); } }; -#endif +#endif*/ MainWindowViewer::MainWindowViewer() :QMainWindow(),fullscreen(false),toolbars(true),alwaysOnTop(false),currentDirectory("."),currentDirectoryImgDest("."),isClient(false) @@ -414,10 +414,14 @@ void MainWindowViewer::createActions() void MainWindowViewer::createToolBars() { +#ifdef Q_OS_MAC + comicToolBar = new YACReaderMacOSXToolbar(this); +#else comicToolBar = addToolBar(tr("&File")); +#endif #ifdef Q_OS_MAC - comicToolBar->setIconSize(QSize(16,16)); + //comicToolBar->setIconSize(QSize(16,16)); #else comicToolBar->setIconSize(QSize(18,18)); comicToolBar->setStyleSheet("QToolBar{border:none;}"); @@ -433,11 +437,9 @@ void MainWindowViewer::createToolBars() comicToolBar->addAction(saveImageAction); comicToolBar->addAction(openPreviousComicAction); comicToolBar->addAction(openNextComicAction); -#ifdef Q_OS_MAC - comicToolBar->addWidget(new MacToolBarSeparator); -#else + comicToolBar->addSeparator(); -#endif + comicToolBar->addAction(prevAction); comicToolBar->addAction(nextAction); comicToolBar->addAction(goToPageAction); @@ -449,11 +451,8 @@ void MainWindowViewer::createToolBars() // alwaysOnTopAction->setEnabled(false); //#endif -#ifdef Q_OS_MAC - comicToolBar->addWidget(new MacToolBarSeparator); -#else + comicToolBar->addSeparator(); -#endif //QWidget * widget = new QWidget(); @@ -491,39 +490,31 @@ void MainWindowViewer::createToolBars() //tb2->addAction(); tb2->setPopupMode(QToolButton::MenuButtonPopup); tb2->setDefaultAction(adjustWidthAction); - comicToolBar->addWidget(tb2); + comicToolBar->addWidget(tb2); comicToolBar->addAction(adjustHeightAction); comicToolBar->addAction(adjustToFullSizeAction); comicToolBar->addAction(leftRotationAction); comicToolBar->addAction(rightRotationAction); comicToolBar->addAction(doublePageAction); -#ifdef Q_OS_MAC - comicToolBar->addWidget(new MacToolBarSeparator); -#else - comicToolBar->addSeparator(); -#endif + comicToolBar->addSeparator(); + comicToolBar->addAction(showMagnifyingGlassAction); -#ifdef Q_OS_MAC - comicToolBar->addWidget(new MacToolBarSeparator); -#else + comicToolBar->addSeparator(); -#endif + comicToolBar->addAction(setBookmarkAction); comicToolBar->addAction(showBookmarksAction); -#ifdef Q_OS_MAC - comicToolBar->addWidget(new MacToolBarSeparator); -#else comicToolBar->addSeparator(); -#endif + comicToolBar->addAction(showDictionaryAction); comicToolBar->addAction(showFlowAction); comicToolBar->addAction(showInfoAction); #ifdef Q_OS_MAC - comicToolBar->addWidget(new MacToolBarSeparator); + comicToolBar->addStretch(); #else comicToolBar->addWidget(new QToolBarStretch()); #endif @@ -534,8 +525,9 @@ void MainWindowViewer::createToolBars() comicToolBar->addAction(helpAboutAction); //comicToolBar->addAction(closeAction); +#ifndef Q_OS_MAC comicToolBar->setMovable(false); - +#endif viewer->addAction(openAction); viewer->addAction(openFolderAction); @@ -598,6 +590,11 @@ void MainWindowViewer::createToolBars() menuBar->addMenu(fileMenu); //menu->addMenu(toolbarMenu); + + //attach toolbar + + comicToolBar->attachToWindow(this->windowHandle()); + #endif } @@ -891,8 +888,9 @@ void MainWindowViewer::toggleToolBars() toolbars?hideToolBars():showToolBars(); Configuration::getConfiguration().setShowToolbars(toolbars); - +#ifndef Q_OS_MAC comicToolBar->setMovable(false); +#endif } void MainWindowViewer::hideToolBars() { diff --git a/YACReader/main_window_viewer.h b/YACReader/main_window_viewer.h index 10ab75ff..348a6886 100644 --- a/YACReader/main_window_viewer.h +++ b/YACReader/main_window_viewer.h @@ -9,6 +9,10 @@ #include #include +#ifdef Q_OS_MAC + #include "yacreader_macosx_toolbar.h" +#endif + #include "comic_db.h" class Comic; @@ -77,7 +81,11 @@ class EditShortcutsDialog; EditShortcutsDialog * editShortcutsDialog; //! ToolBars - QToolBar *comicToolBar; + #ifdef Q_OS_MAC + YACReaderMacOSXToolbar * comicToolBar; +#else + QToolBar * comicToolBar; +#endif //! Actions QAction *openAction; diff --git a/YACReaderLibrary/YACReaderLibrary.pro b/YACReaderLibrary/YACReaderLibrary.pro index 225a6502..f466c462 100644 --- a/YACReaderLibrary/YACReaderLibrary.pro +++ b/YACReaderLibrary/YACReaderLibrary.pro @@ -58,7 +58,7 @@ macx{ #} #QT += macextras -LIBS += -framework Foundation -framework ApplicationServices +LIBS += -framework Foundation -framework ApplicationServices -framework AppKit OBJECTIVE_SOURCES += $$PWD/../common/pdf_comic.mm HEADERS += $$PWD/../common/pdf_comic.h diff --git a/custom_widgets/yacreader_macosx_toolbar.h b/custom_widgets/yacreader_macosx_toolbar.h index a0a54493..5b9c5da4 100644 --- a/custom_widgets/yacreader_macosx_toolbar.h +++ b/custom_widgets/yacreader_macosx_toolbar.h @@ -2,17 +2,29 @@ #define YACREADER_MACOSX_TOOLBAR_H #include +#include class YACReaderMacOSXToolbar : public QMacToolBar { Q_OBJECT public: - explicit YACReaderMacOSXToolbar(QWidget *window, QObject *parent = 0); + explicit YACReaderMacOSXToolbar(QObject *parent = 0); + void addAction(QAction * action); + void addDropDownItem(const QList & actions, const QAction * defaultAction = 0); + void addSpace(int size); //size in points + void addSeparator(); + void addStretch(); + void addWidget(QWidget * widget); + void show(); + void hide(); signals: public slots: +protected: + NSToolbar * nativeToolBar; + }; #endif // YACREADER_MACOSX_TOOLBAR_H diff --git a/custom_widgets/yacreader_macosx_toolbar.mm b/custom_widgets/yacreader_macosx_toolbar.mm index 4369401e..128dbfad 100644 --- a/custom_widgets/yacreader_macosx_toolbar.mm +++ b/custom_widgets/yacreader_macosx_toolbar.mm @@ -1,20 +1,39 @@ #include "yacreader_macosx_toolbar.h" #include +#include #import #import -YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QWidget * window, QObject *parent) : +#import + +@interface CustomSeparator : NSView + +@end + + +@implementation CustomSeparator + +- (void) drawRect:(NSRect)rect { + [[NSColor colorWithDeviceRed:0.5 green:0.5 blue:0.5 alpha:1] setFill]; + NSRectFill(rect); + [super drawRect:rect]; +} + +@end + + +YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QObject *parent) : QMacToolBar(parent) { //setup native toolbar - NSToolbar * nativeToolBar= nativeToolbar(); + nativeToolBar= nativeToolbar(); [nativeToolBar setSizeMode:NSToolbarSizeModeSmall]; [nativeToolBar setDisplayMode:NSToolbarDisplayModeIconOnly]; //button testing - QPixmap p(100,100); + /*QPixmap p(100,100); QIcon icon(p); QMacToolBarItem *toolBarItem = addItem(icon,"hola"); @@ -22,10 +41,83 @@ YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QWidget * window, QObject *parent [nativeItem setMaxSize:NSMakeSize(10,50)]; - [nativeItem setMinSize:NSMakeSize(10,50)]; + [nativeItem setMinSize:NSMakeSize(10,50)];*/ //toolBarItem->setStandardItem(QMacToolBarItem::FlexibleSpace); //connect(toolButton, SIGNAL(activated()), this, SLOT(fooClicked())) - window->window()->winId(); // create window->windowhandle() - attachToWindow(window->window()->windowHandle()); + //window->window()->winId(); // create window->windowhandle() + //attachToWindow(window->window()->windowHandle()); +} + +void YACReaderMacOSXToolbar::addAction(QAction *action) +{ + QMacToolBarItem *toolBarItem = addItem(action->icon(),action->text()); + + connect(toolBarItem,SIGNAL(activated()),action, SIGNAL(triggered())); + + //TODO add support for enable/disable toolbaritems +} + +void YACReaderMacOSXToolbar::addDropDownItem(const QList &actions, const QAction *defaultAction) +{ + foreach(QAction * action, actions) + { + + } +} + +void YACReaderMacOSXToolbar::addSpace(int size) +{ + QMacToolBarItem *toolBarItem = addItem(QIcon(),""); + //NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); + toolBarItem->setStandardItem(QMacToolBarItem::Space); + + NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); + + //TODO this doesn't work + [nativeItem setMaxSize:NSMakeSize(size,24)]; + [nativeItem setMinSize:NSMakeSize(size,24)]; +} + +void YACReaderMacOSXToolbar::addSeparator() +{ + //QMacToolBar::addSeparator(); + + QMacToolBarItem *toolBarItem = addItem(QIcon(),""); + NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); + + static const NSRect buttonFrameRect = { { 0.0, 0.0 }, { 1, 16.0 } }; + CustomSeparator *view = [[CustomSeparator alloc] initWithFrame:buttonFrameRect]; + + [nativeItem setView:view]; +} + +void YACReaderMacOSXToolbar::addStretch() +{ + QMacToolBarItem *toolBarItem = addItem(QIcon(),""); + toolBarItem->setStandardItem(QMacToolBarItem::FlexibleSpace); +} + +void YACReaderMacOSXToolbar::addWidget(QWidget *widget) +{ + /* QMacNativeWidget *nativeWidget = new QMacNativeWidget(); + QVBoxLayout *layout = new QVBoxLayout(); + layout->addWidget(widget); + nativeWidget->setLayout(layout); + + + NSView *nativeWidgetView = reinterpret_cast(nativeWidget->winId()); + QMacToolBarItem *toolBarItem = addItem(QIcon(),""); + NSToolbarItem * nativeItem = toolBarItem->nativeToolBarItem(); + [nativeItem setView:nativeWidgetView];*/ +} + +void YACReaderMacOSXToolbar::show() +{ + [nativeToolBar setVisible:YES]; +} + +void YACReaderMacOSXToolbar::hide() +{ + [nativeToolBar setVisible:NO]; }