Added GuiThemeDownloader to the main menu and added a callback to reload the menu on theme updates

This commit is contained in:
Leon Styhre 2023-03-31 23:00:23 +02:00
parent 3c6fff8a18
commit 8cdedd945f
3 changed files with 28 additions and 15 deletions

View file

@ -113,17 +113,17 @@ void GuiMenu::openUIOptions()
auto themeSet = auto themeSet =
std::make_shared<OptionListComponent<std::string>>(getHelpStyle(), "THEME SET", false); std::make_shared<OptionListComponent<std::string>>(getHelpStyle(), "THEME SET", false);
// TODO: Enable and possibly move somewhere else when the theme downloader is implemented. ComponentListRow themeDownloaderInputRow;
// ComponentListRow themeDownloaderInputRow; themeDownloaderInputRow.elements.clear();
// themeDownloaderInputRow.elements.clear(); themeDownloaderInputRow.addElement(
// themeDownloaderInputRow.addElement(std::make_shared<TextComponent>("THEME DOWNLOADER", std::make_shared<TextComponent>("THEME DOWNLOADER (EXPERIMENTAL)",
// Font::get(FONT_SIZE_MEDIUM), Font::get(FONT_SIZE_MEDIUM), 0x777777FF),
// 0x777777FF), true);
// true); themeDownloaderInputRow.addElement(makeArrow(), false);
// themeDownloaderInputRow.addElement(makeArrow(), false);
// themeDownloaderInputRow.makeAcceptInputHandler( themeDownloaderInputRow.makeAcceptInputHandler(
// std::bind(&GuiMenu::openThemeDownloader, this, s)); std::bind(&GuiMenu::openThemeDownloader, this, s));
// s->addRow(themeDownloaderInputRow); s->addRow(themeDownloaderInputRow);
// Theme set. // Theme set.
if (!themeSets.empty()) { if (!themeSets.empty()) {
@ -1793,7 +1793,13 @@ void GuiMenu::addVersionInfo()
void GuiMenu::openThemeDownloader(GuiSettings* settings) void GuiMenu::openThemeDownloader(GuiSettings* settings)
{ {
mWindow->pushGui(new GuiThemeDownloader()); auto updateFunc = [&, settings]() {
LOG(LogDebug) << "GuiMenu::openThemeDownloader(): Theme sets were updated, reloading menu";
delete settings;
openUIOptions();
};
mWindow->pushGui(new GuiThemeDownloader(updateFunc));
} }
void GuiMenu::openMediaViewerOptions() void GuiMenu::openMediaViewerOptions()

View file

@ -18,10 +18,11 @@
#define DEBUG_CLONING false #define DEBUG_CLONING false
GuiThemeDownloader::GuiThemeDownloader() GuiThemeDownloader::GuiThemeDownloader(std::function<void()> updateCallback)
: mRenderer {Renderer::getInstance()} : mRenderer {Renderer::getInstance()}
, mBackground {":/graphics/frame.svg"} , mBackground {":/graphics/frame.svg"}
, mGrid {glm::ivec2 {2, 4}} , mGrid {glm::ivec2 {2, 4}}
, mUpdateCallback(updateCallback)
, mRepositoryError {RepositoryError::NO_REPO_ERROR} , mRepositoryError {RepositoryError::NO_REPO_ERROR}
, mFetching {false} , mFetching {false}
, mLatestThemesList {false} , mLatestThemesList {false}
@ -179,6 +180,9 @@ GuiThemeDownloader::~GuiThemeDownloader()
if (mHasThemeUpdates) { if (mHasThemeUpdates) {
LOG(LogInfo) << "GuiThemeDownloader: There are updates, repopulating theme sets"; LOG(LogInfo) << "GuiThemeDownloader: There are updates, repopulating theme sets";
ThemeData::populateThemeSets(); ThemeData::populateThemeSets();
ViewController::getInstance()->reloadAll();
if (mUpdateCallback)
mUpdateCallback();
} }
} }
@ -1104,8 +1108,10 @@ bool GuiThemeDownloader::cloneRepository(const std::string& repositoryName, cons
return true; return true;
} }
if (repositoryName != "themes-list") if (repositoryName != "themes-list") {
LOG(LogInfo) << "GuiThemeDownloader: Downloaded theme \"" << repositoryName << "\"";
mHasThemeUpdates = true; mHasThemeUpdates = true;
}
mLatestThemesList = true; mLatestThemesList = true;
mPromise.set_value(true); mPromise.set_value(true);

View file

@ -37,7 +37,7 @@
class GuiThemeDownloader : public GuiComponent class GuiThemeDownloader : public GuiComponent
{ {
public: public:
GuiThemeDownloader(); GuiThemeDownloader(std::function<void()> updateCallback);
~GuiThemeDownloader(); ~GuiThemeDownloader();
void update(int deltaTime) override; void update(int deltaTime) override;
@ -105,6 +105,7 @@ private:
std::shared_ptr<ComponentList> mList; std::shared_ptr<ComponentList> mList;
std::shared_ptr<ComponentGrid> mButtons; std::shared_ptr<ComponentGrid> mButtons;
BusyComponent mBusyAnim; BusyComponent mBusyAnim;
std::function<void()> mUpdateCallback;
struct ThemeGUIEntry { struct ThemeGUIEntry {
std::shared_ptr<TextComponent> themeName; std::shared_ptr<TextComponent> themeName;