Files
2026-07-13 13:13:17 +08:00

140 lines
4.8 KiB
C#

#nullable enable
using ImGuiNET;
using T3.IoServices;
using T3.Core.Animation;
using T3.Core.DataTypes.DataSet;
using T3.Editor.Gui.Dialog;
using T3.Editor.Gui.Dialogs;
using T3.Editor.Gui.Interaction;
using T3.Editor.Gui.Interaction.Keyboard;
using T3.Editor.Gui.Interaction.Timing;
using T3.Editor.Gui.Styling;
using T3.Editor.Gui.Templates;
using T3.Editor.Gui.UiHelpers;
using T3.Editor.Gui.Windows.Layouts;
using T3.Editor.UiModel;
using T3.Editor.UiModel.Commands;
using T3.Editor.UiModel.Helpers;
namespace T3.Editor.Gui;
public static partial class T3Ui
{
internal static void InitializeEnvironment()
{
ExampleSymbolLinking.UpdateExampleLinks();
Playback.Current = DefaultTimelinePlayback;
ThemeHandling.Initialize();
}
internal static readonly Playback DefaultTimelinePlayback = new();
internal static readonly BeatTimingPlayback DefaultBeatTimingPlayback = new();
/// <summary>
/// This a bad workaround to defer some ui actions until we have completed
/// window initialization, so they are not discarded by the setup process.
/// </summary>
private static bool IsWindowLayoutComplete() => ImGui.GetFrameCount() > 2;
private static void TriggerGlobalActionsFromKeyBindings()
{
if (UserActions.Undo.Triggered())
{
UndoRedoStack.Undo();
}
else if (UserActions.Redo.Triggered())
{
UndoRedoStack.Redo();
}
else if (UserActions.Save.Triggered())
{
SaveInBackground(saveAll: false);
}
else if (UserActions.ToggleAllUiElements.Triggered())
{
UiConfig.ToggleAllUiElements();
}
else if (UserActions.SearchGraph.Triggered())
{
_searchDialog.ShowNextFrame();
}
else if (UserActions.ToggleFullscreen.Triggered())
{
UserSettings.Config.FullScreen = !UserSettings.Config.FullScreen;
}
else if (UserActions.ToggleFocusMode.Triggered())
UiConfig.ToggleFocusMode();
}
/// <summary>
/// Statistics method for debug purpose
/// </summary>
// private static void CountSymbolUsage()
// {
// var counts = new Dictionary<Symbol, int>();
// foreach (var s in EditorSymbolPackage.AllSymbols)
// {
// foreach (var child in s.Children.Values)
// {
// counts.TryAdd(child.Symbol, 0);
// counts[child.Symbol]++;
// }
// }
//
// foreach (var (s, c) in counts.OrderBy(c => counts[c.Key]).Reverse())
// {
// Log.Debug($"{s.Name} - {s.Namespace} {c}");
// }
// }
//@imdom: needs clarification how to handle osc data disconnection on shutdown
// public void Dispose()
// {
// GC.SuppressFinalize(this);
// OscDataRecording.Dispose();
// }
internal static bool MouseWheelFieldHovered { private get; set; }
internal static bool MouseWheelFieldWasHoveredLastFrame { get; private set; }
internal static bool DragFieldHovered { private get; set; }
internal static bool DragFieldWasHoveredLastFrame { get; private set; }
internal static bool ShowSecondaryRenderWindow => WindowManager.ShowSecondaryRenderWindow;
internal const string FloatNumberFormat = "{0:F2}";
// ReSharper disable once InconsistentlySynchronizedField
internal static float UiScaleFactor { get; set; } = 1;
internal static bool IsAnyPopupOpen => !string.IsNullOrEmpty(FrameStats.Last.OpenedPopUpName);
internal static readonly MidiDataRecording MidiDataRecording = new(DataRecording.ActiveRecordingSet);
internal static readonly OscDataRecording OscDataRecording = new(DataRecording.ActiveRecordingSet);
internal static readonly CreateFromTemplateDialog CreateFromTemplateDialog = new();
private static readonly UserNameDialog _userNameDialog = new();
internal static readonly AboutDialog AboutDialog = new();
private static readonly SearchDialog _searchDialog = new();
internal static readonly NewProjectDialog NewProjectDialog = new();
internal static readonly RestoreBackupDialog RestoreBackupDialog = new();
internal static readonly ExitDialog ExitDialog = new();
private static readonly List<EditableSymbolProject> _modifiedProjects = new();
[Flags]
public enum EditingFlags
{
None = 0,
ExpandVertically = 1 << 1,
PreventMouseInteractions = 1 << 2,
PreventZoomWithMouseWheel = 1 << 3,
PreventPanningWithMouse = 1 << 4,
AllowHoveredChildWindows = 1 << 5,
}
internal static bool UseVSync
{
get => UserSettings.Config.UseVSync;
set => UserSettings.Config.UseVSync = value;
}
}