Skip to content

Commit

Permalink
add persistent folder button
Browse files Browse the repository at this point in the history
  • Loading branch information
altalk23 committed Sep 14, 2024
1 parent 68ab475 commit 358590b
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 30 deletions.
Binary file added loader/resources/persistent.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added loader/resources/save.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified loader/resources/settings.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
72 changes: 43 additions & 29 deletions loader/src/ui/mods/settings/ModSettingsPopup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,28 +145,46 @@ bool ModSettingsPopup::setup(Mod* mod) {
);
m_buttonMenu->addChildAtPosition(resetBtn, Anchor::BottomLeft, ccp(45, 20));

auto configFolderSpr = CCSprite::createWithSpriteFrameName("folderIcon_001.png");
m_openConfigDirBtnSpr = createGeodeButton(configFolderSpr, "");
m_openConfigDirBtnSpr->setScale(.6f);
m_openConfigDirBtnSpr->getIcon()->setScale(m_openConfigDirBtnSpr->getIcon()->getScale() * 1.4f);
auto openConfigDirBtn = CCMenuItemSpriteExtra::create(
m_openConfigDirBtnSpr, this, menu_selector(ModSettingsPopup::onOpenConfigDirectory)
);
m_buttonMenu->addChildAtPosition(openConfigDirBtn, Anchor::BottomRight, ccp(-50, 20));

auto settingFolderSpr = CCSprite::createWithSpriteFrameName("folderIcon_001.png");
auto settingFolderSprSub = CCSprite::createWithSpriteFrameName("settings.png"_spr);
settingFolderSprSub->setColor(ccBLACK);
settingFolderSprSub->setOpacity(155);
settingFolderSprSub->setScale(.55f);
settingFolderSpr->addChildAtPosition(settingFolderSprSub, Anchor::Center, ccp(0, -3));
auto openDirBtnSpr = createGeodeButton(settingFolderSpr, "");
openDirBtnSpr->setScale(.6f);
openDirBtnSpr->getIcon()->setScale(openDirBtnSpr->getIcon()->getScale() * 1.4f);
auto openDirBtn = CCMenuItemSpriteExtra::create(
openDirBtnSpr, this, menu_selector(ModSettingsPopup::onOpenSaveDirectory)
);
m_buttonMenu->addChildAtPosition(openDirBtn, Anchor::BottomRight, ccp(-20, 20));
auto foldersMenu = CCMenu::create();
foldersMenu->setContentSize({ 0, 30 });
foldersMenu->setAnchorPoint(ccp(1, 0));
foldersMenu->setLayout(RowLayout::create()
->setAxisReverse(true)
->setGap(5)
->setAutoGrowAxis(30)
->setGrowCrossAxis(true));
m_buttonMenu->addChildAtPosition(foldersMenu, Anchor::BottomRight, ccp(-5, 10));

auto createFolderButton = [&, this](auto subSprName, auto callback) {
auto folderSpr = CCSprite::createWithSpriteFrameName("folderIcon_001.png");
auto folderSprSub = CCSprite::createWithSpriteFrameName(subSprName);
folderSprSub->setColor(ccBLACK);
folderSprSub->setOpacity(155);
folderSprSub->setScale(.55f);
folderSpr->addChildAtPosition(folderSprSub, Anchor::Center, ccp(0, -3));
auto buttonSpr = createGeodeButton(folderSpr, "");
buttonSpr->setScale(.6f);
buttonSpr->getIcon()->setScale(buttonSpr->getIcon()->getScale() * 1.4f);
auto folderBtn = CCMenuItemSpriteExtra::create(
buttonSpr, this, static_cast<SEL_MenuHandler>(callback)
);
foldersMenu->addChild(folderBtn);
return folderBtn;
};

createFolderButton("save.png"_spr, &ModSettingsPopup::onOpenSaveDirectory);
createFolderButton("settings.png"_spr, &ModSettingsPopup::onOpenConfigDirectory);
auto persistentBtn = createFolderButton("persistent.png"_spr, &ModSettingsPopup::onOpenPersistentDirectory);
if (!std::filesystem::exists(mod->getPersistentDir(false))) {
persistentBtn->setEnabled(false);
auto spr = static_cast<CCSprite*>(persistentBtn->getNormalImage());
spr->setCascadeColorEnabled(true);
spr->setCascadeOpacityEnabled(true);
spr->setColor(ccGRAY);
spr->setOpacity(155);
}

foldersMenu->updateLayout();

m_changeListener.bind([this](auto* ev) {
this->updateState(ev->getNode());
Expand Down Expand Up @@ -224,7 +242,9 @@ void ModSettingsPopup::onOpenSaveDirectory(CCObject*) {
}
void ModSettingsPopup::onOpenConfigDirectory(CCObject*) {
file::openFolder(m_mod->getConfigDir());
this->updateState();
}
void ModSettingsPopup::onOpenPersistentDirectory(CCObject*) {
file::openFolder(m_mod->getPersistentDir());
}
void ModSettingsPopup::onClearSearch(CCObject*) {
m_searchInput->setString("");
Expand All @@ -239,12 +259,6 @@ void ModSettingsPopup::updateState(SettingNodeV3* invoker) {
m_restartBtn->setVisible(ModSettingsManager::from(m_mod)->restartRequired());
m_applyMenu->updateLayout();

auto configDirExists = std::filesystem::exists(m_mod->getConfigDir(false));
m_openConfigDirBtnSpr->setCascadeColorEnabled(true);
m_openConfigDirBtnSpr->setCascadeOpacityEnabled(true);
m_openConfigDirBtnSpr->setColor(configDirExists ? ccWHITE : ccGRAY);
m_openConfigDirBtnSpr->setOpacity(configDirExists ? 255 : 155);

auto listPosBefore = m_list->m_contentLayer->getPositionY();
auto listHeightBefore = m_list->m_contentLayer->getContentHeight();

Expand Down
2 changes: 1 addition & 1 deletion loader/src/ui/mods/settings/ModSettingsPopup.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ class ModSettingsPopup : public GeodePopup<Mod*> {
CCMenuItemSpriteExtra* m_applyBtn;
CCMenuItemSpriteExtra* m_restartBtn;
ButtonSprite* m_applyBtnSpr;
IconButtonSprite* m_openConfigDirBtnSpr;
TextInput* m_searchInput;
CCMenuItemSpriteExtra* m_searchClearBtn;
EventListener<EventFilter<SettingNodeValueChangeEventV3>> m_changeListener;
Expand All @@ -30,6 +29,7 @@ class ModSettingsPopup : public GeodePopup<Mod*> {
void onResetAll(CCObject*);
void onOpenSaveDirectory(CCObject*);
void onOpenConfigDirectory(CCObject*);
void onOpenPersistentDirectory(CCObject*);
void onClearSearch(CCObject*);

public:
Expand Down

0 comments on commit 358590b

Please sign in to comment.