Reload short cuts on change

This commit is contained in:
zilmar 2021-04-26 20:18:20 +09:30
parent 11813ff5f2
commit d4ec1f7f37
5 changed files with 29 additions and 18 deletions

View File

@ -17,7 +17,6 @@ CMainMenu::CMainMenu(CMainGui * hMainWindow) :
hMainWindow->SetWindowMenu(this); hMainWindow->SetWindowMenu(this);
m_ChangeUISettingList.push_back(Info_ShortCutsChanged);
m_ChangeSettingList.push_back(GameRunning_LimitFPS); m_ChangeSettingList.push_back(GameRunning_LimitFPS);
m_ChangeUISettingList.push_back(UserInterface_InFullScreen); m_ChangeUISettingList.push_back(UserInterface_InFullScreen);
m_ChangeUISettingList.push_back(UserInterface_AlwaysOnTop); m_ChangeUISettingList.push_back(UserInterface_AlwaysOnTop);
@ -63,10 +62,13 @@ CMainMenu::CMainMenu(CMainGui * hMainWindow) :
{ {
g_Settings->RegisterChangeCB(*iter, this, (CSettings::SettingChangedFunc)SettingsChanged); g_Settings->RegisterChangeCB(*iter, this, (CSettings::SettingChangedFunc)SettingsChanged);
} }
g_Settings->RegisterChangeCB((SettingID)Info_ShortCutsChanged, this, (CSettings::SettingChangedFunc)stShortCutsChanged);
} }
CMainMenu::~CMainMenu() CMainMenu::~CMainMenu()
{ {
g_Settings->UnregisterChangeCB((SettingID)Info_ShortCutsChanged, this, (CSettings::SettingChangedFunc)stShortCutsChanged);
for (UISettingList::const_iterator iter = m_ChangeUISettingList.begin(); iter != m_ChangeUISettingList.end(); iter++) for (UISettingList::const_iterator iter = m_ChangeUISettingList.begin(); iter != m_ChangeUISettingList.end(); iter++)
{ {
g_Settings->UnregisterChangeCB((SettingID)*iter, this, (CSettings::SettingChangedFunc)SettingsChanged); g_Settings->UnregisterChangeCB((SettingID)*iter, this, (CSettings::SettingChangedFunc)SettingsChanged);
@ -132,6 +134,13 @@ void CMainMenu::SetTraceModuleSetttings(SettingID Type)
g_Settings->SaveDword(Type, value); g_Settings->SaveDword(Type, value);
} }
void CMainMenu::ShortCutsChanged(void)
{
m_ShortCuts.Load();
ResetMenu();
m_ResetAccelerators = true;
}
void CMainMenu::OnOpenRom(HWND hWnd) void CMainMenu::OnOpenRom(HWND hWnd)
{ {
std::string File = ChooseFileToOpen(hWnd); std::string File = ChooseFileToOpen(hWnd);

View File

@ -64,10 +64,10 @@ public:
CMainMenu(CMainGui * Window); CMainMenu(CMainGui * Window);
~CMainMenu(); ~CMainMenu();
int ProcessAccelerator(HWND hWnd, void * lpMsg); int ProcessAccelerator(HWND hWnd, void * lpMsg);
bool ProcessMessage(HWND hWnd, DWORD wNotifyCode, DWORD wID); bool ProcessMessage(HWND hWnd, DWORD wNotifyCode, DWORD wID);
void ResetMenu(void); void ResetMenu(void);
void ResetAccelerators(void) { m_ResetAccelerators = true; } void ResetAccelerators(void) { m_ResetAccelerators = true; }
private: private:
CMainMenu(); CMainMenu();
@ -94,8 +94,10 @@ private:
std::string ChooseROMFileToOpen(HWND hParent); std::string ChooseROMFileToOpen(HWND hParent);
std::string ChooseDiskFileToOpen(HWND hParent); std::string ChooseDiskFileToOpen(HWND hParent);
void SetTraceModuleSetttings(SettingID Type); void SetTraceModuleSetttings(SettingID Type);
void ShortCutsChanged(void);
static void SettingsChanged(CMainMenu * _this); static void SettingsChanged(CMainMenu * _this);
static void stShortCutsChanged(CMainMenu * _this) { return _this->ShortCutsChanged(); }
typedef std::list<SettingID> SettingList; typedef std::list<SettingID> SettingList;
typedef std::list<UISettingID> UISettingList; typedef std::list<UISettingID> UISettingList;

View File

@ -288,7 +288,7 @@ void CShortCutItem::RemoveItem(CMenuShortCutKey * ShortCut)
} }
} }
bool CShortCutItem::Avaliable(CMenuShortCutKey::RUNNING_STATE RunningState) bool CShortCutItem::Avaliable(CMenuShortCutKey::RUNNING_STATE RunningState) const
{ {
switch (RunningState) switch (RunningState)
{ {

View File

@ -80,7 +80,7 @@ public:
void Reset(LanguageStringID Section, LanguageStringID Title, ACCESS_MODE Access); void Reset(LanguageStringID Section, LanguageStringID Title, ACCESS_MODE Access);
void AddShortCut(WORD key, bool bCtrl, bool bAlt, bool bShift, ACCESS_MODE AccessMode, bool bUserAdded = false, bool bInactive = false); void AddShortCut(WORD key, bool bCtrl, bool bAlt, bool bShift, ACCESS_MODE AccessMode, bool bUserAdded = false, bool bInactive = false);
void RemoveItem(CMenuShortCutKey * ShortCut); void RemoveItem(CMenuShortCutKey * ShortCut);
bool Avaliable(RUNNING_STATE RunningState); bool Avaliable(RUNNING_STATE RunningState) const;
inline const SHORTCUT_KEY_LIST & GetAccelItems(void) const { return m_AccelList; } inline const SHORTCUT_KEY_LIST & GetAccelItems(void) const { return m_AccelList; }
inline LanguageStringID Section(void) const { return m_Section; } inline LanguageStringID Section(void) const { return m_Section; }
@ -96,12 +96,6 @@ class CShortCuts
typedef CMenuShortCutKey::ACCESS_MODE ACCESS_MODE; typedef CMenuShortCutKey::ACCESS_MODE ACCESS_MODE;
typedef CMenuShortCutKey::RUNNING_STATE RUNNING_STATE; typedef CMenuShortCutKey::RUNNING_STATE RUNNING_STATE;
typedef LanguageStringID LangStr; typedef LanguageStringID LangStr;
MSC_MAP m_ShortCuts;
CriticalSection m_CS;
void AddShortCut(WORD ID, LangStr Section, LangStr LangID, CMenuShortCutKey::ACCESS_MODE AccessMode);
public: public:
CShortCuts(void); CShortCuts(void);
~CShortCuts(void); ~CShortCuts(void);
@ -109,8 +103,14 @@ public:
std::wstring ShortCutString(int MenuID, RUNNING_STATE RunningState); std::wstring ShortCutString(int MenuID, RUNNING_STATE RunningState);
LangStr GetMenuItemName(WORD key, bool bCtrl, bool bAlt, bool bShift, RUNNING_STATE RunningState); LangStr GetMenuItemName(WORD key, bool bCtrl, bool bAlt, bool bShift, RUNNING_STATE RunningState);
HACCEL GetAcceleratorTable(void); HACCEL GetAcceleratorTable(void);
MSC_MAP & GetShortCuts(void) { return m_ShortCuts; } const MSC_MAP & GetShortCuts(void) const { return m_ShortCuts; }
void Load(bool InitialValues = false); void Load(bool InitialValues = false);
void Save(void); void Save(void);
private:
CriticalSection m_CS;
MSC_MAP m_ShortCuts;
void AddShortCut(WORD ID, LangStr Section, LangStr LangID, CMenuShortCutKey::ACCESS_MODE AccessMode);
}; };

View File

@ -45,8 +45,8 @@ COptionsShortCutsPage::COptionsShortCutsPage(HWND hParent, const RECT & rcDispay
void COptionsShortCutsPage::CheckResetEnable(void) void COptionsShortCutsPage::CheckResetEnable(void)
{ {
MSC_MAP & ShortCuts = m_ShortCuts.GetShortCuts(); const MSC_MAP & ShortCuts = m_ShortCuts.GetShortCuts();
for (MSC_MAP::iterator Item = ShortCuts.begin(); Item != ShortCuts.end(); Item++) for (MSC_MAP::const_iterator Item = ShortCuts.begin(); Item != ShortCuts.end(); Item++)
{ {
const SHORTCUT_KEY_LIST & ShortCutList = Item->second.GetAccelItems(); const SHORTCUT_KEY_LIST & ShortCutList = Item->second.GetAccelItems();
for (SHORTCUT_KEY_LIST::const_iterator ShortCut_item = ShortCutList.begin(); ShortCut_item != ShortCutList.end(); ShortCut_item++) for (SHORTCUT_KEY_LIST::const_iterator ShortCut_item = ShortCutList.begin(); ShortCut_item != ShortCutList.end(); ShortCut_item++)
@ -66,10 +66,10 @@ void COptionsShortCutsPage::OnCpuStateChanged(UINT /*Code*/, int /*id*/, HWND /*
{ {
RUNNING_STATE RunningState = (RUNNING_STATE)m_CpuState.GetItemData(m_CpuState.GetCurSel()); RUNNING_STATE RunningState = (RUNNING_STATE)m_CpuState.GetItemData(m_CpuState.GetCurSel());
MSC_MAP & ShortCuts = m_ShortCuts.GetShortCuts(); const MSC_MAP & ShortCuts = m_ShortCuts.GetShortCuts();
m_MenuItems.DeleteAllItems(); m_MenuItems.DeleteAllItems();
for (MSC_MAP::iterator Item = ShortCuts.begin(); Item != ShortCuts.end(); Item++) for (MSC_MAP::const_iterator Item = ShortCuts.begin(); Item != ShortCuts.end(); Item++)
{ {
if (!Item->second.Avaliable(RunningState)) if (!Item->second.Avaliable(RunningState))
{ {