/*! \brief Makes a \a shortcut known to the system under the specified \a id. Returns a command object that represents the shortcut in the application and is owned by the ActionManager. You can registered several shortcuts with the same \a id as long as the \a context is different. In this case a trigger of the actual shortcut is forwarded to the registered QShortcut for the currently active context. A scriptable shortcut can be called from a script without the need for the user to interact with it. */ Command *ActionManager::registerShortcut(QShortcut *shortcut, const Id &id, const Context &context, bool scriptable) { Shortcut *sc = 0; if (CommandPrivate *c = m_instance->d->m_idCmdMap.value(id, 0)) { sc = qobject_cast<Shortcut *>(c); if (!sc) { qWarning() << "registerShortcut: id" << id.name() << "is registered with a different command type."; return c; } } else { sc = new Shortcut(id); m_instance->d->m_idCmdMap.insert(id, sc); } if (sc->shortcut()) { qWarning() << "registerShortcut: action already registered, id" << id.name() << "."; return sc; } if (!m_instance->d->hasContext(context)) shortcut->setEnabled(false); shortcut->setObjectName(id.toString()); shortcut->setParent(ICore::mainWindow()); sc->setShortcut(shortcut); sc->setScriptable(scriptable); if (context.isEmpty()) sc->setContext(Context(0)); else sc->setContext(context); emit m_instance->commandListChanged(); emit m_instance->commandAdded(id.toString()); if (isPresentationModeEnabled()) connect(sc->shortcut(), SIGNAL(activated()), m_instance->d, SLOT(shortcutTriggered())); return sc; }
Command *ActionManagerPrivate::registerShortcut(QShortcut *shortcut, const QString &id, const QList<int> &context) { Shortcut *sc = 0; int uid = UniqueIDManager::instance()->uniqueIdentifier(id); if (CommandPrivate * c = m_idCmdMap.value(uid, 0)) { sc = qobject_cast<Shortcut *>(c); if (!sc) { qWarning() << "registerShortcut: id" << id << "is registered with a different command type."; return c; } } else { sc = new Shortcut(uid); m_idCmdMap.insert(uid, sc); } if (sc->shortcut()) { qWarning() << "registerShortcut: action already registered (id" << id << "."; return sc; } if (!hasContext(context)) { shortcut->setEnabled(false); } shortcut->setObjectName(id); shortcut->setParent(m_mainWnd); sc->setShortcut(shortcut); if (context.isEmpty()) { sc->setContext(QList<int>() << 0); } else { sc->setContext(context); } sc->setKeySequence(shortcut->key()); sc->setDefaultKeySequence(QKeySequence()); return sc; }