Project64: Improve flexibility of advanced mode settings toggle

This commit is contained in:
CEnnis91 2023-06-23 14:24:07 -04:00
parent 187bd64915
commit ef30fc7fb8
17 changed files with 115 additions and 53 deletions

View File

@ -39,6 +39,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return AdvancedMode;
}
private:
void UpdatePageSettings(void);

View File

@ -38,6 +38,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return AdvancedMode;
}
private:
void UpdatePageSettings(void);

View File

@ -5,8 +5,7 @@
COptionsDirectoriesPage::COptionsDirectoriesPage(HWND hParent, const RECT & rcDispay) :
m_InUpdateSettings(false)
{
Create(hParent);
if (m_hWnd == nullptr)
if (!Create(hParent, rcDispay))
{
return;
}

View File

@ -1,7 +1,7 @@
#pragma once
class COptionsDirectoriesPage :
public CDialogImpl<COptionsDirectoriesPage>,
public CSettingsPageImpl<COptionsDirectoriesPage>,
public CSettingsPage
{
BEGIN_MSG_MAP_EX(COptionsDirectoriesPage)
@ -48,6 +48,11 @@ public:
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<COptionsDirectoriesPage>::PageAccessible(AdvancedMode);
}
private:
void SelectPluginDir(UINT Code, int id, HWND ctl);
void SelectAutoDir(UINT Code, int id, HWND ctl);

View File

@ -34,6 +34,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<CDiskDrivePage>::PageAccessible(AdvancedMode);
}
private:
void SelectIplDirJp(UINT Code, int id, HWND ctl);

View File

@ -31,4 +31,8 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<CGameDiskDrivePage>::PageAccessible(AdvancedMode);
}
};

View File

@ -43,4 +43,8 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<CGameGeneralPage>::PageAccessible(AdvancedMode);
}
};

View File

@ -40,6 +40,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<CGamePluginPage>::PageAccessible(AdvancedMode);
}
private:
void GfxPluginAbout(UINT /*Code*/, int /*id*/, HWND /*ctl*/)

View File

@ -39,6 +39,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<CGameRecompilePage>::PageAccessible(AdvancedMode);
}
private:
CPartialGroupBox m_SelfModGroup;

View File

@ -31,4 +31,8 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<CGameStatusPage>::PageAccessible(AdvancedMode);
}
};

View File

@ -33,6 +33,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<COptionsGameBrowserPage>::PageAccessible(AdvancedMode);
}
private:
void UpdatePageSettings(void);

View File

@ -38,6 +38,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<COptionsShortCutsPage>::PageAccessible(AdvancedMode);
}
private:
void OnCpuStateChanged(UINT Code, int id, HWND ctl);

View File

@ -35,6 +35,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<CGeneralOptionsPage>::PageAccessible(AdvancedMode);
}
private:
void OnBasicMode(UINT Code, int id, HWND ctl);

View File

@ -39,6 +39,10 @@ public:
void ApplySettings(bool UpdateScreen);
bool EnableReset(void);
void ResetPage(void);
bool PageAccessible(bool AdvancedMode)
{
return CSettingsPageImpl<COptionPluginPage>::PageAccessible(AdvancedMode);
}
private:
void GfxPluginAbout(UINT /*Code*/, int /*id*/, HWND /*ctl*/)

View File

@ -13,6 +13,7 @@ public:
virtual void ApplySettings(bool UpdateScreen) = 0;
virtual bool EnableReset(void) = 0;
virtual void ResetPage(void) = 0;
virtual bool PageAccessible(bool AdvancedMode) = 0;
};
template <class T>
@ -533,6 +534,14 @@ public:
}
}
#pragma warning(push)
#pragma warning(disable : 4100) // warning C4100: 'AdvancedMode': unreferenced formal parameter
bool PageAccessible(bool AdvancedMode)
{
return true;
}
#pragma warning(pop)
protected:
TextBoxList m_TxtBoxList;
ButtonList m_ButtonList;

