/// <summary> /// Set up filter bar. /// We don't use Start() here as we need to access the category toggle states to set up the initial filtering list before Start() is called by UnityEngine. /// </summary> public void Setup() { // Catgegory buttons. categoryToggles = new UICheckBox[(int)BuildingCategories.NumCategories]; for (int i = 0; i < (int)BuildingCategories.NumCategories; i++) { // Basic setup. categoryToggles[i] = UIUtils.CreateIconToggle(this, CategoryIcons.atlases[i], CategoryIcons.spriteNames[i], CategoryIcons.spriteNames[i] + "Disabled"); categoryToggles[i].tooltip = Translations.Translate(CategoryIcons.tooltips[i]); categoryToggles[i].relativePosition = new Vector3(40 * i, 0); categoryToggles[i].isChecked = true; categoryToggles[i].readOnly = true; // Single click event handler - toggle state of this button. categoryToggles[i].eventClick += (c, p) => { // If either shift or control is NOT held down, deselect all other toggles. if (!(Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift) || Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))) { for (int j = 0; j < (int)BuildingCategories.NumCategories; j++) { categoryToggles[j].isChecked = false; } } // Select this toggle. ((UICheckBox)c).isChecked = true; // Trigger an update. EventFilteringChanged(this, 0); }; } // 'All categories' button. allCategories = UIControls.AddButton(this, 445f, 5f, Translations.Translate("RPR_CAT_ALL"), 120f); // All categories event handler. allCategories.eventClick += (c, p) => { // Select all category toggles. for (int i = 0; i < (int)BuildingCategories.NumCategories; i++) { categoryToggles[i].isChecked = true; } // Trigger an update. EventFilteringChanged(this, 0); }; // Name filter. nameFilter = UIControls.BigLabelledTextField(this, width - 200f, 0, Translations.Translate("RPR_FIL_NAME")); // Name filter event handling - update on any change. nameFilter.eventTextChanged += (control, text) => EventFilteringChanged(this, 5); nameFilter.eventTextSubmitted += (control, text) => EventFilteringChanged(this, 5); // Settings filter label. UILabel filterLabel = SettingsFilterLabel(55f, Translations.Translate("RPR_FIL_SET")); // Settings filter checkboxes. settingsFilter = new UICheckBox[(int)FilterCategories.NumCategories]; for (int i = 0; i < (int)FilterCategories.NumCategories; ++i) { settingsFilter[i] = this.AddUIComponent <UICheckBox>(); settingsFilter[i].width = 20f; settingsFilter[i].height = 20f; settingsFilter[i].clipChildren = true; settingsFilter[i].relativePosition = new Vector3(AnyX + (FilterSpacing * i), 45f); // Checkbox sprites. UISprite sprite = settingsFilter[i].AddUIComponent <UISprite>(); sprite.spriteName = "ToggleBase"; sprite.size = new Vector2(20f, 20f); sprite.relativePosition = Vector3.zero; settingsFilter[i].checkedBoxObject = sprite.AddUIComponent <UISprite>(); ((UISprite)settingsFilter[i].checkedBoxObject).spriteName = "ToggleBaseFocused"; settingsFilter[i].checkedBoxObject.size = new Vector2(20f, 20f); settingsFilter[i].checkedBoxObject.relativePosition = Vector3.zero; // Tooltip. settingsFilter[i].tooltip = Translations.Translate(FilterTooltipKeys[i]); // Special event handling for 'any' checkbox. if (i == (int)FilterCategories.Any) { settingsFilter[i].eventCheckChanged += (control, isChecked) => { if (isChecked) { // Unselect all other checkboxes if 'any' is checked. settingsFilter[(int)FilterCategories.HasOverride].isChecked = false; settingsFilter[(int)FilterCategories.HasNonDefault].isChecked = false; } }; } else { // Non-'any' checkboxes. // Unselect 'any' checkbox if any other is checked. settingsFilter[i].eventCheckChanged += (control, isChecked) => { if (isChecked) { settingsFilter[0].isChecked = false; } }; } // Trigger filtering changed event if any checkbox is changed. settingsFilter[i].eventCheckChanged += (control, isChecked) => { EventFilteringChanged(this, 0); }; } }