-updated source menu stuff and added a new option to enable/disable multiple source selections in the startup settings, disabled by default

-enabled b on mode selection to open up source menu by default
This commit is contained in:
fix94.1 2013-09-04 20:58:22 +00:00
parent d31d8e3329
commit 8057a883b6
9 changed files with 211 additions and 187 deletions

View File

@ -125,6 +125,7 @@ CMenu::CMenu()
m_use_wifi_gecko = false; m_use_wifi_gecko = false;
init_network = false; init_network = false;
m_use_source = true; m_use_source = true;
m_multisource = false;
m_clearCats = true; m_clearCats = true;
m_catStartPage = 1; m_catStartPage = 1;
m_combined_view = false; m_combined_view = false;
@ -274,6 +275,7 @@ void CMenu::init()
return; return;
} }
} }
m_multisource = m_cfg.getBool("GENERAL", "multisource", false);
/* DIOS_MIOS stuff */ /* DIOS_MIOS stuff */
if(m_cfg.getBool(GC_DOMAIN, "always_show_button", false)) if(m_cfg.getBool(GC_DOMAIN, "always_show_button", false))
{ {
@ -1511,25 +1513,6 @@ void CMenu::_addUserLabels(s16 *ids, u32 start, u32 size, const char *domain)
} }
} }
void CMenu::_checkForSinglePlugin(void)
{
enabledPluginPos = 0;
enabledPluginsCount = 0;
const vector<bool> &EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg);
if(m_cfg.getBool(PLUGIN_DOMAIN, "source", true) && EnabledPlugins.size() != 0)
{
for(u8 i = 0; i < EnabledPlugins.size(); i++)
{
if(EnabledPlugins.at(i))
{
enabledPluginPos = i;
enabledPluginsCount++;
}
}
snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", m_plugin.getPluginMagic(enabledPluginPos));
}
}
void CMenu::_initCF(void) void CMenu::_initCF(void)
{ {
Config dump, gameAgeList; Config dump, gameAgeList;
@ -1556,8 +1539,7 @@ void CMenu::_initCF(void)
gametdb.SetLanguageCode(m_loc.getString(m_curLanguage, "gametdb_code", "EN").c_str()); gametdb.SetLanguageCode(m_loc.getString(m_curLanguage, "gametdb_code", "EN").c_str());
} }
} }
_checkForSinglePlugin(); const vector<bool> &EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg, &enabledPluginsCount);
const vector<bool> &EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg);
for(vector<dir_discHdr>::iterator element = m_gameList.begin(); element != m_gameList.end(); ++element) for(vector<dir_discHdr>::iterator element = m_gameList.begin(); element != m_gameList.end(); ++element)
{ {

View File

@ -51,9 +51,7 @@ public:
u8 m_current_view; u8 m_current_view;
u8 m_last_view; u8 m_last_view;
bool m_combined_view; bool m_combined_view;
u8 enabledPluginPos;
u8 enabledPluginsCount; u8 enabledPluginsCount;
char PluginMagicWord[9];
u8 m_catStartPage; u8 m_catStartPage;
bool m_clearCats; bool m_clearCats;
private: private:
@ -90,6 +88,7 @@ private:
bool m_favorites; bool m_favorites;
bool m_music_info; bool m_music_info;
bool m_use_source; bool m_use_source;
bool m_multisource;
bool m_load_view; bool m_load_view;
s16 m_showtimer; s16 m_showtimer;
string m_curLanguage; string m_curLanguage;
@ -966,7 +965,6 @@ private:
void _updatePluginText(void); void _updatePluginText(void);
void _updatePluginCheckboxes(void); void _updatePluginCheckboxes(void);
void _updateCheckboxes(void); void _updateCheckboxes(void);
void _checkForSinglePlugin(void);
void _getIDCats(void); void _getIDCats(void);
void _setIDCats(void); void _setIDCats(void);
void _setBg(const TexData &tex, const TexData &lqTex); void _setBg(const TexData &tex, const TexData &lqTex);

View File

@ -45,6 +45,9 @@ s16 m_bootBtnCategoryOnBoot;
s16 m_bootLblSourceOnBoot; s16 m_bootLblSourceOnBoot;
s16 m_bootBtnSourceOnBoot; s16 m_bootBtnSourceOnBoot;
s16 m_bootLblMultisource;
s16 m_bootBtnMultisource;
u8 set_port = 0; u8 set_port = 0;
u8 boot_curPage = 1; u8 boot_curPage = 1;
u8 boot_Pages = 2; u8 boot_Pages = 2;
@ -93,6 +96,9 @@ static void hideBoot(bool instant, bool common)
m_btnMgr.hide(m_bootLblSourceOnBoot, instant); m_btnMgr.hide(m_bootLblSourceOnBoot, instant);
m_btnMgr.hide(m_bootBtnSourceOnBoot, instant); m_btnMgr.hide(m_bootBtnSourceOnBoot, instant);
m_btnMgr.hide(m_bootLblMultisource, instant);
m_btnMgr.hide(m_bootBtnMultisource, instant);
} }
bool CMenu::_Boot(void) bool CMenu::_Boot(void)
@ -181,6 +187,12 @@ bool CMenu::_Boot(void)
m_cfg.setBool("GENERAL", "source_on_start", !m_cfg.getBool("GENERAL", "source_on_start", false)); m_cfg.setBool("GENERAL", "source_on_start", !m_cfg.getBool("GENERAL", "source_on_start", false));
m_btnMgr.setText(m_bootBtnSourceOnBoot, m_cfg.getBool("GENERAL", "source_on_start") ? _t("on", L"On") : _t("off", L"Off")); m_btnMgr.setText(m_bootBtnSourceOnBoot, m_cfg.getBool("GENERAL", "source_on_start") ? _t("on", L"On") : _t("off", L"Off"));
} }
else if (m_btnMgr.selected(m_bootBtnMultisource))
{
m_cfg.setBool("GENERAL", "multisource", !m_cfg.getBool("GENERAL", "multisource", false));
m_btnMgr.setText(m_bootBtnMultisource, m_cfg.getBool("GENERAL", "multisource") ? _t("on", L"On") : _t("off", L"Off"));
m_multisource = m_cfg.getBool("GENERAL", "multisource", false);
}
} }
} }
if(prev_load != cur_load || prev_ios != cur_ios) if(prev_load != cur_load || prev_ios != cur_ios)
@ -230,12 +242,16 @@ void CMenu::_refreshBoot()
{ {
m_btnMgr.setText(m_bootBtnCategoryOnBoot, m_cfg.getBool("GENERAL", "category_on_start") ? _t("on", L"On") : _t("off", L"Off")); m_btnMgr.setText(m_bootBtnCategoryOnBoot, m_cfg.getBool("GENERAL", "category_on_start") ? _t("on", L"On") : _t("off", L"Off"));
m_btnMgr.setText(m_bootBtnSourceOnBoot, m_cfg.getBool("GENERAL", "source_on_start") ? _t("on", L"On") : _t("off", L"Off")); m_btnMgr.setText(m_bootBtnSourceOnBoot, m_cfg.getBool("GENERAL", "source_on_start") ? _t("on", L"On") : _t("off", L"Off"));
m_btnMgr.setText(m_bootBtnMultisource, m_cfg.getBool("GENERAL", "multisource") ? _t("on", L"On") : _t("off", L"Off"));
m_btnMgr.show(m_bootLblCategoryOnBoot); m_btnMgr.show(m_bootLblCategoryOnBoot);
m_btnMgr.show(m_bootBtnCategoryOnBoot); m_btnMgr.show(m_bootBtnCategoryOnBoot);
m_btnMgr.show(m_bootLblSourceOnBoot); m_btnMgr.show(m_bootLblSourceOnBoot);
m_btnMgr.show(m_bootBtnSourceOnBoot); m_btnMgr.show(m_bootBtnSourceOnBoot);
m_btnMgr.show(m_bootLblMultisource);
m_btnMgr.show(m_bootBtnMultisource);
} }
} }
@ -248,6 +264,7 @@ void CMenu::_textBoot(void)
m_btnMgr.setText(m_bootLblAsyncNet, _t("cfgp3", L"Init network on boot")); m_btnMgr.setText(m_bootLblAsyncNet, _t("cfgp3", L"Init network on boot"));
m_btnMgr.setText(m_bootLblCategoryOnBoot, _t("cfgd7", L"Show categories on boot")); m_btnMgr.setText(m_bootLblCategoryOnBoot, _t("cfgd7", L"Show categories on boot"));
m_btnMgr.setText(m_bootLblSourceOnBoot, _t("cfgbt5", L"Show source menu on boot")); m_btnMgr.setText(m_bootLblSourceOnBoot, _t("cfgbt5", L"Show source menu on boot"));
m_btnMgr.setText(m_bootLblMultisource, _t("cfgbt6", L"Enable Multisource Features"));
m_btnMgr.setText(m_bootBtnBack, _t("cfg10", L"Back")); m_btnMgr.setText(m_bootBtnBack, _t("cfg10", L"Back"));
} }
@ -281,6 +298,9 @@ void CMenu::_initBoot(void)
m_bootLblSourceOnBoot = _addLabel("BOOT/SOURCE_ON_START", theme.lblFont, L"", 40, 190, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); m_bootLblSourceOnBoot = _addLabel("BOOT/SOURCE_ON_START", theme.lblFont, L"", 40, 190, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_bootBtnSourceOnBoot = _addButton("BOOT/SOURCE_ON_START_BTN", theme.btnFont, L"", 370, 190, 230, 56, theme.btnFontColor); m_bootBtnSourceOnBoot = _addButton("BOOT/SOURCE_ON_START_BTN", theme.btnFont, L"", 370, 190, 230, 56, theme.btnFontColor);
m_bootLblMultisource = _addLabel("BOOT/MULTISOURCE", theme.lblFont, L"", 40, 250, 340, 56, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE);
m_bootBtnMultisource = _addButton("BOOT/MULTISOURCE_BTN", theme.btnFont, L"", 370, 250, 230, 56, theme.btnFontColor);
_setHideAnim(m_bootLblTitle, "BOOT/TITLE", 0, -200, 0.f, 1.f); _setHideAnim(m_bootLblTitle, "BOOT/TITLE", 0, -200, 0.f, 1.f);
_setHideAnim(m_bootBtnBack, "BOOT/BACK_BTN", 0, 0, 1.f, -1.f); _setHideAnim(m_bootBtnBack, "BOOT/BACK_BTN", 0, 0, 1.f, -1.f);
_setHideAnim(m_bootLblPage, "BOOT/PAGE_BTN", 0, 0, 1.f, -1.f); _setHideAnim(m_bootLblPage, "BOOT/PAGE_BTN", 0, 0, 1.f, -1.f);
@ -306,6 +326,9 @@ void CMenu::_initBoot(void)
_setHideAnim(m_bootLblSourceOnBoot, "BOOT/SOURCE_ON_START", -200, 0, 1.f, 0.f); _setHideAnim(m_bootLblSourceOnBoot, "BOOT/SOURCE_ON_START", -200, 0, 1.f, 0.f);
_setHideAnim(m_bootBtnSourceOnBoot, "BOOT/SOURCE_ON_START_BTN", 200, 0, 1.f, 0.f); _setHideAnim(m_bootBtnSourceOnBoot, "BOOT/SOURCE_ON_START_BTN", 200, 0, 1.f, 0.f);
_setHideAnim(m_bootLblMultisource, "BOOT/MULTISOURCE", -200, 0, 1.f, 0.f);
_setHideAnim(m_bootBtnMultisource, "BOOT/MULTISOURCE_BTN", 200, 0, 1.f, 0.f);
hideBoot(true, true); hideBoot(true, true);
_textBoot(); _textBoot();
} }

