diff --git a/Suki.sln b/Suki.sln index 9390bb6e3..8d29dcfe8 100644 --- a/Suki.sln +++ b/Suki.sln @@ -15,6 +15,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Settings.XamlStyler = Settings.XamlStyler EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SukiUI.Dock", "SukiUI.Dock\SukiUI.Dock.csproj", "{B82306B8-613C-4360-882B-F19FE0F3265B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -29,6 +31,10 @@ Global {1AF8DFD4-73DA-47FD-A034-635342AD9B9D}.Debug|Any CPU.Build.0 = Debug|Any CPU {1AF8DFD4-73DA-47FD-A034-635342AD9B9D}.Release|Any CPU.ActiveCfg = Release|Any CPU {1AF8DFD4-73DA-47FD-A034-635342AD9B9D}.Release|Any CPU.Build.0 = Release|Any CPU + {B82306B8-613C-4360-882B-F19FE0F3265B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B82306B8-613C-4360-882B-F19FE0F3265B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B82306B8-613C-4360-882B-F19FE0F3265B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B82306B8-613C-4360-882B-F19FE0F3265B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SukiUI.Demo/App.axaml b/SukiUI.Demo/App.axaml index 8f2359670..7025c9f85 100644 --- a/SukiUI.Demo/App.axaml +++ b/SukiUI.Demo/App.axaml @@ -17,6 +17,9 @@ + + + diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockControls/DocumentText.axaml b/SukiUI.Demo/Features/ControlsLibrary/DockControls/DocumentText.axaml new file mode 100644 index 000000000..effb4c37f --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockControls/DocumentText.axaml @@ -0,0 +1,11 @@ + + + diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockControls/DocumentText.axaml.cs b/SukiUI.Demo/Features/ControlsLibrary/DockControls/DocumentText.axaml.cs new file mode 100644 index 000000000..46608638d --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockControls/DocumentText.axaml.cs @@ -0,0 +1,39 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using AvaloniaEdit; +using AvaloniaEdit.TextMate; +using TextMateSharp.Grammars; + +namespace SukiUI.Demo.Features.ControlsLibrary.DockControls +{ + public partial class DocumentText : UserControl + { + public DocumentText() + { + InitializeComponent(); + + + var _textEditor = this.FindControl("Editor"); + _textEditor.Text = @" + Welcome to Avalonia! + +"; + +//Here we initialize RegistryOptions with the theme we want to use. + var _registryOptions = new RegistryOptions(ThemeName.DarkPlus); + +//Initial setup of TextMate. + var _textMateInstallation = _textEditor.InstallTextMate(_registryOptions); + +//Here we are getting the language by the extension and right after that we are initializing grammar with this language. +//And that's all 😀, you are ready to use AvaloniaEdit with syntax highlighting! + _textMateInstallation.SetGrammar(_registryOptions.GetScopeByLanguageId(_registryOptions.GetLanguageByExtension(".cs").Id)); + } + } +} \ No newline at end of file diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockControls/ErrorList.axaml b/SukiUI.Demo/Features/ControlsLibrary/DockControls/ErrorList.axaml new file mode 100644 index 000000000..74960bf92 --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockControls/ErrorList.axaml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockControls/ErrorList.axaml.cs b/SukiUI.Demo/Features/ControlsLibrary/DockControls/ErrorList.axaml.cs new file mode 100644 index 000000000..842aae30c --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockControls/ErrorList.axaml.cs @@ -0,0 +1,36 @@ +using System.Collections.ObjectModel; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace SukiUI.Demo.Features.ControlsLibrary.DockControls +{ + public partial class ErrorList : UserControl + { + public ErrorList() + { + InitializeComponent(); + this.Get("DG").ItemsSource = new ObservableCollection() + { + new ErrorD(), + new ErrorD() + { + Description = "Unused local variable." + }, + new ErrorD() + { + Description = "Type 'Person' not defined." + }, + }; + } + } +} + +public class ErrorD + { + public string Code { get; set; } = "BC30230"; + public string Description { get; set; } = "'Inherits' not valid."; + public string Project { get; set; } = "Avalonia.DockDemo"; + public string File { get; set; } = "Program.cs"; + public string Line { get; set; } = "2"; + } diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockControls/SolutionExplore.axaml b/SukiUI.Demo/Features/ControlsLibrary/DockControls/SolutionExplore.axaml new file mode 100644 index 000000000..bb5634cc9 --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockControls/SolutionExplore.axaml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockControls/SolutionExplore.axaml.cs b/SukiUI.Demo/Features/ControlsLibrary/DockControls/SolutionExplore.axaml.cs new file mode 100644 index 000000000..52f346168 --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockControls/SolutionExplore.axaml.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace SukiUI.Demo.Features.ControlsLibrary.DockControls; + + public partial class SolutionExplore : UserControl + { + public SolutionExplore() + { + InitializeComponent(); + FolderContents = new ObservableCollection(); + LoadFolderContents("../"); + this.FindControl("TV").ItemsSource = FolderContents; + } + + public ObservableCollection FolderContents { get; set; } + + + + private void LoadFolderContents(string path) + { + var dirInfo = new DirectoryInfo(path); + var files = dirInfo.GetFiles(); + var directories = dirInfo.GetDirectories(); + + foreach (var file in files) + { + FolderContents.Add(new FolderItem(file.Name, false)); + } + + foreach (var directory in directories) + { + var folderItem = new FolderItem(directory.Name, true); + LoadFolderContents(directory.FullName); + folderItem.Children = new ObservableCollection(GetFolderItems(directory.FullName)); + FolderContents.Add(folderItem); + } + + FolderContents = new ObservableCollection(FolderContents.OrderBy(item => !item.IsDirectory).ThenBy(item => item.Name)); + } + + private IEnumerable GetFolderItems(string path) + { + var result = new List(); + var dirInfo = new DirectoryInfo(path); + var files = dirInfo.GetFiles(); + var directories = dirInfo.GetDirectories(); + + foreach (var file in files) + { + result.Add(new FolderItem(file.Name, false)); + } + + foreach (var directory in directories) + { + result.Add(new FolderItem(directory.Name, true)); + } + + return result; + } + } + + + public class FolderItem + { + public string Name { get; set; } + public bool IsDirectory { get; set; } + public ObservableCollection Children { get; set; } + + public FolderItem(string name, bool isDirectory) + { + Name = name; + IsDirectory = isDirectory; + Children = new ObservableCollection(); + } + } + + + + diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockControls/propertiesview.axaml b/SukiUI.Demo/Features/ControlsLibrary/DockControls/propertiesview.axaml new file mode 100644 index 000000000..0b964ec46 --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockControls/propertiesview.axaml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockControls/propertiesview.axaml.cs b/SukiUI.Demo/Features/ControlsLibrary/DockControls/propertiesview.axaml.cs new file mode 100644 index 000000000..adc0a829d --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockControls/propertiesview.axaml.cs @@ -0,0 +1,14 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace SukiUI.Demo.Features.ControlsLibrary.DockControls +{ + public partial class propertiesview : UserControl + { + public propertiesview() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockView.axaml b/SukiUI.Demo/Features/ControlsLibrary/DockView.axaml new file mode 100644 index 000000000..a9744992e --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockView.axaml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Build: Dock.Model.Avalonia.Controls.Tool, Id='SolutionExplorer' + [Added] SolutionExplorer, Dock.Avalonia.Controls.ToolContentControl + [Added] Avalonia.Markup.Xaml.XamlIl.Runtime.XamlIlRuntimeHelpers+PointerDeferredContent`1[Avalonia.Controls.Control], DockXamlSample.SolutionExplore + Build: Dock.Model.Avalonia.Controls.Document, Id='Document1' + [Added] Document1, Dock.Avalonia.Controls.DocumentContentControl + [Added] Avalonia.Markup.Xaml.XamlIl.Runtime.XamlIlRuntimeHelpers+PointerDeferredContent`1[Avalonia.Controls.Control], Avalonia.Controls.TextBlock + Build: Dock.Model.Avalonia.Controls.Tool, Id='Properties' + [Added] Properties, Dock.Avalonia.Controls.ToolContentControl + [Added] Avalonia.Markup.Xaml.XamlIl.Runtime.XamlIlRuntimeHelpers+PointerDeferredContent`1[Avalonia.Controls.Control], DockXamlSample.propertiesview + Build: Dock.Model.Avalonia.Controls.Tool, Id='Output' + [Added] Output, Dock.Avalonia.Controls.ToolContentControl + [Added] Avalonia.Markup.Xaml.XamlIl.Runtime.XamlIlRuntimeHelpers+PointerDeferredContent`1[Avalonia.Controls.Control], Avalonia.Controls.TextBlock + + + + + + + + + + + + + + + diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockView.axaml.cs b/SukiUI.Demo/Features/ControlsLibrary/DockView.axaml.cs new file mode 100644 index 000000000..ec8b62c0b --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockView.axaml.cs @@ -0,0 +1,14 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace SukiUI.Demo.Features.ControlsLibrary +{ + public partial class DockView : UserControl + { + public DockView() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SukiUI.Demo/Features/ControlsLibrary/DockViewModel.cs b/SukiUI.Demo/Features/ControlsLibrary/DockViewModel.cs new file mode 100644 index 000000000..e2adf9a52 --- /dev/null +++ b/SukiUI.Demo/Features/ControlsLibrary/DockViewModel.cs @@ -0,0 +1,9 @@ +using Material.Icons; + +namespace SukiUI.Demo.Features.ControlsLibrary +{ + public partial class DockViewModel(): DemoPageBase("Dock", MaterialIconKind.DockTop) + { + + } +} \ No newline at end of file diff --git a/SukiUI.Demo/SukiUI.Demo.csproj b/SukiUI.Demo/SukiUI.Demo.csproj index bb92422e0..1b8881476 100644 --- a/SukiUI.Demo/SukiUI.Demo.csproj +++ b/SukiUI.Demo/SukiUI.Demo.csproj @@ -18,6 +18,9 @@ + + + @@ -25,6 +28,7 @@ + diff --git a/SukiUI.Dock/Converters/AlignmentConverter.cs b/SukiUI.Dock/Converters/AlignmentConverter.cs new file mode 100644 index 000000000..55423f046 --- /dev/null +++ b/SukiUI.Dock/Converters/AlignmentConverter.cs @@ -0,0 +1,92 @@ +using System; +using System.Globalization; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Data.Converters; +using Avalonia.Media.Immutable; +using Dock.Model.Core; + +namespace Dock.Avalonia.Converters; + +/// +/// Converts model enum to avalonia enum. +/// +public class AlignmentConverter : IValueConverter +{ + /// + /// Gets instance. + /// + public static readonly AlignmentConverter Instance = new AlignmentConverter(); + + /// + /// Converts a value. + /// + /// The value to convert. + /// The type of the target. + /// A user-defined parameter. + /// The culture to use. + /// The converted value. + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return value switch + { + null => AvaloniaProperty.UnsetValue, + Alignment alignment => alignment switch + { + Alignment.Unset => AvaloniaProperty.UnsetValue, + Alignment.Left => global::Avalonia.Controls.Dock.Left, + Alignment.Bottom => global::Avalonia.Controls.Dock.Bottom, + Alignment.Right => global::Avalonia.Controls.Dock.Right, + Alignment.Top => global::Avalonia.Controls.Dock.Top, + _ => throw new NotSupportedException($"Provided dock is not supported in Avalonia.") + }, + _ => value + }; + } + + /// + /// Converts a value. + /// + /// The value to convert. + /// The type of the target. + /// A user-defined parameter. + /// The culture to use. + /// The converted value. + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return value switch + { + null => AvaloniaProperty.UnsetValue, + global::Avalonia.Controls.Dock dock => dock switch + { + global::Avalonia.Controls.Dock.Left => Alignment.Left, + global::Avalonia.Controls.Dock.Bottom => Alignment.Bottom, + global::Avalonia.Controls.Dock.Right => Alignment.Right, + global::Avalonia.Controls.Dock.Top => Alignment.Top, + _ => Alignment.Unset + }, + _ => value + }; + } +} + +public class TransparentToTrueConverter : IValueConverter +{ + public static readonly TransparentToTrueConverter Instance = new(); + + public object? Convert(object? value, Type targetType, object? parameter, + CultureInfo culture) + { + if (value == null) + return false; + + var b = (ImmutableSolidColorBrush)value; + return b.Opacity != 0; + } + + public object ConvertBack(object? value, Type targetType, + object? parameter, CultureInfo culture) + { + throw new NotSupportedException(); + } +} diff --git a/SukiUI.Dock/Converters/DockModeConverter.cs b/SukiUI.Dock/Converters/DockModeConverter.cs new file mode 100644 index 000000000..0e6301ec1 --- /dev/null +++ b/SukiUI.Dock/Converters/DockModeConverter.cs @@ -0,0 +1,69 @@ +using System; +using System.Globalization; +using Avalonia; +using Avalonia.Data.Converters; +using Dock.Model.Core; +using AC = Avalonia.Controls; + +namespace Dock.Avalonia.Converters; + +/// +/// Converts model enum to avalonia enum. +/// +public class DockModeConverter : IValueConverter +{ + /// + /// Gets instance. + /// + public static readonly DockModeConverter Instance = new DockModeConverter(); + + /// + /// Converts a value. + /// + /// The value to convert. + /// The type of the target. + /// A user-defined parameter. + /// The culture to use. + /// The converted value. + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return value switch + { + null => AvaloniaProperty.UnsetValue, + DockMode dock => dock switch + { + DockMode.Left => AC.Dock.Left, + DockMode.Bottom => AC.Dock.Bottom, + DockMode.Right => AC.Dock.Right, + DockMode.Top => AC.Dock.Top, + _ => AvaloniaProperty.UnsetValue + }, + _ => value + }; + } + + /// + /// Converts a value. + /// + /// The value to convert. + /// The type of the target. + /// A user-defined parameter. + /// The culture to use. + /// The converted value. + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return value switch + { + null => AvaloniaProperty.UnsetValue, + AC.Dock dock => dock switch + { + AC.Dock.Left => DockMode.Left, + AC.Dock.Bottom => DockMode.Bottom, + AC.Dock.Right => DockMode.Right, + AC.Dock.Top => DockMode.Top, + _ => DockMode.Center + }, + _ => value + }; + } +} diff --git a/SukiUI.Dock/Converters/EitherNotNullConverter.cs b/SukiUI.Dock/Converters/EitherNotNullConverter.cs new file mode 100644 index 000000000..b1b634e5a --- /dev/null +++ b/SukiUI.Dock/Converters/EitherNotNullConverter.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using Avalonia.Data.Converters; + +namespace Dock.Avalonia.Converters; + +/// +/// Takes a list of values and returns the first non-null value. +/// +public class EitherNotNullConverter : IMultiValueConverter +{ + /// + /// Gets instance. + /// + public static readonly EitherNotNullConverter Instance = new EitherNotNullConverter(); + + /// + public object? Convert(IList values, Type targetType, object? parameter, CultureInfo culture) + { + foreach (var value in values) + { + if (value != null) + return value; + } + + return values; + } +} diff --git a/SukiUI.Dock/Converters/GripModeConverters.cs b/SukiUI.Dock/Converters/GripModeConverters.cs new file mode 100644 index 000000000..6c2a3c2a0 --- /dev/null +++ b/SukiUI.Dock/Converters/GripModeConverters.cs @@ -0,0 +1,42 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Data.Converters; +using Dock.Model.Core; + +namespace Dock.Avalonia.Converters; + +/// +/// The enum value converters. +/// +public static class GripModeConverters +{ + /// + /// The to value converter. + /// + public static readonly IValueConverter GridRowAutoHideConverter = + new FuncValueConverter(x => x == GripMode.AutoHide ? 1 : 0); + + /// + /// The to value converter. + /// + public static readonly IValueConverter IsVisibleVisibleConverter = + new FuncValueConverter(x => x == GripMode.Visible); + + /// + /// The to value converter. + /// + public static readonly IValueConverter IsVisibleVisibleOrHiddenConverter = + new FuncValueConverter(x => x == GripMode.Hidden || x == GripMode.Visible); + + /// + /// The to value converter. + /// + public static readonly IValueConverter IsVisibleAutoHideOrVisibleConverter = + new FuncValueConverter(x => x == GripMode.AutoHide || x == GripMode.Visible); + + /// + /// The to value converter. + /// + public static readonly IValueConverter IsVisibleAutoHideOrHiddenConverter = + new FuncValueConverter(x => x == GripMode.AutoHide || x == GripMode.Hidden); +} \ No newline at end of file diff --git a/SukiUI.Dock/Converters/IntLessThanConverter.cs b/SukiUI.Dock/Converters/IntLessThanConverter.cs new file mode 100644 index 000000000..d7ca75d11 --- /dev/null +++ b/SukiUI.Dock/Converters/IntLessThanConverter.cs @@ -0,0 +1,24 @@ +using System; +using System.Globalization; +using Avalonia.Data.Converters; + +namespace Dock.Avalonia.Converters; + +internal class IntLessThanConverter : IValueConverter +{ + public int TrueIfLessThan { get; set; } + + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (value is int intValue) + { + return intValue < TrueIfLessThan; + } + return false; + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return null; + } +} diff --git a/SukiUI.Dock/Converters/IsMaximizedConverter.cs b/SukiUI.Dock/Converters/IsMaximizedConverter.cs new file mode 100644 index 000000000..14986500e --- /dev/null +++ b/SukiUI.Dock/Converters/IsMaximizedConverter.cs @@ -0,0 +1,34 @@ +using System; +using System.Globalization; +using Avalonia.Controls; +using Avalonia.Data.Converters; + +namespace Dock.Avalonia.Converters; + +/// +/// Converts WindowState to bool indicating if the window is maximized. +/// +public class IsMaximizedConverter : IValueConverter +{ + /// + /// Gets instance. + /// + public static IsMaximizedConverter Instance { get; } = new(); + + /// + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + if (value is WindowState windowState) + { + return windowState == WindowState.Maximized; + } + + return false; + } + + /// + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return null; + } +} diff --git a/SukiUI.Dock/Converters/OrientationConverter.cs b/SukiUI.Dock/Converters/OrientationConverter.cs new file mode 100644 index 000000000..cedc7b4f2 --- /dev/null +++ b/SukiUI.Dock/Converters/OrientationConverter.cs @@ -0,0 +1,64 @@ +using System; +using System.Globalization; +using Avalonia; +using Avalonia.Data.Converters; +using Avalonia.Layout; + +namespace Dock.Avalonia.Converters; + +/// +/// Converts model enum to avalonia enum. +/// +public class OrientationConverter : IValueConverter +{ + /// + /// Gets instance. + /// + public static readonly OrientationConverter Instance = new OrientationConverter(); + + /// + /// Converts a value. + /// + /// The value to convert. + /// The type of the target. + /// A user-defined parameter. + /// The culture to use. + /// The converted value. + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return value switch + { + null => AvaloniaProperty.UnsetValue, + Model.Core.Orientation orientation => orientation switch + { + Model.Core.Orientation.Horizontal => Orientation.Horizontal, + Model.Core.Orientation.Vertical => Orientation.Vertical, + _ => throw new NotSupportedException($"Provided orientation is not supported in Avalonia.") + }, + _ => value + }; + } + + /// + /// Converts a value. + /// + /// The value to convert. + /// The type of the target. + /// A user-defined parameter. + /// The culture to use. + /// The converted value. + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return value switch + { + null => AvaloniaProperty.UnsetValue, + Orientation orientation => orientation switch + { + Orientation.Horizontal => Model.Core.Orientation.Horizontal, + Orientation.Vertical => Model.Core.Orientation.Vertical, + _ => throw new NotSupportedException($"Provided orientation is not supported in Model.") + }, + _ => value + }; + } +} diff --git a/SukiUI.Dock/DockTarget.axaml b/SukiUI.Dock/DockTarget.axaml new file mode 100644 index 000000000..4827d57ea --- /dev/null +++ b/SukiUI.Dock/DockTarget.axaml @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/DocumentControl.axaml b/SukiUI.Dock/DocumentControl.axaml new file mode 100644 index 000000000..e40c82689 --- /dev/null +++ b/SukiUI.Dock/DocumentControl.axaml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/DocumentTabStrip.axaml b/SukiUI.Dock/DocumentTabStrip.axaml new file mode 100644 index 000000000..f04f74213 --- /dev/null +++ b/SukiUI.Dock/DocumentTabStrip.axaml @@ -0,0 +1,79 @@ + + + + + Item 1 + Item 2 + Disabled + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/DocumentTabStripItem.axaml b/SukiUI.Dock/DocumentTabStripItem.axaml new file mode 100644 index 000000000..f6a36ddd4 --- /dev/null +++ b/SukiUI.Dock/DocumentTabStripItem.axaml @@ -0,0 +1,141 @@ + + + + + Leaf + Arch + Background + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/HostWindow.axaml b/SukiUI.Dock/HostWindow.axaml new file mode 100644 index 000000000..716812eff --- /dev/null +++ b/SukiUI.Dock/HostWindow.axaml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/Index.axaml b/SukiUI.Dock/Index.axaml new file mode 100644 index 000000000..32086c05f --- /dev/null +++ b/SukiUI.Dock/Index.axaml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/PinnedDockControl.axaml b/SukiUI.Dock/PinnedDockControl.axaml new file mode 100644 index 000000000..719b5bf0a --- /dev/null +++ b/SukiUI.Dock/PinnedDockControl.axaml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/ToolChromeControl.axaml b/SukiUI.Dock/ToolChromeControl.axaml new file mode 100644 index 000000000..c3ec21696 --- /dev/null +++ b/SukiUI.Dock/ToolChromeControl.axaml @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/ToolContentControl.axaml b/SukiUI.Dock/ToolContentControl.axaml new file mode 100644 index 000000000..173dc1e8c --- /dev/null +++ b/SukiUI.Dock/ToolContentControl.axaml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/ToolControl.axaml b/SukiUI.Dock/ToolControl.axaml new file mode 100644 index 000000000..3ab08d1e6 --- /dev/null +++ b/SukiUI.Dock/ToolControl.axaml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/ToolDockControl.axaml b/SukiUI.Dock/ToolDockControl.axaml new file mode 100644 index 000000000..47eebbcb1 --- /dev/null +++ b/SukiUI.Dock/ToolDockControl.axaml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/ToolPinItemControl.axaml b/SukiUI.Dock/ToolPinItemControl.axaml new file mode 100644 index 000000000..b08390d82 --- /dev/null +++ b/SukiUI.Dock/ToolPinItemControl.axaml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/ToolPinnedControl.axaml b/SukiUI.Dock/ToolPinnedControl.axaml new file mode 100644 index 000000000..01b340302 --- /dev/null +++ b/SukiUI.Dock/ToolPinnedControl.axaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/ToolTabStrip.axaml b/SukiUI.Dock/ToolTabStrip.axaml new file mode 100644 index 000000000..182196532 --- /dev/null +++ b/SukiUI.Dock/ToolTabStrip.axaml @@ -0,0 +1,57 @@ + + + + + Item 1 + Item 2 + Disabled + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SukiUI.Dock/ToolTabStripItem.axaml b/SukiUI.Dock/ToolTabStripItem.axaml new file mode 100644 index 000000000..77aa9c65b --- /dev/null +++ b/SukiUI.Dock/ToolTabStripItem.axaml @@ -0,0 +1,118 @@ + + + + + Leaf + Arch + Background + + + + + 48 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +