aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates2/qquickaction.cpp')
-rw-r--r--src/quicktemplates2/qquickaction.cpp586
1 files changed, 0 insertions, 586 deletions
diff --git a/src/quicktemplates2/qquickaction.cpp b/src/quicktemplates2/qquickaction.cpp
deleted file mode 100644
index e3eb9370..00000000
--- a/src/quicktemplates2/qquickaction.cpp
+++ /dev/null
@@ -1,586 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qquickaction_p.h"
-#include "qquickaction_p_p.h"
-#include "qquickactiongroup_p.h"
-#include "qquickshortcutcontext_p_p.h"
-
-#include <QtGui/qevent.h>
-#if QT_CONFIG(shortcut)
-# include <QtGui/private/qshortcutmap_p.h>
-#endif
-#include <QtGui/private/qguiapplication_p.h>
-#include <QtQuick/private/qquickitem_p.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype Action
- \inherits QtObject
-//! \instantiates QQuickAction
- \inqmlmodule QtQuick.Controls
- \since 5.10
- \ingroup utilities
- \brief Abstract user interface action.
-
- Action represents an abstract user interface action that can have shortcuts
- and can be assigned to menu items and toolbar buttons.
-
- Actions may contain \l text, an \l icon, and a \l shortcut. Actions are normally
- \l triggered by the user via menu items, toolbar buttons, or keyboard shortcuts.
- A \l checkable Action toggles its \l checked state when triggered.
-
- \snippet qtquickcontrols2-action.qml action
-
- Action is commonly used to implement application commands that can be invoked
- via menu items, toolbar buttons, and keyboard shortcuts. Since the user expects
- the commands to be performed in the same way, regardless of the user interface
- used, it is useful to represent the commands as shareable actions.
-
- Action can be also used to separate the logic and the visual presentation. For
- example, when declaring buttons and menu items in \c .ui.qml files, actions can
- be declared elsewhere and assigned from the outside.
-
- \snippet qtquickcontrols2-action.qml toolbutton
-
- When an action is paired with buttons and menu items, the \c enabled, \c checkable,
- and \c checked states are synced automatically. For example, in a word processor,
- if the user clicks a "Bold" toolbar button, the "Bold" menu item will automatically
- be checked. Buttons and menu items get their \c text and \c icon from the action by
- default. An action-specific \c text or \c icon can be overridden for a specific
- control by specifying \c text or \c icon directly on the control.
-
- \snippet qtquickcontrols2-action.qml menuitem
-
- Since Action presents a user interface action, it is intended to be assigned to
- a \l MenuItem, \l ToolButton, or any other control that inherits \l AbstractButton.
- For keyboard shortcuts, the simpler \l Shortcut type is more appropriate.
-
- \sa MenuItem, ToolButton, Shortcut
-*/
-
-/*!
- \qmlsignal QtQuick.Controls::Action::toggled(QtObject source)
-
- This signal is emitted when the action is toggled. The \a source argument
- identifies the object that toggled the action.
-
- For example, if the action is assigned to a menu item and a toolbar button, the
- action is toggled when the control is toggled, the shortcut is activated, or
- when \l toggle() is called directly.
-*/
-
-/*!
- \qmlsignal QtQuick.Controls::Action::triggered(QtObject source)
-
- This signal is emitted when the action is triggered. The \a source argument
- identifies the object that triggered the action.
-
- For example, if the action is assigned to a menu item and a toolbar button, the
- action is triggered when the control is clicked, the shortcut is activated, or
- when \l trigger() is called directly.
-*/
-
-#if QT_CONFIG(shortcut)
-static QKeySequence variantToKeySequence(const QVariant &var)
-{
- if (var.metaType().id() == QMetaType::Int)
- return QKeySequence(static_cast<QKeySequence::StandardKey>(var.toInt()));
- return QKeySequence::fromString(var.toString());
-}
-
-QQuickActionPrivate::ShortcutEntry::ShortcutEntry(QObject *target)
- : m_target(target)
-{
-}
-
-QQuickActionPrivate::ShortcutEntry::~ShortcutEntry()
-{
- ungrab();
-}
-
-QObject *QQuickActionPrivate::ShortcutEntry::target() const
-{
- return m_target;
-}
-
-int QQuickActionPrivate::ShortcutEntry::shortcutId() const
-{
- return m_shortcutId;
-}
-
-void QQuickActionPrivate::ShortcutEntry::grab(const QKeySequence &shortcut, bool enabled)
-{
- if (shortcut.isEmpty())
- return;
-
- Qt::ShortcutContext context = Qt::WindowShortcut; // TODO
- m_shortcutId = QGuiApplicationPrivate::instance()->shortcutMap.addShortcut(m_target, shortcut, context, QQuickShortcutContext::matcher);
-
- if (!enabled)
- QGuiApplicationPrivate::instance()->shortcutMap.setShortcutEnabled(false, m_shortcutId, m_target);
-}
-
-void QQuickActionPrivate::ShortcutEntry::ungrab()
-{
- if (!m_shortcutId)
- return;
-
- QGuiApplicationPrivate::instance()->shortcutMap.removeShortcut(m_shortcutId, m_target);
- m_shortcutId = 0;
-}
-
-void QQuickActionPrivate::ShortcutEntry::setEnabled(bool enabled)
-{
- if (!m_shortcutId)
- return;
-
- QGuiApplicationPrivate::instance()->shortcutMap.setShortcutEnabled(enabled, m_shortcutId, m_target);
-}
-
-QVariant QQuickActionPrivate::shortcut() const
-{
- return vshortcut;
-}
-
-void QQuickActionPrivate::setShortcut(const QVariant &var)
-{
- Q_Q(QQuickAction);
- if (vshortcut == var)
- return;
-
- defaultShortcutEntry->ungrab();
- for (QQuickActionPrivate::ShortcutEntry *entry : qAsConst(shortcutEntries))
- entry->ungrab();
-
- vshortcut = var;
- keySequence = variantToKeySequence(var);
-
- defaultShortcutEntry->grab(keySequence, enabled);
- for (QQuickActionPrivate::ShortcutEntry *entry : qAsConst(shortcutEntries))
- entry->grab(keySequence, enabled);
-
- emit q->shortcutChanged(keySequence);
-}
-#endif // QT_CONFIG(shortcut)
-
-void QQuickActionPrivate::setEnabled(bool enable)
-{
- Q_Q(QQuickAction);
- if (enabled == enable)
- return;
-
- enabled = enable;
-
-#if QT_CONFIG(shortcut)
- defaultShortcutEntry->setEnabled(enable);
- for (QQuickActionPrivate::ShortcutEntry *entry : qAsConst(shortcutEntries))
- entry->setEnabled(enable);
-#endif
-
- emit q->enabledChanged(enable);
-}
-
-bool QQuickActionPrivate::watchItem(QQuickItem *item)
-{
- Q_Q(QQuickAction);
- if (!item)
- return false;
-
- item->installEventFilter(q);
- QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Visibility | QQuickItemPrivate::Destroyed);
- return true;
-}
-
-bool QQuickActionPrivate::unwatchItem(QQuickItem *item)
-{
- Q_Q(QQuickAction);
- if (!item)
- return false;
-
- item->removeEventFilter(q);
- QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Visibility | QQuickItemPrivate::Destroyed);
- return true;
-}
-
-void QQuickActionPrivate::registerItem(QQuickItem *item)
-{
- if (!watchItem(item))
- return;
-
-#if QT_CONFIG(shortcut)
- QQuickActionPrivate::ShortcutEntry *entry = new QQuickActionPrivate::ShortcutEntry(item);
- if (item->isVisible())
- entry->grab(keySequence, enabled);
- shortcutEntries += entry;
-
- updateDefaultShortcutEntry();
-#endif
-}
-
-void QQuickActionPrivate::unregisterItem(QQuickItem *item)
-{
-#if QT_CONFIG(shortcut)
- QQuickActionPrivate::ShortcutEntry *entry = findShortcutEntry(item);
- if (!entry || !unwatchItem(item))
- return;
-
- shortcutEntries.removeOne(entry);
- delete entry;
-
- updateDefaultShortcutEntry();
-#else
- Q_UNUSED(item);
-#endif
-}
-
-void QQuickActionPrivate::itemVisibilityChanged(QQuickItem *item)
-{
-#if QT_CONFIG(shortcut)
- QQuickActionPrivate::ShortcutEntry *entry = findShortcutEntry(item);
- if (!entry)
- return;
-
- if (item->isVisible())
- entry->grab(keySequence, enabled);
- else
- entry->ungrab();
-
- updateDefaultShortcutEntry();
-#else
- Q_UNUSED(item);
-#endif
-}
-
-void QQuickActionPrivate::itemDestroyed(QQuickItem *item)
-{
- unregisterItem(item);
-}
-
-#if QT_CONFIG(shortcut)
-bool QQuickActionPrivate::handleShortcutEvent(QObject *object, QShortcutEvent *event)
-{
- Q_Q(QQuickAction);
- if (event->key() != keySequence)
- return false;
-
- QQuickActionPrivate::ShortcutEntry *entry = findShortcutEntry(object);
- if (!entry || event->shortcutId() != entry->shortcutId())
- return false;
-
- q->trigger(entry->target());
- return true;
-}
-
-QQuickActionPrivate::ShortcutEntry *QQuickActionPrivate::findShortcutEntry(QObject *target) const
-{
- Q_Q(const QQuickAction);
- if (target == q)
- return defaultShortcutEntry;
- for (QQuickActionPrivate::ShortcutEntry *entry : shortcutEntries) {
- if (entry->target() == target)
- return entry;
- }
- return nullptr;
-}
-
-void QQuickActionPrivate::updateDefaultShortcutEntry()
-{
- bool hasActiveShortcutEntries = false;
- for (QQuickActionPrivate::ShortcutEntry *entry : qAsConst(shortcutEntries)) {
- if (entry->shortcutId()) {
- hasActiveShortcutEntries = true;
- break;
- }
- }
-
- if (hasActiveShortcutEntries)
- defaultShortcutEntry->ungrab();
- else if (!defaultShortcutEntry->shortcutId())
- defaultShortcutEntry->grab(keySequence, enabled);
-}
-#endif // QT_CONFIG(shortcut)
-
-QQuickAction::QQuickAction(QObject *parent)
- : QObject(*(new QQuickActionPrivate), parent)
-{
-#if QT_CONFIG(shortcut)
- Q_D(QQuickAction);
- d->defaultShortcutEntry = new QQuickActionPrivate::ShortcutEntry(this);
-#endif
-}
-
-QQuickAction::~QQuickAction()
-{
- Q_D(QQuickAction);
- if (d->group)
- d->group->removeAction(this);
-
-#if QT_CONFIG(shortcut)
- for (QQuickActionPrivate::ShortcutEntry *entry : qAsConst(d->shortcutEntries))
- d->unwatchItem(qobject_cast<QQuickItem *>(entry->target()));
-
- qDeleteAll(d->shortcutEntries);
- delete d->defaultShortcutEntry;
-#endif
-}
-
-/*!
- \qmlproperty string QtQuick.Controls::Action::text
-
- This property holds a textual description of the action.
-*/
-QString QQuickAction::text() const
-{
- Q_D(const QQuickAction);
- return d->text;
-}
-
-void QQuickAction::setText(const QString &text)
-{
- Q_D(QQuickAction);
- if (d->text == text)
- return;
-
- d->text = text;
- emit textChanged(text);
-}
-
-/*!
- \qmlproperty string QtQuick.Controls::Action::icon.name
- \qmlproperty url QtQuick.Controls::Action::icon.source
- \qmlproperty int QtQuick.Controls::Action::icon.width
- \qmlproperty int QtQuick.Controls::Action::icon.height
- \qmlproperty color QtQuick.Controls::Action::icon.color
- \qmlproperty bool QtQuick.Controls::Action::icon.cache
-
- \include qquickicon.qdocinc grouped-properties
-*/
-QQuickIcon QQuickAction::icon() const
-{
- Q_D(const QQuickAction);
- return d->icon;
-}
-
-void QQuickAction::setIcon(const QQuickIcon &icon)
-{
- Q_D(QQuickAction);
- if (d->icon == icon)
- return;
-
- d->icon = icon;
- emit iconChanged(icon);
-}
-
-/*!
- \qmlproperty bool QtQuick.Controls::Action::enabled
-
- This property holds whether the action is enabled. The default value is \c true.
-*/
-bool QQuickAction::isEnabled() const
-{
- Q_D(const QQuickAction);
- return d->enabled && (!d->group || d->group->isEnabled());
-}
-
-void QQuickAction::setEnabled(bool enabled)
-{
- Q_D(QQuickAction);
- d->explicitEnabled = true;
- d->setEnabled(enabled);
-}
-
-void QQuickAction::resetEnabled()
-{
- Q_D(QQuickAction);
- if (!d->explicitEnabled)
- return;
-
- d->explicitEnabled = false;
- d->setEnabled(true);
-}
-
-/*!
- \qmlproperty bool QtQuick.Controls::Action::checked
-
- This property holds whether the action is checked.
-
- \sa checkable
-*/
-bool QQuickAction::isChecked() const
-{
- Q_D(const QQuickAction);
- return d->checked;
-}
-
-void QQuickAction::setChecked(bool checked)
-{
- Q_D(QQuickAction);
- if (d->checked == checked)
- return;
-
- d->checked = checked;
- emit checkedChanged(checked);
-}
-
-/*!
- \qmlproperty bool QtQuick.Controls::Action::checkable
-
- This property holds whether the action is checkable. The default value is \c false.
-
- A checkable action toggles between checked (on) and unchecked (off) when triggered.
-
- \sa checked
-*/
-bool QQuickAction::isCheckable() const
-{
- Q_D(const QQuickAction);
- return d->checkable;
-}
-
-void QQuickAction::setCheckable(bool checkable)
-{
- Q_D(QQuickAction);
- if (d->checkable == checkable)
- return;
-
- d->checkable = checkable;
- emit checkableChanged(checkable);
-}
-
-#if QT_CONFIG(shortcut)
-/*!
- \qmlproperty keysequence QtQuick.Controls::Action::shortcut
-
- This property holds the action's shortcut. The key sequence can be set
- to one of the \l{QKeySequence::StandardKey}{standard keyboard shortcuts},
- or it can be described with a string containing a sequence of up to four
- key presses that are needed to trigger the shortcut.
-
- \code
- Action {
- shortcut: "Ctrl+E,Ctrl+W"
- onTriggered: edit.wrapMode = TextEdit.Wrap
- }
- \endcode
-*/
-QKeySequence QQuickAction::shortcut() const
-{
- Q_D(const QQuickAction);
- return d->keySequence;
-}
-
-void QQuickAction::setShortcut(const QKeySequence &shortcut)
-{
- Q_D(QQuickAction);
- d->setShortcut(shortcut.toString());
-}
-#endif // QT_CONFIG(shortcut)
-
-/*!
- \qmlmethod void QtQuick.Controls::Action::toggle(QtObject source)
-
- Toggles the action and emits \l toggled() if enabled, with an optional \a source object defined.
-*/
-void QQuickAction::toggle(QObject *source)
-{
- Q_D(QQuickAction);
- if (!d->enabled)
- return;
-
- if (d->checkable)
- setChecked(!d->checked);
-
- emit toggled(source);
-}
-
-/*!
- \qmlmethod void QtQuick.Controls::Action::trigger(QtObject source)
-
- Triggers the action and emits \l triggered() if enabled, with an optional \a source object defined.
-*/
-void QQuickAction::trigger(QObject *source)
-{
- Q_D(QQuickAction);
- d->trigger(source, true);
-}
-
-void QQuickActionPrivate::trigger(QObject* source, bool doToggle)
-{
- Q_Q(QQuickAction);
- if (!enabled)
- return;
-
- QPointer<QObject> guard = q;
- // the checked action of an exclusive group cannot be unchecked
- if (checkable && (!checked || !group || !group->isExclusive() || group->checkedAction() != q)) {
- if (doToggle)
- q->toggle(source);
- else
- emit q->toggled(source);
- }
-
- if (!guard.isNull())
- emit q->triggered(source);
-}
-
-bool QQuickAction::event(QEvent *event)
-{
-#if QT_CONFIG(shortcut)
- Q_D(QQuickAction);
- if (event->type() == QEvent::Shortcut)
- return d->handleShortcutEvent(this, static_cast<QShortcutEvent *>(event));
-#endif
- return QObject::event(event);
-}
-
-bool QQuickAction::eventFilter(QObject *object, QEvent *event)
-{
-#if QT_CONFIG(shortcut)
- Q_D(QQuickAction);
- if (event->type() == QEvent::Shortcut)
- return d->handleShortcutEvent(object, static_cast<QShortcutEvent *>(event));
-#else
- Q_UNUSED(object);
- Q_UNUSED(event);
-#endif
- return false;
-}
-
-QT_END_NAMESPACE
-
-#include "moc_qquickaction_p.cpp"