View File

@ -563,13 +563,17 @@ void CMenu::_game(bool launch)
currentPartition = m_cfg.getInt(WII_DOMAIN, "partition", 1); currentPartition = m_cfg.getInt(WII_DOMAIN, "partition", 1);
break; break;
default: default:
_checkForSinglePlugin(); m_plugin.GetEnabledPlugins(m_cfg, &enabledPluginsCount);
if(enabledPluginsCount == 1) if(enabledPluginsCount == 1)
{ {
char PluginMagicWord[9];
memset(PluginMagicWord, 0, sizeof(PluginMagicWord));
strncpy(PluginMagicWord, fmt("%08x", hdr->settings[0]), 8);
currentPartition = m_cfg.getInt("PLUGINS/PARTITION", PluginMagicWord, 1); currentPartition = m_cfg.getInt("PLUGINS/PARTITION", PluginMagicWord, 1);
m_cfg.setInt(PLUGIN_DOMAIN, "partition", currentPartition); m_cfg.setInt(PLUGIN_DOMAIN, "partition", currentPartition);
} }
currentPartition = m_cfg.getInt(PLUGIN_DOMAIN, "partition", 1); currentPartition = m_cfg.getInt(PLUGIN_DOMAIN, "partition", 1);
break;
} }
/* Get Banner Title for Playlog */ /* Get Banner Title for Playlog */
CurrentBanner.ClearBanner(); CurrentBanner.ClearBanner();

