diff --git a/src/gui/game/Favorite.cpp b/src/gui/game/Favorite.cpp index ffb52956e..c2363859f 100644 --- a/src/gui/game/Favorite.cpp +++ b/src/gui/game/Favorite.cpp @@ -1,26 +1,44 @@ #include "Favorite.h" +#include "json/json.h" +#include "client/Client.h" #include -std::vector *favoritesList; - -Favorite::Favorite() -{ - favoritesList = new std::vector(); -} +Favorite::Favorite(): + favoritesList(std::vector()) +{} -std::vector *Favorite::GetFavoritesList() +std::vector Favorite::GetFavoritesList() { return favoritesList; } -void Favorite::SetFavoritesList(std::vector newFavoritesList) -{ - *favoritesList = newFavoritesList; -} - bool Favorite::IsFavorite(std::string identifier) { - std::vector tempFavoritsList = *favoritesList; - return std::find(tempFavoritsList.begin(), tempFavoritsList.end(), identifier) != tempFavoritsList.end(); + return std::find(favoritesList.begin(), favoritesList.end(), identifier) != favoritesList.end(); +} + +bool Favorite::AnyFavorites() +{ + return favoritesList.size() == 0; +} + +void Favorite::AddFavorite(std::string identifier) +{ + favoritesList.push_back(identifier); +} + +void Favorite::RemoveFavorite(std::string identifier) +{ + favoritesList.erase(std::remove(favoritesList.begin(), favoritesList.end(), identifier), favoritesList.end()); +} + +void Favorite::SaveFavoritesToPrefs() +{ + Client::Ref().SetPref("Favorites", std::vector(favoritesList.begin(), favoritesList.end())); +} + +void Favorite::LoadFavoritesFromPrefs() +{ + favoritesList = Client::Ref().GetPrefStringArray("Favorites"); } diff --git a/src/gui/game/Favorite.h b/src/gui/game/Favorite.h index 55c067847..17a274256 100644 --- a/src/gui/game/Favorite.h +++ b/src/gui/game/Favorite.h @@ -6,11 +6,20 @@ #include "common/Singleton.h" -class Favorite : public Singleton { +class Favorite : public Singleton +{ + std::vector favoritesList; public: Favorite(); - std::vector * GetFavoritesList(); - void SetFavoritesList(std::vector favoritesList); + + std::vector GetFavoritesList(); bool IsFavorite(std::string identifier); + bool AnyFavorites(); + + void AddFavorite(std::string identifier); + void RemoveFavorite(std::string identifier); + + void SaveFavoritesToPrefs(); + void LoadFavoritesFromPrefs(); }; #endif //FAVORITE_H diff --git a/src/gui/game/GameModel.cpp b/src/gui/game/GameModel.cpp index a4f2cb435..10bd933a7 100644 --- a/src/gui/game/GameModel.cpp +++ b/src/gui/game/GameModel.cpp @@ -82,10 +82,7 @@ GameModel::GameModel(): sim->aheat_enable = Client::Ref().GetPrefInteger("Simulation.AmbientHeat", 0); sim->pretty_powder = Client::Ref().GetPrefInteger("Simulation.PrettyPowder", 0); - //Load favorites - std::vector favoritesList = Client::Ref().GetPrefStringArray("Favorites"); - - Favorite::Ref().SetFavoritesList(favoritesList); + Favorite::Ref().LoadFavoritesFromPrefs(); //Load last user if(Client::Ref().GetAuthUser().ID) @@ -162,7 +159,7 @@ GameModel::~GameModel() Client::Ref().SetPref("Decoration.Blue", (int)colour.Blue); Client::Ref().SetPref("Decoration.Alpha", (int)colour.Alpha); - Client::Ref().SetPref("Favorites", std::vector(Favorite::Ref().GetFavoritesList()->begin(), Favorite::Ref().GetFavoritesList()->end())); + Favorite::Ref().SaveFavoritesToPrefs(); for (size_t i = 0; i < menuList.size(); i++) { @@ -374,7 +371,7 @@ void GameModel::BuildFavoritesMenu() { menuList[SC_FAVORITES]->ClearTools(); - for (size_t i = 0; i < menuList.size(); i++) + /*for (size_t i = 0; i < menuList.size(); i++) { if (i == SC_FAVORITES) continue; @@ -387,6 +384,21 @@ void GameModel::BuildFavoritesMenu() } } } + for (size_t i = 0; i < extraElementTools.size(); i++) + { + if (Favorite::Ref().IsFavorite(extraElementTools[i]->GetIdentifier())) + { + menuList[SC_FAVORITES]->AddTool(extraElementTools[i]); + } + }*/ + + std::vector favList = Favorite::Ref().GetFavoritesList(); + for (size_t i = 0; i < favList.size(); i++) + { + Tool *tool = GetToolFromIdentifier(favList[i]); + if (tool) + menuList[SC_FAVORITES]->AddTool(tool); + } if (activeMenu == SC_FAVORITES) toolList = menuList[SC_FAVORITES]->GetToolList(); diff --git a/src/gui/game/GameView.cpp b/src/gui/game/GameView.cpp index b3f0ed946..7bf44984f 100644 --- a/src/gui/game/GameView.cpp +++ b/src/gui/game/GameView.cpp @@ -542,12 +542,9 @@ public: if (v->ShiftBehaviour() && v->CtrlBehaviour() && !v->AltBehaviour()) { if (Favorite::Ref().IsFavorite(tool->GetIdentifier()) && sender->GetSelectionState() == 1) - { - Favorite::Ref().GetFavoritesList()->erase(std::remove(Favorite::Ref().GetFavoritesList()->begin(), Favorite::Ref().GetFavoritesList()->end(), - tool->GetIdentifier()), Favorite::Ref().GetFavoritesList()->end()); - } + Favorite::Ref().RemoveFavorite(tool->GetIdentifier()); else if (sender->GetSelectionState() == 0) - Favorite::Ref().GetFavoritesList()->push_back(tool->GetIdentifier()); + Favorite::Ref().AddFavorite(tool->GetIdentifier()); else if (sender->GetSelectionState() == 2) v->c->SetActiveMenu(SC_FAVORITES); @@ -613,7 +610,7 @@ void GameView::NotifyMenuListChanged(GameModel * sender) std::string tempString = ""; tempString += menuList[i]->GetIcon(); std::string description = menuList[i]->GetDescription(); - if (i == SC_FAVORITES && Favorite::Ref().GetFavoritesList()->size() == 0) + if (i == SC_FAVORITES && Favorite::Ref().AnyFavorites()) description += " (Use ctrl+shift+click to favorite an element)"; ui::Button * tempButton = new ui::Button(ui::Point(WINDOWW-16, currentY), ui::Point(15, 15), tempString, description); tempButton->Appearance.Margin = ui::Border(0, 2, 3, 2);