diff --git a/loader/src/menu/content/ContentHome.cpp b/loader/src/menu/content/ContentHome.cpp index b262851..460c788 100644 --- a/loader/src/menu/content/ContentHome.cpp +++ b/loader/src/menu/content/ContentHome.cpp @@ -35,7 +35,11 @@ ContentHome::ContentHome():ContentTemplate() , exitPlus(gettext("Apply Patches")) , touchTrigger(GuiTrigger::CHANNEL_1, GuiTrigger::VPAD_TOUCH) , wpadTouchTrigger(GuiTrigger::CHANNEL_2 | GuiTrigger::CHANNEL_3 | GuiTrigger::CHANNEL_4 | GuiTrigger::CHANNEL_5, GuiTrigger::BUTTON_A) - , buttonClickSound(Resources::GetSound("settings_click_2.mp3")) { + , buttonClickSound(Resources::GetSound("settings_click_2.mp3")) + , buttonATrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_A, true) + , buttonUpTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_UP | GuiTrigger::STICK_L_UP, true) + , buttonDownTrigger(GuiTrigger::CHANNEL_ALL, GuiTrigger::BUTTON_DOWN | GuiTrigger::STICK_L_DOWN, true) + , DPADButtons(0,0) { glm::vec4 textColor = glm::vec4(1.0f,1.0f,1.0f,1.0f); homebutton_img.setAlignment(ALIGN_LEFT); @@ -62,8 +66,8 @@ ContentHome::ContentHome():ContentTemplate() welcomeHeadLineLabel.setColor(textColor); welcomeHeadLineLabel.setAlignment(ALIGN_MIDDLE|ALIGN_TOP); - welcomeHeadLineLabel.setFontSize(40); - welcomeHeadLineLabel.setPosition(-330,-50); + welcomeHeadLineLabel.setFontSize(50); + welcomeHeadLineLabel.setPosition(-370,-50); twitterLogoImage.setAlignment(ALIGN_BOTTOM|ALIGN_LEFT); twitterLogoImage.setPosition(10,20); @@ -78,6 +82,12 @@ ContentHome::ContentHome():ContentTemplate() URLLabel.setAlignment(ALIGN_BOTTOM|ALIGN_LEFT); URLLabel.setPosition(280,50); + DPADButtons.setTrigger(&buttonATrigger); + DPADButtons.setTrigger(&buttonDownTrigger); + DPADButtons.setTrigger(&buttonUpTrigger); + DPADButtons.clicked.connect(this, &ContentHome::OnDPADClick); + append(&DPADButtons); + PluginLoader * pluginLoader = PluginLoader::getInstance(); std::vector pluginList = pluginLoader->getPluginInformation("sd:/wiiu/plugins/"); std::vector pluginListLoaded = pluginLoader->getPluginsLoadedInMemory(); @@ -89,10 +99,15 @@ ContentHome::ContentHome():ContentTemplate() float frameoffset = 0; float frameheight = 50.0f; + int32_t selectionMappingIndex = 0; + selectionMappingMin = 0; for (std::vector::iterator it = pluginList.begin() ; it != pluginList.end(); ++it) { PluginInformation * curPlugin = *it; DefaultGuiSwitch * element = new DefaultGuiSwitch(false); + selectionMapping[selectionMappingIndex] = element; + selectionMappingIndex++; + element->setTrigger(&touchTrigger); element->setTrigger(&wpadTouchTrigger); element->setSoundClick(buttonClickSound); @@ -113,7 +128,7 @@ ContentHome::ContentHome():ContentTemplate() frame->append(left); frame->append(right); frame->setAlignment(ALIGN_TOP_CENTER); - frame->setSize(getWidth()*0.80f,frameheight); + frame->setSize(getWidth()*0.65f,frameheight); GuiText * text = new GuiText(curPlugin->getName().c_str()); text->setColor(glm::vec4(0.3f,0.3f,0.3f,1.0f)); @@ -139,6 +154,10 @@ ContentHome::ContentHome():ContentTemplate() toDelete.push_back(right); toDelete.push_back(text); } + selectionMappingMax = selectionMapping.size() -1; + if(selectionMappingMax < 0) { + selectionMappingMax = 0; + } pluginLoader->clearPluginInformation(pluginListLoaded); @@ -154,6 +173,41 @@ ContentHome::ContentHome():ContentTemplate() Application::instance()->setLinkPluginsCallback(fp); } +void ContentHome::OnDPADClick(GuiButton *button, const GuiController *controller, GuiTrigger *trigger) { + if(trigger == &buttonATrigger) { + if((controller->chan & (GuiTrigger::CHANNEL_2 | GuiTrigger::CHANNEL_3 | GuiTrigger::CHANNEL_4 | GuiTrigger::CHANNEL_5)) && controller->data.validPointer) { + return; + } + GuiToggle * toggleElement = selectionMapping[selectionMappingCur]; + if(toggleElement != NULL) { + buttonClickSound->Play(); + DEBUG_FUNCTION_LINE("Pressed a for %d\n",selectionMappingCur); + toggleElement->setValue(!toggleElement->getValue()); + } + } else if(trigger == &buttonUpTrigger || trigger == &buttonDownTrigger) { + if(selectionMappingCur == -1) { + selectionMappingCur = selectionMappingMin; + } else { + if(trigger == &buttonUpTrigger) { + if(selectionMappingCur > 0) { + selectionMappingCur--; + } else { + selectionMappingCur = selectionMappingMax; + } + } else if(trigger == &buttonDownTrigger) { + if(selectionMappingCur < selectionMappingMax) { + selectionMappingCur++; + } else { + selectionMappingCur = 0; + } + } + } + DEBUG_FUNCTION_LINE("%d\n",selectionMappingCur); + updateButtons = true; + } + +} + void ContentHome::OnValueChanged(GuiToggle * toggle,bool value) { } @@ -173,6 +227,25 @@ bool ContentHome::linkPlugins() { return PluginLoader::getInstance()->loadAndLinkPlugins(willBeLoaded); } + +void ContentHome::update(GuiController * c) { + ContentTemplate::update(c); + if(updateButtons){ + for (auto const& x : selectionMapping) { + int index = x.first; + GuiToggle* toggle = x.second; + if(toggle != NULL) { + if(index != selectionMappingCur) { + toggle->clearState(STATE_SELECTED); + } else { + toggle->setState(STATE_SELECTED); + } + } + } + updateButtons = false; + } +} + ContentHome::~ContentHome() { //Resources::RemoveImageData(logoImageData); <-- will reduce lag. Will be deleted at the end anyway remove(&bgImageColor); diff --git a/loader/src/menu/content/ContentHome.h b/loader/src/menu/content/ContentHome.h index f5fdd96..ece7362 100644 --- a/loader/src/menu/content/ContentHome.h +++ b/loader/src/menu/content/ContentHome.h @@ -59,12 +59,27 @@ private: GuiSound *buttonClickSound; + GuiTrigger buttonATrigger; + GuiTrigger buttonUpTrigger; + GuiTrigger buttonDownTrigger; + + GuiButton DPADButtons; + GuiFrame pluginsFrame; std::vector toDelete; + void OnDPADClick(GuiButton *button, const GuiController *controller, GuiTrigger *trigger); void OnValueChanged(GuiToggle * toggle,bool value); bool linkPlugins(); std::map pluginMapping; + std::map selectionMapping; + int selectionMappingMin = 0; + int selectionMappingMax = 0; + int selectionMappingCur = -1; + + bool updateButtons = true; + + virtual void update(GuiController * c); }; #endif //_CONTENT_HOME_H