View File

@ -509,7 +509,7 @@ int CMenu::main(void)
//Events to Switch off/on nand emu //Events to Switch off/on nand emu
else if(m_btnMgr.selected(m_mainBtnChannel) || m_btnMgr.selected(m_mainBtnUsb) || m_btnMgr.selected(m_mainBtnDML)|| m_btnMgr.selected(m_mainBtnEmu) || m_btnMgr.selected(m_mainBtnHomebrew)) else if(m_btnMgr.selected(m_mainBtnChannel) || m_btnMgr.selected(m_mainBtnUsb) || m_btnMgr.selected(m_mainBtnDML)|| m_btnMgr.selected(m_mainBtnEmu) || m_btnMgr.selected(m_mainBtnHomebrew))
{ {
if(m_cfg.getBool("GENERAL", "b_on_mode_to_source", false)) if(m_cfg.getBool("GENERAL", "b_on_mode_to_source", true))
{ {
_hideMain(); _hideMain();
if(!_Source()) //Different source selected if(!_Source()) //Different source selected
@ -1148,8 +1148,19 @@ void CMenu::_setPartition(s8 direction)
else else
{ {
m_cfg.setInt(_domainFromView(), "partition", currentPartition); m_cfg.setInt(_domainFromView(), "partition", currentPartition);
_checkForSinglePlugin(); vector<bool> plugin_list = m_plugin.GetEnabledPlugins(m_cfg, &enabledPluginsCount);
if(enabledPluginsCount == 1) if(enabledPluginsCount == 1)
{
u8 i = 0;
for(i = 0; i < enabledPluginsCount; ++i)
{
if(plugin_list[i] == true)
break;
}
char PluginMagicWord[9];
memset(PluginMagicWord, 0, sizeof(PluginMagicWord));
strncpy(PluginMagicWord, fmt("%08x", m_plugin.getPluginMagic(i)), 8);
m_cfg.setInt("PLUGINS/PARTITION", PluginMagicWord, currentPartition); m_cfg.setInt("PLUGINS/PARTITION", PluginMagicWord, currentPartition);
}
} }
} }

View File

@ -74,7 +74,7 @@ void CMenu::_updatePluginCheckboxes(void)
m_btnMgr.hide(m_pluginBtn[i]); m_btnMgr.hide(m_pluginBtn[i]);
m_btnMgr.hide(m_pluginLblCat[i]); m_btnMgr.hide(m_pluginLblCat[i]);
} }
const vector<bool> &EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg); const vector<bool> &EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg, &enabledPluginsCount);
/* ALL Button */ /* ALL Button */
if(EnabledPlugins.size() == 0) if(EnabledPlugins.size() == 0)
m_pluginBtn[0] = m_pluginBtnCats[0]; m_pluginBtn[0] = m_pluginBtnCats[0];
@ -153,9 +153,9 @@ void CMenu::_PluginSettings()
{ {
if(i == 0) if(i == 0)
{ {
bool EnableAll = m_plugin.GetEnabledPlugins(m_cfg).size(); m_plugin.GetEnabledPlugins(m_cfg, &enabledPluginsCount);
for(u8 j = 0; m_plugin.PluginExist(j); j++) for(u8 j = 0; m_plugin.PluginExist(j); j++)
m_plugin.SetEnablePlugin(m_cfg, j, EnableAll ? 2 : 1); m_plugin.SetEnablePlugin(m_cfg, j, (enabledPluginsCount == 0) ? 2 : 1);
} }
else else
m_plugin.SetEnablePlugin(m_cfg, i+IteratorHelp-1); m_plugin.SetEnablePlugin(m_cfg, i+IteratorHelp-1);

View File

@ -107,9 +107,11 @@ void CMenu::_updateSourceBtns(void)
if(btnSource == "") if(btnSource == "")
continue; continue;
else if(m_multisource == false)
ImgName = m_source.getString(fmt("BUTTON_%i", i),"image", "").c_str();
else if(btnSource == "allplugins") else if(btnSource == "allplugins")
{ {
const vector<bool> &EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg); const vector<bool> &EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg, &enabledPluginsCount);
if(EnabledPlugins.size() == 0) if(EnabledPlugins.size() == 0)
{ {
sourceBtn = i; sourceBtn = i;
@ -282,7 +284,7 @@ bool CMenu::_Source()
} }
if(selectedBtns == 0) if(selectedBtns == 0)
m_cfg.setBool(WII_DOMAIN, "source", true); m_cfg.setBool(WII_DOMAIN, "source", true);
u8 sourceCount = 0; u8 sourceCount = 0;
if(m_cfg.getBool(WII_DOMAIN, "source", false)) if(m_cfg.getBool(WII_DOMAIN, "source", false))
sourceCount++; sourceCount++;
@ -302,7 +304,8 @@ bool CMenu::_Source()
m_btnMgr.up(); m_btnMgr.up();
else if(BTN_DOWN_PRESSED) else if(BTN_DOWN_PRESSED)
m_btnMgr.down(); m_btnMgr.down();
else if((BTN_LEFT_PRESSED && source_Pages > 1) || (BTN_A_PRESSED && m_btnMgr.selected(m_sourceBtnPageM))) else if(((m_multisource?BTN_LEFT_PRESSED:BTN_MINUS_PRESSED) && source_Pages > 1)
|| (BTN_A_PRESSED && m_btnMgr.selected(m_sourceBtnPageM)))
{ {
source_curPage--; source_curPage--;
if(source_curPage < 1) if(source_curPage < 1)
@ -311,7 +314,8 @@ bool CMenu::_Source()
m_btnMgr.click(m_sourceBtnPageM); m_btnMgr.click(m_sourceBtnPageM);
_updateSourceBtns(); _updateSourceBtns();
} }
else if((BTN_RIGHT_PRESSED && source_Pages > 1) || (BTN_A_PRESSED && m_btnMgr.selected(m_sourceBtnPageP))) else if(((m_multisource?BTN_RIGHT_PRESSED:BTN_PLUS_PRESSED) && source_Pages > 1)
|| (BTN_A_PRESSED && m_btnMgr.selected(m_sourceBtnPageP)))
{ {
source_curPage++; source_curPage++;
if(source_curPage > source_Pages) if(source_curPage > source_Pages)
@ -370,7 +374,7 @@ bool CMenu::_Source()
} }
} }
} }
else if((BTN_A_PRESSED || BTN_PLUS_PRESSED) && sourceIniLoaded) else if((BTN_A_PRESSED || (BTN_PLUS_PRESSED && m_multisource)) && sourceIniLoaded)
{ {
// check actual source menu buttons // check actual source menu buttons
j = (source_curPage - 1) * 12; j = (source_curPage - 1) * 12;
@ -378,188 +382,177 @@ bool CMenu::_Source()
{ {
if(m_btnMgr.selected(m_sourceBtnSource[i])) if(m_btnMgr.selected(m_sourceBtnSource[i]))
{ {
string source = m_source.getString(fmt("BUTTON_%i", i + j), "source", ""); const char *btn_selected = fmt("BUTTON_%i", i + j);
if(source == "wii" && BTN_A_PRESSED) gprintf("%s\n", btn_selected);
string source = m_source.getString(btn_selected, "source", "");
gprintf("%s\n", source.c_str());
if(BTN_A_PRESSED)
{ {
_clearSources(); _clearSources();
m_cfg.setBool(WII_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(fmt("BUTTON_%i", i + j), "cat_page", 1);
exitSource = true; exitSource = true;
m_catStartPage = 1;
if(source == "wii")
{
m_cfg.setBool(WII_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(btn_selected, "cat_page", 1);
}
else if(source == "dml")
{
if(!m_show_dml && !m_devo_installed)
_showSourceNotice();
else
{
m_cfg.setBool(GC_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(btn_selected, "cat_page", 1);
}
}
else if(source == "emunand")
{
if(!show_channel)
_showSourceNotice();
else
{
m_cfg.setBool(CHANNEL_DOMAIN, "disable", false);
m_cfg.setBool(CHANNEL_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(btn_selected, "cat_page", 1);
}
}
else if(source == "realnand")
{
if(!show_channel)
_showSourceNotice();
else
{
m_cfg.setBool(CHANNEL_DOMAIN, "disable", true);
m_cfg.setBool(CHANNEL_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(btn_selected, "cat_page", 1);
}
}
else if(source == "homebrew")
{
if(!show_homebrew || (!parental_homebrew && m_locked))
_showSourceNotice();
else
{
m_cfg.setBool(HOMEBREW_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(btn_selected, "cat_page", 1);
}
}
else if(source == "allplugins")
{
if(!show_emu)
_showSourceNotice();
else
{
m_cfg.setBool(PLUGIN_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(btn_selected, "cat_page", 1);
for(k = 0; k < numPlugins; ++k)
m_plugin.SetEnablePlugin(m_cfg, k, 2); /* force enable */
}
}
else if(source == "plugin")
{
if(!show_emu)
_showSourceNotice();
else
{
magicNums.clear();
magicNums = m_source.getStrings(btn_selected, "magic", ',');
if(!magicNums.empty())
{
m_cfg.setBool(PLUGIN_DOMAIN, "source", true);
for(k = 0; k < numPlugins; ++k)
m_plugin.SetEnablePlugin(m_cfg, k, 1); /* force disable */
for(vector<string>::iterator itr = magicNums.begin(); itr != magicNums.end(); itr++)
{
s8 exist = m_plugin.GetPluginPosition(strtoul(itr->c_str(), NULL, 16));
if(exist >= 0)
m_plugin.SetEnablePlugin(m_cfg, exist, 2);
}
}
m_catStartPage = m_source.getInt(btn_selected, "cat_page", 1);
int layout = m_source.getInt(btn_selected, "emuflow", 0);
if(layout > 0)
m_cfg.setInt(PLUGIN_DOMAIN, "last_cf_mode", layout);
int category = m_source.getInt(btn_selected, "category", 0);
if(category > 0)
{
m_cat.remove("GENERAL", "selected_categories");
m_cat.remove("GENERAL", "required_categories");
char cCh = static_cast<char>(category + 32);
string newSelCats(1, cCh);
m_cat.setString("GENERAL", "selected_categories", newSelCats);
m_clearCats = false;
}
}
}
break; break;
} }
else if(source == "wii" && BTN_PLUS_PRESSED) else
{ {
updateSource = true; updateSource = true;
m_cfg.setBool(WII_DOMAIN, "source", !m_cfg.getBool(WII_DOMAIN, "source")); if(source == "wii")
break;
}
if(source == "dml")
{
if(!m_show_dml && !m_devo_installed) _showSourceNotice();
else if(BTN_A_PRESSED)
{ {
_clearSources(); m_cfg.setBool(WII_DOMAIN, "source", !m_cfg.getBool(WII_DOMAIN, "source"));
m_cfg.setBool(GC_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(fmt("BUTTON_%i", i + j), "cat_page", 1);
exitSource = true;
} }
else if(BTN_PLUS_PRESSED) else if(source == "dml")
{ {
updateSource = true; if(m_show_dml || m_devo_installed)
m_cfg.setBool(GC_DOMAIN, "source", !m_cfg.getBool(GC_DOMAIN, "source")); m_cfg.setBool(GC_DOMAIN, "source", !m_cfg.getBool(GC_DOMAIN, "source"));
} }
break; else if(source == "emunand")
}
if(source == "emunand")
{
if(!show_channel) _showSourceNotice();
else
{ {
m_cfg.setBool(CHANNEL_DOMAIN, "disable", false); if(show_channel)
if(BTN_A_PRESSED)
{ {
_clearSources(); m_cfg.setBool(CHANNEL_DOMAIN, "disable", false);
m_cfg.setBool(CHANNEL_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(fmt("BUTTON_%i", i + j), "cat_page", 1);
exitSource = true;
}
else
{
updateSource = true;
m_cfg.setBool(CHANNEL_DOMAIN, "source", !m_cfg.getBool(CHANNEL_DOMAIN, "source")); m_cfg.setBool(CHANNEL_DOMAIN, "source", !m_cfg.getBool(CHANNEL_DOMAIN, "source"));
} }
} }
break; else if(source == "realnand")
}
if(source == "realnand")
{
if(!show_channel) _showSourceNotice();
else
{ {
m_cfg.setBool(CHANNEL_DOMAIN, "disable", true); if(show_channel)
if(BTN_A_PRESSED)
{ {
_clearSources(); m_cfg.setBool(CHANNEL_DOMAIN, "disable", true);
m_cfg.setBool(CHANNEL_DOMAIN, "source", true);
m_catStartPage = m_source.getInt(fmt("BUTTON_%i", i + j), "cat_page", 1);
exitSource = true;
}
else
{
updateSource = true;
m_cfg.setBool(CHANNEL_DOMAIN, "source", !m_cfg.getBool(CHANNEL_DOMAIN, "source")); m_cfg.setBool(CHANNEL_DOMAIN, "source", !m_cfg.getBool(CHANNEL_DOMAIN, "source"));
} }
} }
break; else if(source == "homebrew")
}
if(source == "homebrew")
{
if(!show_homebrew || (!parental_homebrew && m_locked)) _showSourceNotice();
else if(BTN_A_PRESSED)
{ {
_clearSources(); if(show_homebrew && (parental_homebrew || !m_locked))
m_cfg.setBool(HOMEBREW_DOMAIN, "source", true); m_cfg.setBool(HOMEBREW_DOMAIN, "source", !m_cfg.getBool(HOMEBREW_DOMAIN, "source"));
m_catStartPage = m_source.getInt(fmt("BUTTON_%i", i + j), "cat_page", 1);
exitSource = true;
} }
else if(BTN_PLUS_PRESSED) else if(source == "allplugins")
{ {
updateSource = true; if(show_emu)
m_cfg.setBool(HOMEBREW_DOMAIN, "source", !m_cfg.getBool(HOMEBREW_DOMAIN, "source")); {
m_plugin.GetEnabledPlugins(m_cfg, &enabledPluginsCount);
for(j = 0; m_plugin.PluginExist(j); ++j) /* opposite */
m_plugin.SetEnablePlugin(m_cfg, j, (enabledPluginsCount == 0) ? 2 : 1);
m_cfg.setBool(PLUGIN_DOMAIN, "source", (enabledPluginsCount == 0) ? true : false);
}
} }
break; else if(source == "plugin")
}
if(source == "allplugins")
{
if(!show_emu) _showSourceNotice();
else if(BTN_A_PRESSED)
{ {
_clearSources(); if(show_emu)
m_cfg.setBool(PLUGIN_DOMAIN, "source", true); {
m_catStartPage = m_source.getInt(fmt("BUTTON_%i", i + j), "cat_page", 1); magicNums.clear();
exitSource = true; magicNums = m_source.getStrings(btn_selected, "magic", ',');
for (j = 0; j < numPlugins; ++j) if(!magicNums.empty())
m_plugin.SetEnablePlugin(m_cfg, j, 2);
}
else if(BTN_PLUS_PRESSED)
{
updateSource = true;
bool EnableAll = m_plugin.GetEnabledPlugins(m_cfg).size();
for(j = 0; m_plugin.PluginExist(j); j++)
m_plugin.SetEnablePlugin(m_cfg, j, EnableAll ? 2 : 1);
if(EnableAll)
m_cfg.setBool(PLUGIN_DOMAIN, "source", true);
else
m_cfg.setBool(PLUGIN_DOMAIN, "source", false);
}
break;
}
if (source == "plugin")
{
if(!show_emu) _showSourceNotice();
else
{
magicNums.clear();
magicNums = m_source.getStrings(fmt("BUTTON_%i", i + j), "magic", ',');
if (magicNums.size() > 0)
{
if(BTN_A_PRESSED)
{ {
_clearSources(); for(vector<string>::iterator itr = magicNums.begin(); itr != magicNums.end(); itr++)
m_cfg.setBool(PLUGIN_DOMAIN, "source", true);
exitSource = true;
for (k = 0; k < numPlugins; ++k)
m_plugin.SetEnablePlugin(m_cfg, k, 1);
for (vector<string>::iterator itr = magicNums.begin(); itr != magicNums.end(); itr++)
{ {
string magic = *itr; u32 cur_magic = strtoul(itr->c_str(), NULL, 16);
u32 sourceMagic = strtoul(magic.c_str(), NULL, 16); s8 exist = m_plugin.GetPluginPosition(cur_magic);
for (k = 0; k < numPlugins; ++k) if(exist >= 0)
{ {
if (sourceMagic == m_plugin.getPluginMagic(k)) bool enabled = m_plugin.GetEnableStatus(m_cfg, cur_magic);
m_plugin.SetEnablePlugin(m_cfg, k, 2); m_plugin.SetEnablePlugin(m_cfg, exist, enabled ? 1 : 2);
break;
} }
} }
m_catStartPage = m_source.getInt(fmt("BUTTON_%i", i + j), "cat_page", 1);
int layout = m_source.getInt(fmt("BUTTON_%i", i + j), "emuflow", 0);
if(layout > 0)
m_cfg.setInt(PLUGIN_DOMAIN, "last_cf_mode", layout);
int category = m_source.getInt(fmt("BUTTON_%i", i + j), "category", 0);
if(category > 0)
{
m_cat.remove("GENERAL", "selected_categories");
m_cat.remove("GENERAL", "required_categories");
char cCh = static_cast<char>(category + 32);
string newSelCats(1, cCh);
m_cat.setString("GENERAL", "selected_categories", newSelCats);
m_clearCats = false;
}
}
else
{
updateSource = true;
// turn off all plugins unless plugin source is already on
if(!m_cfg.getBool(PLUGIN_DOMAIN, "source", false))
{
for (k = 0; k < numPlugins; ++k)
m_plugin.SetEnablePlugin(m_cfg, k, 1);
}
for (vector<string>::iterator itr = magicNums.begin(); itr != magicNums.end(); itr++)
{
string magic = *itr;
m_cfg.setBool("PLUGIN", magic, !m_cfg.getBool("PLUGIN", magic, false));
if(m_cfg.getBool("PLUGIN", magic))
m_cfg.setBool(PLUGIN_DOMAIN, "source", true);
}
}
_checkForSinglePlugin();
if(enabledPluginsCount == 0 && BTN_PLUS_PRESSED) // if last plugin turn domain off
m_cfg.setBool(PLUGIN_DOMAIN, "source", false);
if(enabledPluginsCount == 1)
{
currentPartition = m_cfg.getInt("PLUGINS/PARTITION", PluginMagicWord, 1);
m_cfg.setInt(PLUGIN_DOMAIN, "partition", currentPartition);
} }
m_plugin.GetEnabledPlugins(m_cfg, &enabledPluginsCount);
m_cfg.setBool(PLUGIN_DOMAIN, "source", enabledPluginsCount > 0 ? true : false);
} }
} }
break; break;

View File

@ -153,7 +153,17 @@ void Plugin::SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode)
} }
} }
const vector<bool> &Plugin::GetEnabledPlugins(Config &cfg) bool Plugin::GetEnableStatus(Config &cfg, u32 magic)
{
if((Plugin_Pos = GetPluginPosition(magic)) >= 0)
{
strncpy(PluginMagicWord, fmt("%08x", magic), 8);
return cfg.getBool(PLUGIN_INI_DEF, PluginMagicWord, true);
}
return false;
}
const vector<bool> &Plugin::GetEnabledPlugins(Config &cfg, u8 *num)
{ {
enabledPlugins.clear(); enabledPlugins.clear();
u8 enabledPluginsNumber = 0; u8 enabledPluginsNumber = 0;
@ -170,6 +180,8 @@ const vector<bool> &Plugin::GetEnabledPlugins(Config &cfg)
} }
if(enabledPluginsNumber == Plugins.size()) if(enabledPluginsNumber == Plugins.size())
enabledPlugins.clear(); enabledPlugins.clear();
if(num != NULL)
*num = enabledPluginsNumber;
return enabledPlugins; return enabledPlugins;
} }

View File

@ -59,12 +59,13 @@ public:
u32 GetBannerSoundSize(); u32 GetBannerSoundSize();
const char *GetDolName(u32 magic); const char *GetDolName(u32 magic);
const char *GetCoverFolderName(u32 magic); const char *GetCoverFolderName(u32 magic);
bool GetEnableStatus(Config &cfg, u32 magic);
string GenerateCoverLink(dir_discHdr gameHeader, const string& constURL, Config &Checksums); string GenerateCoverLink(dir_discHdr gameHeader, const string& constURL, Config &Checksums);
wstringEx GetPluginName(u8 pos); wstringEx GetPluginName(u8 pos);
u32 getPluginMagic(u8 pos); u32 getPluginMagic(u8 pos);
bool PluginExist(u8 pos); bool PluginExist(u8 pos);
void SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode = 0); void SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode = 0);
const vector<bool> &GetEnabledPlugins(Config &cfg); const vector<bool> &GetEnabledPlugins(Config &cfg, u8 *num);
vector<string> CreateArgs(const char *device, const char *path, vector<string> CreateArgs(const char *device, const char *path,
const char *title, const char *loader, u32 title_len_no_ext, u32 magic); const char *title, const char *loader, u32 title_len_no_ext, u32 magic);
void init(const string& m_pluginsDir); void init(const string& m_pluginsDir);