help messages
This commit is contained in:
1 parent
dd465cc093
commit
b6c61ea3df
20 files changed
+659
-5
No files matched your search
@@ -199,6 +199,13 @@ namespace Mods.ModManager
|
||||
_newGame.Text = TranslationServer.Translate("mod_manager/collection_new_game");
|
||||
_pillProblems.Text = TranslationServer.Translate("mod_manager/collection_problems");
|
||||
_pillPlan.Text = TranslationServer.Translate("mod_manager/collection_plan");
|
||||
_close.TooltipText = _close.Text;
|
||||
_refresh.TooltipText = _refresh.Text;
|
||||
_addMechanic.TooltipText = _addMechanic.Text;
|
||||
_newGame.TooltipText = _newGame.Text;
|
||||
_gameSelect.TooltipText = TranslationServer.Translate("mod_manager/collection_game_tooltip");
|
||||
_pillProblems.TooltipText = TranslationServer.Translate("mod_manager/collection_problems_tooltip");
|
||||
_pillPlan.TooltipText = TranslationServer.Translate("mod_manager/collection_plan_tooltip");
|
||||
_dirty.Text = TranslationServer.Translate("mod_manager/collection_unsaved");
|
||||
_json.Text = TranslationServer.Translate("mod_manager/collection_json");
|
||||
_reset.Text = TranslationServer.Translate("mod_manager/collection_reset");
|
||||
@@ -206,15 +213,23 @@ namespace Mods.ModManager
|
||||
_tabInspector.Text = TranslationServer.Translate("mod_manager/collection_tab_inspector");
|
||||
_tabProblems.Text = TranslationServer.Translate("mod_manager/collection_tab_problems");
|
||||
_tabPlan.Text = TranslationServer.Translate("mod_manager/collection_tab_plan");
|
||||
_json.TooltipText = TranslationServer.Translate("mod_manager/collection_json_tooltip");
|
||||
_reset.TooltipText = TranslationServer.Translate("mod_manager/collection_reset_tooltip");
|
||||
_save.TooltipText = _save.Text;
|
||||
_tabInspector.TooltipText = _tabInspector.Text;
|
||||
_tabProblems.TooltipText = _tabProblems.Text;
|
||||
_tabPlan.TooltipText = _tabPlan.Text;
|
||||
_apply.Text = TranslationServer.Translate("mod_manager/collection_apply");
|
||||
_edgesToggle.Text = TranslationServer.Translate("mod_manager/collection_links");
|
||||
_apply.TooltipText = _apply.Text;
|
||||
_edgesToggle.TooltipText = _edgesToggle.Text;
|
||||
|
||||
var header = _json.GetParent();
|
||||
_savesInfo = new Label { VerticalAlignment = VerticalAlignment.Center };
|
||||
_savesInfo.AddThemeColorOverride("font_color", UiTokens.Muted);
|
||||
_duplicate = new Button { Text = TranslationServer.Translate("mod_manager/collection_duplicate") };
|
||||
_revert = new Button { Text = TranslationServer.Translate("mod_manager/collection_revert") };
|
||||
_delete = new Button { Text = TranslationServer.Translate("mod_manager/collection_delete") };
|
||||
_duplicate = new Button { Text = TranslationServer.Translate("mod_manager/collection_duplicate"), TooltipText = TranslationServer.Translate("mod_manager/collection_duplicate") };
|
||||
_revert = new Button { Text = TranslationServer.Translate("mod_manager/collection_revert"), TooltipText = TranslationServer.Translate("mod_manager/collection_revert") };
|
||||
_delete = new Button { Text = TranslationServer.Translate("mod_manager/collection_delete"), TooltipText = TranslationServer.Translate("mod_manager/collection_delete") };
|
||||
foreach (var control in new Control[] { _savesInfo, _duplicate, _revert, _delete })
|
||||
{
|
||||
header.AddChild(control);
|
||||
@@ -303,10 +318,12 @@ namespace Mods.ModManager
|
||||
row.AddChild(UiKit.Spacer());
|
||||
|
||||
_buildManager = UiKit.Button(TranslationServer.Translate("mod_manager/build_open_manager"));
|
||||
_buildManager.TooltipText = _buildManager.Text;
|
||||
_buildManager.Pressed += () => OpenManagerRequested?.Invoke(null);
|
||||
row.AddChild(_buildManager);
|
||||
|
||||
_buildApply = UiKit.Button(TranslationServer.Translate("mod_manager/collection_apply"), ButtonKind.Primary);
|
||||
_buildApply.TooltipText = _buildApply.Text;
|
||||
_buildApply.Pressed += OnApplyPressed;
|
||||
row.AddChild(_buildApply);
|
||||
}
|
||||
@@ -1078,6 +1095,7 @@ namespace Mods.ModManager
|
||||
private Button MakeInspectorButton(string text, Action action, bool danger = false)
|
||||
{
|
||||
var button = UiKit.Button(text, danger ? ButtonKind.Danger : ButtonKind.Secondary);
|
||||
button.TooltipText = text;
|
||||
button.AddThemeFontSizeOverride("font_size", UiTokens.FontSmall);
|
||||
button.Pressed += action;
|
||||
return button;
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace Mods.ModManager
|
||||
private const string TabCollections = "collections";
|
||||
private const string ModsScene = "scenes/mod_manager_screen.tscn";
|
||||
private const string EditorScene = "scenes/mod_collections_screen.tscn";
|
||||
private const string HelpScene = "scenes/components/mod_help_panel.tscn";
|
||||
|
||||
/// <summary>Active tab, remembered for the whole game session (mockup: "state is remembered").</summary>
|
||||
private static string _activeTab = TabMods;
|
||||
@@ -53,6 +54,8 @@ namespace Mods.ModManager
|
||||
private ModManagerScreen _mods;
|
||||
private CollectionsGallery _gallery;
|
||||
private ModCollectionsScreen _editor;
|
||||
private ModHelpPanel _help;
|
||||
private Button _helpButton;
|
||||
private bool _editorOpen;
|
||||
|
||||
/// <summary>Mods installed this session, shared by the gallery and the editor so both stay honest before a restart.</summary>
|
||||
@@ -66,6 +69,7 @@ namespace Mods.ModManager
|
||||
BuildHeader();
|
||||
BuildBanner();
|
||||
BuildBody();
|
||||
BuildHelp();
|
||||
|
||||
ShowTab(_activeTab);
|
||||
}
|
||||
@@ -99,12 +103,14 @@ namespace Mods.ModManager
|
||||
_tabMods.ToggleMode = true;
|
||||
_tabMods.ButtonGroup = group;
|
||||
_tabMods.Pressed += () => ShowTab(TabMods);
|
||||
_tabMods.TooltipText = _tabMods.Text;
|
||||
_segment.AddChild(_tabMods);
|
||||
|
||||
_tabCollections = UiKit.Button(TranslationServer.Translate("mod_manager/hub_tab_collections"), ButtonKind.Tab);
|
||||
_tabCollections.ToggleMode = true;
|
||||
_tabCollections.ButtonGroup = group;
|
||||
_tabCollections.Pressed += () => ShowTab(TabCollections);
|
||||
_tabCollections.TooltipText = _tabCollections.Text;
|
||||
_segment.AddChild(_tabCollections);
|
||||
|
||||
header.AddChild(UiKit.Spacer());
|
||||
@@ -116,11 +122,54 @@ namespace Mods.ModManager
|
||||
SizeFlagsVertical = Control.SizeFlags.ShrinkCenter,
|
||||
};
|
||||
_gallerySearch.TextChanged += OnGallerySearchChanged;
|
||||
_gallerySearch.TooltipText = _gallerySearch.PlaceholderText;
|
||||
header.AddChild(_gallerySearch);
|
||||
|
||||
_galleryRefresh = UiKit.Button(TranslationServer.Translate("mod_manager/refresh"));
|
||||
_galleryRefresh.Pressed += OnGalleryRefreshPressed;
|
||||
_galleryRefresh.TooltipText = _galleryRefresh.Text;
|
||||
header.AddChild(_galleryRefresh);
|
||||
|
||||
_helpButton = UiKit.IconButton("?", TranslationServer.Translate("mod_manager/help_open"));
|
||||
_helpButton.Name = "HelpButton";
|
||||
_helpButton.Pressed += OnHelpPressed;
|
||||
header.AddChild(_helpButton);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds the full-screen help overlay once; it stays hidden until the
|
||||
/// header's "?" button opens the page of the level the player is on.
|
||||
/// </summary>
|
||||
private void BuildHelp()
|
||||
{
|
||||
_help = TscnScenes.LoadAndBuild(HelpScene) as ModHelpPanel;
|
||||
if (_help == null)
|
||||
{
|
||||
GameLogger.Log("MOD_HUB", $"Failed to build '{HelpScene}'", LogLevel.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
AddChild(_help);
|
||||
_help.SetAnchorsAndOffsetsPreset(LayoutPreset.FullRect);
|
||||
_help.EnsureConstructed();
|
||||
_help.Visible = false;
|
||||
}
|
||||
|
||||
private void OnHelpPressed()
|
||||
{
|
||||
_help?.Open(CurrentHelpLevel());
|
||||
}
|
||||
|
||||
/// <summary>The help page follows the hub level: the mods grid, an open mod page, the collections gallery or the scheme editor.</summary>
|
||||
private string CurrentHelpLevel()
|
||||
{
|
||||
if (_editorOpen)
|
||||
return "scheme";
|
||||
if (_activeTab == TabCollections)
|
||||
return "collections";
|
||||
if (ModOpen)
|
||||
return "mod_page";
|
||||
return "mods";
|
||||
}
|
||||
|
||||
private void BuildBanner()
|
||||
@@ -363,6 +412,13 @@ namespace Mods.ModManager
|
||||
if (!@event.IsActionPressed("ui_cancel"))
|
||||
return;
|
||||
|
||||
if (_help != null && _help.Visible)
|
||||
{
|
||||
_help.Close();
|
||||
GetViewport().SetInputAsHandled();
|
||||
return;
|
||||
}
|
||||
|
||||
if (_editorOpen)
|
||||
{
|
||||
ShowGallery();
|
||||
|
||||
@@ -117,6 +117,7 @@ namespace Mods.ModManager
|
||||
_bannerLabel = GetNode<Label>("Margin/Root/Banner/BannerLabel");
|
||||
|
||||
close.Text = TranslationServer.Translate("mod_manager/back");
|
||||
close.TooltipText = close.Text;
|
||||
title.Text = TranslationServer.Translate("mod_manager/title");
|
||||
if (Embedded)
|
||||
{
|
||||
@@ -126,13 +127,16 @@ namespace Mods.ModManager
|
||||
title.Visible = false;
|
||||
}
|
||||
_search.PlaceholderText = TranslationServer.Translate("mod_manager/search_placeholder");
|
||||
_search.TooltipText = _search.PlaceholderText;
|
||||
_refreshButton.Text = TranslationServer.Translate("mod_manager/refresh");
|
||||
_refreshButton.TooltipText = _refreshButton.Text;
|
||||
_resultLabel.AddThemeColorOverride("font_color", UiTokens.Muted);
|
||||
|
||||
_sort.AddItem(TranslationServer.Translate("mod_manager/sort_name"));
|
||||
_sort.AddItem(TranslationServer.Translate("mod_manager/sort_author"));
|
||||
_sort.AddItem(TranslationServer.Translate("mod_manager/sort_status"));
|
||||
_sort.Selected = (int)_filter.Sort;
|
||||
_sort.TooltipText = TranslationServer.Translate("mod_manager/sort_tooltip");
|
||||
|
||||
_bannerPanel.AddThemeStyleboxOverride("panel", ModManagerTheme.MakeBox(
|
||||
UiTokens.Alpha(UiTokens.Warning, 0.15f),
|
||||
|
||||
@@ -151,6 +151,7 @@ namespace Mods.ModManager
|
||||
row.AddChild(UiKit.Spacer());
|
||||
|
||||
var newGame = UiKit.Button(TranslationServer.Translate("mod_manager/gallery_new_game"), ButtonKind.Primary);
|
||||
newGame.TooltipText = newGame.Text;
|
||||
newGame.Pressed += () => NewGameRequested?.Invoke();
|
||||
row.AddChild(newGame);
|
||||
_host.AddChild(row);
|
||||
@@ -401,6 +402,7 @@ namespace Mods.ModManager
|
||||
button.Disabled = true;
|
||||
}
|
||||
|
||||
button.TooltipText = button.Text;
|
||||
if (action != null)
|
||||
button.Pressed += action;
|
||||
return button;
|
||||
@@ -409,6 +411,7 @@ namespace Mods.ModManager
|
||||
private Button BuildEditButton(ModCollectionGameSummary summary)
|
||||
{
|
||||
var button = UiKit.Button(TranslationServer.Translate("mod_manager/gallery_edit_scheme"));
|
||||
button.TooltipText = button.Text;
|
||||
button.Disabled = _installingId != null;
|
||||
button.Pressed += () => EditSchemeRequested?.Invoke(summary.Collection.Id);
|
||||
return button;
|
||||
@@ -417,6 +420,7 @@ namespace Mods.ModManager
|
||||
private Button BuildDeleteButton(ModCollectionGameSummary summary)
|
||||
{
|
||||
var button = UiKit.Button(TranslationServer.Translate("mod_manager/collection_delete"), ButtonKind.Danger);
|
||||
button.TooltipText = button.Text;
|
||||
button.Disabled = _installingId != null;
|
||||
button.Pressed += () => CollectionDeletion.Confirm(this, summary.Collection, () =>
|
||||
{
|
||||
|
||||
@@ -72,6 +72,8 @@ namespace Mods.ModManager
|
||||
|
||||
_author.AddThemeColorOverride("font_color", UiTokens.Muted);
|
||||
_source.AddThemeColorOverride("font_color", UiTokens.Muted);
|
||||
// The source tooltip needs hover, while clicks on it must still open the card.
|
||||
_source.MouseFilter = Control.MouseFilterEnum.Pass;
|
||||
AddThemeStyleboxOverride("panel", ModManagerTheme.CreateCardStyle(data.IsConflict));
|
||||
|
||||
_versions.ItemSelected += OnVersionSelected;
|
||||
@@ -136,6 +138,7 @@ namespace Mods.ModManager
|
||||
{
|
||||
_versions.AddItem("v" + (_data.LocalVersion ?? "—"));
|
||||
_versions.Disabled = true;
|
||||
_versions.TooltipText = _versions.GetItemText(0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -211,6 +214,7 @@ namespace Mods.ModManager
|
||||
|
||||
_action.Visible = true;
|
||||
_action.Text = ModActionNames.Translate(kind.Value);
|
||||
_action.TooltipText = _action.Text;
|
||||
|
||||
if (ModActionNames.IsDanger(kind.Value))
|
||||
CthangoverTheme.ApplyDanger(_action);
|
||||
|
||||
@@ -177,6 +177,7 @@ namespace Mods.ModManager
|
||||
}
|
||||
|
||||
_versions.Selected = selectedIndex;
|
||||
_versions.TooltipText = _versions.GetItemText(selectedIndex);
|
||||
}
|
||||
|
||||
private void BuildActions()
|
||||
@@ -190,7 +191,7 @@ namespace Mods.ModManager
|
||||
var primary = ModActions.GetPrimary(_data);
|
||||
if (primary != null)
|
||||
{
|
||||
var button = new Button { Text = ModActionNames.Translate(primary.Value) };
|
||||
var button = new Button { Text = ModActionNames.Translate(primary.Value), TooltipText = ModActionNames.Translate(primary.Value) };
|
||||
if (ModActionNames.IsDanger(primary.Value))
|
||||
CthangoverTheme.ApplyDanger(button);
|
||||
else
|
||||
@@ -201,7 +202,7 @@ namespace Mods.ModManager
|
||||
|
||||
if (primary != ModActionKind.Delete && _data.IsDeletable)
|
||||
{
|
||||
var delete = new Button { Text = ModActionNames.Translate(ModActionKind.Delete) };
|
||||
var delete = new Button { Text = ModActionNames.Translate(ModActionKind.Delete), TooltipText = ModActionNames.Translate(ModActionKind.Delete) };
|
||||
CthangoverTheme.ApplyDanger(delete);
|
||||
delete.Pressed += OnDeletePressed;
|
||||
_actionsRow.AddChild(delete);
|
||||
@@ -214,6 +215,9 @@ namespace Mods.ModManager
|
||||
Text = ModActionNames.Translate(_data.IsDisabled
|
||||
? ModActionKind.Enable
|
||||
: ModActionKind.Disable),
|
||||
TooltipText = ModActionNames.Translate(_data.IsDisabled
|
||||
? ModActionKind.Enable
|
||||
: ModActionKind.Disable),
|
||||
};
|
||||
if (_data.IsDisabled)
|
||||
CthangoverTheme.ApplyPrimary(toggle);
|
||||
|
||||
@@ -52,9 +52,11 @@ namespace Mods.ModManager
|
||||
|
||||
_title.Text = TranslationServer.Translate("mod_manager/filters");
|
||||
_reset.Text = TranslationServer.Translate("mod_manager/reset_filters");
|
||||
_reset.TooltipText = TranslationServer.Translate("mod_manager/filters_reset_tooltip");
|
||||
_statusCaption.Text = TranslationServer.Translate("mod_manager/filter_status");
|
||||
_categoryCaption.Text = TranslationServer.Translate("mod_manager/filter_categories");
|
||||
_groupToggle.Text = TranslationServer.Translate("mod_manager/group_by_category");
|
||||
_groupToggle.TooltipText = _groupToggle.Text;
|
||||
_groupToggle.ButtonPressed = _state.GroupByCategory;
|
||||
|
||||
_statusCaption.AddThemeColorOverride("font_color", UiTokens.Muted);
|
||||
@@ -78,12 +80,14 @@ namespace Mods.ModManager
|
||||
{
|
||||
var count = statusCounts.GetValueOrDefault(pair.Key);
|
||||
pair.Value.Text = $"{ModStatusNames.Translate(pair.Key)} ({count})";
|
||||
pair.Value.TooltipText = pair.Value.Text;
|
||||
}
|
||||
|
||||
foreach (var pair in _categoryBoxes)
|
||||
{
|
||||
var count = categoryCounts.GetValueOrDefault(pair.Key);
|
||||
pair.Value.Text = $"{ModCategoryNames.Translate(pair.Key)} ({count})";
|
||||
pair.Value.TooltipText = pair.Value.Text;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
namespace Mods.ModManager
|
||||
{
|
||||
using Godot;
|
||||
/// <summary>
|
||||
/// Full-screen help overlay of the mods hub: one page per hub level — the mods
|
||||
/// grid, a mod's page, the games gallery and the scheme editor. The layout is the
|
||||
/// <c>mod_help_panel.tscn</c> prefab (dim backdrop, centred frame, title, body,
|
||||
/// close button); this class only binds the nodes and fills the texts, so a new
|
||||
/// page is a locale pair <c>mod_manager/help_<level>_title/_body</c> — no code.
|
||||
/// Opened by the hub header's help button, closed by the button, a click on the
|
||||
/// dim or Escape (the hub closes the panel first in its own Escape chain).
|
||||
/// </summary>
|
||||
public partial class ModHelpPanel : Cthangover.Mods.Interface.Base.Lists.ModWidget
|
||||
{
|
||||
private Label _title;
|
||||
private RichTextLabel _body;
|
||||
|
||||
protected override void Construct()
|
||||
{
|
||||
MouseFilter = MouseFilterEnum.Stop;
|
||||
|
||||
_title = GetNode<Label>("Center/Frame/Margin/Column/Header/Title");
|
||||
_body = GetNode<RichTextLabel>("Center/Frame/Margin/Column/Body");
|
||||
|
||||
var close = GetNode<Button>("Center/Frame/Margin/Column/Header/Close");
|
||||
close.Text = TranslationServer.Translate("mod_manager/help_close");
|
||||
close.TooltipText = TranslationServer.Translate("mod_manager/help_close");
|
||||
close.Pressed += Close;
|
||||
|
||||
var dim = GetNode<ColorRect>("Dim");
|
||||
dim.GuiInput += OnDimGuiInput;
|
||||
}
|
||||
|
||||
/// <summary>Shows the page of one hub level; the level names match the test driver's: mods, mod_page, collections, scheme.</summary>
|
||||
public void Open(string level)
|
||||
{
|
||||
_title.Text = TranslationServer.Translate($"mod_manager/help_{level}_title");
|
||||
_body.Text = TranslationServer.Translate($"mod_manager/help_{level}_body");
|
||||
Visible = true;
|
||||
}
|
||||
|
||||
/// <summary>Hides the overlay; the hub calls this from its Escape chain and the driver checks it.</summary>
|
||||
public void Close()
|
||||
{
|
||||
Visible = false;
|
||||
}
|
||||
|
||||
private void OnDimGuiInput(InputEvent @event)
|
||||
{
|
||||
if (@event is InputEventMouseButton mouse && mouse.Pressed)
|
||||
Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user