View File

@ -7,8 +7,6 @@
CSettingConfig::CSettingConfig(bool bJustGameSetting /* = false */) :
m_CurrentPage(nullptr),
m_GeneralOptionsPage(nullptr),
m_AdvancedPage(nullptr),
m_DefaultsPage(nullptr),
m_GameConfig(bJustGameSetting),
m_bTVNSelChangedSupported(false)
{
@ -49,6 +47,7 @@ void CSettingConfig::Display(void * ParentWindow)
void CSettingConfig::UpdateAdvanced(bool AdvancedMode)
{
UpdateAdvanced(AdvancedMode, m_PagesTreeList.GetRootItem());
DisplayAccessibleSections(AdvancedMode, true);
BoldChangedPages(m_PagesTreeList.GetRootItem());
}
@ -57,22 +56,58 @@ void CSettingConfig::UpdateAdvanced(bool AdvancedMode, HTREEITEM hItem)
while (hItem)
{
CSettingsPage * Page = (CSettingsPage *)m_PagesTreeList.GetItemData(hItem);
if (!AdvancedMode && (Page == m_AdvancedPage || Page == m_DefaultsPage))
if (Page == m_GeneralOptionsPage)
{
UpdateAdvanced(AdvancedMode, m_PagesTreeList.GetChildItem(hItem));
hItem = m_PagesTreeList.GetNextSiblingItem(hItem);
}
else
{
HTREEITEM hPage = hItem;
hItem = m_PagesTreeList.GetNextSiblingItem(hItem);
m_PagesTreeList.DeleteItem(hPage);
}
else if (AdvancedMode && Page == m_GeneralOptionsPage)
{
m_PagesTreeList.InsertItem(TVIF_TEXT | TVIF_PARAM, wGS(m_AdvancedPage->PageTitle()).c_str(), 0, 0, 0, 0, (LPARAM)m_AdvancedPage, hItem, TVI_FIRST);
m_PagesTreeList.InsertItem(TVIF_TEXT | TVIF_PARAM, wGS(m_DefaultsPage->PageTitle()).c_str(), 0, 0, 0, 0, (LPARAM)m_DefaultsPage, hItem, TVI_FIRST);
break;
}
else
}
void CSettingConfig::DisplayAccessibleSections(bool AdvancedMode, bool UpdateSections)
{
bool bFirstItem = true;
for (SETTING_SECTIONS::const_iterator iter = m_Sections.begin(); iter != m_Sections.end(); iter++)
{
UpdateAdvanced(AdvancedMode, m_PagesTreeList.GetChildItem(hItem));
hItem = m_PagesTreeList.GetNextSiblingItem(hItem);
CConfigSettingSection * Section = *iter;
HTREEITEM hSectionItem = nullptr;
for (size_t i = 0; i < Section->GetPageCount(); i++)
{
CSettingsPage * Page = Section->GetPage((int32_t)((UINT_PTR)i));
if (UpdateSections && Page == m_GeneralOptionsPage)
{
hSectionItem = m_PagesTreeList.GetRootItem();
continue;
}
if (!Page->PageAccessible(AdvancedMode))
{
continue;
}
if (i == 0)
{
hSectionItem = m_PagesTreeList.InsertItem(TVIF_TEXT | TVIF_PARAM, Section->GetPageTitle(), 0, 0, 0, 0, (LPARAM)Page, TVI_ROOT, TVI_LAST);
continue;
}
if (hSectionItem == nullptr)
{
continue;
}
m_PagesTreeList.InsertItem(TVIF_TEXT | TVIF_PARAM, wGS(Page->PageTitle()).c_str(), 0, 0, 0, 0, (LPARAM)Page, hSectionItem, TVI_LAST);
}
if (bFirstItem && hSectionItem != nullptr)
{
bFirstItem = false;
m_PagesTreeList.Expand(hSectionItem);
m_PagesTreeList.SelectItem(hSectionItem);
}
}
}
@ -129,16 +164,13 @@ LRESULT CSettingConfig::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*
}
m_GeneralOptionsPage = new CGeneralOptionsPage(this, this->m_hWnd, rcSettingInfo);
m_AdvancedPage = new CAdvancedOptionsPage(this->m_hWnd, rcSettingInfo);
m_DefaultsPage = new CDefaultsOptionsPage(this->m_hWnd, rcSettingInfo);
m_DiskDrivePage = new CDiskDrivePage(this->m_hWnd, rcSettingInfo);
SettingsSection = new CConfigSettingSection(wGS(TAB_OPTIONS).c_str());
SettingsSection->AddPage(m_GeneralOptionsPage);
SettingsSection->AddPage(m_AdvancedPage);
SettingsSection->AddPage(m_DefaultsPage);
SettingsSection->AddPage(new CAdvancedOptionsPage(this->m_hWnd, rcSettingInfo));
SettingsSection->AddPage(new CDefaultsOptionsPage(this->m_hWnd, rcSettingInfo));
SettingsSection->AddPage(new COptionsDirectoriesPage(this->m_hWnd, rcSettingInfo));
SettingsSection->AddPage(m_DiskDrivePage);
SettingsSection->AddPage(new CDiskDrivePage(this->m_hWnd, rcSettingInfo));
m_Sections.push_back(SettingsSection);
SettingsSection = new CConfigSettingSection(wGS(TAB_ROMSELECTION).c_str());
@ -174,40 +206,8 @@ LRESULT CSettingConfig::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*
m_PagesTreeList.Attach(GetDlgItem(IDC_PAGELIST));
bool bFirstItem = true;
bool HideAdvanced = g_Settings->LoadBool(UserInterface_BasicMode);
for (SETTING_SECTIONS::const_iterator iter = m_Sections.begin(); iter != m_Sections.end(); iter++)
{
CConfigSettingSection * Section = *iter;
HTREEITEM hSectionItem = nullptr;
for (size_t i = 0; i < Section->GetPageCount(); i++)
{
CSettingsPage * Page = Section->GetPage((int32_t)((UINT_PTR)i));
if (HideAdvanced && (Page == m_AdvancedPage || Page == m_DefaultsPage))
{
continue;
}
if (i == 0)
{
hSectionItem = m_PagesTreeList.InsertItem(TVIF_TEXT | TVIF_PARAM, Section->GetPageTitle(), 0, 0, 0, 0, (LPARAM)Page, TVI_ROOT, TVI_LAST);
continue;
}
if (hSectionItem == nullptr)
{
continue;
}
m_PagesTreeList.InsertItem(TVIF_TEXT | TVIF_PARAM, wGS(Page->PageTitle()).c_str(), 0, 0, 0, 0, (LPARAM)Page, hSectionItem, TVI_LAST);
}
if (bFirstItem && hSectionItem != nullptr)
{
bFirstItem = false;
m_PagesTreeList.Expand(hSectionItem);
m_PagesTreeList.SelectItem(hSectionItem);
}
}
DisplayAccessibleSections(!HideAdvanced, false);
BoldChangedPages(m_PagesTreeList.GetRootItem());
return TRUE;
}

View File

@ -40,6 +40,7 @@ public:
private:
void UpdateAdvanced(bool AdvancedMode, HTREEITEM hItem);
void DisplayAccessibleSections(bool AdvancedMode, bool UpdateSections);
void ApplySettings(bool UpdateScreen);
void BoldChangedPages(HTREEITEM hItem);
@ -47,7 +48,7 @@ private:
CTreeViewCtrl m_PagesTreeList;
SETTING_SECTIONS m_Sections;
CSettingsPage *m_CurrentPage, *m_GeneralOptionsPage, *m_AdvancedPage, *m_DefaultsPage, *m_DiskDrivePage;
CSettingsPage *m_CurrentPage, *m_GeneralOptionsPage;
bool m_GameConfig;
bool m_bTVNSelChangedSupported;
};