| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- using System;
- using System.Numerics;
- using Robust.Client.AutoGenerated;
- using Robust.Client.Graphics;
- using Robust.Client.UserInterface.Controls;
- using Robust.Client.UserInterface.CustomControls;
- using Robust.Client.UserInterface.XAML;
- using Robust.Shared.Graphics;
- using Robust.Shared.IoC;
- using Robust.Shared.Localization;
- namespace Content.Client.Construction.UI
- {
- /// <summary>
- /// This is the interface for a UI View of the construction window. The point of it is to abstract away the actual
- /// UI controls and just provide higher level operations on the entire window. This View is completely passive and
- /// just raises events to the outside world. This class is controlled by the <see cref="ConstructionMenuPresenter"/>.
- /// </summary>
- public interface IConstructionMenuView : IDisposable
- {
- // It isn't optimal to expose UI controls like this, but the UI control design is
- // questionable so it can't be helped.
- string[] Categories { get; set; }
- OptionButton OptionCategories { get; }
- bool EraseButtonPressed { get; set; }
- bool GridViewButtonPressed { get; set; }
- bool BuildButtonPressed { get; set; }
- ItemList Recipes { get; }
- ItemList RecipeStepList { get; }
- ScrollContainer RecipesGridScrollContainer { get; }
- GridContainer RecipesGrid { get; }
- event EventHandler<(string search, string catagory)> PopulateRecipes;
- event EventHandler<ItemList.Item?> RecipeSelected;
- event EventHandler RecipeFavorited;
- event EventHandler<bool> BuildButtonToggled;
- event EventHandler<bool> EraseButtonToggled;
- event EventHandler ClearAllGhosts;
- void ClearRecipeInfo();
- void SetRecipeInfo(string name, string description, Texture iconTexture, bool isItem, bool isFavorite);
- void ResetPlacement();
- #region Window Control
- event Action? OnClose;
- bool IsOpen { get; }
- void OpenCentered();
- void MoveToFront();
- bool IsAtFront();
- void Close();
- #endregion
- }
- [GenerateTypedNameReferences]
- public sealed partial class ConstructionMenu : DefaultWindow, IConstructionMenuView
- {
- public bool BuildButtonPressed
- {
- get => BuildButton.Pressed;
- set => BuildButton.Pressed = value;
- }
- public string[] Categories { get; set; } = Array.Empty<string>();
- public bool EraseButtonPressed
- {
- get => EraseButton.Pressed;
- set => EraseButton.Pressed = value;
- }
- public bool GridViewButtonPressed
- {
- get => MenuGridViewButton.Pressed;
- set => MenuGridViewButton.Pressed = value;
- }
- public ConstructionMenu()
- {
- SetSize = new Vector2(560, 450);
- MinSize = new Vector2(560, 320);
- IoCManager.InjectDependencies(this);
- RobustXamlLoader.Load(this);
- Title = Loc.GetString("construction-menu-title");
- BuildButton.Text = Loc.GetString("construction-menu-place-ghost");
- Recipes.OnItemSelected += obj => RecipeSelected?.Invoke(this, obj.ItemList[obj.ItemIndex]);
- Recipes.OnItemDeselected += _ => RecipeSelected?.Invoke(this, null);
- SearchBar.OnTextChanged += _ =>
- PopulateRecipes?.Invoke(this, (SearchBar.Text, Categories[OptionCategories.SelectedId]));
- OptionCategories.OnItemSelected += obj =>
- {
- OptionCategories.SelectId(obj.Id);
- SearchBar.SetText(string.Empty);
- PopulateRecipes?.Invoke(this, (SearchBar.Text, Categories[obj.Id]));
- };
- BuildButton.Text = Loc.GetString("construction-menu-place-ghost");
- BuildButton.OnToggled += args => BuildButtonToggled?.Invoke(this, args.Pressed);
- ClearButton.Text = Loc.GetString("construction-menu-clear-all");
- ClearButton.OnPressed += _ => ClearAllGhosts?.Invoke(this, EventArgs.Empty);
- EraseButton.Text = Loc.GetString("construction-menu-eraser-mode");
- EraseButton.OnToggled += args => EraseButtonToggled?.Invoke(this, args.Pressed);
- FavoriteButton.OnPressed += args => RecipeFavorited?.Invoke(this, EventArgs.Empty);
- MenuGridViewButton.OnPressed += _ =>
- PopulateRecipes?.Invoke(this, (SearchBar.Text, Categories[OptionCategories.SelectedId]));
- }
- public event EventHandler? ClearAllGhosts;
- public event EventHandler<(string search, string catagory)>? PopulateRecipes;
- public event EventHandler<ItemList.Item?>? RecipeSelected;
- public event EventHandler? RecipeFavorited;
- public event EventHandler<bool>? BuildButtonToggled;
- public event EventHandler<bool>? EraseButtonToggled;
- public void ResetPlacement()
- {
- BuildButton.Pressed = false;
- EraseButton.Pressed = false;
- }
- public void SetRecipeInfo(
- string name, string description, Texture iconTexture, bool isItem, bool isFavorite)
- {
- BuildButton.Disabled = false;
- BuildButton.Text = Loc.GetString(isItem ? "construction-menu-place-ghost" : "construction-menu-craft");
- TargetName.SetMessage(name);
- TargetDesc.SetMessage(description);
- TargetTexture.Texture = iconTexture;
- FavoriteButton.Visible = true;
- FavoriteButton.Text = Loc.GetString(
- isFavorite ? "construction-add-favorite-button" : "construction-remove-from-favorite-button");
- }
- public void ClearRecipeInfo()
- {
- BuildButton.Disabled = true;
- TargetName.SetMessage(string.Empty);
- TargetDesc.SetMessage(string.Empty);
- TargetTexture.Texture = null;
- FavoriteButton.Visible = false;
- RecipeStepList.Clear();
- }
- }
- }
|