// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
// Standard Library
using System;
using System.Collections.Generic;
// Unity
using UnityEditor;
using UnityEngine;
// GameKit
using AWS.GameKit.Runtime.Utils;
namespace AWS.GameKit.Editor.Windows.Settings
{
///
/// The base class for all pages displayed in the AWS GameKit Settings window.
///
[Serializable]
public abstract class Page
{
///
/// The name to display for this page in the navigation tree, the page title, and elsewhere.
///
public abstract string DisplayName { get; }
///
/// Change the currently selected tab to the named tab.
///
///
/// If the named tab does not exist, then an Error will be logged and the page's currently selected tab will not change.
///
/// When overriding this method, do not call base.SelectTab(tabName).
///
/// The name of the tab to select.
public virtual void SelectTab(string tabName)
{
Logging.LogError($"There is no tab named \"{tabName}\" on the page \"{GetType().Name}\". The page does not have any tabs.");
}
///
/// This method is called each time the page is switched to from another page.
///
/// This method does nothing by default. It is not necessary to call `base.OnNavigatedTo()` when overriding this method.
///
public virtual void OnNavigatedTo()
{
// empty call
}
///
/// This method is called each time the page is switched out with another page.
///
/// This method does nothing by default. It is not necessary to call `base.OnNavigatedFrom()` when overriding this method.
///
public virtual void OnNavigatedFrom()
{
// empty call
}
///
/// Draw the page's title and content.
///
public void OnGUI()
{
DrawTitle();
GUILayout.Space(SettingsGUIStyles.Page.SpaceAfterTitle);
DrawContent();
}
///
/// Get the title of this page.
///
/// By default the title is "{Environment} > {Region} > {GetTitleSuffix()}".
///
protected virtual IList GetTitle()
{
List titleParts = new List() { "Environment", "Region" };
titleParts.AddRange(GetTitleSuffix());
return titleParts;
}
///
/// Get the portion of this page's title that comes after the "{Environment} > {Region}" prefix.
///
/// By default returns this page's DisplayName.
///
protected virtual IList GetTitleSuffix()
{
return new List() { DisplayName };
}
///
/// Draw the page's content, which is everything below the title.
///
protected abstract void DrawContent();
protected virtual void DrawTitle()
{
GUIStyle titleStyle = SettingsGUIStyles.Page.Title;
EditorGUILayout.LabelField(DisplayName, titleStyle);
}
}
}