/*
 * Copyright (c) 2017, Jonathan Schleifer <js@heap.zone>
 *
 * https://heap.zone/git/objqt.git
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice is present in all copies.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#import "QtAction.h"
#import "QtWidget.h"
#import "OFString+QString.h"

using ObjQt::toOF;
using ObjQt::toQt;

@implementation QtAction
- (instancetype)initWithQObject: (QObject *)qObject
{
	OF_INVALID_INIT_METHOD
}

- (instancetype)initWithQAction: (QAction *)qAction
{
	return [super initWithQObject: qAction];
}

- (QAction *)qAction
{
	return qobject_cast<QAction *>(_qObject);
}

- (bool)autoRepeat
{
	return toQt(self)->autoRepeat();
}

- (void)setAutoRepeat: (bool)autoRepeat
{
	toQt(self)->setAutoRepeat(autoRepeat);
}

- (bool)isCheckable
{
	return toQt(self)->isCheckable();
}

- (void)setCheckable: (bool)checkable
{
	toQt(self)->setCheckable(checkable);
}

- (bool)isChecked
{
	return toQt(self)->isChecked();
}

- (void)setChecked: (bool)checked
{
	toQt(self)->setChecked(checked);
}

- (bool)isEnabled
{
	return toQt(self)->isEnabled();
}

- (void)setEnabled: (bool)enabled
{
	toQt(self)->setEnabled(enabled);
}

- (QFont)font
{
	return toQt(self)->font();
}

- (void)setFont: (QFont)font
{
	toQt(self)->setFont(font);
}

- (QIcon)icon
{
	return toQt(self)->icon();
}

- (void)setIcon: (QIcon)icon
{
	toQt(self)->setIcon(icon);
}

- (OFString *)iconText
{
	return toOF(toQt(self)->iconText());
}

- (void)setIconText: (OFString *)iconText
{
	toQt(self)->setIconText(toQt(iconText));
}

- (bool)isIconVisibleInMenu
{
	return toQt(self)->isIconVisibleInMenu();
}

- (void)setIconVisibleInMenu: (bool)iconVisibleInMenu
{
	toQt(self)->setIconVisibleInMenu(iconVisibleInMenu);
}

- (QAction::MenuRole)menuRole
{
	return toQt(self)->menuRole();
}

- (void)setMenuRole: (QAction::MenuRole)menuRole
{
	toQt(self)->setMenuRole(menuRole);
}

- (QAction::Priority)priority
{
	return toQt(self)->priority();
}

- (void)setPriority: (QAction::Priority)priority
{
	toQt(self)->setPriority(priority);
}

- (QKeySequence)shortcut
{
	return toQt(self)->shortcut();
}

- (void)setShortcut: (QKeySequence)shortcut
{
	toQt(self)->setShortcut(shortcut);
}

- (Qt::ShortcutContext)shortcutContext
{
	return toQt(self)->shortcutContext();
}

- (void)setShortcutContext: (Qt::ShortcutContext)shortcutContext
{
	toQt(self)->setShortcutContext(shortcutContext);
}

- (OFString *)statusTip
{
	return toOF(toQt(self)->statusTip());
}

- (void)setStatusTip: (OFString *)statusTip
{
	toQt(self)->setStatusTip(toQt(statusTip));
}

- (OFString *)text
{
	return toOF(toQt(self)->text());
}

- (void)setText: (OFString *)text
{
	toQt(self)->setText(toQt(text));
}

- (OFString *)toolTip
{
	return toOF(toQt(self)->toolTip());
}

- (void)setToolTip: (OFString *)toolTip
{
	toQt(self)->setToolTip(toQt(toolTip));
}

- (bool)isVisible
{
	return toQt(self)->isVisible();
}

- (void)setVisible: (bool)visible
{
	toQt(self)->setVisible(visible);
}

- (OFString *)whatsThis
{
	return toOF(toQt(self)->whatsThis());
}

- (void)setWhatsThis: (OFString *)whatsThis
{
	toQt(self)->setWhatsThis(toQt(whatsThis));
}

- (QActionGroup *)actionGroup
{
	return toQt(self)->actionGroup();
}

- (void)activate: (QAction::ActionEvent)event
{
	toQt(self)->activate(event);
}

- (QList<QGraphicsWidget *>)associatedGraphicsWidgets
{
	return toQt(self)->associatedGraphicsWidgets();
}

- (OFArray OF_GENERIC(QtWidget *) *)associatedWidgets
{
	const QList<QWidget *> &widgets = toQt(self)->associatedWidgets();
	OFMutableArray *ret =
	    [OFMutableArray arrayWithCapacity: widgets.count()];
	void *pool = objc_autoreleasePoolPush();

	for (QWidget *widget: widgets)
		[ret addObject: toOF(widget)];

	[ret makeImmutable];

	objc_autoreleasePoolPop(pool);

	return ret;
}

- (QVariant)data
{
	return toQt(self)->data();
}

- (bool)isSeparator
{
	return toQt(self)->isSeparator();
}

- (QMenu *)menu
{
	return toQt(self)->menu();
}

- (QtWidget *)parentWidget
{
	return toOF(toQt(self)->parentWidget());
}

- (void)setActionGroup: (QActionGroup *)group
{
	toQt(self)->setActionGroup(group);
}

- (void)setData: (const QVariant &)userData
{
	toQt(self)->setData(userData);
}

- (void)setMenu: (QMenu *)menu
{
	toQt(self)->setMenu(menu);
}

- (void)setSeparator: (bool)isSeparator
{
	toQt(self)->setSeparator(isSeparator);
}

- (void)setShortcuts: (const QList<QKeySequence> &)shortcuts
{
	toQt(self)->setShortcuts(shortcuts);
}

- (void)setShortcutsWithStandardKey: (QKeySequence::StandardKey)key
{
	toQt(self)->setShortcuts(key);
}

- (QList<QKeySequence>)shortcuts
{
	return toQt(self)->shortcuts();
}

- (bool)showStatusText: (QtWidget *)widget
{
	return toQt(self)->showStatusText(toQt(widget));
}
@end
