Browse Source

Add to favorite button now has an icon.

Stephen Damm 6 years ago
parent
commit
befdc5e374

File diff suppressed because it is too large
+ 5 - 1
SongBrowserPlugin/UI/Base64Sprites.cs


+ 59 - 36
SongBrowserPlugin/UI/SongBrowserUI.cs

@@ -40,7 +40,6 @@ namespace SongBrowserPlugin.UI
         // New UI Elements
         private List<SongSortButton> _sortButtonGroup;
         private Button _addFavoriteButton;
-        private String _addFavoriteButtonText = null;
         private SimpleDialogPromptViewController _simpleDialogPromptViewControllerPrefab;
         private SimpleDialogPromptViewController _deleteDialog;
         private Button _deleteButton;        
@@ -50,6 +49,10 @@ namespace SongBrowserPlugin.UI
         private Button _upFolderButton;
         private SearchKeyboardViewController _searchViewController;
 
+        // Cached items
+        private Sprite _addFavoriteSprite;
+        private Sprite _removeFavoriteSprite;
+        private Sprite _currentAddFavoriteButtonSprite;
 
         // Debug
         private int _sortButtonLastPushedIndex = 0;
@@ -116,6 +119,9 @@ namespace SongBrowserPlugin.UI
                 this._deleteDialog = UnityEngine.Object.Instantiate<SimpleDialogPromptViewController>(this._simpleDialogPromptViewControllerPrefab);
                 this._deleteDialog.gameObject.SetActive(false);
 
+                this._addFavoriteSprite = Base64Sprites.Base64ToSprite(Base64Sprites.AddToFavorites);
+                this._removeFavoriteSprite = Base64Sprites.Base64ToSprite(Base64Sprites.RemoveFromFavorites);
+
                 this.CreateUIElements();
 
                 _levelListViewController.didSelectLevelEvent += OnDidSelectLevelEvent;
@@ -181,24 +187,33 @@ namespace SongBrowserPlugin.UI
                 _sortButtonGroup = new List<SongSortButton>();
                 for (int i = 0; i < buttonNames.Length; i++)
                 {
-                    _sortButtonGroup.Add(UIBuilder.CreateSortButton(sortButtonTransform, sortButtonTemplate, arrowIcon, buttonNames[i], fontSize, buttonX, buttonY, buttonWidth, buttonHeight, sortModes[i], onClickEvents[i]));
+                    _sortButtonGroup.Add(UIBuilder.CreateSortButton(sortButtonTransform, sortButtonTemplate, arrowIcon, 
+                        buttonNames[i], 
+                        fontSize, 
+                        buttonX, 
+                        buttonY, 
+                        buttonWidth, 
+                        buttonHeight, 
+                        sortModes[i], 
+                        onClickEvents[i]));
                     buttonX += buttonWidth;
                 }
 
                 // Create Add to Favorites Button
-                _log.Debug("Creating add to favorites button...");                
-                _addFavoriteButton = UIBuilder.CreateUIButton(otherButtonTransform, otherButtonTemplate);
-                (_addFavoriteButton.transform as RectTransform).anchoredPosition = new Vector2(40f, (sortButtonTemplate.transform as RectTransform).anchoredPosition.y);
-                (_addFavoriteButton.transform as RectTransform).sizeDelta = new Vector2(10f, 10f);
-                UIBuilder.SetButtonText(ref _addFavoriteButton, _addFavoriteButtonText);
-                UIBuilder.SetButtonTextSize(ref _addFavoriteButton, fontSize);
-                UIBuilder.SetButtonIconEnabled(ref _addFavoriteButton, false);
-                _addFavoriteButton.onClick.RemoveAllListeners();
+                _log.Debug("Creating add to favorites button...");
+                Vector2 addFavoritePos = new Vector2(40f, (sortButtonTemplate.transform as RectTransform).anchoredPosition.y);
+                _addFavoriteButton = UIBuilder.CreateIconButton(otherButtonTransform, otherButtonTemplate, null, 
+                    new Vector2(addFavoritePos.x, addFavoritePos.y), 
+                    new Vector2(10.0f, 10.0f), 
+                    new Vector2(2f, -1.5f),
+                    new Vector2(7.0f, 7.0f), 
+                    new Vector2(1.0f, 1.0f),
+                    0.0f);
                 _addFavoriteButton.onClick.AddListener(delegate () {
                     ToggleSongInFavorites();
                 });
 
