added the basic methods to YACRreaderMacOSXToolbar, some of them have been implemented succesfully. Tested in YACReader

This commit is contained in:
Luis Ángel San Martín 2014-11-04 00:01:54 +01:00
parent bd0dbd91f1
commit 039378457d
6 changed files with 148 additions and 38 deletions

View File

@ -49,7 +49,7 @@ CONFIG += objective_c
QT += macextras QT += macextras
LIBS += -framework Foundation -framework ApplicationServices LIBS += -framework Foundation -framework ApplicationServices -framework AppKit
OBJECTIVE_SOURCES += $$PWD/../common/pdf_comic.mm OBJECTIVE_SOURCES += $$PWD/../common/pdf_comic.mm
HEADERS += $$PWD/../common/pdf_comic.h HEADERS += $$PWD/../common/pdf_comic.h

View File

@ -33,7 +33,7 @@
#include <QDate> #include <QDate>
#include <QMenuBar> #include <QMenuBar>
/* TODO remove, no longer used
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
class MacToolBarSeparator : public QWidget class MacToolBarSeparator : public QWidget
{ {
@ -66,7 +66,7 @@ public:
painter.fillRect(1,0,1,height(),lG2); painter.fillRect(1,0,1,height(),lG2);
} }
}; };
#endif #endif*/
MainWindowViewer::MainWindowViewer() MainWindowViewer::MainWindowViewer()
:QMainWindow(),fullscreen(false),toolbars(true),alwaysOnTop(false),currentDirectory("."),currentDirectoryImgDest("."),isClient(false) :QMainWindow(),fullscreen(false),toolbars(true),alwaysOnTop(false),currentDirectory("."),currentDirectoryImgDest("."),isClient(false)
@ -414,10 +414,14 @@ void MainWindowViewer::createActions()
void MainWindowViewer::createToolBars() void MainWindowViewer::createToolBars()
{ {
#ifdef Q_OS_MAC
comicToolBar = new YACReaderMacOSXToolbar(this);
#else
comicToolBar = addToolBar(tr("&File")); comicToolBar = addToolBar(tr("&File"));
#endif
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
comicToolBar->setIconSize(QSize(16,16)); //comicToolBar->setIconSize(QSize(16,16));
#else #else
comicToolBar->setIconSize(QSize(18,18)); comicToolBar->setIconSize(QSize(18,18));
comicToolBar->setStyleSheet("QToolBar{border:none;}"); comicToolBar->setStyleSheet("QToolBar{border:none;}");
@ -433,11 +437,9 @@ void MainWindowViewer::createToolBars()
comicToolBar->addAction(saveImageAction); comicToolBar->addAction(saveImageAction);
comicToolBar->addAction(openPreviousComicAction); comicToolBar->addAction(openPreviousComicAction);
comicToolBar->addAction(openNextComicAction); comicToolBar->addAction(openNextComicAction);
#ifdef Q_OS_MAC
comicToolBar->addWidget(new MacToolBarSeparator);
#else
comicToolBar->addSeparator(); comicToolBar->addSeparator();
#endif
comicToolBar->addAction(prevAction); comicToolBar->addAction(prevAction);
comicToolBar->addAction(nextAction); comicToolBar->addAction(nextAction);
comicToolBar->addAction(goToPageAction); comicToolBar->addAction(goToPageAction);
@ -449,11 +451,8 @@ void MainWindowViewer::createToolBars()
// alwaysOnTopAction->setEnabled(false); // alwaysOnTopAction->setEnabled(false);
//#endif //#endif
#ifdef Q_OS_MAC
comicToolBar->addWidget(new MacToolBarSeparator);
#else
comicToolBar->addSeparator(); comicToolBar->addSeparator();
#endif
//QWidget * widget = new QWidget(); //QWidget * widget = new QWidget();
@ -498,32 +497,24 @@ void MainWindowViewer::createToolBars()
comicToolBar->addAction(rightRotationAction); comicToolBar->addAction(rightRotationAction);
comicToolBar->addAction(doublePageAction); comicToolBar->addAction(doublePageAction);
#ifdef Q_OS_MAC
comicToolBar->addWidget(new MacToolBarSeparator);
#else
comicToolBar->addSeparator(); comicToolBar->addSeparator();
#endif
comicToolBar->addAction(showMagnifyingGlassAction); comicToolBar->addAction(showMagnifyingGlassAction);
#ifdef Q_OS_MAC
comicToolBar->addWidget(new MacToolBarSeparator);
#else
comicToolBar->addSeparator(); comicToolBar->addSeparator();
#endif
comicToolBar->addAction(setBookmarkAction); comicToolBar->addAction(setBookmarkAction);
comicToolBar->addAction(showBookmarksAction); comicToolBar->addAction(showBookmarksAction);
#ifdef Q_OS_MAC
comicToolBar->addWidget(new MacToolBarSeparator);
#else
comicToolBar->addSeparator(); comicToolBar->addSeparator();
#endif
comicToolBar->addAction(showDictionaryAction); comicToolBar->addAction(showDictionaryAction);
comicToolBar->addAction(showFlowAction); comicToolBar->addAction(showFlowAction);
comicToolBar->addAction(showInfoAction); comicToolBar->addAction(showInfoAction);
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
comicToolBar->addWidget(new MacToolBarSeparator); comicToolBar->addStretch();
#else #else
comicToolBar->addWidget(new QToolBarStretch()); comicToolBar->addWidget(new QToolBarStretch());
#endif #endif
@ -534,8 +525,9 @@ void MainWindowViewer::createToolBars()
comicToolBar->addAction(helpAboutAction); comicToolBar->addAction(helpAboutAction);
//comicToolBar->addAction(closeAction); //comicToolBar->addAction(closeAction);
#ifndef Q_OS_MAC
comicToolBar->setMovable(false); comicToolBar->setMovable(false);
#endif
viewer->addAction(openAction); viewer->addAction(openAction);
viewer->addAction(openFolderAction); viewer->addAction(openFolderAction);
@ -598,6 +590,11 @@ void MainWindowViewer::createToolBars()
menuBar->addMenu(fileMenu); menuBar->addMenu(fileMenu);
//menu->addMenu(toolbarMenu); //menu->addMenu(toolbarMenu);
//attach toolbar
comicToolBar->attachToWindow(this->windowHandle());
#endif #endif
} }
@ -891,8 +888,9 @@ void MainWindowViewer::toggleToolBars()
toolbars?hideToolBars():showToolBars(); toolbars?hideToolBars():showToolBars();
Configuration::getConfiguration().setShowToolbars(toolbars); Configuration::getConfiguration().setShowToolbars(toolbars);
#ifndef Q_OS_MAC
comicToolBar->setMovable(false); comicToolBar->setMovable(false);
#endif
} }
void MainWindowViewer::hideToolBars() void MainWindowViewer::hideToolBars()
{ {

View File

@ -9,6 +9,10 @@
#include <QCloseEvent> #include <QCloseEvent>
#include <QSettings> #include <QSettings>
#ifdef Q_OS_MAC
#include "yacreader_macosx_toolbar.h"
#endif
#include "comic_db.h" #include "comic_db.h"
class Comic; class Comic;
@ -77,7 +81,11 @@ class EditShortcutsDialog;
EditShortcutsDialog * editShortcutsDialog; EditShortcutsDialog * editShortcutsDialog;
//! ToolBars //! ToolBars
#ifdef Q_OS_MAC
YACReaderMacOSXToolbar * comicToolBar;
#else
QToolBar * comicToolBar; QToolBar * comicToolBar;
#endif
//! Actions //! Actions
QAction *openAction; QAction *openAction;

View File

@ -58,7 +58,7 @@ macx{
#} #}
#QT += macextras #QT += macextras
LIBS += -framework Foundation -framework ApplicationServices LIBS += -framework Foundation -framework ApplicationServices -framework AppKit
OBJECTIVE_SOURCES += $$PWD/../common/pdf_comic.mm OBJECTIVE_SOURCES += $$PWD/../common/pdf_comic.mm
HEADERS += $$PWD/../common/pdf_comic.h HEADERS += $$PWD/../common/pdf_comic.h

View File

@ -2,17 +2,29 @@
#define YACREADER_MACOSX_TOOLBAR_H #define YACREADER_MACOSX_TOOLBAR_H
#include <QMacToolBar> #include <QMacToolBar>
#include <QtWidgets>
class YACReaderMacOSXToolbar : public QMacToolBar class YACReaderMacOSXToolbar : public QMacToolBar
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit YACReaderMacOSXToolbar(QWidget *window, QObject *parent = 0); explicit YACReaderMacOSXToolbar(QObject *parent = 0);
void addAction(QAction * action);
void addDropDownItem(const QList<QAction*> & 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: signals:
public slots: public slots:
protected:
NSToolbar * nativeToolBar;
}; };
#endif // YACREADER_MACOSX_TOOLBAR_H #endif // YACREADER_MACOSX_TOOLBAR_H

View File

@ -1,20 +1,39 @@
#include "yacreader_macosx_toolbar.h" #include "yacreader_macosx_toolbar.h"
#include <QWidget> #include <QWidget>
#include <QMacNativeWidget>
#import <AppKit/AppKit.h> #import <AppKit/AppKit.h>
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QWidget * window, QObject *parent) : #import <Cocoa/Cocoa.h>
@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) QMacToolBar(parent)
{ {
//setup native toolbar //setup native toolbar
NSToolbar * nativeToolBar= nativeToolbar(); nativeToolBar= nativeToolbar();
[nativeToolBar setSizeMode:NSToolbarSizeModeSmall]; [nativeToolBar setSizeMode:NSToolbarSizeModeSmall];
[nativeToolBar setDisplayMode:NSToolbarDisplayModeIconOnly]; [nativeToolBar setDisplayMode:NSToolbarDisplayModeIconOnly];
//button testing //button testing
QPixmap p(100,100); /*QPixmap p(100,100);
QIcon icon(p); QIcon icon(p);
QMacToolBarItem *toolBarItem = addItem(icon,"hola"); QMacToolBarItem *toolBarItem = addItem(icon,"hola");
@ -22,10 +41,83 @@ YACReaderMacOSXToolbar::YACReaderMacOSXToolbar(QWidget * window, QObject *parent
[nativeItem setMaxSize:NSMakeSize(10,50)]; [nativeItem setMaxSize:NSMakeSize(10,50)];
[nativeItem setMinSize:NSMakeSize(10,50)]; [nativeItem setMinSize:NSMakeSize(10,50)];*/
//toolBarItem->setStandardItem(QMacToolBarItem::FlexibleSpace); //toolBarItem->setStandardItem(QMacToolBarItem::FlexibleSpace);
//connect(toolButton, SIGNAL(activated()), this, SLOT(fooClicked())) //connect(toolButton, SIGNAL(activated()), this, SLOT(fooClicked()))
window->window()->winId(); // create window->windowhandle() //window->window()->winId(); // create window->windowhandle()
attachToWindow(window->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<QAction *> &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<NSView *>(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];
} }