diff --git a/src/macextras/qmacnativetoolbar.h b/src/macextras/qmacnativetoolbar.h index 2cf2899..331a6b1 100644 --- a/src/macextras/qmacnativetoolbar.h +++ b/src/macextras/qmacnativetoolbar.h @@ -109,6 +109,7 @@ public: Q_INVOKABLE QAction *addAction(const QString &text); Q_INVOKABLE QAction *addAction(const QIcon &icon, const QString &text); Q_INVOKABLE QAction *addAction(QAction *action); + Q_INVOKABLE void addAction(QMacToolButton *macToolButton); Q_INVOKABLE void addSeparator(); Q_INVOKABLE QAction *addStandardItem(QMacToolButton::StandardItem standardItem); @@ -116,6 +117,7 @@ public: Q_INVOKABLE QAction *addAllowedAction(const QString &text); Q_INVOKABLE QAction *addAllowedAction(const QIcon &icon, const QString &text); Q_INVOKABLE QAction *addAllowedAction(QAction *action); + Q_INVOKABLE void addAllowedAction(QMacToolButton *macToolButton); Q_INVOKABLE QAction *addAllowedStandardItem(QMacToolButton::StandardItem standardItem); signals: diff --git a/src/macextras/qmacnativetoolbar.mm b/src/macextras/qmacnativetoolbar.mm index 659362b..ece84fb 100644 --- a/src/macextras/qmacnativetoolbar.mm +++ b/src/macextras/qmacnativetoolbar.mm @@ -550,6 +550,11 @@ QAction *QMacNativeToolBar::addAction(QAction *action) return setSelectedItem([d->delegate addAction:action]); } +void QMacNativeToolBar::addAction(QMacToolButton *macToolButton) +{ + [d->delegate addMacToolButton:macToolButton]; +} + void QMacNativeToolBar::addSeparator() { addStandardItem(QMacToolButton::Space); // No Seprator on OS X. @@ -576,6 +581,11 @@ QAction *QMacNativeToolBar::addAllowedAction(QAction *action) return setSelectedItem([d->delegate addAllowedAction:action]); } +void QMacNativeToolBar::addAllowedAction(QMacToolButton *macToolButton) +{ + [d->delegate addAllowedMacToolButton:macToolButton]; +} + QAction *QMacNativeToolBar::addAllowedStandardItem(QMacToolButton::StandardItem standardItem) { return [d->delegate addAllowedStandardItem:standardItem]; diff --git a/src/macextras/qmactoolbardelegate.h b/src/macextras/qmactoolbardelegate.h index ef4d3a2..ddb9ad5 100644 --- a/src/macextras/qmactoolbardelegate.h +++ b/src/macextras/qmactoolbardelegate.h @@ -68,11 +68,13 @@ class QIcon; - (QAction *)addActionWithText:(const QString *)text; - (QAction *)addActionWithText:(const QString *)text icon:(const QIcon *)icon; - (QAction *)addAction:(QAction *)action; +- (void)addMacToolButton:(QMacToolButton *)macToolButton; - (QAction *)addStandardItem:(QMacToolButton::StandardItem)standardItem; - (QAction *)addAllowedActionWithText:(const QString *)text; - (QAction *)addAllowedActionWithText:(const QString *)text icon:(const QIcon *)icon; - (QAction *)addAllowedAction:(QAction *)action; +- (void)addAllowedMacToolButton:(QMacToolButton *)macToolButton; - (QAction *)addAllowedStandardItem:(QMacToolButton::StandardItem)standardItem; - (IBAction)itemClicked:(id)sender; diff --git a/src/macextras/qmactoolbardelegate.mm b/src/macextras/qmactoolbardelegate.mm index 535bc52..5e19fed 100644 --- a/src/macextras/qmactoolbardelegate.mm +++ b/src/macextras/qmactoolbardelegate.mm @@ -131,6 +131,8 @@ QString qt_strippedText(QString s) [toolbarItem setLabel: QtMacExtras::toNSString(qt_strippedText(toolButton->m_action->iconText()))]; [toolbarItem setPaletteLabel:[toolbarItem label]]; [toolbarItem setToolTip: QtMacExtras::toNSString(toolButton->m_action->toolTip())]; + if (toolButton->view()) + [toolbarItem setView: toolButton->view()]; QPixmap icon = toolButton->m_action->icon().pixmap(64, 64); if (icon.isNull() == false) { @@ -168,6 +170,12 @@ QString qt_strippedText(QString s) return action; } +- (void)addMacToolButton:(QMacToolButton *)macToolButton +{ + items.append(macToolButton); + allowedItems.append(macToolButton); +} + - (QAction *)addStandardItem:(QMacToolButton::StandardItem) standardItem { QAction *action = new QAction(0); @@ -202,6 +210,11 @@ QString qt_strippedText(QString s) return action; } +- (void)addAllowedMacToolButton:(QMacToolButton *)macToolButton +{ + allowedItems.append(macToolButton); +} + - (QAction *)addAllowedStandardItem:(QMacToolButton::StandardItem)standardItem { QAction *action = new QAction(0); diff --git a/src/macextras/qmactoolbutton.h b/src/macextras/qmactoolbutton.h index d08263e..53980b9 100644 --- a/src/macextras/qmactoolbutton.h +++ b/src/macextras/qmactoolbutton.h @@ -42,11 +42,19 @@ #ifndef QMACTOOLBUTTON_H #define QMACTOOLBUTTON_H +#include "qmacextrasglobal.h" + #include class QAction; -class QMacToolButton : public QObject +#ifdef __OBJC__ +@class NSView; +#else +typedef struct objc_object NSView; +#endif + +class Q_MACEXTRAS_EXPORT QMacToolButton : public QObject { Q_OBJECT Q_PROPERTY(bool selectable READ selectable WRITE setSelectable) @@ -72,6 +80,7 @@ public: QMacToolButton(); QMacToolButton(QObject *parent); + QMacToolButton(NSView *view, QAction *action); virtual ~QMacToolButton(); bool selectable() const; @@ -79,11 +88,14 @@ public: StandardItem standardItem() const; void setStandardItem(StandardItem standardItem); + + NSView *view(void); signals: void activated(); private: bool m_selectable; StandardItem m_standardItem; + NSView *m_view; public: // (not really public) QAction *m_action; void emitActivated() { emit activated(); } diff --git a/src/macextras/qmactoolbutton.mm b/src/macextras/qmactoolbutton.mm index c1db1c8..eb2bca0 100644 --- a/src/macextras/qmactoolbutton.mm +++ b/src/macextras/qmactoolbutton.mm @@ -47,6 +47,7 @@ QMacToolButton::QMacToolButton() m_standardItem = NoItem; m_selectable = false; m_action = 0; + m_view = 0; } QMacToolButton::QMacToolButton(QObject *parent) @@ -55,6 +56,16 @@ QMacToolButton::QMacToolButton(QObject *parent) m_standardItem = NoItem; m_selectable = false; m_action = 0; + m_view = 0; +} + +QMacToolButton::QMacToolButton(NSView *view, QAction *action) + :QObject(0) +{ + m_standardItem = NoItem; + m_selectable = false; + m_action = action; + m_view = view; } QMacToolButton::~QMacToolButton() @@ -87,3 +98,8 @@ void QMacToolButton::setStandardItem(StandardItem standardItem) { m_standardItem = standardItem; } + +NSView *QMacToolButton::view(void) +{ + return m_view; +}