-                if (_addFavoriteButtonText == null)
+                if (_currentAddFavoriteButtonSprite == null)
                 {
                     IStandardLevel level = this._levelListViewController.selectedLevel;
                     if (level != null)
@@ -209,33 +224,36 @@ namespace SongBrowserPlugin.UI
 
                 // Create delete button
                 _log.Debug("Creating delete button...");
-                _deleteButton = UIBuilder.CreateUIButton(otherButtonTransform, otherButtonTemplate);
-                (_deleteButton.transform as RectTransform).anchoredPosition = new Vector2(46f, 0f);
-                (_deleteButton.transform as RectTransform).sizeDelta = new Vector2(15f, 5f);
-                UIBuilder.SetButtonText(ref _deleteButton, "Delete");
-                UIBuilder.SetButtonTextSize(ref _deleteButton, fontSize);
-                UIBuilder.SetButtonIconEnabled(ref _deleteButton, false);
-                _deleteButton.onClick.RemoveAllListeners();
+                _deleteButton = UIBuilder.CreateButton(otherButtonTransform, otherButtonTemplate, "Delete", fontSize, 46f, 0f, 15f, 5f);                
                 _deleteButton.onClick.AddListener(delegate () {
                     HandleDeleteSelectedLevel();
                 });
 
                 // Create fast scroll buttons
-                _pageUpTenPercent = UIBuilder.CreatePageButton(sortButtonTransform, otherButtonTemplate, arrowIcon, 15, 67.5f, 6.0f, 5.5f, 1.5f, 1.5f, 180);
-                _pageUpTenPercent.onClick.RemoveAllListeners();
+                _pageUpTenPercent = UIBuilder.CreateIconButton(sortButtonTransform, otherButtonTemplate, arrowIcon,
+                    new Vector2(15, 67.5f),
+                    new Vector2(6.0f, 5.5f),
+                    new Vector2(0f, 0f),
+                    new Vector2(1.5f, 1.5f),
+                    new Vector2(2.0f, 2.0f), 
+                    180);
                 _pageUpTenPercent.onClick.AddListener(delegate () {
                     this.JumpSongList(-1, SEGMENT_PERCENT);
                 });
 
-                _pageDownTenPercent = UIBuilder.CreatePageButton(sortButtonTransform, otherButtonTemplate, arrowIcon, 15, 0.5f, 6.0f, 5.5f, 1.5f, 1.5f, 0);
-                _pageDownTenPercent.onClick.RemoveAllListeners();
+                _pageDownTenPercent = UIBuilder.CreateIconButton(sortButtonTransform, otherButtonTemplate, arrowIcon,
+                    new Vector2(15, 0.5f),
+                    new Vector2(6.0f, 5.5f),
+                    new Vector2(0f, 0f),
+                    new Vector2(1.5f, 1.5f),
+                    new Vector2(2.0f, 2.0f), 
+                    0);
                 _pageDownTenPercent.onClick.AddListener(delegate () {
                     this.JumpSongList(1, SEGMENT_PERCENT);
                 });
 
                 // Create enter folder button
                 _enterFolderButton = UIBuilder.CreateUIButton(otherButtonTransform, _playButton);
-                _enterFolderButton.onClick.RemoveAllListeners();
                 _enterFolderButton.onClick.AddListener(delegate()
                 {
                     _model.PushDirectory(_levelListViewController.selectedLevel);
@@ -245,7 +263,13 @@ namespace SongBrowserPlugin.UI
                 UIBuilder.SetButtonText(ref _enterFolderButton, "Enter");
 
                 // Create up folder button
-                _upFolderButton = UIBuilder.CreatePageButton(sortButtonTransform, sortButtonTemplate, arrowIcon, buttonX-4.0f, buttonY, 5.5f, buttonHeight, 0.85f, 0.85f, 180);
+                _upFolderButton = UIBuilder.CreateIconButton(sortButtonTransform, sortButtonTemplate, arrowIcon,
+                    new Vector2(buttonX -4.0f, buttonY),
+                    new Vector2(5.5f, buttonHeight),
+                    new Vector2(0f, 0f),
+                    new Vector2(0.85f, 0.85f),
+                    new Vector2(2.0f, 2.0f), 
+                    180);
                 _upFolderButton.onClick.RemoveAllListeners();
                 _upFolderButton.onClick.AddListener(delegate ()
                 {
@@ -579,16 +603,14 @@ namespace SongBrowserPlugin.UI
             {
                 _log.Info("Remove {0} from favorites", songInfo.songName);
                 _model.Settings.favorites.Remove(songInfo.levelID);
-                _addFavoriteButtonText = "+1";
             }
             else
             {
                 _log.Info("Add {0} to favorites", songInfo.songName);
                 _model.Settings.favorites.Add(songInfo.levelID);
-                _addFavoriteButtonText = "-1";                
             }
 
-            UIBuilder.SetButtonText(ref _addFavoriteButton, _addFavoriteButtonText);
+            RefreshAddFavoriteButton(songInfo.levelID);
 
             _model.Settings.Save();
         }
@@ -613,20 +635,21 @@ namespace SongBrowserPlugin.UI
         {
             if (levelId == null)
             {
-                _addFavoriteButtonText = "0";
-                return;
-            }
-
-            if (_model.Settings.favorites.Contains(levelId))
-            {
-                _addFavoriteButtonText = "-1";
+                _currentAddFavoriteButtonSprite = null;
             }
             else
             {
-                _addFavoriteButtonText = "+1";                
+                if (_model.Settings.favorites.Contains(levelId))
+                {
+                    _currentAddFavoriteButtonSprite = _removeFavoriteSprite;
+                }
+                else
+                {
+                    _currentAddFavoriteButtonSprite = _addFavoriteSprite;
+                }
             }
 
-            UIBuilder.SetButtonText(ref _addFavoriteButton, _addFavoriteButtonText);
+            UIBuilder.SetButtonIcon(ref _addFavoriteButton, _currentAddFavoriteButtonSprite);
         }
 
         /// <summary>

+ 7 - 6
SongBrowserPlugin/UI/UIBuilder.cs

@@ -155,13 +155,13 @@ namespace SongBrowserPlugin.UI
         /// <param name="iconHeight"></param>
         /// <param name="iconRotation"></param>
         /// <returns></returns>
-        public static Button CreatePageButton(RectTransform parent, Button buttonTemplate, Sprite iconSprite, float x, float y, float w, float h, float iconWidth, float iconHeight, float iconRotation)
+        public static Button CreateIconButton(RectTransform parent, Button buttonTemplate, Sprite iconSprite, Vector2 pos, Vector2 size, Vector2 iconPos, Vector2 iconSize, Vector2 iconScale, float iconRotation)
         {
             Button newButton = UIBuilder.CreateUIButton(parent, buttonTemplate);
 
             newButton.interactable = true;
-            (newButton.transform as RectTransform).anchoredPosition = new Vector2(x, y);
-            (newButton.transform as RectTransform).sizeDelta = new Vector2(w, h);
+            (newButton.transform as RectTransform).anchoredPosition = new Vector2(pos.x, pos.y);
+            (newButton.transform as RectTransform).sizeDelta = new Vector2(size.x, size.y);
 
             RectTransform iconTransform = newButton.GetComponentsInChildren<RectTransform>(true).First(c => c.name == "Icon");
             iconTransform.gameObject.SetActive(true);
@@ -169,13 +169,14 @@ namespace SongBrowserPlugin.UI
             HorizontalLayoutGroup hgroup = iconTransform.parent.GetComponent<HorizontalLayoutGroup>();
             UnityEngine.Object.Destroy(hgroup);
 
-            iconTransform.sizeDelta = new Vector2(iconWidth, iconHeight);
-            iconTransform.localScale = new Vector2(2f, 2f);
-            iconTransform.anchoredPosition = new Vector2(0, 0);
+            iconTransform.anchoredPosition = new Vector2(iconPos.x, iconPos.y);
+            iconTransform.sizeDelta = new Vector2(iconSize.x, iconSize.y);
+            iconTransform.localScale = new Vector2(iconScale.x, iconScale.y);            
             iconTransform.Rotate(0, 0, iconRotation);
 
             UnityEngine.Object.Destroy(newButton.GetComponentsInChildren<RectTransform>(true).First(c => c.name == "Text").gameObject);
 
+            UIBuilder.SetButtonBorder(ref newButton, Color.clear);
             UIBuilder.SetButtonIcon(ref newButton, iconSprite);
 
             return newButton;