[AFV] CInputManager stores icon indexes instead of QPixmap instances

The GUI converts icon indexes to QPixmap indexes when needed.
This fixes the context unittest that was broken by audio context changes.
This commit is contained in:
Mat Sutcliffe
2019-10-08 19:37:07 +01:00
parent 01d144b528
commit 57ff07592a
13 changed files with 48 additions and 32 deletions

View File

@@ -10,13 +10,13 @@
namespace BlackCore namespace BlackCore
{ {
CActionBind::CActionBind(const QString &action, const QPixmap &icon, QObject *parent) CActionBind::CActionBind(const QString &action, BlackMisc::CIcons::IconIndex icon, QObject *parent)
: QObject(parent) : QObject(parent)
{ {
CActionBind::registerAction(action, icon); CActionBind::registerAction(action, icon);
} }
QString CActionBind::registerAction(const QString &action, const QPixmap &icon) QString CActionBind::registerAction(const QString &action, BlackMisc::CIcons::IconIndex icon)
{ {
if (!sApp || sApp->isShuttingDown()) { return {}; } if (!sApp || sApp->isShuttingDown()) { return {}; }
if (sApp->getApplicationInfo().isUnitTest()) { return {}; } if (sApp->getApplicationInfo().isUnitTest()) { return {}; }

View File

@@ -31,7 +31,7 @@ namespace BlackCore
//! Constructor //! Constructor
template <typename Receiver> template <typename Receiver>
CActionBind(const QString &action, const QPixmap &icon, Receiver *receiver, CActionBind(const QString &action, BlackMisc::CIcons::IconIndex icon, Receiver *receiver,
MembFunc<Receiver> slot = nullptr, MembFunc<Receiver> slot = nullptr,
const std::function<void()> &deleteCallback = {}, const std::function<void()> &deleteCallback = {},
QObject *parent = nullptr) : QObject *parent = nullptr) :
@@ -48,7 +48,7 @@ namespace BlackCore
} }
//! Signature just to set an icon for an action //! Signature just to set an icon for an action
CActionBind(const QString &action, const QPixmap &icon, QObject *parent = nullptr); CActionBind(const QString &action, BlackMisc::CIcons::IconIndex icon, QObject *parent = nullptr);
//! Not copyable //! Not copyable
//! @{ //! @{
@@ -75,7 +75,7 @@ namespace BlackCore
static QString normalizeAction(const QString &action); static QString normalizeAction(const QString &action);
//! Register action //! Register action
static QString registerAction(const QString &action, const QPixmap &icon); static QString registerAction(const QString &action, BlackMisc::CIcons::IconIndex icon);
int m_index = -1; //!< action index (unique) int m_index = -1; //!< action index (unique)
std::function<void()> m_deleteCallback; //!< called when deleted std::function<void()> m_deleteCallback; //!< called when deleted

View File

@@ -30,7 +30,7 @@ namespace BlackCore
reloadHotkeySettings(); reloadHotkeySettings();
} }
void CInputManager::registerAction(const QString &action, const QPixmap &icon) void CInputManager::registerAction(const QString &action, BlackMisc::CIcons::IconIndex icon)
{ {
if (!m_availableActions.contains(action)) if (!m_availableActions.contains(action))
{ {

View File

@@ -42,7 +42,7 @@ namespace BlackCore
CInputManager(QObject *parent = nullptr); CInputManager(QObject *parent = nullptr);
//! Register new action //! Register new action
void registerAction(const QString &action, const QPixmap &icon = BlackMisc::CIcons::empty16()); void registerAction(const QString &action, BlackMisc::CIcons::IconIndex icon = BlackMisc::CIcons::StandardIconEmpty16);
//! Register remote actions //! Register remote actions
void registerRemoteActions(const QStringList &actions); void registerRemoteActions(const QStringList &actions);
@@ -79,7 +79,7 @@ namespace BlackCore
QStringList allAvailableActions() const { return m_availableActions.keys(); } QStringList allAvailableActions() const { return m_availableActions.keys(); }
//! All actions and their icons (if any) //! All actions and their icons (if any)
QMap<QString, QPixmap> allAvailableActionsAndIcons() const { return m_availableActions; } QMap<QString, BlackMisc::CIcons::IconIndex> allAvailableActionsAndIcons() const { return m_availableActions; }
//! Enable event forwarding to core //! Enable event forwarding to core
void setForwarding(bool enabled) { m_actionRelayingEnabled = enabled; } void setForwarding(bool enabled) { m_actionRelayingEnabled = enabled; }
@@ -138,7 +138,7 @@ namespace BlackCore
std::unique_ptr<BlackInput::IKeyboard> m_keyboard; //!< keyboard std::unique_ptr<BlackInput::IKeyboard> m_keyboard; //!< keyboard
std::unique_ptr<BlackInput::IJoystick> m_joystick; //!< joystick std::unique_ptr<BlackInput::IJoystick> m_joystick; //!< joystick
QMap<QString, QPixmap> m_availableActions; QMap<QString, BlackMisc::CIcons::IconIndex> m_availableActions;
QHash<BlackMisc::Input::CHotkeyCombination, QString> m_configuredActions; QHash<BlackMisc::Input::CHotkeyCombination, QString> m_configuredActions;
QSet<QString> m_activeActions; QSet<QString> m_activeActions;
QVector<BindInfo> m_boundActions; QVector<BindInfo> m_boundActions;

View File

@@ -64,7 +64,7 @@ namespace BlackGui
QScopedPointer<Ui::CSettingsHotkeyComponent> ui; QScopedPointer<Ui::CSettingsHotkeyComponent> ui;
Models::CActionHotkeyListModel m_model; //!< hotkeys model Models::CActionHotkeyListModel m_model; //!< hotkeys model
BlackMisc::CSetting<BlackCore::Application::TActionHotkeys> m_actionHotkeys { this, &CSettingsHotkeyComponent::reloadHotkeysFromSettings }; BlackMisc::CSetting<BlackCore::Application::TActionHotkeys> m_actionHotkeys { this, &CSettingsHotkeyComponent::reloadHotkeysFromSettings };
BlackCore::CActionBind m_action { "/Test/Message", BlackMisc::CIcons::wrench16(), this, &CSettingsHotkeyComponent::hotkeySlot }; BlackCore::CActionBind m_action { "/Test/Message", BlackMisc::CIcons::StandardIconWrench16, this, &CSettingsHotkeyComponent::hotkeySlot };
}; };
/** /**

View File

@@ -49,7 +49,10 @@ namespace BlackGui
const bool hasIcon = !action->icon().isNull(); const bool hasIcon = !action->icon().isNull();
CGuiActionBindHandler *bindHandler = new CGuiActionBindHandler(action); CGuiActionBindHandler *bindHandler = new CGuiActionBindHandler(action);
CActionBinding actionBinding(CActionBinding::create(pathNew, hasIcon ? action->icon().pixmap(CIcons::empty16().size()) : CIcons::empty16(), bindHandler, &CGuiActionBindHandler::boundFunction, [bindHandler]() { CGuiActionBindHandler::actionBindWasDestroyed(bindHandler); })); // MS 2019-10-08 [AFV integration] CActionBind constructor needs an icon index, not a QPixmap
//CActionBinding actionBinding(CActionBinding::create(pathNew, hasIcon ? action->icon().pixmap(CIcons::empty16().size()) : CIcons::empty16(), bindHandler, &CGuiActionBindHandler::boundFunction, [bindHandler]() { CGuiActionBindHandler::actionBindWasDestroyed(bindHandler); }));
CActionBinding actionBinding(CActionBinding::create(pathNew, CIcons::StandardIconEmpty16, bindHandler, &CGuiActionBindHandler::boundFunction, [bindHandler]() { CGuiActionBindHandler::actionBindWasDestroyed(bindHandler); }));
Q_UNUSED(hasIcon)
bindHandler->m_index = actionBinding->getIndex(); bindHandler->m_index = actionBinding->getIndex();
boundActions.append(actionBinding); // takes ownership boundActions.append(actionBinding); // takes ownership
} }
@@ -64,7 +67,10 @@ namespace BlackGui
CGuiActionBindHandler::appendPath(path, button->text()).remove('&'); // remove E&xit key codes CGuiActionBindHandler::appendPath(path, button->text()).remove('&'); // remove E&xit key codes
CGuiActionBindHandler *bindHandler = new CGuiActionBindHandler(button); CGuiActionBindHandler *bindHandler = new CGuiActionBindHandler(button);
const bool hasIcon = !button->icon().isNull(); const bool hasIcon = !button->icon().isNull();
CActionBinding actionBinding(CActionBinding::create(pathNew, hasIcon ? button->icon().pixmap(CIcons::empty16().size()) : CIcons::empty16(), bindHandler, &CGuiActionBindHandler::boundFunction, [bindHandler]() { CGuiActionBindHandler::actionBindWasDestroyed(bindHandler); })); // MS 2019-10-08 [AFV integration] CActionBind constructor needs an icon index, not a QPixmap
//CActionBinding actionBinding(CActionBinding::create(pathNew, hasIcon ? button->icon().pixmap(CIcons::empty16().size()) : CIcons::empty16(), bindHandler, &CGuiActionBindHandler::boundFunction, [bindHandler]() { CGuiActionBindHandler::actionBindWasDestroyed(bindHandler); }));
CActionBinding actionBinding(CActionBinding::create(pathNew, CIcons::StandardIconEmpty16, bindHandler, &CGuiActionBindHandler::boundFunction, [bindHandler]() { CGuiActionBindHandler::actionBindWasDestroyed(bindHandler); }));
Q_UNUSED(hasIcon)
bindHandler->m_index = actionBinding->getIndex(); bindHandler->m_index = actionBinding->getIndex();
return actionBinding; return actionBinding;
} }

View File

@@ -9,6 +9,8 @@
#include "blackgui/models/actionitem.h" #include "blackgui/models/actionitem.h"
#include <QtAlgorithms> #include <QtAlgorithms>
using namespace BlackMisc;
namespace BlackGui namespace BlackGui
{ {
namespace Models namespace Models
@@ -21,6 +23,10 @@ namespace BlackGui
m_action(action), m_actionName(name), m_icon(icon), m_parentItem(parentItem) m_action(action), m_actionName(name), m_icon(icon), m_parentItem(parentItem)
{ } { }
CActionItem::CActionItem(const QString &action, const QString &name, CIcons::IconIndex icon, CActionItem *parentItem) :
m_action(action), m_actionName(name), m_icon(CIcons::pixmapByIndex(icon)), m_parentItem(parentItem)
{ }
CActionItem::~CActionItem() CActionItem::~CActionItem()
{ {
qDeleteAll(m_childItems); qDeleteAll(m_childItems);

View File

@@ -11,6 +11,7 @@
#ifndef BLACKGUI_MODELS_ACTIONITEM_H #ifndef BLACKGUI_MODELS_ACTIONITEM_H
#define BLACKGUI_MODELS_ACTIONITEM_H #define BLACKGUI_MODELS_ACTIONITEM_H
#include "blackmisc/icons.h"
#include <QList> #include <QList>
#include <QString> #include <QString>
#include <QPixmap> #include <QPixmap>
@@ -29,6 +30,9 @@ namespace BlackGui
//! Constructor //! Constructor
CActionItem(const QString &action, const QString &name, const QPixmap &icon, CActionItem *parentItem = nullptr); CActionItem(const QString &action, const QString &name, const QPixmap &icon, CActionItem *parentItem = nullptr);
//! Constructor
CActionItem(const QString &action, const QString &name, BlackMisc::CIcons::IconIndex icon, CActionItem *parentItem = nullptr);
//! Destructor //! Destructor
~CActionItem(); ~CActionItem();

View File

@@ -103,7 +103,7 @@ namespace BlackGui
m_rootItem.reset(new CActionItem(QString(), QString())); m_rootItem.reset(new CActionItem(QString(), QString()));
Q_ASSERT_X(sApp && sApp->getInputManager(), Q_FUNC_INFO, "Missing input manager"); Q_ASSERT_X(sApp && sApp->getInputManager(), Q_FUNC_INFO, "Missing input manager");
const QMap<QString, QPixmap> availableActionsAndIcons = sApp->getInputManager()->allAvailableActionsAndIcons(); const QMap<QString, BlackMisc::CIcons::IconIndex> availableActionsAndIcons = sApp->getInputManager()->allAvailableActionsAndIcons();
QStringList keys = availableActionsAndIcons.keys(); QStringList keys = availableActionsAndIcons.keys();
keys.sort(); keys.sort();
for (const QString &actionPath : as_const(keys)) for (const QString &actionPath : as_const(keys))
@@ -118,7 +118,7 @@ namespace BlackGui
if (child == nullptr) if (child == nullptr)
{ {
const bool isAction = currentPath == actionPath; // action istelf, or just a node? const bool isAction = currentPath == actionPath; // action istelf, or just a node?
const QPixmap icon = isAction ? availableActionsAndIcons[actionPath] : CIcons::empty16(); const BlackMisc::CIcons::IconIndex icon = isAction ? availableActionsAndIcons[actionPath] : CIcons::StandardIconEmpty16;
child = new CActionItem(isAction ? actionPath : "", token, icon, parentItem); child = new CActionItem(isAction ? actionPath : "", token, icon, parentItem);
parentItem->appendChild(child); parentItem->appendChild(child);
} }

View File

@@ -18,9 +18,9 @@ namespace BlackMisc
return s; return s;
} }
const QPixmap &pttHotkeyIcon() CIcons::IconIndex pttHotkeyIcon()
{ {
return CIcons::radio16(); return CIcons::StandardIconRadio16;
} }
const QString &pttCom1HotkeyAction() const QString &pttCom1HotkeyAction()
@@ -35,14 +35,14 @@ namespace BlackMisc
return s; return s;
} }
const QPixmap &audioVolumeDecreaseHotkeyIcon() CIcons::IconIndex audioVolumeDecreaseHotkeyIcon()
{ {
return CIcons::volumeLow16(); return CIcons::StandardIconVolumeLow16;
} }
const QPixmap &audioVolumeIncreaseHotkeyIcon() CIcons::IconIndex audioVolumeIncreaseHotkeyIcon()
{ {
return CIcons::volumeHigh16(); return CIcons::StandardIconVolumeHigh16;
} }
const QString &audioVolumeDecreaseHotkeyAction() const QString &audioVolumeDecreaseHotkeyAction()
@@ -57,14 +57,14 @@ namespace BlackMisc
return s; return s;
} }
const QPixmap &toggleXPDRStateHotkeyIcon() CIcons::IconIndex toggleXPDRStateHotkeyIcon()
{ {
return CIcons::radio16(); return CIcons::StandardIconRadio16;
} }
const QPixmap &toggleXPDRIdentHotkeyIcon() CIcons::IconIndex toggleXPDRIdentHotkeyIcon()
{ {
return CIcons::radio16(); return CIcons::StandardIconRadio16;
} }
const QString &toggleXPDRStateHotkeyAction() const QString &toggleXPDRStateHotkeyAction()

View File

@@ -11,7 +11,7 @@
#ifndef BLACKMISC_INPUT_ACTIONHOTKEYDEFS_H #ifndef BLACKMISC_INPUT_ACTIONHOTKEYDEFS_H
#define BLACKMISC_INPUT_ACTIONHOTKEYDEFS_H #define BLACKMISC_INPUT_ACTIONHOTKEYDEFS_H
#include "blackmisc/icon.h" #include "blackmisc/icons.h"
#include "blackmisc/blackmiscexport.h" #include "blackmisc/blackmiscexport.h"
#include <QString> #include <QString>
@@ -30,7 +30,7 @@ namespace BlackMisc
BLACKMISC_EXPORT const QString &pttCom2HotkeyAction(); BLACKMISC_EXPORT const QString &pttCom2HotkeyAction();
//! PTT key //! PTT key
BLACKMISC_EXPORT const QPixmap &pttHotkeyIcon(); BLACKMISC_EXPORT BlackMisc::CIcons::IconIndex pttHotkeyIcon();
//! Audio volume + key //! Audio volume + key
BLACKMISC_EXPORT const QString &audioVolumeIncreaseHotkeyAction(); BLACKMISC_EXPORT const QString &audioVolumeIncreaseHotkeyAction();
@@ -39,22 +39,22 @@ namespace BlackMisc
BLACKMISC_EXPORT const QString &audioVolumeDecreaseHotkeyAction(); BLACKMISC_EXPORT const QString &audioVolumeDecreaseHotkeyAction();
//! Audio icon volume + //! Audio icon volume +
BLACKMISC_EXPORT const QPixmap &audioVolumeIncreaseHotkeyIcon(); BLACKMISC_EXPORT BlackMisc::CIcons::IconIndex audioVolumeIncreaseHotkeyIcon();
//! Audio icon volume - //! Audio icon volume -
BLACKMISC_EXPORT const QPixmap &audioVolumeDecreaseHotkeyIcon(); BLACKMISC_EXPORT BlackMisc::CIcons::IconIndex audioVolumeDecreaseHotkeyIcon();
//! XPDR state //! XPDR state
BLACKMISC_EXPORT const QString &toggleXPDRStateHotkeyAction(); BLACKMISC_EXPORT const QString &toggleXPDRStateHotkeyAction();
//! XPDR state //! XPDR state
BLACKMISC_EXPORT const QPixmap &toggleXPDRStateHotkeyIcon(); BLACKMISC_EXPORT BlackMisc::CIcons::IconIndex toggleXPDRStateHotkeyIcon();
//! XPDR state //! XPDR state
BLACKMISC_EXPORT const QString &toggleXPDRIdentHotkeyAction(); BLACKMISC_EXPORT const QString &toggleXPDRIdentHotkeyAction();
//! XPDR ident //! XPDR ident
BLACKMISC_EXPORT const QPixmap &toggleXPDRIdentHotkeyIcon(); BLACKMISC_EXPORT BlackMisc::CIcons::IconIndex toggleXPDRIdentHotkeyIcon();
} // ns } // ns
} // ns } // ns

View File

@@ -122,7 +122,7 @@ private:
QScopedPointer<BlackGui::Components::CAfvMapDialog> m_mapDialog; //!< map dialog QScopedPointer<BlackGui::Components::CAfvMapDialog> m_mapDialog; //!< map dialog
QScopedPointer<BlackGui::Components::CAircraftModelSetValidationDialog> m_validationDialog; //!< aircraft model validation dialog QScopedPointer<BlackGui::Components::CAircraftModelSetValidationDialog> m_validationDialog; //!< aircraft model validation dialog
BlackMisc::CData<BlackMisc::Simulation::Data::TLastAutoPublish> m_lastAutoPublish { this }; BlackMisc::CData<BlackMisc::Simulation::Data::TLastAutoPublish> m_lastAutoPublish { this };
BlackCore::CActionBind m_actionPtt { BlackMisc::Input::pttHotkeyAction(), BlackMisc::CIcons::radio16(), this, &SwiftGuiStd::onPttChanged }; BlackCore::CActionBind m_actionPtt { BlackMisc::Input::pttHotkeyAction(), BlackMisc::CIcons::StandardIconRadio16, this, &SwiftGuiStd::onPttChanged };
BlackCore::CActionBindings m_menuHotkeyHandlers; BlackCore::CActionBindings m_menuHotkeyHandlers;
BlackGui::CManagedStatusBar m_statusBar; BlackGui::CManagedStatusBar m_statusBar;
BlackMisc::CLogSubscriber m_logSubscriber { this, &SwiftGuiStd::displayStatusMessageInGui }; BlackMisc::CLogSubscriber m_logSubscriber { this, &SwiftGuiStd::displayStatusMessageInGui };

View File

@@ -167,7 +167,7 @@ void SwiftGuiStd::initMenus()
// for hotkeys // for hotkeys
const QString swift(CGuiActionBindHandler::pathSwiftPilotClient()); const QString swift(CGuiActionBindHandler::pathSwiftPilotClient());
static const CActionBind swiftRoot(swift, CIcons::swift16()); // inserts action for root folder static const CActionBind swiftRoot(swift, CIcons::Swift16); // inserts action for root folder
Q_UNUSED(swiftRoot) Q_UNUSED(swiftRoot)
m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_InfoAreas, swift + "Info areas")); m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_InfoAreas, swift + "Info areas"));
m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_File, swift + "File")); m_menuHotkeyHandlers.append(CGuiActionBindHandler::bindMenu(ui->menu_File, swift + "File"));