mirror of
https://github.com/4sval/FModel.git
synced 2026-03-22 01:34:37 -05:00
fix: address remaining WPF→Avalonia gaps for phase 2 completion (#85)
* fix: address remaining WPF→Avalonia gaps for phase 2 completion Resolves r6e/FModel-Linux#84 - Convert Colors.xaml & Icons.xaml to Avalonia xmlns - Migrate CommitControl to Avalonia (replace DataTriggers with IsVisible) - Migrate SearchTextBox to Avalonia (StyledProperty, native Watermark) - Migrate TreeViewItemBehavior to Avalonia attached properties - Replace ListCollectionView with DataGridCollectionView in 8 ViewModels - Add Framework/CompositeCollection as WPF CompositeCollection replacement - Remove AdonisUI.Controls refs from LoadCommand & AddEditDirectoryCommand - Replace SystemParameters with Avalonia screen API in CUE4ParseViewModel - Rewrite Resources.xaml for Avalonia Fluent theme (~2150→290 lines) - Extend CommitMessageConverter with HasDescription parameter support * fix: address review findings for PR #85 - C1: Fix ToolTip syntax (TextBlock.ToolTip → ToolTip.Tip) in tree view - C2: Add Fill binding to folder icons via ConverterParameter=Brush - C3: Convert AddEditDirectoryCommand.ShowDialog() to async with owner - M1: Convert keyed Style → ControlTheme + Theme= in all consumers - M2: Fix CommitControl badge overlap (Latest/Current mutual exclusivity) Add FallbackValue=False for null-safe Asset.IsLatest binding - M3: Add TODO(P4-004) markers for OpenFileDialog/SaveFileDialog - M4: Implement IDisposable on CompositeCollection; dispose on replace - PR: Add UrlToBitmapConverter for HTTP avatar image loading - PR: Fix ContextMenu DataContext in GameFilesTabControl ContentTemplate Restore 'Disable Alpha Channel' toggle (NoAlpha binding) - PR: Replace ElementName=TabControlName with direct DataContext bindings - PR: TreeViewItemBehavior uses GetObservable(IsSelectedProperty) with proper IDisposable subscription cleanup - S1: Clarify UpdateViewModel grouping TODO (non-DataGrid limitation) - S2: Cache compiled Regex in SearchViewModel.ItemFilter - m3: Implement TabItemFillSpace with HorizontalAlignment=Stretch Also updates FolderToGeometryConverter to support ConverterParameter for explicit brush/geometry selection. * fix: address review #2 findings on PR #85 - M1/m1/m2: UrlToBitmapConverter — sync download with ConcurrentDictionary URL cache, 4-space indent, doc comment noting async limitation - M2: Remove duplicate IsVisible attribute on Latest badge Border (MultiBinding property element takes precedence; attribute was dead code) - m3: Add TimeSpan.FromSeconds(1) timeout to user-input Regex construction - PR: ZIndex → Panel.ZIndex in SearchTextBox.xaml (Avalonia attached prop) - PR: ShadowEffect comment updated to reflect key removal (no consumers) - PR: CustomSeparator Tag TextBlock hidden when empty via StringConverters.IsNotNullOrEmpty (eliminates unwanted 10px margin) - PR: CustomVerticalSeparator BasedOn changed from default Separator to CustomSeparator (preserves tagged template inheritance from WPF) - PR: AddEditDirectoryCommand — early return when owner is null instead of silently skipping dialog - PR: CompositeCollection.Count — skip non-ICollection sources instead of O(n) enumeration fallback * Fix Avalonia parity gaps in updates, styles, and dialogs * fix: address parity review follow-ups and unresolved PR comments * Fix remaining PR review thread regressions * Address review findings: thread safety, Linux guards, indentation, and cleanup - [C1] Fix LoadCoAuthors thread race by snapshotting Commits before Task.Run - [M1] Remove IsAsync=True (WPF-only) from Avalonia bindings - [M2] Add OperatingSystem.IsWindows() guard for Win32 OpenFileDialog - [M3] Add null-safety for Application.Current in PlayPause converter - [N1] Add BrushTransition to HighlightedCheckBox for animation parity - [N2] Dispose TreeViewItem subscriptions on DetachedFromVisualTree - [N3] Fix SelectionMode converter: only Multiple uses multi-select - [S1] Simplify AddEditDirectoryCommand owner-null to early return - [S3] Remove dead WPF trigger comments from UpdateView.xaml - [S4] Add 10s timeout to UrlToBitmapConverter HttpClient - PR: Reformat UrlToBitmapConverter to 4-space indentation - PR: Catch RegexMatchTimeoutException in SearchViewModel filter * Fix review round 2: ActualWidth→Bounds, IsAsync removal, FindAncestor xmlns, misc Critical: - C1: Replace ActualHeight/ActualWidth with Bounds.Height/Bounds.Width in UpdateView, MainWindow, SettingsView, DirectorySelector (Avalonia has no ActualWidth/ActualHeight properties) - C2: Remove remaining IsAsync=True from SearchView.xaml and AudioPlayer.xaml (WPF-only, no-op in Avalonia) Major: - M1: Add xmlns:views for FModel.Views and replace dotted sub-namespace local:Views.SettingsView with views:SettingsView in all 23 FindAncestor bindings (avoids ambiguous XAML type resolution) - M2: CompositeCollection.Count now skips non-ICollection sources instead of enumerating them (O(1) for current callers) Minor: - N1: Add Application.Current null guard in FolderToGeometryConverter (matches PlaybackStateToPlayPauseConverter pattern) Suggestions: - S1: UrlToBitmapConverter.LoadAsync now cleans up _inFlight on all exit paths (defense-in-depth for exceptional failures) - S2: Add comment in CommitMessageConverter documenting interaction with LoadCoAuthors co-author cleanup * fix: merge resource dicts, regex cache, handler cleanup, null-init - Merge Colors.xaml, Icons.xaml, Resources.xaml into App.xaml so StaticResource/DynamicResource lookups resolve at runtime - Cache invalid regex state in SearchViewModel to avoid repeated recompilation on every filter invocation - Detach DetachedFromVisualTree handler in TreeViewItemBehavior when IsBroughtIntoViewWhenSelected is set to false - Fix LoadingModeToSelectionModeConverter doc to match behavior - Initialize Commit/Author backing fields with null! to satisfy non-nullable contract before JSON deserialization - Add Debug.Fail in CompositeCollection.Count for non-ICollection sources to surface unexpected usage in development * fix: load missing resource dictionaries, remove dead style refs, fix using - App.xaml: add ResourceInclude for FileContextMenu, FolderContextMenu, and TiledExplorer/Resources.xaml so StaticResource lookups resolve at runtime (C1 fix) - TiledExplorer/Resources.xaml: remove ContextMenu Setters from both TiledExplorer and AssetsListBox styles; Avalonia does not support x:Shared="False", so the shared instance would break when two ListBoxes reference the same ContextMenu. ListBoxItemBehavior already handles assignment programmatically via TryFindResource on right-click. - SettingsView.xaml: remove 11 references to undefined TextBoxDefaultStyle; HotkeyTextBox inherits FluentTheme TextBox styling by default (C2 fix) - LoadingModeToSelectionModeConverter.cs: add missing 'using FModel' for ELoadingMode resolution (M1 fix) * fix: convert Resources.xaml to Styles root, restore toggle button states - Resources.xaml: change root from <ResourceDictionary> to <Styles> so StyleInclude in App.xaml correctly loads an IStyle-implementing element. All keyed resources (ControlThemes, converters) moved into <Styles.Resources>; selector-based styles (audio controls, FoldingMargin) are direct <Styles> children. - AssetsExplorerToggleButtonStyle: restore IsChecked-dependent behavior using Avalonia selectors. :checked shows FolderIconAlt + accent background, :unchecked shows AssetIcon + default background. Tooltip shows hotkey. - MainWindow.xaml: add Classes="AssetsExplorerToggle" to the toggle button so the selector-based checked/unchecked styles match. * Fix Round 7 review findings: ControlTheme, ToolTip.Tip, dead code - C1: Convert keyed Styles to ControlTheme in TiledExplorer/Resources.xaml, update Style= to Theme= in MainWindow.xaml, convert CustomRichTextBox to auto-applying Style Selector in Resources.xaml - M1: Fix ToolTip= to ToolTip.Tip= across SearchView, SettingsView, AudioPlayer, and DirectorySelector (22 occurrences) - m1: Remove duplicate _inFlight.TryRemove in UrlToBitmapConverter.cs - m2: Remove dead Result property from CustomDir.xaml.cs - S2: Remove unused InvertBooleanConverter from Resources.xaml * Fix PR review findings: image column collapse, thread safety - Add HasImageToColumnSpanConverter so AvalonEditor spans all columns when HasImage is false, preventing unused blank space from the image column width (Resources.xaml GameFilesTabControl ContentTemplate) - Marshal LoadAssets and LoadCoAuthors collection/property mutations to Dispatcher.UIThread.InvokeAsync for explicit thread safety * fix: reformat HasImageToColumnSpanConverter to 4-space indentation * fix: map All/AllButNew/AllButModified/AllButPatched to multi-select LoadingModeToSelectionModeConverter only mapped Multiple to SelectionMode.Multiple. The original WPF DataTriggers also enabled Extended selection for All, AllButNew, AllButModified, and AllButPatched modes. Add those mappings to restore parity.
This commit is contained in:
parent
c5bc12e618
commit
40d8b73ec5
33
.github/agents/wpf-to-avalonia-migrator.agent.md
vendored
33
.github/agents/wpf-to-avalonia-migrator.agent.md
vendored
|
|
@ -4,11 +4,34 @@ name: WPF → Avalonia Migrator
|
|||
argument-hint: Name a specific file, view, or area to migrate (e.g. "migrate FModel/Views/SettingsView.xaml" or "migrate all Views")
|
||||
tools:
|
||||
[
|
||||
execute,
|
||||
read,
|
||||
edit,
|
||||
search,
|
||||
web,
|
||||
vscode/memory,
|
||||
execute/runNotebookCell,
|
||||
execute/testFailure,
|
||||
execute/getTerminalOutput,
|
||||
execute/awaitTerminal,
|
||||
execute/killTerminal,
|
||||
execute/createAndRunTask,
|
||||
execute/runInTerminal,
|
||||
execute/runTests,
|
||||
read/getNotebookSummary,
|
||||
read/problems,
|
||||
read/readFile,
|
||||
read/terminalSelection,
|
||||
read/terminalLastCommand,
|
||||
edit/createDirectory,
|
||||
edit/createFile,
|
||||
edit/createJupyterNotebook,
|
||||
edit/editFiles,
|
||||
edit/editNotebook,
|
||||
edit/rename,
|
||||
search/changes,
|
||||
search/codebase,
|
||||
search/fileSearch,
|
||||
search/listDirectory,
|
||||
search/searchResults,
|
||||
search/textSearch,
|
||||
search/usages,
|
||||
web/fetch,
|
||||
github/add_issue_comment,
|
||||
github/add_reply_to_pull_request_comment,
|
||||
github/create_pull_request,
|
||||
|
|
|
|||
|
|
@ -4,13 +4,17 @@
|
|||
RequestedThemeVariant="Dark">
|
||||
<Application.Styles>
|
||||
<FluentTheme />
|
||||
<!--
|
||||
Views/Resources/* dictionaries will be re-added here as each
|
||||
file is migrated from WPF to Avalonia XAML in later issues.
|
||||
-->
|
||||
<StyleInclude Source="avares://FModel/Views/Resources/Resources.xaml" />
|
||||
</Application.Styles>
|
||||
<Application.Resources>
|
||||
<ResourceDictionary>
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceInclude Source="avares://FModel/Views/Resources/Colors.xaml" />
|
||||
<ResourceInclude Source="avares://FModel/Views/Resources/Icons.xaml" />
|
||||
<ResourceInclude Source="avares://FModel/Views/Resources/Controls/ContextMenus/FileContextMenu.xaml" />
|
||||
<ResourceInclude Source="avares://FModel/Views/Resources/Controls/ContextMenus/FolderContextMenu.xaml" />
|
||||
<ResourceInclude Source="avares://FModel/Views/Resources/Controls/TiledExplorer/Resources.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
<!-- Accent colours preserved from original AdonisUI scheme -->
|
||||
<Color x:Key="AccentColor">#206BD4</Color>
|
||||
<SolidColorBrush x:Key="AccentColorBrush"
|
||||
|
|
|
|||
74
FModel/Framework/CompositeCollection.cs
Normal file
74
FModel/Framework/CompositeCollection.cs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace FModel.Framework;
|
||||
|
||||
/// <summary>
|
||||
/// Minimal replacement for WPF's CompositeCollection.
|
||||
/// Merges multiple <see cref="IEnumerable"/> sources into a single flat enumerable
|
||||
/// and relays <see cref="INotifyCollectionChanged"/> events from each source.
|
||||
/// </summary>
|
||||
public class CompositeCollection : IEnumerable, INotifyCollectionChanged, IDisposable
|
||||
{
|
||||
private readonly IEnumerable[] _sources;
|
||||
private bool _disposed;
|
||||
|
||||
public event NotifyCollectionChangedEventHandler? CollectionChanged;
|
||||
|
||||
public CompositeCollection(params IEnumerable[] sources)
|
||||
{
|
||||
_sources = sources;
|
||||
foreach (var source in _sources)
|
||||
{
|
||||
if (source is INotifyCollectionChanged ncc)
|
||||
ncc.CollectionChanged += OnSourceCollectionChanged;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSourceCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
// Relay as a reset since index mapping across multiple sources is complex
|
||||
CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
|
||||
}
|
||||
|
||||
public IEnumerator GetEnumerator()
|
||||
{
|
||||
foreach (var source in _sources)
|
||||
{
|
||||
foreach (var item in source)
|
||||
yield return item;
|
||||
}
|
||||
}
|
||||
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
var count = 0;
|
||||
foreach (var source in _sources)
|
||||
{
|
||||
if (source is ICollection c)
|
||||
count += c.Count;
|
||||
else
|
||||
Debug.Fail($"CompositeCollection.Count: source {source.GetType().Name} does not implement ICollection; its items are not counted.");
|
||||
}
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_disposed)
|
||||
return;
|
||||
_disposed = true;
|
||||
|
||||
foreach (var source in _sources)
|
||||
{
|
||||
if (source is INotifyCollectionChanged ncc)
|
||||
ncc.CollectionChanged -= OnSourceCollectionChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -294,7 +294,7 @@
|
|||
<TabControl x:Name="LeftTabControl"
|
||||
SelectionChanged="OnTabItemChange"
|
||||
SelectedIndex="{Binding SelectedLeftTabIndex, Mode=TwoWay}">
|
||||
<TabItem Style="{StaticResource TabItemFillSpace}"
|
||||
<TabItem Theme="{StaticResource TabItemFillSpace}"
|
||||
Header="Archives">
|
||||
<DockPanel>
|
||||
<Grid DockPanel.Dock="Top">
|
||||
|
|
@ -341,14 +341,14 @@
|
|||
</Grid.RowDefinitions>
|
||||
|
||||
<Separator Grid.Row="0"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="GAME ARCHIVES" />
|
||||
<ListBox Grid.Row="1"
|
||||
x:Name="DirectoryFilesListBox"
|
||||
Style="{StaticResource DirectoryFilesListBox}"
|
||||
Theme="{StaticResource DirectoryFilesListBox}"
|
||||
DoubleTapped="OnMouseDoubleClick" />
|
||||
<Separator Grid.Row="2"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="INFORMATION" />
|
||||
<StackPanel Grid.Row="3"
|
||||
Orientation="Vertical"
|
||||
|
|
@ -410,7 +410,7 @@
|
|||
</Grid>
|
||||
</DockPanel>
|
||||
</TabItem>
|
||||
<TabItem Style="{StaticResource TabItemFillSpace}"
|
||||
<TabItem Theme="{StaticResource TabItemFillSpace}"
|
||||
Header="Folders">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
|
|
@ -500,17 +500,17 @@
|
|||
</StackPanel>
|
||||
</Grid>
|
||||
<Separator Grid.Row="1"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Margin="0" />
|
||||
<TreeView Grid.Row="2"
|
||||
x:Name="AssetsFolderName"
|
||||
Style="{StaticResource AssetsFolderTreeView}"
|
||||
Theme="{StaticResource AssetsFolderTreeView}"
|
||||
SelectionChanged="OnAssetsTreeSelectedItemChanged"
|
||||
KeyDown="OnFoldersPreviewKeyDown"
|
||||
DoubleTapped="OnAssetsTreeMouseDoubleClick">
|
||||
</TreeView>
|
||||
<Separator Grid.Row="3"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="INFORMATION" />
|
||||
<StackPanel Grid.Row="4"
|
||||
Orientation="Vertical"
|
||||
|
|
@ -582,7 +582,7 @@
|
|||
</StackPanel>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
<TabItem Style="{StaticResource TabItemFillSpace}"
|
||||
<TabItem Theme="{StaticResource TabItemFillSpace}"
|
||||
Header="{Binding SelectedItem.AssetsList.Assets.Count, FallbackValue=0, ElementName=AssetsFolderName}"
|
||||
HeaderStringFormat="{}{0} Packages">
|
||||
<DockPanel>
|
||||
|
|
@ -603,17 +603,17 @@
|
|||
<controls:Breadcrumb Grid.Row="0"
|
||||
HorizontalAlignment="Left"
|
||||
Margin="0 5 0 5"
|
||||
MaxWidth="{Binding ActualWidth, ElementName=AssetsSearchTextBox}"
|
||||
MaxWidth="{Binding Bounds.Width, ElementName=AssetsSearchTextBox}"
|
||||
DataContext="{Binding SelectedItem.PathAtThisPoint, ElementName=AssetsFolderName, FallbackValue='No/Directory/Detected/In/Folder'}" />
|
||||
|
||||
<ListBox Grid.Row="1"
|
||||
x:Name="AssetsListName"
|
||||
Style="{StaticResource AssetsListBox}"
|
||||
Theme="{StaticResource AssetsListBox}"
|
||||
DoubleTapped="OnAssetsListMouseDoubleClick"
|
||||
KeyDown="OnPreviewKeyDown" />
|
||||
|
||||
<Separator Grid.Row="2"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="INFORMATION" />
|
||||
<StackPanel Grid.Row="3"
|
||||
Orientation="Vertical"
|
||||
|
|
@ -744,15 +744,15 @@
|
|||
|
||||
<ListBox x:Name="AssetsExplorer"
|
||||
Grid.Row="2"
|
||||
ItemsSource="{Binding SelectedItem.CombinedEntries, ElementName=AssetsFolderName, IsAsync=True}"
|
||||
Style="{StaticResource TiledExplorer}"
|
||||
ItemsSource="{Binding SelectedItem.CombinedEntries, ElementName=AssetsFolderName}"
|
||||
Theme="{StaticResource TiledExplorer}"
|
||||
Background="{DynamicResource SystemColors.AppWorkspaceBrushKey}"
|
||||
KeyDown="OnPreviewKeyDown" />
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<TabControl x:Name="TabControlName"
|
||||
Style="{StaticResource GameFilesTabControl}"
|
||||
Theme="{StaticResource GameFilesTabControl}"
|
||||
IsVisible="{Binding IsAssetsExplorerVisible, Converter={x:Static converters:InvertBooleanConverter.Instance}}" />
|
||||
</Grid>
|
||||
|
||||
|
|
@ -783,6 +783,7 @@
|
|||
Height="32"
|
||||
Cursor="Hand"
|
||||
Margin="0,0,2,0"
|
||||
Classes="AssetsExplorerToggle"
|
||||
IsChecked="{Binding IsAssetsExplorerVisible, Mode=TwoWay}"
|
||||
Theme="{StaticResource AssetsExplorerToggleButtonStyle}" />
|
||||
<ToggleButton Width="32"
|
||||
|
|
@ -827,8 +828,7 @@
|
|||
|
||||
<controls:CustomRichTextBox Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
x:Name="LogRtbName"
|
||||
Style="{StaticResource CustomRichTextBox}" />
|
||||
x:Name="LogRtbName" />
|
||||
<StackPanel Grid.Column="2"
|
||||
Orientation="Vertical"
|
||||
VerticalAlignment="Bottom"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ using System.Collections.Generic;
|
|||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
using Avalonia.Collections;
|
||||
using CUE4Parse.UE4.Objects.Core.Misc;
|
||||
using FModel.Framework;
|
||||
using FModel.Services;
|
||||
|
|
@ -16,7 +16,7 @@ public class AesManagerViewModel : ViewModel
|
|||
private ThreadWorkerViewModel _threadWorkerView => ApplicationService.ThreadWorkerView;
|
||||
|
||||
public FullyObservableCollection<FileItem> AesKeys { get; private set; } // holds all aes keys even the main one
|
||||
public ICollectionView AesKeysView { get; private set; } // holds all aes key ordered by name for the ui
|
||||
public DataGridCollectionView AesKeysView { get; private set; } // holds all aes key ordered by name for the ui
|
||||
public bool HasChange { get; set; }
|
||||
|
||||
private AesResponse _keysFromSettings;
|
||||
|
|
@ -38,7 +38,7 @@ public class AesManagerViewModel : ViewModel
|
|||
_mainKey.Key = Helper.FixKey(_keysFromSettings.MainKey);
|
||||
AesKeys = new FullyObservableCollection<FileItem>(EnumerateAesKeys());
|
||||
AesKeys.ItemPropertyChanged += AesKeysOnItemPropertyChanged;
|
||||
AesKeysView = new ListCollectionView(AesKeys) { SortDescriptions = { new SortDescription("Name", ListSortDirection.Ascending) } };
|
||||
AesKeysView = new DataGridCollectionView(AesKeys) { SortDescriptions = { DataGridSortDescription.FromPath("Name", ListSortDirection.Ascending) } };
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using Avalonia.Media.Imaging;
|
||||
using FModel.Framework;
|
||||
using FModel.Settings;
|
||||
using Serilog;
|
||||
using J = Newtonsoft.Json.JsonPropertyAttribute;
|
||||
using JI = Newtonsoft.Json.JsonIgnoreAttribute;
|
||||
|
||||
namespace FModel.ViewModels.ApiEndpoints.Models;
|
||||
|
||||
|
|
@ -116,17 +118,37 @@ public class GitHubCommit : ViewModel
|
|||
}
|
||||
}
|
||||
|
||||
public class Commit
|
||||
public class Commit : ViewModel
|
||||
{
|
||||
[J("author")] public Author Author { get; set; }
|
||||
[J("message")] public string Message { get; set; }
|
||||
private Author _author = null!;
|
||||
[J("author")] public Author Author
|
||||
{
|
||||
get => _author;
|
||||
set => SetProperty(ref _author, value);
|
||||
}
|
||||
|
||||
private string _message = null!;
|
||||
[J("message")] public string Message
|
||||
{
|
||||
get => _message;
|
||||
set => SetProperty(ref _message, value);
|
||||
}
|
||||
}
|
||||
|
||||
public class Author
|
||||
public class Author : ViewModel
|
||||
{
|
||||
[J("name")] public string Name { get; set; }
|
||||
[J("login")] public string Login { get; set; }
|
||||
[J("name")] public string Name { get; set; } = null!;
|
||||
[J("login")] public string Login { get; set; } = null!;
|
||||
[J("date")] public DateTime Date { get; set; }
|
||||
[J("avatar_url")] public string AvatarUrl { get; set; }
|
||||
[J("html_url")] public string HtmlUrl { get; set; }
|
||||
[J("avatar_url")] public string AvatarUrl { get; set; } = null!;
|
||||
[J("html_url")] public string HtmlUrl { get; set; } = null!;
|
||||
|
||||
private Bitmap? _avatarImage;
|
||||
|
||||
[JI]
|
||||
public Bitmap? AvatarImage
|
||||
{
|
||||
get => _avatarImage;
|
||||
set => SetProperty(ref _avatarImage, value);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ using System.ComponentModel;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Threading;
|
||||
using CUE4Parse.FileProvider.Objects;
|
||||
using CUE4Parse.UE4.Versions;
|
||||
|
|
@ -87,35 +87,35 @@ public class TreeItem : ViewModel
|
|||
public AssetsListViewModel AssetsList { get; } = new();
|
||||
public RangeObservableCollection<TreeItem> Folders { get; } = [];
|
||||
|
||||
private ICollectionView _foldersView;
|
||||
public ICollectionView FoldersView
|
||||
private DataGridCollectionView _foldersView;
|
||||
public DataGridCollectionView FoldersView
|
||||
{
|
||||
get
|
||||
{
|
||||
_foldersView ??= new ListCollectionView(Folders)
|
||||
_foldersView ??= new DataGridCollectionView(Folders)
|
||||
{
|
||||
SortDescriptions = { new SortDescription(nameof(Header), ListSortDirection.Ascending) }
|
||||
SortDescriptions = { DataGridSortDescription.FromPath(nameof(Header), ListSortDirection.Ascending) }
|
||||
};
|
||||
return _foldersView;
|
||||
}
|
||||
}
|
||||
|
||||
private ICollectionView? _filteredFoldersView;
|
||||
public ICollectionView? FilteredFoldersView
|
||||
private DataGridCollectionView? _filteredFoldersView;
|
||||
public DataGridCollectionView? FilteredFoldersView
|
||||
{
|
||||
get
|
||||
{
|
||||
_filteredFoldersView ??= new ListCollectionView(Folders)
|
||||
_filteredFoldersView ??= new DataGridCollectionView(Folders)
|
||||
{
|
||||
SortDescriptions = { new SortDescription(nameof(Header), ListSortDirection.Ascending) },
|
||||
SortDescriptions = { DataGridSortDescription.FromPath(nameof(Header), ListSortDirection.Ascending) },
|
||||
Filter = e => ItemFilter(e, SearchText.Trim().Split(' ', StringSplitOptions.RemoveEmptyEntries))
|
||||
};
|
||||
return _filteredFoldersView;
|
||||
}
|
||||
}
|
||||
|
||||
private CompositeCollection _combinedEntries;
|
||||
public CompositeCollection CombinedEntries
|
||||
private Framework.CompositeCollection _combinedEntries;
|
||||
public Framework.CompositeCollection CombinedEntries
|
||||
{
|
||||
get
|
||||
{
|
||||
|
|
@ -123,11 +123,8 @@ public class TreeItem : ViewModel
|
|||
{
|
||||
void CreateCombinedEntries()
|
||||
{
|
||||
_combinedEntries = new CompositeCollection
|
||||
{
|
||||
new CollectionContainer { Collection = FilteredFoldersView },
|
||||
new CollectionContainer { Collection = AssetsList.AssetsView }
|
||||
};
|
||||
_combinedEntries?.Dispose();
|
||||
_combinedEntries = new Framework.CompositeCollection(FilteredFoldersView, AssetsList.AssetsView);
|
||||
}
|
||||
|
||||
if (!Dispatcher.UIThread.CheckAccess())
|
||||
|
|
@ -200,12 +197,12 @@ public class TreeItem : ViewModel
|
|||
public class AssetsFolderViewModel
|
||||
{
|
||||
public RangeObservableCollection<TreeItem> Folders { get; }
|
||||
public ICollectionView FoldersView { get; }
|
||||
public DataGridCollectionView FoldersView { get; }
|
||||
|
||||
public AssetsFolderViewModel()
|
||||
{
|
||||
Folders = [];
|
||||
FoldersView = new ListCollectionView(Folders) { SortDescriptions = { new SortDescription("Header", ListSortDirection.Ascending) } };
|
||||
FoldersView = new DataGridCollectionView(Folders) { SortDescriptions = { DataGridSortDescription.FromPath("Header", ListSortDirection.Ascending) } };
|
||||
}
|
||||
|
||||
public void BulkPopulate(IReadOnlyCollection<GameFile> entries)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
using System.ComponentModel;
|
||||
using System.Windows.Data;
|
||||
using Avalonia.Collections;
|
||||
using CUE4Parse.FileProvider.Objects;
|
||||
using FModel.Framework;
|
||||
|
||||
|
|
@ -9,14 +9,14 @@ public class AssetsListViewModel
|
|||
{
|
||||
public RangeObservableCollection<GameFileViewModel> Assets { get; } = [];
|
||||
|
||||
private ICollectionView _assetsView;
|
||||
public ICollectionView AssetsView
|
||||
private DataGridCollectionView _assetsView;
|
||||
public DataGridCollectionView AssetsView
|
||||
{
|
||||
get
|
||||
{
|
||||
_assetsView ??= new ListCollectionView(Assets)
|
||||
_assetsView ??= new DataGridCollectionView(Assets)
|
||||
{
|
||||
SortDescriptions = { new SortDescription("Asset.Path", ListSortDirection.Ascending) }
|
||||
SortDescriptions = { DataGridSortDescription.FromPath("Asset.Path", ListSortDirection.Ascending) }
|
||||
};
|
||||
return _assetsView;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ using System.Diagnostics;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Windows.Data;
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Threading;
|
||||
using CSCore;
|
||||
using CSCore.CoreAudioAPI;
|
||||
|
|
@ -201,17 +201,17 @@ public class AudioPlayerViewModel : ViewModel, ISource, IDisposable
|
|||
public bool IsPaused => PlayedFile.PlaybackState == PlaybackState.Paused;
|
||||
|
||||
private readonly ObservableCollection<AudioFile> _audioFiles;
|
||||
public ICollectionView AudioFilesView { get; }
|
||||
public ICollectionView AudioDevicesView { get; }
|
||||
public DataGridCollectionView AudioFilesView { get; }
|
||||
public DataGridCollectionView AudioDevicesView { get; }
|
||||
|
||||
public AudioPlayerViewModel()
|
||||
{
|
||||
_sourceTimer = new Timer(TimerTick, null, 0, 10);
|
||||
_audioFiles = new ObservableCollection<AudioFile>();
|
||||
AudioFilesView = new ListCollectionView(_audioFiles);
|
||||
AudioFilesView = new DataGridCollectionView(_audioFiles);
|
||||
|
||||
var audioDevices = new ObservableCollection<MMDevice>(EnumerateDevices());
|
||||
AudioDevicesView = new ListCollectionView(audioDevices) { SortDescriptions = { new SortDescription("FriendlyName", ListSortDirection.Ascending) } };
|
||||
AudioDevicesView = new DataGridCollectionView(audioDevices) { SortDescriptions = { DataGridSortDescription.FromPath("FriendlyName", ListSortDirection.Ascending) } };
|
||||
SelectedAudioDevice ??= audioDevices.FirstOrDefault();
|
||||
}
|
||||
|
||||
|
|
@ -322,6 +322,7 @@ public class AudioPlayerViewModel : ViewModel, ISource, IDisposable
|
|||
|
||||
if (!auto)
|
||||
{
|
||||
// TODO(P4-004): Replace Microsoft.Win32.SaveFileDialog with Avalonia StorageProvider API.
|
||||
var saveFileDialog = new SaveFileDialog
|
||||
{
|
||||
Title = "Save Audio",
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ using System.ComponentModel;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Threading;
|
||||
using CUE4Parse.FileProvider.Objects;
|
||||
using FModel.Framework;
|
||||
|
|
@ -35,13 +35,13 @@ public class BackupManagerViewModel : ViewModel
|
|||
}
|
||||
|
||||
public ObservableCollection<Backup> Backups { get; }
|
||||
public ICollectionView BackupsView { get; }
|
||||
public DataGridCollectionView BackupsView { get; }
|
||||
|
||||
public BackupManagerViewModel(string gameName)
|
||||
{
|
||||
_gameName = gameName;
|
||||
Backups = new ObservableCollection<Backup>();
|
||||
BackupsView = new ListCollectionView(Backups) { SortDescriptions = { new SortDescription("FileName", ListSortDirection.Ascending) } };
|
||||
BackupsView = new DataGridCollectionView(Backups) { SortDescriptions = { DataGridSortDescription.FromPath("FileName", ListSortDirection.Ascending) } };
|
||||
}
|
||||
|
||||
public async Task Initialize()
|
||||
|
|
|
|||
|
|
@ -9,7 +9,9 @@ using System.Net.Http.Headers;
|
|||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
|
||||
using CUE4Parse;
|
||||
using CUE4Parse.Compression;
|
||||
|
|
@ -136,13 +138,16 @@ public class CUE4ParseViewModel : ViewModel
|
|||
{
|
||||
var scale = ImGuiController.GetDpiScale();
|
||||
var htz = Snooper.GetMaxRefreshFrequency();
|
||||
var primaryScreen = (Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow?.Screens.Primary;
|
||||
var screenWidth = primaryScreen?.Bounds.Width ?? 1920;
|
||||
var screenHeight = primaryScreen?.Bounds.Height ?? 1080;
|
||||
return _snooper = new Snooper(
|
||||
new GameWindowSettings { UpdateFrequency = htz },
|
||||
new NativeWindowSettings
|
||||
{
|
||||
ClientSize = new OpenTK.Mathematics.Vector2i(
|
||||
Convert.ToInt32(SystemParameters.MaximizedPrimaryScreenWidth * .75 * scale),
|
||||
Convert.ToInt32(SystemParameters.MaximizedPrimaryScreenHeight * .85 * scale)),
|
||||
Convert.ToInt32(screenWidth * .75 * scale),
|
||||
Convert.ToInt32(screenHeight * .85 * scale)),
|
||||
NumberOfSamples = Constants.SAMPLES_COUNT,
|
||||
WindowBorder = WindowBorder.Resizable,
|
||||
Flags = ContextFlags.ForwardCompatible,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
using AdonisUI.Controls;
|
||||
using System;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using FModel.Framework;
|
||||
using FModel.Settings;
|
||||
using FModel.Views;
|
||||
using Serilog;
|
||||
|
||||
namespace FModel.ViewModels.Commands;
|
||||
|
||||
|
|
@ -11,25 +15,44 @@ public class AddEditDirectoryCommand : ViewModelCommand<CustomDirectoriesViewMod
|
|||
{
|
||||
}
|
||||
|
||||
public override void Execute(CustomDirectoriesViewModel contextViewModel, object parameter)
|
||||
public override async void Execute(CustomDirectoriesViewModel contextViewModel, object parameter)
|
||||
{
|
||||
if (parameter is not CustomDirectory customDir)
|
||||
customDir = new CustomDirectory();
|
||||
|
||||
Helper.OpenWindow<AdonisWindow>("Custom Directory", () =>
|
||||
try
|
||||
{
|
||||
var index = contextViewModel.GetIndex(customDir);
|
||||
var input = new CustomDir(customDir);
|
||||
var result = input.ShowDialog();
|
||||
if (!result.HasValue || !result.Value || string.IsNullOrEmpty(customDir.Header) && string.IsNullOrEmpty(customDir.DirectoryPath))
|
||||
return;
|
||||
var sourceDir = parameter as CustomDirectory ?? new CustomDirectory();
|
||||
var editableDir = new CustomDirectory(sourceDir.Header, sourceDir.DirectoryPath);
|
||||
|
||||
if (index > 1)
|
||||
var index = contextViewModel.GetIndex(sourceDir);
|
||||
var input = new CustomDir(editableDir);
|
||||
var owner = (Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow;
|
||||
|
||||
if (owner == null)
|
||||
{
|
||||
contextViewModel.Edit(index, customDir);
|
||||
Log.Warning("AddEditDirectoryCommand: no owner window available, cannot show dialog");
|
||||
return;
|
||||
}
|
||||
else
|
||||
contextViewModel.Add(customDir);
|
||||
});
|
||||
|
||||
var result = await input.ShowDialog<bool?>(owner);
|
||||
Apply(result);
|
||||
|
||||
void Apply(bool? dialogResult)
|
||||
{
|
||||
if (dialogResult is not true || string.IsNullOrEmpty(editableDir.Header) && string.IsNullOrEmpty(editableDir.DirectoryPath))
|
||||
return;
|
||||
|
||||
// Sync edits back to sourceDir so menu CommandParameters stay in sync
|
||||
sourceDir.Header = editableDir.Header;
|
||||
sourceDir.DirectoryPath = editableDir.DirectoryPath;
|
||||
|
||||
if (index > 1)
|
||||
contextViewModel.Edit(index, sourceDir);
|
||||
else
|
||||
contextViewModel.Add(sourceDir);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(ex, "AddEditDirectoryCommand failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using AdonisUI.Controls;
|
||||
using Avalonia.Controls;
|
||||
using CUE4Parse.FileProvider.Objects;
|
||||
using CUE4Parse.UE4.Readers;
|
||||
using CUE4Parse.UE4.VirtualFileSystem;
|
||||
|
|
@ -19,6 +19,7 @@ using FModel.Settings;
|
|||
using FModel.Views.Resources.Controls;
|
||||
using K4os.Compression.LZ4.Streams;
|
||||
using Microsoft.Win32;
|
||||
using Serilog;
|
||||
|
||||
namespace FModel.ViewModels.Commands;
|
||||
|
||||
|
|
@ -57,7 +58,7 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
_applicationView.CUE4Parse.SearchVm.SearchResults.Clear();
|
||||
_applicationView.SelectedLeftTabIndex = 1; // folders tab
|
||||
_applicationView.IsAssetsExplorerVisible = true;
|
||||
Helper.CloseWindow<AdonisWindow>("Search For Packages"); // close search window if opened
|
||||
Helper.CloseWindow<Window>("Search For Packages"); // close search window if opened
|
||||
|
||||
await Task.WhenAll(
|
||||
_applicationView.CUE4Parse.LoadLocalizedResources(), // load locres if not already loaded,
|
||||
|
|
@ -69,35 +70,36 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
switch (UserSettings.Default.LoadingMode)
|
||||
{
|
||||
case ELoadingMode.Multiple:
|
||||
{
|
||||
var l = (IList) parameter;
|
||||
if (l.Count == 0)
|
||||
{
|
||||
UserSettings.Default.LoadingMode = ELoadingMode.All;
|
||||
goto case ELoadingMode.All;
|
||||
}
|
||||
var l = (IList) parameter;
|
||||
if (l.Count == 0)
|
||||
{
|
||||
UserSettings.Default.LoadingMode = ELoadingMode.All;
|
||||
goto case ELoadingMode.All;
|
||||
}
|
||||
|
||||
var directoryFilesToShow = l.Cast<FileItem>();
|
||||
FilterDirectoryFilesToDisplay(cancellationToken, directoryFilesToShow);
|
||||
break;
|
||||
}
|
||||
var directoryFilesToShow = l.Cast<FileItem>();
|
||||
FilterDirectoryFilesToDisplay(cancellationToken, directoryFilesToShow);
|
||||
break;
|
||||
}
|
||||
case ELoadingMode.All:
|
||||
{
|
||||
FilterDirectoryFilesToDisplay(cancellationToken, null);
|
||||
break;
|
||||
}
|
||||
{
|
||||
FilterDirectoryFilesToDisplay(cancellationToken, null);
|
||||
break;
|
||||
}
|
||||
case ELoadingMode.AllButNew:
|
||||
case ELoadingMode.AllButModified:
|
||||
{
|
||||
FilterNewOrModifiedFilesToDisplay(cancellationToken);
|
||||
break;
|
||||
}
|
||||
{
|
||||
FilterNewOrModifiedFilesToDisplay(cancellationToken);
|
||||
break;
|
||||
}
|
||||
case ELoadingMode.AllButPatched:
|
||||
{
|
||||
FilterPacthedFilesToDisplay(cancellationToken);
|
||||
break;
|
||||
}
|
||||
default: throw new ArgumentOutOfRangeException();
|
||||
{
|
||||
FilterPacthedFilesToDisplay(cancellationToken);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
|
||||
_discordHandler.UpdatePresence(_applicationView.CUE4Parse);
|
||||
|
|
@ -113,13 +115,15 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
private void FilterDirectoryFilesToDisplay(CancellationToken cancellationToken, IEnumerable<FileItem> directoryFiles)
|
||||
{
|
||||
HashSet<string> filter;
|
||||
if (directoryFiles == null) filter = null;
|
||||
if (directoryFiles == null)
|
||||
filter = null;
|
||||
else
|
||||
{
|
||||
filter = [];
|
||||
foreach (var directoryFile in directoryFiles)
|
||||
{
|
||||
if (!directoryFile.IsEnabled) continue;
|
||||
if (!directoryFile.IsEnabled)
|
||||
continue;
|
||||
filter.Add(directoryFile.Name);
|
||||
}
|
||||
}
|
||||
|
|
@ -130,7 +134,8 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
foreach (var asset in _applicationView.CUE4Parse.Provider.Files.Values)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested(); // cancel if needed
|
||||
if (asset.IsUePackagePayload) continue;
|
||||
if (asset.IsUePackagePayload)
|
||||
continue;
|
||||
|
||||
if (hasFilter)
|
||||
{
|
||||
|
|
@ -151,6 +156,13 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
|
||||
private void FilterNewOrModifiedFilesToDisplay(CancellationToken cancellationToken)
|
||||
{
|
||||
if (!OperatingSystem.IsWindows())
|
||||
{
|
||||
Log.Warning("Backup file comparison is not yet available on this platform (requires P4-004 StorageProvider migration)");
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(P4-004): Replace Microsoft.Win32.OpenFileDialog with Avalonia StorageProvider API.
|
||||
var openFileDialog = new OpenFileDialog
|
||||
{
|
||||
Title = "Select a backup file older than your current game version",
|
||||
|
|
@ -159,7 +171,8 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
Multiselect = false
|
||||
};
|
||||
|
||||
if (!openFileDialog.ShowDialog().GetValueOrDefault()) return;
|
||||
if (!openFileDialog.ShowDialog().GetValueOrDefault())
|
||||
return;
|
||||
|
||||
FLogger.Append(ELog.Information, () =>
|
||||
FLogger.Text($"Backup file older than current game is '{openFileDialog.FileName.SubstringAfterLast("\\")}'", Constants.WHITE, true));
|
||||
|
|
@ -182,7 +195,8 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
using var compressionStream = LZ4Stream.Decode(fileStream);
|
||||
compressionStream.CopyTo(memoryStream);
|
||||
}
|
||||
else fileStream.CopyTo(memoryStream);
|
||||
else
|
||||
fileStream.CopyTo(memoryStream);
|
||||
|
||||
memoryStream.Position = 0;
|
||||
using var archive = new FStreamArchive(fileStream.Name, memoryStream);
|
||||
|
|
@ -191,85 +205,88 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
switch (mode)
|
||||
{
|
||||
case ELoadingMode.AllButNew:
|
||||
{
|
||||
var paths = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
var magic = archive.Read<uint>();
|
||||
if (magic != BackupManagerViewModel.FBKP_MAGIC)
|
||||
{
|
||||
archive.Position -= sizeof(uint);
|
||||
while (archive.Position < archive.Length)
|
||||
var paths = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
var magic = archive.Read<uint>();
|
||||
if (magic != BackupManagerViewModel.FBKP_MAGIC)
|
||||
{
|
||||
archive.Position -= sizeof(uint);
|
||||
while (archive.Position < archive.Length)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
archive.Position += 29;
|
||||
paths.Add(archive.ReadString()[1..]);
|
||||
archive.Position += 4;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var version = archive.Read<EBackupVersion>();
|
||||
var count = archive.Read<int>();
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
archive.Position += sizeof(long) + sizeof(byte);
|
||||
var fullPath = archive.ReadString();
|
||||
if (version < EBackupVersion.PerfectPath)
|
||||
fullPath = fullPath[1..];
|
||||
|
||||
paths.Add(fullPath);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var (key, asset) in _applicationView.CUE4Parse.Provider.Files)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
if (asset.IsUePackagePayload || paths.Contains(key))
|
||||
continue;
|
||||
|
||||
archive.Position += 29;
|
||||
paths.Add(archive.ReadString()[1..]);
|
||||
archive.Position += 4;
|
||||
entries.Add(asset);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
var version = archive.Read<EBackupVersion>();
|
||||
var count = archive.Read<int>();
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
archive.Position += sizeof(long) + sizeof(byte);
|
||||
var fullPath = archive.ReadString();
|
||||
if (version < EBackupVersion.PerfectPath) fullPath = fullPath[1..];
|
||||
|
||||
paths.Add(fullPath);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var (key, asset) in _applicationView.CUE4Parse.Provider.Files)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
if (asset.IsUePackagePayload || paths.Contains(key)) continue;
|
||||
|
||||
entries.Add(asset);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ELoadingMode.AllButModified:
|
||||
{
|
||||
var magic = archive.Read<uint>();
|
||||
if (magic != BackupManagerViewModel.FBKP_MAGIC)
|
||||
{
|
||||
archive.Position -= sizeof(uint);
|
||||
while (archive.Position < archive.Length)
|
||||
var magic = archive.Read<uint>();
|
||||
if (magic != BackupManagerViewModel.FBKP_MAGIC)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
archive.Position -= sizeof(uint);
|
||||
while (archive.Position < archive.Length)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
archive.Position += 16;
|
||||
var uncompressedSize = archive.Read<long>();
|
||||
var isEncrypted = archive.ReadFlag();
|
||||
archive.Position += 4;
|
||||
var fullPath = archive.ReadString()[1..];
|
||||
archive.Position += 4;
|
||||
archive.Position += 16;
|
||||
var uncompressedSize = archive.Read<long>();
|
||||
var isEncrypted = archive.ReadFlag();
|
||||
archive.Position += 4;
|
||||
var fullPath = archive.ReadString()[1..];
|
||||
archive.Position += 4;
|
||||
|
||||
AddEntry(fullPath, uncompressedSize, isEncrypted, entries);
|
||||
AddEntry(fullPath, uncompressedSize, isEncrypted, entries);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var version = archive.Read<EBackupVersion>();
|
||||
var count = archive.Read<int>();
|
||||
for (var i = 0; i < count; i++)
|
||||
else
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
var version = archive.Read<EBackupVersion>();
|
||||
var count = archive.Read<int>();
|
||||
for (var i = 0; i < count; i++)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
var uncompressedSize = archive.Read<long>();
|
||||
var isEncrypted = archive.ReadFlag();
|
||||
var fullPath = archive.ReadString();
|
||||
if (version < EBackupVersion.PerfectPath) fullPath = fullPath[1..];
|
||||
var uncompressedSize = archive.Read<long>();
|
||||
var isEncrypted = archive.ReadFlag();
|
||||
var fullPath = archive.ReadString();
|
||||
if (version < EBackupVersion.PerfectPath)
|
||||
fullPath = fullPath[1..];
|
||||
|
||||
AddEntry(fullPath, uncompressedSize, isEncrypted, entries);
|
||||
AddEntry(fullPath, uncompressedSize, isEncrypted, entries);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return entries;
|
||||
|
|
@ -291,7 +308,8 @@ public class LoadCommand : ViewModelCommand<LoadingModesViewModel>
|
|||
foreach (var (key, asset) in _applicationView.CUE4Parse.Provider.Files)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested(); // cancel if needed
|
||||
if (asset.IsUePackagePayload) continue;
|
||||
if (asset.IsUePackagePayload)
|
||||
continue;
|
||||
|
||||
if (asset is VfsEntry entry && loaded.TryGetValue(key, out var file) &&
|
||||
file is VfsEntry existingEntry && entry.Vfs.ReadOrder < existingEntry.Vfs.ReadOrder)
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ public class CustomDirectoriesViewModel : ViewModel
|
|||
|
||||
dir.Header = newDir.Header;
|
||||
dir.Tag = newDir.DirectoryPath;
|
||||
dir.ItemsSource = EnumerateCommands(newDir);
|
||||
Save();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ using System.Collections.ObjectModel;
|
|||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Data;
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Threading;
|
||||
using CUE4Parse.Compression;
|
||||
using CUE4Parse.UE4.IO;
|
||||
|
|
@ -105,7 +105,7 @@ public class GameDirectoryViewModel : ViewModel
|
|||
{
|
||||
public bool HasNoFile => DirectoryFiles.Count < 1;
|
||||
public readonly ObservableCollection<FileItem> DirectoryFiles;
|
||||
public ICollectionView DirectoryFilesView { get; }
|
||||
public DataGridCollectionView DirectoryFilesView { get; }
|
||||
|
||||
private readonly Regex _hiddenArchives = new(@"^(?!global|pakchunk.+(optional|ondemand)\-).+(pak|utoc)$", // should be universal
|
||||
RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
|
||||
|
|
@ -113,7 +113,7 @@ public class GameDirectoryViewModel : ViewModel
|
|||
public GameDirectoryViewModel()
|
||||
{
|
||||
DirectoryFiles = new ObservableCollection<FileItem>();
|
||||
DirectoryFilesView = new ListCollectionView(DirectoryFiles) { SortDescriptions = { new SortDescription("Name", ListSortDirection.Ascending) } };
|
||||
DirectoryFilesView = new DataGridCollectionView(DirectoryFiles) { SortDescriptions = { DataGridSortDescription.FromPath("Name", ListSortDirection.Ascending) } };
|
||||
}
|
||||
|
||||
public void Add(IAesVfsReader reader)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
using Avalonia.Collections;
|
||||
using CUE4Parse.FileProvider.Objects;
|
||||
using CUE4Parse.UE4.VirtualFileSystem;
|
||||
using FModel.Framework;
|
||||
|
|
@ -62,12 +62,12 @@ public class SearchViewModel : ViewModel
|
|||
}
|
||||
|
||||
public RangeObservableCollection<GameFile> SearchResults { get; }
|
||||
public ListCollectionView SearchResultsView { get; }
|
||||
public DataGridCollectionView SearchResultsView { get; }
|
||||
|
||||
public SearchViewModel()
|
||||
{
|
||||
SearchResults = [];
|
||||
SearchResultsView = new ListCollectionView(SearchResults)
|
||||
SearchResultsView = new DataGridCollectionView(SearchResults)
|
||||
{
|
||||
Filter = e => ItemFilter(e, FilterText.Trim().Split(' ', StringSplitOptions.RemoveEmptyEntries)),
|
||||
};
|
||||
|
|
@ -130,6 +130,11 @@ public class SearchViewModel : ViewModel
|
|||
SearchResults.AddRange(sorted);
|
||||
}
|
||||
|
||||
private Regex? _cachedFilterRegex;
|
||||
private string? _cachedFilterText;
|
||||
private bool _cachedMatchCase;
|
||||
private bool _cachedRegexInvalid;
|
||||
|
||||
private bool ItemFilter(object item, IEnumerable<string> filters)
|
||||
{
|
||||
if (item is not GameFile entry)
|
||||
|
|
@ -138,8 +143,37 @@ public class SearchViewModel : ViewModel
|
|||
if (!HasRegexEnabled)
|
||||
return filters.All(x => entry.Path.Contains(x, HasMatchCaseEnabled ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
var o = RegexOptions.None;
|
||||
if (!HasMatchCaseEnabled) o |= RegexOptions.IgnoreCase;
|
||||
return new Regex(FilterText, o).Match(entry.Path).Success;
|
||||
if (_cachedFilterText != FilterText || _cachedMatchCase != HasMatchCaseEnabled)
|
||||
{
|
||||
var o = RegexOptions.None;
|
||||
if (!HasMatchCaseEnabled)
|
||||
o |= RegexOptions.IgnoreCase;
|
||||
|
||||
try
|
||||
{
|
||||
_cachedFilterRegex = new Regex(FilterText, o, TimeSpan.FromSeconds(1));
|
||||
_cachedRegexInvalid = false;
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
_cachedFilterRegex = null;
|
||||
_cachedRegexInvalid = true;
|
||||
}
|
||||
|
||||
_cachedFilterText = FilterText;
|
||||
_cachedMatchCase = HasMatchCaseEnabled;
|
||||
}
|
||||
|
||||
if (_cachedRegexInvalid)
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
return _cachedFilterRegex?.Match(entry.Path).Success == true;
|
||||
}
|
||||
catch (RegexMatchTimeoutException)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ using System.ComponentModel;
|
|||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Data;
|
||||
using Avalonia.Collections;
|
||||
using Avalonia.Threading;
|
||||
using CUE4Parse.Utils;
|
||||
using FModel.Framework;
|
||||
using FModel.Services;
|
||||
|
|
@ -12,9 +13,22 @@ using FModel.Settings;
|
|||
using FModel.ViewModels.ApiEndpoints.Models;
|
||||
using FModel.ViewModels.Commands;
|
||||
using FModel.Views.Resources.Converters;
|
||||
using Serilog;
|
||||
|
||||
namespace FModel.ViewModels;
|
||||
|
||||
public class CommitGroup
|
||||
{
|
||||
public DateTime Date { get; }
|
||||
public IReadOnlyList<GitHubCommit> Items { get; }
|
||||
|
||||
public CommitGroup(DateTime date, IReadOnlyList<GitHubCommit> items)
|
||||
{
|
||||
Date = date;
|
||||
Items = items;
|
||||
}
|
||||
}
|
||||
|
||||
public partial class UpdateViewModel : ViewModel
|
||||
{
|
||||
private ApiEndpointViewModel _apiEndpointView => ApplicationService.ApiEndpointView;
|
||||
|
|
@ -23,14 +37,19 @@ public partial class UpdateViewModel : ViewModel
|
|||
public RemindMeCommand RemindMeCommand => _remindMeCommand ??= new RemindMeCommand(this);
|
||||
|
||||
public RangeObservableCollection<GitHubCommit> Commits { get; }
|
||||
public ICollectionView CommitsView { get; }
|
||||
public RangeObservableCollection<CommitGroup> CommitGroups { get; }
|
||||
public bool HasNoCommits => CommitGroups.Count == 0;
|
||||
|
||||
private bool _suppressRegroup;
|
||||
|
||||
public UpdateViewModel()
|
||||
{
|
||||
Commits = [];
|
||||
CommitsView = new ListCollectionView(Commits)
|
||||
CommitGroups = [];
|
||||
Commits.CollectionChanged += (_, _) =>
|
||||
{
|
||||
GroupDescriptions = { new PropertyGroupDescription("Commit.Author.Date", new DateTimeToDateConverter()) }
|
||||
if (!_suppressRegroup)
|
||||
RebuildCommitGroups();
|
||||
};
|
||||
|
||||
if (UserSettings.Default.NextUpdateCheck < DateTime.Now)
|
||||
|
|
@ -44,11 +63,20 @@ public partial class UpdateViewModel : ViewModel
|
|||
return;
|
||||
|
||||
Commits.AddRange(commits);
|
||||
_ = LoadAvatars();
|
||||
|
||||
try
|
||||
{
|
||||
_ = LoadCoAuthors();
|
||||
_ = LoadAssets();
|
||||
_ = LoadCoAuthors().ContinueWith(t =>
|
||||
{
|
||||
if (t.IsFaulted)
|
||||
Log.Error(t.Exception, "Failed to load co-authors");
|
||||
}, TaskScheduler.Default);
|
||||
_ = LoadAssets().ContinueWith(t =>
|
||||
{
|
||||
if (t.IsFaulted)
|
||||
Log.Error(t.Exception, "Failed to load assets");
|
||||
}, TaskScheduler.Default);
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
|
@ -56,58 +84,76 @@ public partial class UpdateViewModel : ViewModel
|
|||
}
|
||||
}
|
||||
|
||||
private Task LoadCoAuthors()
|
||||
private async Task LoadCoAuthors()
|
||||
{
|
||||
return Task.Run(async () =>
|
||||
var snapshot = Commits.ToList();
|
||||
var coAuthorMap = await Task.Run(() =>
|
||||
{
|
||||
var coAuthorMap = new Dictionary<GitHubCommit, HashSet<string>>();
|
||||
foreach (var commit in Commits)
|
||||
var map = new Dictionary<GitHubCommit, (string CleanMessage, HashSet<string> Usernames)>();
|
||||
var regex = GetCoAuthorRegex();
|
||||
|
||||
foreach (var commit in snapshot)
|
||||
{
|
||||
if (!commit.Commit.Message.Contains("Co-authored-by"))
|
||||
continue;
|
||||
|
||||
var regex = GetCoAuthorRegex();
|
||||
var matches = regex.Matches(commit.Commit.Message);
|
||||
if (matches.Count == 0) continue;
|
||||
if (matches.Count == 0)
|
||||
continue;
|
||||
|
||||
commit.Commit.Message = regex.Replace(commit.Commit.Message, string.Empty).Trim();
|
||||
|
||||
coAuthorMap[commit] = [];
|
||||
var usernames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (Match match in matches)
|
||||
{
|
||||
if (match.Groups.Count < 3) continue;
|
||||
if (match.Groups.Count < 3)
|
||||
continue;
|
||||
|
||||
var username = match.Groups[1].Value;
|
||||
if (username.Equals("Asval", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
username = "4sval"; // found out the hard way co-authored usernames can't be trusted
|
||||
}
|
||||
|
||||
coAuthorMap[commit].Add(username);
|
||||
usernames.Add(username);
|
||||
}
|
||||
|
||||
if (usernames.Count == 0)
|
||||
continue;
|
||||
|
||||
var cleanMessage = regex.Replace(commit.Commit.Message, string.Empty).Trim();
|
||||
map[commit] = (cleanMessage, usernames);
|
||||
}
|
||||
|
||||
if (coAuthorMap.Count == 0) return;
|
||||
return map;
|
||||
});
|
||||
|
||||
var uniqueUsernames = coAuthorMap.Values.SelectMany(x => x).Distinct().ToArray();
|
||||
var authorCache = new Dictionary<string, Author>();
|
||||
foreach (var username in uniqueUsernames)
|
||||
if (coAuthorMap.Count == 0)
|
||||
return;
|
||||
|
||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
foreach (var (commit, data) in coAuthorMap)
|
||||
commit.Commit.Message = data.CleanMessage;
|
||||
});
|
||||
|
||||
var uniqueUsernames = coAuthorMap.Values.SelectMany(x => x.Usernames).Distinct(StringComparer.OrdinalIgnoreCase).ToArray();
|
||||
var authorCache = new Dictionary<string, Author>();
|
||||
foreach (var username in uniqueUsernames)
|
||||
{
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
var author = await _apiEndpointView.GitHubApi.GetUserAsync(username);
|
||||
if (author != null)
|
||||
authorCache[username] = author;
|
||||
}
|
||||
catch
|
||||
{
|
||||
//
|
||||
}
|
||||
var author = await _apiEndpointView.GitHubApi.GetUserAsync(username);
|
||||
if (author != null)
|
||||
authorCache[username] = author;
|
||||
}
|
||||
|
||||
foreach (var (commit, usernames) in coAuthorMap)
|
||||
catch
|
||||
{
|
||||
var coAuthors = usernames
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
foreach (var (commit, data) in coAuthorMap)
|
||||
{
|
||||
var coAuthors = data.Usernames
|
||||
.Where(username => authorCache.ContainsKey(username))
|
||||
.Select(username => authorCache[username])
|
||||
.ToArray();
|
||||
|
|
@ -116,42 +162,94 @@ public partial class UpdateViewModel : ViewModel
|
|||
commit.CoAuthors = coAuthors;
|
||||
}
|
||||
});
|
||||
|
||||
await LoadAvatars();
|
||||
}
|
||||
|
||||
private Task LoadAssets()
|
||||
private async Task LoadAssets()
|
||||
{
|
||||
return Task.Run(async () =>
|
||||
var qa = await _apiEndpointView.GitHubApi.GetReleaseAsync("qa");
|
||||
var assets = qa.Assets.OrderByDescending(x => x.CreatedAt).ToList();
|
||||
|
||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
var qa = await _apiEndpointView.GitHubApi.GetReleaseAsync("qa");
|
||||
var assets = qa.Assets.OrderByDescending(x => x.CreatedAt).ToList();
|
||||
|
||||
for (var i = 0; i < assets.Count; i++)
|
||||
_suppressRegroup = true;
|
||||
try
|
||||
{
|
||||
var asset = assets[i];
|
||||
asset.IsLatest = i == 0;
|
||||
for (var i = 0; i < assets.Count; i++)
|
||||
{
|
||||
var asset = assets[i];
|
||||
asset.IsLatest = i == 0;
|
||||
|
||||
var commitSha = asset.Name.SubstringBeforeLast(".zip");
|
||||
var commit = Commits.FirstOrDefault(x => x.Sha == commitSha);
|
||||
if (commit != null)
|
||||
{
|
||||
commit.Asset = asset;
|
||||
}
|
||||
else
|
||||
{
|
||||
Commits.Add(new GitHubCommit
|
||||
var commitSha = asset.Name.SubstringBeforeLast(".zip");
|
||||
var commit = Commits.FirstOrDefault(x => x.Sha == commitSha);
|
||||
if (commit != null)
|
||||
{
|
||||
Sha = commitSha,
|
||||
Commit = new Commit
|
||||
commit.Asset = asset;
|
||||
}
|
||||
else
|
||||
{
|
||||
Commits.Add(new GitHubCommit
|
||||
{
|
||||
Message = $"FModel ({commitSha[..7]})",
|
||||
Author = new Author { Name = asset.Uploader.Login, Date = asset.CreatedAt }
|
||||
},
|
||||
Author = asset.Uploader,
|
||||
Asset = asset
|
||||
});
|
||||
Sha = commitSha,
|
||||
Commit = new Commit
|
||||
{
|
||||
Message = $"FModel ({commitSha[..7]})",
|
||||
Author = new Author { Name = asset.Uploader.Login, Date = asset.CreatedAt }
|
||||
},
|
||||
Author = asset.Uploader,
|
||||
Asset = asset
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_suppressRegroup = false;
|
||||
RebuildCommitGroups();
|
||||
}
|
||||
});
|
||||
|
||||
await LoadAvatars();
|
||||
}
|
||||
|
||||
private void RebuildCommitGroups()
|
||||
{
|
||||
var groups = Commits
|
||||
.OrderByDescending(x => x.Commit?.Author?.Date ?? DateTime.MinValue)
|
||||
.GroupBy(x => (x.Commit?.Author?.Date ?? DateTime.MinValue).Date)
|
||||
.Select(g => new CommitGroup(g.Key, g.ToList()))
|
||||
.ToList();
|
||||
|
||||
CommitGroups.Clear();
|
||||
CommitGroups.AddRange(groups);
|
||||
RaisePropertyChanged(nameof(HasNoCommits));
|
||||
}
|
||||
|
||||
private async Task LoadAvatars()
|
||||
{
|
||||
var authorsByUrl = Commits
|
||||
.SelectMany(x => x.Authors)
|
||||
.Where(x => x != null && !string.IsNullOrWhiteSpace(x.AvatarUrl))
|
||||
.ToArray()
|
||||
.GroupBy(x => x.AvatarUrl, StringComparer.OrdinalIgnoreCase)
|
||||
.ToArray();
|
||||
|
||||
foreach (var authors in authorsByUrl)
|
||||
{
|
||||
if (authors.All(x => x.AvatarImage != null))
|
||||
continue;
|
||||
|
||||
var bitmap = await UrlToBitmapConverter.LoadAsync(authors.Key);
|
||||
if (bitmap == null)
|
||||
continue;
|
||||
|
||||
await Dispatcher.UIThread.InvokeAsync(() =>
|
||||
{
|
||||
foreach (var author in authors)
|
||||
author.AvatarImage = bitmap;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void DownloadLatest()
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
Margin="0 0 0 10" />
|
||||
<ComboBox Grid.Row="0"
|
||||
Grid.Column="2"
|
||||
ItemsSource="{Binding AudioPlayer.AudioDevicesView, IsAsync=True}"
|
||||
ItemsSource="{Binding AudioPlayer.AudioDevicesView}"
|
||||
SelectedItem="{Binding AudioPlayer.SelectedAudioDevice, Mode=TwoWay}"
|
||||
SelectionChanged="OnDeviceSwap">
|
||||
<ComboBox.ItemTemplate>
|
||||
|
|
@ -103,7 +103,7 @@
|
|||
</Grid>
|
||||
<Separator DockPanel.Dock="Top"
|
||||
Tag="PLAYLIST"
|
||||
Style="{StaticResource CustomSeparator}" />
|
||||
Theme="{StaticResource CustomSeparator}" />
|
||||
<Grid DockPanel.Dock="Top"
|
||||
Height="24"
|
||||
Margin="0 0 0 5">
|
||||
|
|
@ -135,7 +135,7 @@
|
|||
Watermark="Search by name..." />
|
||||
</Grid>
|
||||
<ListBox DockPanel.Dock="Top"
|
||||
Style="{StaticResource AudioFilesListBox}"
|
||||
Theme="{StaticResource AudioFilesListBox}"
|
||||
DoubleTapped="OnAudioFileMouseDoubleClick">
|
||||
<ListBox.ContextMenu>
|
||||
<ContextMenu>
|
||||
|
|
@ -214,7 +214,7 @@
|
|||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Top"
|
||||
Orientation="Horizontal">
|
||||
<Button ToolTip="Previous"
|
||||
<Button ToolTip.Tip="Previous"
|
||||
Command="{Binding AudioPlayer.AudioCommand}"
|
||||
CommandParameter="Previous">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -226,10 +226,10 @@
|
|||
</Canvas>
|
||||
</Viewbox>
|
||||
</Button>
|
||||
<Button Style="{StaticResource PlayPauseToolbarButton}"
|
||||
<Button Theme="{StaticResource PlayPauseToolbarButton}"
|
||||
Command="{Binding AudioPlayer.AudioCommand}"
|
||||
CommandParameter="PlayPause" />
|
||||
<Button ToolTip="Next"
|
||||
<Button ToolTip.Tip="Next"
|
||||
Command="{Binding AudioPlayer.AudioCommand}"
|
||||
CommandParameter="Next">
|
||||
<Viewbox Width="16"
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
<Separator Grid.Row="3"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="PRE-CREATED BACKUP FILES" />
|
||||
|
||||
<TextBlock Grid.Row="4"
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
ItemsSource="{Binding DetectedDirectories}"
|
||||
Margin="0 0 0 5"
|
||||
Style="{StaticResource UComboBox}"
|
||||
Theme="{StaticResource UComboBox}"
|
||||
VerticalAlignment="Center"
|
||||
SelectedItem="{Binding SelectedDirectory, Mode=TwoWay}">
|
||||
<ComboBox.ItemTemplate>
|
||||
|
|
@ -79,7 +79,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
Margin="0 0 0 5"
|
||||
ItemsSource="{Binding UeGames}"
|
||||
Style="{StaticResource UComboBox}"
|
||||
Theme="{StaticResource UComboBox}"
|
||||
VerticalAlignment="Center"
|
||||
SelectedItem="{Binding SelectedDirectory.UeVersion, Mode=TwoWay}">
|
||||
<ComboBox.ItemTemplate>
|
||||
|
|
@ -105,8 +105,8 @@
|
|||
Grid.Column="4"
|
||||
Padding="0"
|
||||
Click="OnDeleteDirectory"
|
||||
Width="{Binding ActualWidth, ElementName=OkGuysButWhoFuckingAsked}"
|
||||
ToolTip="Delete Game"
|
||||
Width="{Binding Bounds.Width, ElementName=OkGuysButWhoFuckingAsked}"
|
||||
ToolTip.Tip="Delete Game"
|
||||
IsVisible="{Binding SelectedDirectory.IsManual}">
|
||||
<Viewbox Width="16"
|
||||
Height="16"
|
||||
|
|
@ -120,12 +120,12 @@
|
|||
</Button>
|
||||
</Grid>
|
||||
|
||||
<Separator Style="{StaticResource CustomSeparator}"
|
||||
<Separator Theme="{StaticResource CustomSeparator}"
|
||||
Tag="ADD UNDETECTED GAME" />
|
||||
|
||||
<Expander ExpandDirection="Down"
|
||||
IsExpanded="False">
|
||||
<Grid MaxWidth="{Binding ActualWidth, ElementName=Hello}">
|
||||
<Grid MaxWidth="{Binding Bounds.Width, ElementName=Hello}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="5" />
|
||||
|
|
@ -167,7 +167,7 @@
|
|||
Grid.Column="6"
|
||||
Padding="0"
|
||||
Click="OnAddDirectory"
|
||||
ToolTip="Add Game">
|
||||
ToolTip.Tip="Add Game">
|
||||
<Viewbox Width="16"
|
||||
Height="16"
|
||||
HorizontalAlignment="Center">
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
Grid.Row="0"
|
||||
SelectionMode="Extended" />
|
||||
<Separator Grid.Row="1"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="COMMANDS" />
|
||||
<Grid Grid.Row="2"
|
||||
Margin="0 0 0 10">
|
||||
|
|
|
|||
|
|
@ -1,55 +1,97 @@
|
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
<ResourceDictionary xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<SolidColorBrush x:Key="NeutralBrush" Color="White" />
|
||||
<SolidColorBrush x:Key="NeutralBrush"
|
||||
Color="White" />
|
||||
|
||||
<SolidColorBrush x:Key="BlueprintBrush" Color="DodgerBlue" />
|
||||
<SolidColorBrush x:Key="BlueprintWidgetBrush" Color="DarkViolet" />
|
||||
<SolidColorBrush x:Key="BlueprintAnimBrush" Color="Crimson" />
|
||||
<SolidColorBrush x:Key="BlueprintRigVMBrush" Color="Teal" />
|
||||
<SolidColorBrush x:Key="BlueprintBrush"
|
||||
Color="DodgerBlue" />
|
||||
<SolidColorBrush x:Key="BlueprintWidgetBrush"
|
||||
Color="DarkViolet" />
|
||||
<SolidColorBrush x:Key="BlueprintAnimBrush"
|
||||
Color="Crimson" />
|
||||
<SolidColorBrush x:Key="BlueprintRigVMBrush"
|
||||
Color="Teal" />
|
||||
|
||||
<SolidColorBrush x:Key="CookedMetaDataBrush" Color="Yellow" />
|
||||
<SolidColorBrush x:Key="UserDefinedEnumBrush" Color="DarkGoldenrod" />
|
||||
<SolidColorBrush x:Key="UserDefinedStructBrush" Color="Tan" />
|
||||
<SolidColorBrush x:Key="CookedMetaDataBrush"
|
||||
Color="Yellow" />
|
||||
<SolidColorBrush x:Key="UserDefinedEnumBrush"
|
||||
Color="DarkGoldenrod" />
|
||||
<SolidColorBrush x:Key="UserDefinedStructBrush"
|
||||
Color="Tan" />
|
||||
|
||||
<SolidColorBrush x:Key="CustomizableObjectBrush" Color="DarkRed" />
|
||||
<SolidColorBrush x:Key="NaniteDisplacedMeshBrush" Color="ForestGreen" />
|
||||
<SolidColorBrush x:Key="CustomizableObjectBrush"
|
||||
Color="DarkRed" />
|
||||
<SolidColorBrush x:Key="NaniteDisplacedMeshBrush"
|
||||
Color="ForestGreen" />
|
||||
|
||||
<SolidColorBrush x:Key="MaterialBrush" Color="BurlyWood" />
|
||||
<SolidColorBrush x:Key="MaterialEditorBrush" Color="Yellow" />
|
||||
<SolidColorBrush x:Key="MaterialBrush"
|
||||
Color="BurlyWood" />
|
||||
<SolidColorBrush x:Key="MaterialEditorBrush"
|
||||
Color="Yellow" />
|
||||
|
||||
<SolidColorBrush x:Key="RigBrush" Color="YellowGreen" />
|
||||
<SolidColorBrush x:Key="RigBrush"
|
||||
Color="YellowGreen" />
|
||||
|
||||
<SolidColorBrush x:Key="BinaryBrush" Color="Yellow" />
|
||||
<SolidColorBrush x:Key="TextureBrush" Color="MediumPurple" />
|
||||
<SolidColorBrush x:Key="ConfigBrush" Color="LightSlateGray" />
|
||||
|
||||
<SolidColorBrush x:Key="AudioBrush" Color="MediumSeaGreen" />
|
||||
<SolidColorBrush x:Key="SoundBankBrush" Color="DarkSeaGreen" />
|
||||
<SolidColorBrush x:Key="AudioEventBrush" Color="LightSeaGreen" />
|
||||
<SolidColorBrush x:Key="BinaryBrush"
|
||||
Color="Yellow" />
|
||||
<SolidColorBrush x:Key="TextureBrush"
|
||||
Color="MediumPurple" />
|
||||
<SolidColorBrush x:Key="ConfigBrush"
|
||||
Color="LightSlateGray" />
|
||||
|
||||
<SolidColorBrush x:Key="VideoBrush" Color="IndianRed" />
|
||||
<SolidColorBrush x:Key="DataTableBrush" Color="SteelBlue" />
|
||||
<SolidColorBrush x:Key="CurveBrush" Color="HotPink" />
|
||||
<SolidColorBrush x:Key="PluginBrush" Color="GreenYellow" />
|
||||
<SolidColorBrush x:Key="ProjectBrush" Color="DeepSkyBlue" />
|
||||
<SolidColorBrush x:Key="LocalizationBrush" Color="CornflowerBlue" />
|
||||
<SolidColorBrush x:Key="WorldBrush" Color="Orange" />
|
||||
<SolidColorBrush x:Key="BuildDataBrush" Color="Tomato" />
|
||||
<SolidColorBrush x:Key="LevelSequenceBrush" Color="Coral" />
|
||||
<SolidColorBrush x:Key="FoliageBrush" Color="ForestGreen" />
|
||||
<SolidColorBrush x:Key="ParticleBrush" Color="Gold" />
|
||||
<SolidColorBrush x:Key="AnimationBrush" Color="Coral" />
|
||||
<SolidColorBrush x:Key="LuaBrush" Color="DarkBlue" />
|
||||
<SolidColorBrush x:Key="JsonXmlBrush" Color="LightGreen" />
|
||||
<SolidColorBrush x:Key="CodeBrush" Color="SandyBrown" />
|
||||
<SolidColorBrush x:Key="HtmlBrush" Color="Tomato" />
|
||||
<SolidColorBrush x:Key="JavaScriptBrush" Color="Yellow" />
|
||||
<SolidColorBrush x:Key="CssBrush" Color="MediumPurple" />
|
||||
<SolidColorBrush x:Key="GitBrush" Color="Coral" />
|
||||
<SolidColorBrush x:Key="CsvBrush" Color="ForestGreen" />
|
||||
<SolidColorBrush x:Key="AIBrush" Color="LightGray" />
|
||||
<SolidColorBrush x:Key="AudioBrush"
|
||||
Color="MediumSeaGreen" />
|
||||
<SolidColorBrush x:Key="SoundBankBrush"
|
||||
Color="DarkSeaGreen" />
|
||||
<SolidColorBrush x:Key="AudioEventBrush"
|
||||
Color="LightSeaGreen" />
|
||||
|
||||
<SolidColorBrush x:Key="VideoBrush"
|
||||
Color="IndianRed" />
|
||||
<SolidColorBrush x:Key="DataTableBrush"
|
||||
Color="SteelBlue" />
|
||||
<SolidColorBrush x:Key="CurveBrush"
|
||||
Color="HotPink" />
|
||||
<SolidColorBrush x:Key="PluginBrush"
|
||||
Color="GreenYellow" />
|
||||
<SolidColorBrush x:Key="ProjectBrush"
|
||||
Color="DeepSkyBlue" />
|
||||
<SolidColorBrush x:Key="LocalizationBrush"
|
||||
Color="CornflowerBlue" />
|
||||
<SolidColorBrush x:Key="WorldBrush"
|
||||
Color="Orange" />
|
||||
<SolidColorBrush x:Key="BuildDataBrush"
|
||||
Color="Tomato" />
|
||||
<SolidColorBrush x:Key="LevelSequenceBrush"
|
||||
Color="Coral" />
|
||||
<SolidColorBrush x:Key="FoliageBrush"
|
||||
Color="ForestGreen" />
|
||||
<SolidColorBrush x:Key="ParticleBrush"
|
||||
Color="Gold" />
|
||||
<SolidColorBrush x:Key="AnimationBrush"
|
||||
Color="Coral" />
|
||||
<SolidColorBrush x:Key="LuaBrush"
|
||||
Color="DarkBlue" />
|
||||
<SolidColorBrush x:Key="JsonXmlBrush"
|
||||
Color="LightGreen" />
|
||||
<SolidColorBrush x:Key="CodeBrush"
|
||||
Color="SandyBrown" />
|
||||
<SolidColorBrush x:Key="HtmlBrush"
|
||||
Color="Tomato" />
|
||||
<SolidColorBrush x:Key="JavaScriptBrush"
|
||||
Color="Yellow" />
|
||||
<SolidColorBrush x:Key="CssBrush"
|
||||
Color="MediumPurple" />
|
||||
<SolidColorBrush x:Key="GitBrush"
|
||||
Color="Coral" />
|
||||
<SolidColorBrush x:Key="CsvBrush"
|
||||
Color="ForestGreen" />
|
||||
<SolidColorBrush x:Key="AIBrush"
|
||||
Color="LightGray" />
|
||||
|
||||
<!-- For specific games -->
|
||||
<SolidColorBrush x:Key="BorderlandsBrush" Color="Yellow"></SolidColorBrush>
|
||||
<SolidColorBrush x:Key="AionBrush" Color="DeepSkyBlue"></SolidColorBrush>
|
||||
<SolidColorBrush x:Key="BorderlandsBrush"
|
||||
Color="Yellow"></SolidColorBrush>
|
||||
<SolidColorBrush x:Key="AionBrush"
|
||||
Color="DeepSkyBlue"></SolidColorBrush>
|
||||
</ResourceDictionary>
|
||||
|
|
|
|||
|
|
@ -1,18 +1,20 @@
|
|||
<UserControl x:Class="FModel.Views.Resources.Controls.CommitControl"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:converters="clr-namespace:FModel.Views.Resources.Converters"
|
||||
xmlns:adonisUi="clr-namespace:AdonisUI;assembly=AdonisUI"
|
||||
xmlns:controls="clr-namespace:FModel.Views.Resources.Controls">
|
||||
<Border BorderThickness="1" CornerRadius="0.5"
|
||||
BorderBrush="{DynamicResource {x:Static adonisUi:Brushes.Layer4BackgroundBrush}}">
|
||||
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
<Border BorderThickness="1"
|
||||
CornerRadius="0.5"
|
||||
BorderBrush="{DynamicResource SystemControlForegroundBaseMediumLowBrush}">
|
||||
<Grid HorizontalAlignment="Stretch"
|
||||
VerticalAlignment="Stretch">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid Grid.Column="0" Margin="5">
|
||||
<Grid Grid.Column="0"
|
||||
Margin="5">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
|
|
@ -20,29 +22,26 @@
|
|||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TextBlock Grid.Row="0" Text="{Binding Commit.Message, Converter={x:Static converters:CommitMessageConverter.Instance}, ConverterParameter=Title}" FontWeight="Bold" TextWrapping="Wrap" />
|
||||
<TextBlock Grid.Row="1" Text="{Binding Commit.Message, Converter={x:Static converters:CommitMessageConverter.Instance}, ConverterParameter=Description}" TextWrapping="Wrap">
|
||||
<TextBlock.Style>
|
||||
<Style TargetType="TextBlock">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Commit.Message, Converter={x:Static converters:CommitMessageConverter.Instance}, ConverterParameter=Description}" Value="">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBlock.Style>
|
||||
</TextBlock>
|
||||
<TextBlock Grid.Row="0"
|
||||
Text="{Binding Commit.Message, Converter={x:Static converters:CommitMessageConverter.Instance}, ConverterParameter=Title}"
|
||||
FontWeight="Bold"
|
||||
TextWrapping="Wrap" />
|
||||
<TextBlock Grid.Row="1"
|
||||
Text="{Binding Commit.Message, Converter={x:Static converters:CommitMessageConverter.Instance}, ConverterParameter=Description}"
|
||||
TextWrapping="Wrap"
|
||||
IsVisible="{Binding Commit.Message, Converter={x:Static converters:CommitMessageConverter.Instance}, ConverterParameter=HasDescription}" />
|
||||
|
||||
<Grid Grid.Row="3">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="5"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="5" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="5" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<ItemsControl Grid.Column="0" ItemsSource="{Binding Authors}">
|
||||
<ItemsControl Grid.Column="0"
|
||||
ItemsSource="{Binding Authors}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<StackPanel Orientation="Horizontal" />
|
||||
|
|
@ -50,84 +49,78 @@
|
|||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Ellipse Width="16" Height="16" Margin="0,0,2,0">
|
||||
<Ellipse Width="16"
|
||||
Height="16"
|
||||
Margin="0,0,2,0">
|
||||
<Ellipse.Fill>
|
||||
<ImageBrush ImageSource="{Binding AvatarUrl}" />
|
||||
<ImageBrush Source="{Binding AvatarImage}" />
|
||||
</Ellipse.Fill>
|
||||
</Ellipse>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
<TextBlock Grid.Column="2" FontSize="11">
|
||||
<TextBlock Grid.Column="2"
|
||||
FontSize="11">
|
||||
<TextBlock.Text>
|
||||
<MultiBinding StringFormat="{}{0} committed {1}">
|
||||
<Binding Path="AuthorNames" />
|
||||
<Binding Path="Commit.Author.Date" Converter="{x:Static converters:RelativeDateTimeConverter.Instance}" />
|
||||
<Binding Path="Commit.Author.Date"
|
||||
Converter="{x:Static converters:RelativeDateTimeConverter.Instance}" />
|
||||
</MultiBinding>
|
||||
</TextBlock.Text>
|
||||
</TextBlock>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Column="1" MaxHeight="96">
|
||||
<Grid Grid.Column="1"
|
||||
MaxHeight="96">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="15" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- "Latest" badge: only when latest AND NOT current (Current takes precedence) -->
|
||||
<Border Grid.Column="0"
|
||||
BorderThickness="1"
|
||||
CornerRadius="2.5"
|
||||
Padding="5,2"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center">
|
||||
<TextBlock FontSize="9" Foreground="{Binding BorderBrush, RelativeSource={RelativeSource AncestorType=Border}}">
|
||||
<TextBlock.Style>
|
||||
<Style TargetType="TextBlock">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Asset.IsLatest}" Value="True">
|
||||
<Setter Property="Text" Value="Latest" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding IsCurrent}" Value="True">
|
||||
<Setter Property="Text" Value="Current" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</TextBlock.Style>
|
||||
</TextBlock>
|
||||
|
||||
<Border.Style>
|
||||
<Style TargetType="Border">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Asset.IsLatest}" Value="True">
|
||||
<Setter Property="Visibility" Value="Visible" />
|
||||
<Setter Property="BorderBrush" Value="#3fb950" />
|
||||
<Setter Property="Background" Value="#0f3fb950" />
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding IsCurrent}" Value="True">
|
||||
<Setter Property="Visibility" Value="Visible" />
|
||||
<Setter Property="BorderBrush" Value="#3f92b9" />
|
||||
<Setter Property="Background" Value="#0f3f92b9" />
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Border.Style>
|
||||
VerticalAlignment="Center"
|
||||
BorderBrush="#3fb950"
|
||||
Background="#0f3fb950">
|
||||
<TextBlock FontSize="9"
|
||||
Text="Latest"
|
||||
Foreground="#3fb950" />
|
||||
<Border.IsVisible>
|
||||
<MultiBinding Converter="{x:Static BoolConverters.And}">
|
||||
<Binding Path="Asset.IsLatest"
|
||||
FallbackValue="False" />
|
||||
<Binding Path="IsCurrent"
|
||||
FallbackValue="False"
|
||||
Converter="{x:Static converters:InvertBooleanConverter.Instance}" />
|
||||
</MultiBinding>
|
||||
</Border.IsVisible>
|
||||
</Border>
|
||||
|
||||
<controls:CommitDownloaderControl Grid.Column="2" Commit="{Binding}">
|
||||
<controls:CommitDownloaderControl.Style>
|
||||
<Style TargetType="controls:CommitDownloaderControl">
|
||||
<Setter Property="Visibility" Value="Collapsed" />
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsDownloadable}" Value="True">
|
||||
<Setter Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</controls:CommitDownloaderControl.Style>
|
||||
</controls:CommitDownloaderControl>
|
||||
<!-- "Current" badge -->
|
||||
<Border Grid.Column="0"
|
||||
BorderThickness="1"
|
||||
CornerRadius="2.5"
|
||||
Padding="5,2"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
BorderBrush="#3f92b9"
|
||||
Background="#0f3f92b9"
|
||||
IsVisible="{Binding IsCurrent, FallbackValue=False}">
|
||||
<TextBlock FontSize="9"
|
||||
Text="Current"
|
||||
Foreground="#3f92b9" />
|
||||
</Border>
|
||||
|
||||
<controls:CommitDownloaderControl Grid.Column="2"
|
||||
Commit="{Binding}"
|
||||
IsVisible="{Binding IsDownloadable}" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System.Windows.Controls;
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace FModel.Views.Resources.Controls;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,39 +1,48 @@
|
|||
<UserControl x:Class="FModel.Views.Resources.Controls.Inputs.SearchTextBox"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
mc:Ignorable="d"
|
||||
d:DesignWidth="300"
|
||||
x:Name="Root"
|
||||
xmlns:adonisUi="clr-namespace:AdonisUI;assembly=AdonisUI"
|
||||
xmlns:adonisExtensions="clr-namespace:AdonisUI.Extensions;assembly=AdonisUI">
|
||||
x:Name="Root">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid Grid.Column="0" ZIndex="1" HorizontalAlignment="Left" Margin="5 2 0 0">
|
||||
<Viewbox Width="16" Height="16">
|
||||
<Canvas Width="24" Height="24">
|
||||
<Path Fill="{DynamicResource {x:Static adonisUi:Brushes.ForegroundBrush}}" Data="{StaticResource SearchIcon}" />
|
||||
<Grid Grid.Column="0"
|
||||
Panel.ZIndex="1"
|
||||
HorizontalAlignment="Left"
|
||||
Margin="5 2 0 0">
|
||||
<Viewbox Width="16"
|
||||
Height="16">
|
||||
<Canvas Width="24"
|
||||
Height="24">
|
||||
<Path Fill="{DynamicResource SystemControlForegroundBaseHighBrush}"
|
||||
Data="{StaticResource SearchIcon}" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
</Grid>
|
||||
|
||||
<TextBox x:Name="TextBox" Grid.Column="0" Grid.ColumnSpan="2" AcceptsTab="False" AcceptsReturn="False"
|
||||
Text="{Binding Text, ElementName=Root, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
Padding="25 0 0 0" HorizontalAlignment="Stretch"
|
||||
adonisExtensions:WatermarkExtension.Watermark="{Binding Watermark, ElementName=Root}" />
|
||||
<TextBox x:Name="TextBox"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="2"
|
||||
AcceptsTab="False"
|
||||
AcceptsReturn="False"
|
||||
Text="{Binding Text, ElementName=Root, Mode=TwoWay}"
|
||||
Padding="25 0 0 0"
|
||||
HorizontalAlignment="Stretch"
|
||||
Watermark="{Binding Watermark, ElementName=Root}" />
|
||||
|
||||
<Button Grid.Column="1" ToolTip="Clear Search Filter" Padding="5"
|
||||
Click="OnClearButtonClick"
|
||||
Style="{DynamicResource {x:Static adonisUi:Styles.ToolbarButton}}">
|
||||
<Viewbox Width="16" Height="16" HorizontalAlignment="Center">
|
||||
<Canvas Width="24" Height="24">
|
||||
<Path Fill="{DynamicResource {x:Static adonisUi:Brushes.ForegroundBrush}}"
|
||||
Data="{StaticResource BackspaceIcon}"/>
|
||||
<Button Grid.Column="1"
|
||||
ToolTip.Tip="Clear Search Filter"
|
||||
Padding="5"
|
||||
Click="OnClearButtonClick">
|
||||
<Viewbox Width="16"
|
||||
Height="16"
|
||||
HorizontalAlignment="Center">
|
||||
<Canvas Width="24"
|
||||
Height="24">
|
||||
<Path Fill="{DynamicResource SystemControlForegroundBaseHighBrush}"
|
||||
Data="{StaticResource BackspaceIcon}" />
|
||||
</Canvas>
|
||||
</Viewbox>
|
||||
</Button>
|
||||
|
|
|
|||
|
|
@ -1,35 +1,35 @@
|
|||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
|
||||
namespace FModel.Views.Resources.Controls.Inputs;
|
||||
|
||||
public partial class SearchTextBox : UserControl
|
||||
{
|
||||
public static readonly DependencyProperty TextProperty =
|
||||
DependencyProperty.Register(nameof(Text), typeof(string), typeof(SearchTextBox),
|
||||
new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
|
||||
public static readonly StyledProperty<string> TextProperty =
|
||||
AvaloniaProperty.Register<SearchTextBox, string>(nameof(Text), defaultValue: string.Empty,
|
||||
defaultBindingMode: Avalonia.Data.BindingMode.TwoWay);
|
||||
|
||||
public static readonly DependencyProperty WatermarkProperty =
|
||||
DependencyProperty.Register(nameof(Watermark), typeof(string), typeof(SearchTextBox),
|
||||
new PropertyMetadata("Search by name..."));
|
||||
public static readonly StyledProperty<string> WatermarkProperty =
|
||||
AvaloniaProperty.Register<SearchTextBox, string>(nameof(Watermark), defaultValue: "Search by name...");
|
||||
|
||||
public static readonly RoutedEvent ClearButtonClickEvent =
|
||||
EventManager.RegisterRoutedEvent(nameof(ClearButtonClick), RoutingStrategy.Bubble,
|
||||
typeof(RoutedEventHandler), typeof(SearchTextBox));
|
||||
public static readonly RoutedEvent<RoutedEventArgs> ClearButtonClickEvent =
|
||||
RoutedEvent.Register<SearchTextBox, RoutedEventArgs>(nameof(ClearButtonClick), RoutingStrategies.Bubble);
|
||||
|
||||
public string Text
|
||||
{
|
||||
get => (string)GetValue(TextProperty);
|
||||
get => GetValue(TextProperty);
|
||||
set => SetValue(TextProperty, value);
|
||||
}
|
||||
|
||||
public string Watermark
|
||||
{
|
||||
get => (string)GetValue(WatermarkProperty);
|
||||
get => GetValue(WatermarkProperty);
|
||||
set => SetValue(WatermarkProperty, value);
|
||||
}
|
||||
|
||||
public event RoutedEventHandler ClearButtonClick
|
||||
public event EventHandler<RoutedEventArgs> ClearButtonClick
|
||||
{
|
||||
add => AddHandler(ClearButtonClickEvent, value);
|
||||
remove => RemoveHandler(ClearButtonClickEvent, value);
|
||||
|
|
@ -40,7 +40,7 @@ public partial class SearchTextBox : UserControl
|
|||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void OnClearButtonClick(object sender, RoutedEventArgs e)
|
||||
private void OnClearButtonClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
Text = string.Empty;
|
||||
RaiseEvent(new RoutedEventArgs(ClearButtonClickEvent, this));
|
||||
|
|
|
|||
|
|
@ -1,28 +1,31 @@
|
|||
<ResourceDictionary xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:controls="clr-namespace:FModel.Views.Resources.Controls"
|
||||
xmlns:local="clr-namespace:FModel.Views.Resources.Controls.TiledExplorer"
|
||||
xmlns:converters="clr-namespace:FModel.Views.Resources.Converters"
|
||||
x:Class="FModel.Views.Resources.Controls.TiledExplorer.ResourcesDictionary">
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:controls="clr-namespace:FModel.Views.Resources.Controls"
|
||||
xmlns:local="clr-namespace:FModel.Views.Resources.Controls.TiledExplorer"
|
||||
xmlns:converters="clr-namespace:FModel.Views.Resources.Converters"
|
||||
x:Class="FModel.Views.Resources.Controls.TiledExplorer.ResourcesDictionary">
|
||||
<controls:TypeDataTemplateSelector x:Key="TemplateSelector" />
|
||||
|
||||
<Style x:Key="TiledExplorer"
|
||||
Selector="ListBox">
|
||||
<ControlTheme x:Key="TiledExplorer"
|
||||
TargetType="ListBox"
|
||||
BasedOn="{StaticResource {x:Type ListBox}}">
|
||||
<Setter Property="local:SmoothScroll.IsEnabled"
|
||||
Value="True" />
|
||||
Value="True" />
|
||||
<Setter Property="local:SmoothScroll.Factor"
|
||||
Value="1.25" />
|
||||
Value="1.25" />
|
||||
<!-- Avalonia Multiple = WPF Extended (Ctrl/Shift multi-select) -->
|
||||
<Setter Property="SelectionMode"
|
||||
Value="Multiple" />
|
||||
<Setter Property="ContextMenu"
|
||||
Value="{StaticResource FileContextMenu}" />
|
||||
Value="Multiple" />
|
||||
<!-- ContextMenu is assigned programmatically by ListBoxItemBehavior
|
||||
on right-click via TryFindResource, because Avalonia does not
|
||||
support x:Shared="False" (every StaticResource lookup would
|
||||
return the same ContextMenu instance). -->
|
||||
<Setter Property="ScrollViewer.VerticalScrollBarVisibility"
|
||||
Value="Auto" />
|
||||
Value="Auto" />
|
||||
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility"
|
||||
Value="Disabled" />
|
||||
Value="Disabled" />
|
||||
<Setter Property="BorderThickness"
|
||||
Value="0" />
|
||||
Value="0" />
|
||||
|
||||
<Setter Property="ItemsPanel">
|
||||
<Setter.Value>
|
||||
|
|
@ -35,34 +38,34 @@
|
|||
</Setter>
|
||||
|
||||
<Setter Property="ItemTemplate"
|
||||
Value="{StaticResource TemplateSelector}" />
|
||||
Value="{StaticResource TemplateSelector}" />
|
||||
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate>
|
||||
<Border Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
<Grid>
|
||||
<ScrollViewer x:Name="PART_ScrollViewer"
|
||||
Focusable="False"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled">
|
||||
Focusable="False"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled">
|
||||
<ItemsPresenter />
|
||||
</ScrollViewer>
|
||||
<TextBlock HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="SemiBold"
|
||||
TextAlignment="Center"
|
||||
Foreground="#FF8A80"
|
||||
Text="No folders or packages found"
|
||||
IsHitTestVisible="False">
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="SemiBold"
|
||||
TextAlignment="Center"
|
||||
Foreground="#FF8A80"
|
||||
Text="No folders or packages found"
|
||||
IsHitTestVisible="False">
|
||||
<TextBlock.IsVisible>
|
||||
<MultiBinding Converter="{x:Static converters:ItemsSourceEmptyToBoolConverter.Instance}">
|
||||
<Binding Path="ItemsSource"
|
||||
RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
<Binding Path="Items.Count"
|
||||
RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
</MultiBinding>
|
||||
</TextBlock.IsVisible>
|
||||
</TextBlock>
|
||||
|
|
@ -74,80 +77,83 @@
|
|||
|
||||
<Style Selector="^ > ListBoxItem">
|
||||
<Setter Property="IsSelected"
|
||||
Value="{Binding IsSelected, Mode=OneWay}" />
|
||||
Value="{Binding IsSelected, Mode=OneWay}" />
|
||||
<Setter Property="Margin"
|
||||
Value="5" />
|
||||
Value="5" />
|
||||
<Setter Property="Padding"
|
||||
Value="5" />
|
||||
Value="5" />
|
||||
<Setter Property="BorderThickness"
|
||||
Value="1.5" />
|
||||
Value="1.5" />
|
||||
<Setter Property="Cursor"
|
||||
Value="Hand" />
|
||||
Value="Hand" />
|
||||
<Setter Property="Background"
|
||||
Value="#252535" />
|
||||
Value="#252535" />
|
||||
<Setter Property="BorderBrush"
|
||||
Value="#3A3F57" />
|
||||
Value="#3A3F57" />
|
||||
<Setter Property="controls:ListBoxItemBehavior.IsBroughtIntoViewWhenSelected"
|
||||
Value="True" />
|
||||
Value="True" />
|
||||
<Setter Property="controls:ListBoxItemBehavior.OpenOnDoubleTap"
|
||||
Value="True" />
|
||||
Value="True" />
|
||||
<Setter Property="controls:ListBoxItemBehavior.SelectFileOnRightClick"
|
||||
Value="True" />
|
||||
Value="True" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="^ > ListBoxItem:pointerover">
|
||||
<Setter Property="BorderBrush"
|
||||
Value="#575F7A" />
|
||||
Value="#575F7A" />
|
||||
</Style>
|
||||
|
||||
<Style Selector="^ > ListBoxItem:selected">
|
||||
<Setter Property="Background"
|
||||
Value="#2E3850" />
|
||||
Value="#2E3850" />
|
||||
<Setter Property="BorderBrush"
|
||||
Value="#80B8FF" />
|
||||
Value="#80B8FF" />
|
||||
</Style>
|
||||
</Style>
|
||||
</ControlTheme>
|
||||
|
||||
<DataTemplate x:Key="TextureNumTemplate">
|
||||
<Border VerticalAlignment="Top"
|
||||
HorizontalAlignment="Right"
|
||||
Margin="4"
|
||||
Padding="6,2"
|
||||
CornerRadius="3"
|
||||
Opacity="0.85"
|
||||
Background="#2C3245">
|
||||
HorizontalAlignment="Right"
|
||||
Margin="4"
|
||||
Padding="6,2"
|
||||
CornerRadius="3"
|
||||
Opacity="0.85"
|
||||
Background="#2C3245">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding}"
|
||||
Foreground="White"
|
||||
FontSize="11"
|
||||
FontWeight="SemiBold"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0,0,5,0" />
|
||||
Foreground="White"
|
||||
FontSize="11"
|
||||
FontWeight="SemiBold"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0,0,5,0" />
|
||||
<Path Data="{StaticResource TextureIcon}"
|
||||
Fill="White"
|
||||
Width="12"
|
||||
Height="12"
|
||||
Stretch="Uniform"
|
||||
VerticalAlignment="Center" />
|
||||
Fill="White"
|
||||
Width="12"
|
||||
Height="12"
|
||||
Stretch="Uniform"
|
||||
VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</DataTemplate>
|
||||
|
||||
<Style x:Key="AssetsListBox"
|
||||
Selector="ListBox">
|
||||
<ControlTheme x:Key="AssetsListBox"
|
||||
TargetType="ListBox"
|
||||
BasedOn="{StaticResource {x:Type ListBox}}">
|
||||
<Setter Property="ItemsSource"
|
||||
Value="{Binding SelectedItem.AssetsList.AssetsView, ElementName=AssetsFolderName}" />
|
||||
Value="{Binding SelectedItem.AssetsList.AssetsView, ElementName=AssetsFolderName}" />
|
||||
<!-- Avalonia Multiple = WPF Extended (Ctrl/Shift multi-select) -->
|
||||
<Setter Property="SelectionMode"
|
||||
Value="Multiple" />
|
||||
<Setter Property="ContextMenu"
|
||||
Value="{StaticResource FileContextMenu}" />
|
||||
Value="Multiple" />
|
||||
<!-- ContextMenu is assigned programmatically by ListBoxItemBehavior
|
||||
on right-click via TryFindResource, because Avalonia does not
|
||||
support x:Shared="False" (every StaticResource lookup would
|
||||
return the same ContextMenu instance). -->
|
||||
<Setter Property="ScrollViewer.VerticalScrollBarVisibility"
|
||||
Value="Auto" />
|
||||
Value="Auto" />
|
||||
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility"
|
||||
Value="Disabled" />
|
||||
Value="Disabled" />
|
||||
<Setter Property="BorderThickness"
|
||||
Value="0" />
|
||||
Value="0" />
|
||||
<Setter Property="ItemTemplate">
|
||||
<Setter.Value>
|
||||
<DataTemplate>
|
||||
|
|
@ -158,14 +164,14 @@
|
|||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Image Source="{Binding Asset.Extension, Converter={x:Static converters:AssetExtensionToIconConverter.Instance}}"
|
||||
Width="16"
|
||||
Height="16"
|
||||
HorizontalAlignment="Center"
|
||||
Margin="0 0 3 0" />
|
||||
Width="16"
|
||||
Height="16"
|
||||
HorizontalAlignment="Center"
|
||||
Margin="0 0 3 0" />
|
||||
<TextBlock Grid.Column="1"
|
||||
HorizontalAlignment="Left"
|
||||
Text="{Binding Asset.Name}"
|
||||
TextTrimming="CharacterEllipsis" />
|
||||
HorizontalAlignment="Left"
|
||||
Text="{Binding Asset.Name}"
|
||||
TextTrimming="CharacterEllipsis" />
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</Setter.Value>
|
||||
|
|
@ -174,28 +180,28 @@
|
|||
<Setter.Value>
|
||||
<ControlTemplate>
|
||||
<Border Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
<Grid>
|
||||
<ScrollViewer x:Name="PART_ScrollViewer"
|
||||
Focusable="False"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled">
|
||||
Focusable="False"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled">
|
||||
<ItemsPresenter />
|
||||
</ScrollViewer>
|
||||
<TextBlock HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="SemiBold"
|
||||
TextAlignment="Center"
|
||||
Foreground="#FF8A80"
|
||||
Text="No packages found in folder"
|
||||
IsHitTestVisible="False">
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="SemiBold"
|
||||
TextAlignment="Center"
|
||||
Foreground="#FF8A80"
|
||||
Text="No packages found in folder"
|
||||
IsHitTestVisible="False">
|
||||
<TextBlock.IsVisible>
|
||||
<MultiBinding Converter="{x:Static converters:ItemsSourceEmptyToBoolConverter.Instance}">
|
||||
<Binding Path="ItemsSource"
|
||||
RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
<Binding Path="Items.Count"
|
||||
RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
RelativeSource="{RelativeSource TemplatedParent}" />
|
||||
</MultiBinding>
|
||||
</TextBlock.IsVisible>
|
||||
</TextBlock>
|
||||
|
|
@ -207,16 +213,16 @@
|
|||
|
||||
<Style Selector="^ > ListBoxItem">
|
||||
<Setter Property="HorizontalContentAlignment"
|
||||
Value="Stretch" />
|
||||
Value="Stretch" />
|
||||
<Setter Property="Padding"
|
||||
Value="5 3" />
|
||||
Value="5 3" />
|
||||
<Setter Property="IsSelected"
|
||||
Value="{Binding IsSelected, Mode=TwoWay}" />
|
||||
Value="{Binding IsSelected, Mode=TwoWay}" />
|
||||
<Setter Property="controls:ListBoxItemBehavior.IsBroughtIntoViewWhenSelected"
|
||||
Value="True" />
|
||||
Value="True" />
|
||||
<Setter Property="controls:ListBoxItemBehavior.SelectFileOnRightClick"
|
||||
Value="True" />
|
||||
Value="True" />
|
||||
</Style>
|
||||
</Style>
|
||||
</ControlTheme>
|
||||
|
||||
</ResourceDictionary>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.VisualTree;
|
||||
|
||||
namespace FModel.Views.Resources.Controls;
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ public sealed class TreeViewItemBehavior
|
|||
{
|
||||
public static bool GetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem)
|
||||
{
|
||||
return (bool) treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty);
|
||||
return treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty);
|
||||
}
|
||||
|
||||
public static void SetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem, bool value)
|
||||
|
|
@ -15,27 +17,56 @@ public sealed class TreeViewItemBehavior
|
|||
treeViewItem.SetValue(IsBroughtIntoViewWhenSelectedProperty, value);
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty =
|
||||
DependencyProperty.RegisterAttached("IsBroughtIntoViewWhenSelected", typeof(bool), typeof(TreeViewItemBehavior),
|
||||
new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged));
|
||||
public static readonly AttachedProperty<bool> IsBroughtIntoViewWhenSelectedProperty =
|
||||
AvaloniaProperty.RegisterAttached<TreeViewItemBehavior, TreeViewItem, bool>("IsBroughtIntoViewWhenSelected");
|
||||
|
||||
private static void OnIsBroughtIntoViewWhenSelectedChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e)
|
||||
static TreeViewItemBehavior()
|
||||
{
|
||||
if (depObj is not TreeViewItem item)
|
||||
return;
|
||||
IsBroughtIntoViewWhenSelectedProperty.Changed.AddClassHandler<TreeViewItem>(OnIsBroughtIntoViewWhenSelectedChanged);
|
||||
}
|
||||
|
||||
private static void OnIsBroughtIntoViewWhenSelectedChanged(TreeViewItem item, AvaloniaPropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.NewValue is not bool value)
|
||||
return;
|
||||
|
||||
DisposeSubscription(item);
|
||||
|
||||
if (value)
|
||||
item.Selected += OnTreeViewItemSelected;
|
||||
{
|
||||
var sub = item.GetObservable(TreeViewItem.IsSelectedProperty)
|
||||
.Subscribe(isSelected =>
|
||||
{
|
||||
if (isSelected)
|
||||
item.BringIntoView();
|
||||
});
|
||||
item.SetValue(SubscriptionProperty, sub);
|
||||
|
||||
// Clean up when the item is removed from the visual tree (virtualization)
|
||||
item.DetachedFromVisualTree -= OnDetachedFromVisualTree;
|
||||
item.DetachedFromVisualTree += OnDetachedFromVisualTree;
|
||||
}
|
||||
else
|
||||
item.Selected -= OnTreeViewItemSelected;
|
||||
{
|
||||
item.DetachedFromVisualTree -= OnDetachedFromVisualTree;
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnTreeViewItemSelected(object sender, RoutedEventArgs e)
|
||||
private static void OnDetachedFromVisualTree(object? sender, VisualTreeAttachmentEventArgs e)
|
||||
{
|
||||
if (e.OriginalSource is TreeViewItem item)
|
||||
item.BringIntoView();
|
||||
if (sender is TreeViewItem item)
|
||||
DisposeSubscription(item);
|
||||
}
|
||||
}
|
||||
|
||||
private static void DisposeSubscription(TreeViewItem item)
|
||||
{
|
||||
if (item.GetValue(SubscriptionProperty) is IDisposable oldSub)
|
||||
{
|
||||
oldSub.Dispose();
|
||||
item.SetValue(SubscriptionProperty, null);
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly AttachedProperty<IDisposable?> SubscriptionProperty =
|
||||
AvaloniaProperty.RegisterAttached<TreeViewItemBehavior, TreeViewItem, IDisposable?>("Subscription");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,14 +8,22 @@ public class CommitMessageConverter : IValueConverter
|
|||
{
|
||||
public static readonly CommitMessageConverter Instance = new();
|
||||
|
||||
// Message may be cleaned by UpdateViewModel.LoadCoAuthors() which strips
|
||||
// "Co-authored-by:" lines and trims; the split on "\n\n" still yields the
|
||||
// correct title/description parts after that cleanup.
|
||||
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is string commitMessage)
|
||||
{
|
||||
var parts = commitMessage.Split("\n\n");
|
||||
return parameter?.ToString() == "Title" ? parts[0] : parts.Length > 1 ? parts[1] : string.Empty;
|
||||
var param = parameter?.ToString();
|
||||
if (param == "Title")
|
||||
return parts[0];
|
||||
if (param == "HasDescription")
|
||||
return parts.Length > 1 && !string.IsNullOrEmpty(parts[1]);
|
||||
return parts.Length > 1 ? parts[1] : string.Empty;
|
||||
}
|
||||
return value;
|
||||
return parameter?.ToString() == "HasDescription" ? false : value;
|
||||
}
|
||||
|
||||
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
|
|
|
|||
|
|
@ -46,20 +46,25 @@ public class FolderToGeometryConverter : IValueConverter
|
|||
_ => (null, "NeutralBrush"),
|
||||
};
|
||||
|
||||
if (targetType == typeof(bool) || (parameter is string { Length: > 0 } p && p.Equals("visible", StringComparison.OrdinalIgnoreCase)))
|
||||
var paramStr = parameter?.ToString();
|
||||
|
||||
if (paramStr?.Equals("visible", StringComparison.OrdinalIgnoreCase) == true || targetType == typeof(bool))
|
||||
return geometry != null;
|
||||
|
||||
if (targetType == typeof(Geometry) && geometry != null)
|
||||
if (paramStr?.Equals("brush", StringComparison.OrdinalIgnoreCase) == true || targetType == typeof(IBrush))
|
||||
{
|
||||
Application.Current!.TryGetResource(geometry, null, out var geomRes);
|
||||
return geomRes as Geometry;
|
||||
}
|
||||
if (targetType == typeof(IBrush))
|
||||
{
|
||||
Application.Current!.TryGetResource(brush, null, out var brushRes);
|
||||
if (Application.Current is null) return null;
|
||||
Application.Current.TryGetResource(brush, null, out var brushRes);
|
||||
return brushRes as IBrush;
|
||||
}
|
||||
|
||||
if (geometry != null)
|
||||
{
|
||||
if (Application.Current is null) return null;
|
||||
Application.Current.TryGetResource(geometry, null, out var geomRes);
|
||||
return geomRes as Geometry;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using Avalonia.Data.Converters;
|
||||
|
||||
namespace FModel.Views.Resources.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Returns 1 when HasImage is true (editor uses its own column),
|
||||
/// 3 when HasImage is false (editor spans all columns including the hidden image column).
|
||||
/// </summary>
|
||||
public class HasImageToColumnSpanConverter : IValueConverter
|
||||
{
|
||||
public static readonly HasImageToColumnSpanConverter Instance = new();
|
||||
|
||||
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
=> value is true ? 1 : 3;
|
||||
|
||||
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
=> throw new NotImplementedException();
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Data.Converters;
|
||||
using FModel;
|
||||
|
||||
namespace FModel.Views.Resources.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Converts <see cref="ELoadingMode"/> to <see cref="SelectionMode"/>.
|
||||
/// Multiple, All, AllButNew, AllButModified, and AllButPatched use <see cref="SelectionMode.Multiple"/> (multi-select);
|
||||
/// any future single-file modes would use <see cref="SelectionMode.Single"/>.
|
||||
/// </summary>
|
||||
public class LoadingModeToSelectionModeConverter : IValueConverter
|
||||
{
|
||||
public static readonly LoadingModeToSelectionModeConverter Instance = new();
|
||||
|
||||
public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
return value switch
|
||||
{
|
||||
ELoadingMode.Multiple => SelectionMode.Multiple,
|
||||
ELoadingMode.All => SelectionMode.Multiple,
|
||||
ELoadingMode.AllButNew => SelectionMode.Multiple,
|
||||
ELoadingMode.AllButModified => SelectionMode.Multiple,
|
||||
ELoadingMode.AllButPatched => SelectionMode.Multiple,
|
||||
_ => SelectionMode.Single
|
||||
};
|
||||
}
|
||||
|
||||
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
=> throw new NotImplementedException();
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using Avalonia;
|
||||
using Avalonia.Data.Converters;
|
||||
|
||||
namespace FModel.Views.Resources.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Maps playback state values to Play/Pause icon geometry resources and tooltip text.
|
||||
/// The value is compared by string to avoid hard dependency on CSCore enum types.
|
||||
/// </summary>
|
||||
public class PlaybackStateToPlayPauseConverter : IValueConverter
|
||||
{
|
||||
public static readonly PlaybackStateToPlayPauseConverter Instance = new();
|
||||
|
||||
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
var isPlaying = string.Equals(value?.ToString(), "Playing", StringComparison.OrdinalIgnoreCase);
|
||||
var mode = parameter?.ToString();
|
||||
|
||||
if (string.Equals(mode, "Tooltip", StringComparison.OrdinalIgnoreCase))
|
||||
return isPlaying ? "Pause" : "Play";
|
||||
|
||||
// "Icon" parameter or no parameter — return geometry resource
|
||||
var resourceKey = isPlaying ? "PauseIcon" : "PlayIcon";
|
||||
if (Application.Current is null)
|
||||
return null;
|
||||
return Application.Current.TryGetResource(resourceKey, null, out var resource)
|
||||
? resource
|
||||
: null;
|
||||
}
|
||||
|
||||
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
=> throw new NotImplementedException();
|
||||
}
|
||||
79
FModel/Views/Resources/Converters/UrlToBitmapConverter.cs
Normal file
79
FModel/Views/Resources/Converters/UrlToBitmapConverter.cs
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia.Data.Converters;
|
||||
using Avalonia.Media.Imaging;
|
||||
|
||||
namespace FModel.Views.Resources.Converters;
|
||||
|
||||
/// <summary>
|
||||
/// Converts an HTTP(S) URL string to an Avalonia <see cref="Bitmap"/>.
|
||||
/// Converts only from cached images and never performs blocking network I/O
|
||||
/// during binding evaluation.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Use <see cref="LoadAsync"/> from ViewModel code to preload and cache images.
|
||||
/// </remarks>
|
||||
public class UrlToBitmapConverter : IValueConverter
|
||||
{
|
||||
public static readonly UrlToBitmapConverter Instance = new();
|
||||
private static readonly HttpClient _http = new() { Timeout = TimeSpan.FromSeconds(10) };
|
||||
private static readonly ConcurrentDictionary<string, Bitmap?> _cache = new();
|
||||
private static readonly ConcurrentDictionary<string, Task<Bitmap?>> _inFlight = new();
|
||||
|
||||
public static bool TryGetCached(string url, out Bitmap? bitmap)
|
||||
{
|
||||
return _cache.TryGetValue(url, out bitmap);
|
||||
}
|
||||
|
||||
public static async Task<Bitmap?> LoadAsync(string url)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(url))
|
||||
return null;
|
||||
|
||||
if (_cache.TryGetValue(url, out var cached))
|
||||
return cached;
|
||||
|
||||
try
|
||||
{
|
||||
return await _inFlight.GetOrAdd(url, DownloadAsync);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_inFlight.TryRemove(url, out _);
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<Bitmap?> DownloadAsync(string url)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var stream = await _http.GetStreamAsync(url);
|
||||
using var ms = new MemoryStream();
|
||||
await stream.CopyToAsync(ms);
|
||||
ms.Position = 0;
|
||||
var bitmap = new Bitmap(ms);
|
||||
_cache[url] = bitmap;
|
||||
return bitmap;
|
||||
}
|
||||
catch
|
||||
{
|
||||
_cache.TryRemove(url, out _);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
{
|
||||
if (value is not string url || string.IsNullOrWhiteSpace(url))
|
||||
return null;
|
||||
|
||||
return _cache.TryGetValue(url, out var cached) ? cached : null;
|
||||
}
|
||||
|
||||
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||
=> throw new NotImplementedException();
|
||||
}
|
||||
|
|
@ -1,105 +1,700 @@
|
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
<ResourceDictionary xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<Geometry x:Key="StatusBarIcon">M22,9v6c0,1.1-0.9,2-2,2h-1l0-2h1V9H4v6h6v2H4c-1.1,0-2-0.9-2-2V9c0-1.1,0.9-2,2-2h16C21.1,7,22,7.9,22,9z M14.04,17.99 c0.18,0.39,0.73,0.39,0.91,0l0.63-1.4l1.4-0.63c0.39-0.18,0.39-0.73,0-0.91l-1.4-0.63l-0.63-1.4c-0.18-0.39-0.73-0.39-0.91,0 l-0.63,1.4l-1.4,0.63c-0.39,0.18-0.39,0.73,0,0.91l1.4,0.63L14.04,17.99z M16.74,13.43c0.1,0.22,0.42,0.22,0.52,0l0.36-0.8 l0.8-0.36c0.22-0.1,0.22-0.42,0-0.52l-0.8-0.36l-0.36-0.8c-0.1-0.22-0.42-0.22-0.52,0l-0.36,0.8l-0.8,0.36 c-0.22,0.1-0.22,0.42,0,0.52l0.8,0.36L16.74,13.43z</Geometry>
|
||||
<Geometry x:Key="SearchIcon">M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z</Geometry>
|
||||
<Geometry x:Key="DirectoryIcon">M19.71,15.71l-3.59,3.59c-0.63,0.63-1.71,0.18-1.71-0.71V16h-7c-1.1,0-2-0.9-2-2V5c0-0.55,0.45-1,1-1h0c0.55,0,1,0.45,1,1 v9h7v-2.59c0-0.89,1.08-1.34,1.71-0.71l3.59,3.59C20.1,14.68,20.1,15.32,19.71,15.71z</Geometry>
|
||||
<Geometry x:Key="AddIcon">M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z</Geometry>
|
||||
<Geometry x:Key="RemoveIcon">M18.3,5.71L18.3,5.71c-0.39-0.39-1.02-0.39-1.41,0L12,10.59L7.11,5.7c-0.39-0.39-1.02-0.39-1.41,0l0,0 c-0.39,0.39-0.39,1.02,0,1.41L10.59,12L5.7,16.89c-0.39,0.39-0.39,1.02,0,1.41l0,0c0.39,0.39,1.02,0.39,1.41,0L12,13.41l4.89,4.89 c0.39,0.39,1.02,0.39,1.41,0l0,0c0.39-0.39,0.39-1.02,0-1.41L13.41,12l4.89-4.89C18.68,6.73,18.68,6.09,18.3,5.71z</Geometry>
|
||||
<Geometry x:Key="ArrowIcon">M7.71,9.29l3.88,3.88l3.88-3.88c0.39-0.39,1.02-0.39,1.41,0l0,0c0.39,0.39,0.39,1.02,0,1.41l-4.59,4.59 c-0.39,0.39-1.02,0.39-1.41,0L6.29,10.7c-0.39-0.39-0.39-1.02,0-1.41l0,0C6.68,8.91,7.32,8.9,7.71,9.29z</Geometry>
|
||||
<Geometry x:Key="KeyIcon">M3,17h18c0.55,0,1,0.45,1,1v0c0,0.55-0.45,1-1,1H3c-0.55,0-1-0.45-1-1v0C2,17.45,2.45,17,3,17z M2.5,12.57 c0.36,0.21,0.82,0.08,1.03-0.28L4,11.47l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02L5.3,10.72 h0.95C6.66,10.72,7,10.38,7,9.97v0c0-0.41-0.34-0.75-0.75-0.75H5.3L5.77,8.4C5.98,8.04,5.86,7.58,5.5,7.37l0,0 C5.14,7.17,4.68,7.29,4.47,7.65L4,8.47L3.53,7.65C3.32,7.29,2.86,7.17,2.5,7.37l0,0C2.14,7.58,2.02,8.04,2.23,8.4L2.7,9.22H1.75 C1.34,9.22,1,9.56,1,9.97v0c0,0.41,0.34,0.75,0.75,0.75H2.7l-0.48,0.83C2.02,11.91,2.14,12.37,2.5,12.57L2.5,12.57z M10.5,12.57 L10.5,12.57c0.36,0.21,0.82,0.08,1.03-0.28L12,11.47l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02 l-0.48-0.83h0.95c0.41,0,0.75-0.34,0.75-0.75v0c0-0.41-0.34-0.75-0.75-0.75H13.3l0.47-0.82c0.21-0.36,0.08-0.82-0.27-1.03l0,0 c-0.36-0.21-0.82-0.08-1.02,0.27L12,8.47l-0.47-0.82c-0.21-0.36-0.67-0.48-1.02-0.27l0,0c-0.36,0.21-0.48,0.67-0.27,1.03 l0.47,0.82H9.75C9.34,9.22,9,9.56,9,9.97v0c0,0.41,0.34,0.75,0.75,0.75h0.95l-0.48,0.83C10.02,11.91,10.14,12.37,10.5,12.57z M23,9.97c0-0.41-0.34-0.75-0.75-0.75H21.3l0.47-0.82c0.21-0.36,0.08-0.82-0.27-1.03l0,0c-0.36-0.21-0.82-0.08-1.02,0.27L20,8.47 l-0.47-0.82c-0.21-0.36-0.67-0.48-1.02-0.27l0,0c-0.36,0.21-0.48,0.67-0.27,1.03l0.47,0.82h-0.95C17.34,9.22,17,9.56,17,9.97v0 c0,0.41,0.34,0.75,0.75,0.75h0.95l-0.48,0.83c-0.21,0.36-0.08,0.82,0.28,1.02l0,0c0.36,0.21,0.82,0.08,1.03-0.28L20,11.47 l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02l-0.48-0.83h0.95C22.66,10.72,23,10.38,23,9.97 L23,9.97z</Geometry>
|
||||
<Geometry x:Key="BackupIcon">M19,11c0-3.87-3.13-7-7-7C8.78,4,6.07,6.18,5.26,9.15C2.82,9.71,1,11.89,1,14.5C1,17.54,3.46,20,6.5,20 c1.76,0,10.25,0,12,0l0,0c2.49-0.01,4.5-2.03,4.5-4.52C23,13.15,21.25,11.26,19,11z M13,13v2c0,0.55-0.45,1-1,1h0 c-0.55,0-1-0.45-1-1v-2H9.21c-0.45,0-0.67-0.54-0.35-0.85l2.79-2.79c0.2-0.2,0.51-0.2,0.71,0l2.79,2.79 c0.31,0.31,0.09,0.85-0.35,0.85H13z</Geometry>
|
||||
<Geometry x:Key="ExpanderIcon">M16,17.01V11c0-0.55-0.45-1-1-1s-1,0.45-1,1v6.01h-1.79c-0.45,0-0.67,0.54-0.35,0.85l2.79,2.78c0.2,0.19,0.51,0.19,0.71,0 l2.79-2.78c0.32-0.31,0.09-0.85-0.35-0.85H16z M8.65,3.35L5.86,6.14c-0.32,0.31-0.1,0.85,0.35,0.85H8V13c0,0.55,0.45,1,1,1 s1-0.45,1-1V6.99h1.79c0.45,0,0.67-0.54,0.35-0.85L9.35,3.35C9.16,3.16,8.84,3.16,8.65,3.35z</Geometry>
|
||||
<Geometry x:Key="FolderIcon">M20,6h-8l-1.41-1.41C10.21,4.21,9.7,4,9.17,4H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V8 C22,6.9,21.1,6,20,6z M15.98,15.74l-1.07-0.82l-1.07,0.82c-0.39,0.29-0.92-0.08-0.78-0.55l0.42-1.36l-1.2-0.95 C11.91,12.6,12.12,12,12.59,12H14l0.43-1.34c0.15-0.46,0.8-0.46,0.95,0L15.82,12h1.41c0.47,0,0.68,0.6,0.31,0.89l-1.2,0.95 l0.42,1.36C16.91,15.66,16.37,16.04,15.98,15.74z</Geometry>
|
||||
<Geometry x:Key="ExportIcon">M19.41,7.41l-4.83-4.83C14.21,2.21,13.7,2,13.17,2H6C4.9,2,4.01,2.9,4.01,4L4,20c0,1.1,0.89,2,1.99,2H18c1.1,0,2-0.9,2-2 V8.83C20,8.3,19.79,7.79,19.41,7.41z M14.8,15H13v3c0,0.55-0.45,1-1,1s-1-0.45-1-1v-3H9.21c-0.45,0-0.67-0.54-0.35-0.85l2.8-2.79 c0.2-0.19,0.51-0.19,0.71,0l2.79,2.79C15.46,14.46,15.24,15,14.8,15z M14,9c-0.55,0-1-0.45-1-1V3.5L18.5,9H14z</Geometry>
|
||||
<Geometry x:Key="SaveIcon">M16.17,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V7.83c0-0.53-0.21-1.04-0.59-1.41l-2.83-2.83 C17.21,3.21,16.7,3,16.17,3z M12,18c-1.66,0-3-1.34-3-3s1.34-3,3-3s3,1.34,3,3S13.66,18,12,18z M14,10H7c-0.55,0-1-0.45-1-1V7 c0-0.55,0.45-1,1-1h7c0.55,0,1,0.45,1,1v2C15,9.55,14.55,10,14,10z</Geometry>
|
||||
<Geometry x:Key="TextureIcon">M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z M6.6,16.2l2-2.67 c0.2-0.27,0.6-0.27,0.8,0L11.25,16l2.6-3.47c0.2-0.27,0.6-0.27,0.8,0l2.75,3.67c0.25,0.33,0.01,0.8-0.4,0.8H7 C6.59,17,6.35,16.53,6.6,16.2z</Geometry>
|
||||
<Geometry x:Key="ModelIcon">M12 6q-.825 0-1.412-.588Q10 4.825 10 4t.588-1.413Q11.175 2 12 2t1.413.587Q14 3.175 14 4q0 .825-.587 1.412Q12.825 6 12 6ZM9 22V9H3V7h18v2h-6v13h-2v-6h-2v6Z</Geometry>
|
||||
<Geometry x:Key="AnimationIcon">M9 22q-1.45 0-2.725-.55Q5 20.9 4.05 19.95q-.95-.95-1.5-2.225Q2 16.45 2 15q0-2.025 1.05-3.7Q4.1 9.625 5.8 8.75q.5-.975 1.238-1.713Q7.775 6.3 8.75 5.8q.825-1.7 2.525-2.75T15 2q1.45 0 2.725.55Q19 3.1 19.95 4.05q.95.95 1.5 2.225Q22 7.55 22 9q0 2.125-1.05 3.75t-2.75 2.5q-.5.975-1.238 1.712-.737.738-1.712 1.238-.875 1.7-2.55 2.75Q11.025 22 9 22Zm0-2q.825 0 1.588-.25Q11.35 19.5 12 19q-1.45 0-2.725-.55Q8 17.9 7.05 16.95q-.95-.95-1.5-2.225Q5 13.45 5 12q-.5.65-.75 1.412Q4 14.175 4 15q0 1.05.4 1.95.4.9 1.075 1.575.675.675 1.575 1.075.9.4 1.95.4Zm3-3q.825 0 1.613-.25.787-.25 1.437-.75-1.475 0-2.75-.562-1.275-.563-2.225-1.513-.95-.95-1.513-2.225Q8 10.425 8 8.95q-.5.65-.75 1.437Q7 11.175 7 12q0 1.05.388 1.95.387.9 1.087 1.575.675.7 1.575 1.088.9.387 1.95.387Zm3-3q.45 0 .863-.075.412-.075.837-.225.55-1.5.163-2.888-.388-1.387-1.338-2.337-.95-.95-2.337-1.338Q11.8 6.75 10.3 7.3q-.15.425-.225.837Q10 8.55 10 9q0 1.05.387 1.95.388.9 1.088 1.575.675.7 1.575 1.088.9.387 1.95.387Zm4-1.95q.5-.65.75-1.438Q20 9.825 20 9q0-1.05-.387-1.95-.388-.9-1.088-1.575-.675-.7-1.575-1.088Q16.05 4 15 4q-.875 0-1.637.25-.763.25-1.413.75 1.475 0 2.75.562 1.275.563 2.225 1.513.95.95 1.513 2.225.562 1.275.562 2.75Z</Geometry>
|
||||
<Geometry x:Key="CopyIcon">M3,7L3,7C2.45,7,2,7.45,2,8v13c0,1.1,0.9,2,2,2h11c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H4V8C4,7.45,3.55,7,3,7z M15.59,1.59C15.21,1.21,14.7,1,14.17,1H8C6.9,1,6.01,1.9,6.01,3L6,17c0,1.1,0.89,2,1.99,2H19c1.1,0,2-0.9,2-2V7.83 c0-0.53-0.21-1.04-0.59-1.41L15.59,1.59z M14,7V2.5L19.5,8H15C14.45,8,14,7.55,14,7z</Geometry>
|
||||
<Geometry x:Key="DirectoriesIcon">M14.4,6l-0.24-1.2C14.07,4.34,13.66,4,13.18,4H6C5.45,4,5,4.45,5,5v15c0,0.55,0.45,1,1,1l0,0c0.55,0,1-0.45,1-1v-6h5.6 l0.24,1.2c0.09,0.47,0.5,0.8,0.98,0.8H19c0.55,0,1-0.45,1-1V7c0-0.55-0.45-1-1-1H14.4z</Geometry>
|
||||
<Geometry x:Key="DirectoriesAddIcon">M20 1v3h3v2h-3v3h-2V6h-3V4h3V1h2zm-8 12c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm2-9.75V7h3v3h2.92c.05.39.08.79.08 1.2 0 3.32-2.67 7.25-8 11.8-5.33-4.55-8-8.48-8-11.8C4 6.22 7.8 3 12 3c.68 0 1.35.08 2 .25z</Geometry>
|
||||
<Geometry x:Key="ExtractIcon">M20.29,10.29l-3.59-3.59C16.08,6.08,15,6.52,15,7.41V10H8c-2.76,0-5,2.24-5,5v3c0,0.55,0.45,1,1,1h0c0.55,0,1-0.45,1-1v-3 c0-1.65,1.35-3,3-3h7v2.59c0,0.89,1.08,1.34,1.71,0.71l3.59-3.59C20.68,11.32,20.68,10.68,20.29,10.29z</Geometry>
|
||||
<Geometry x:Key="GoToIcon">M9.5,5.5c1.1,0,2-0.9,2-2s-0.9-2-2-2s-2,0.9-2,2S8.4,5.5,9.5,5.5z M5.75,8.9L3.23,21.81C3.11,22.43,3.58,23,4.21,23H4.3 c0.47,0,0.88-0.33,0.98-0.79L6.85,15L9,17v5c0,0.55,0.45,1,1,1h0c0.55,0,1-0.45,1-1v-6.14c0-0.27-0.11-0.52-0.29-0.71L8.95,13.4 l0.6-3c1.07,1.32,2.58,2.23,4.31,2.51c0.6,0.1,1.14-0.39,1.14-1v0c0-0.49-0.36-0.9-0.84-0.98c-1.49-0.25-2.75-1.15-3.51-2.38 L9.7,6.95C9.35,6.35,8.7,6,8,6C7.75,6,7.5,6.05,7.25,6.15l-4.63,1.9C2.25,8.2,2,8.57,2,8.97V12c0,0.55,0.45,1,1,1h0 c0.55,0,1-0.45,1-1V9.65L5.75,8.9 M21,2h-7c-0.55,0-1,0.45-1,1v5c0,0.55,0.45,1,1,1h2.75v13.25c0,0.41,0.34,0.75,0.75,0.75 s0.75-0.34,0.75-0.75V9H21c0.55,0,1-0.45,1-1V3C22,2.45,21.55,2,21,2z M20.15,5.85l-1.28,1.29c-0.31,0.32-0.85,0.09-0.85-0.35V6.25 h-2.76c-0.41,0-0.75-0.34-0.75-0.75s0.34-0.75,0.75-0.75h2.76V4.21c0-0.45,0.54-0.67,0.85-0.35l1.28,1.29 C20.34,5.34,20.34,5.66,20.15,5.85z</Geometry>
|
||||
<Geometry x:Key="DiscordIcon">M22,24L16.75,19L17.38,21H4.5A2.5,2.5 0 0,1 2,18.5V3.5A2.5,2.5 0 0,1 4.5,1H19.5A2.5,2.5 0 0,1 22,3.5V24M12,6.8C9.32,6.8 7.44,7.95 7.44,7.95C8.47,7.03 10.27,6.5 10.27,6.5L10.1,6.33C8.41,6.36 6.88,7.53 6.88,7.53C5.16,11.12 5.27,14.22 5.27,14.22C6.67,16.03 8.75,15.9 8.75,15.9L9.46,15C8.21,14.73 7.42,13.62 7.42,13.62C7.42,13.62 9.3,14.9 12,14.9C14.7,14.9 16.58,13.62 16.58,13.62C16.58,13.62 15.79,14.73 14.54,15L15.25,15.9C15.25,15.9 17.33,16.03 18.73,14.22C18.73,14.22 18.84,11.12 17.12,7.53C17.12,7.53 15.59,6.36 13.9,6.33L13.73,6.5C13.73,6.5 15.53,7.03 16.56,7.95C16.56,7.95 14.68,6.8 12,6.8M9.93,10.59C10.58,10.59 11.11,11.16 11.1,11.86C11.1,12.55 10.58,13.13 9.93,13.13C9.29,13.13 8.77,12.55 8.77,11.86C8.77,11.16 9.28,10.59 9.93,10.59M14.1,10.59C14.75,10.59 15.27,11.16 15.27,11.86C15.27,12.55 14.75,13.13 14.1,13.13C13.46,13.13 12.94,12.55 12.94,11.86C12.94,11.16 13.45,10.59 14.1,10.59Z</Geometry>
|
||||
<Geometry x:Key="BugIcon">M14,12H10V10H14M14,16H10V14H14M20,8H17.19C16.74,7.22 16.12,6.55 15.37,6.04L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.04,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6.04C7.88,6.55 7.26,7.22 6.81,8H4V10H6.09C6.04,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.04,15.67 6.09,16H4V18H6.81C7.85,19.79 9.78,21 12,21C14.22,21 16.15,19.79 17.19,18H20V16H17.91C17.96,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.96,10.33 17.91,10H20V8Z</Geometry>
|
||||
<Geometry x:Key="GiftIcon">M22 10.92L19.26 9.33C21.9 7.08 19.25 2.88 16.08 4.31L15.21 4.68L15.1 3.72C15 2.64 14.44 1.87 13.7 1.42C12.06 .467 9.56 1.12 9.16 3.5L6.41 1.92C5.45 1.36 4.23 1.69 3.68 2.65L2.68 4.38C2.4 4.86 2.57 5.47 3.05 5.75L10.84 10.25L12.34 7.65L14.07 8.65L12.57 11.25L20.36 15.75C20.84 16 21.46 15.86 21.73 15.38L22.73 13.65C23.28 12.69 22.96 11.47 22 10.92M12.37 5C11.5 5.25 10.8 4.32 11.24 3.55C11.5 3.07 12.13 2.91 12.61 3.18C13.38 3.63 13.23 4.79 12.37 5M17.56 8C16.7 8.25 16 7.32 16.44 6.55C16.71 6.07 17.33 5.91 17.8 6.18C18.57 6.63 18.42 7.79 17.56 8M20.87 16.88C21.28 16.88 21.67 16.74 22 16.5V20C22 21.11 21.11 22 20 22H4C2.9 22 2 21.11 2 20V11H10.15L11 11.5V20H13V12.65L19.87 16.61C20.17 16.79 20.5 16.88 20.87 16.88Z</Geometry>
|
||||
<Geometry x:Key="NoteIcon">M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM8 19h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0-6h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM7 6c0 .55.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1z</Geometry>
|
||||
<Geometry x:Key="InfoIcon">M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 15c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1-8h-2V7h2v2z</Geometry>
|
||||
<Geometry x:Key="TrashIcon">M6,19c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V7H6V19z M9.17,12.59c-0.39-0.39-0.39-1.02,0-1.41c0.39-0.39,1.02-0.39,1.41,0 L12,12.59l1.41-1.41c0.39-0.39,1.02-0.39,1.41,0s0.39,1.02,0,1.41L13.41,14l1.41,1.41c0.39,0.39,0.39,1.02,0,1.41 s-1.02,0.39-1.41,0L12,15.41l-1.41,1.41c-0.39,0.39-1.02,0.39-1.41,0c-0.39-0.39-0.39-1.02,0-1.41L10.59,14L9.17,12.59z M18,4h-2.5 l-0.71-0.71C14.61,3.11,14.35,3,14.09,3H9.91c-0.26,0-0.52,0.11-0.7,0.29L8.5,4H6C5.45,4,5,4.45,5,5s0.45,1,1,1h12 c0.55,0,1-0.45,1-1S18.55,4,18,4z</Geometry>
|
||||
<Geometry x:Key="HomeIcon">M18,4v16H6V4H18 M18,2H6C4.9,2,4,2.9,4,4v16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2L18,2z M7,19h10v-6H7 V19z M10,10h4v1h3V5H7v6h3V10z</Geometry>
|
||||
<Geometry x:Key="RegexIcon">M16,16.92C15.67,16.97 15.34,17 15,17C14.66,17 14.33,16.97 14,16.92V13.41L11.5,15.89C11,15.5 10.5,15 10.11,14.5L12.59,12H9.08C9.03,11.67 9,11.34 9,11C9,10.66 9.03,10.33 9.08,10H12.59L10.11,7.5C10.3,7.25 10.5,7 10.76,6.76V6.76C11,6.5 11.25,6.3 11.5,6.11L14,8.59V5.08C14.33,5.03 14.66,5 15,5C15.34,5 15.67,5.03 16,5.08V8.59L18.5,6.11C19,6.5 19.5,7 19.89,7.5L17.41,10H20.92C20.97,10.33 21,10.66 21,11C21,11.34 20.97,11.67 20.92,12H17.41L19.89,14.5C19.7,14.75 19.5,15 19.24,15.24V15.24C19,15.5 18.75,15.7 18.5,15.89L16,13.41V16.92H16V16.92M5,19A2,2 0 0,1 7,17A2,2 0 0,1 9,19A2,2 0 0,1 7,21A2,2 0 0,1 5,19H5Z</Geometry>
|
||||
<Geometry x:Key="BackspaceIcon">M22,3H7C6.31,3 5.77,3.35 5.41,3.88L0,12L5.41,20.11C5.77,20.64 6.31,21 7,21H22A2,2 0 0,0 24,19V5A2,2 0 0,0 22,3M19,15.59L17.59,17L14,13.41L10.41,17L9,15.59L12.59,12L9,8.41L10.41,7L14,10.59L17.59,7L19,8.41L15.41,12</Geometry>
|
||||
<Geometry x:Key="AudioIcon">M3 10v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18 1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L7 9H4c-.55 0-1 .45-1 1zm13.5 2c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 4.45v.2c0 .38.25.71.6.85C17.18 6.53 19 9.06 19 12s-1.82 5.47-4.4 6.5c-.36.14-.6.47-.6.85v.2c0 .63.63 1.07 1.21.85C18.6 19.11 21 15.84 21 12s-2.4-7.11-5.79-8.4c-.58-.23-1.21.22-1.21.85z</Geometry>
|
||||
<Geometry x:Key="MapIcon">M14.65 4.98l-5-1.75c-.42-.15-.88-.15-1.3-.01L4.36 4.56C3.55 4.84 3 5.6 3 6.46v11.85c0 1.41 1.41 2.37 2.72 1.86l2.93-1.14c.22-.09.47-.09.69-.01l5 1.75c.42.15.88.15 1.3.01l3.99-1.34c.81-.27 1.36-1.04 1.36-1.9V5.69c0-1.41-1.41-2.37-2.72-1.86l-2.93 1.14c-.22.08-.46.09-.69.01zM15 18.89l-6-2.11V5.11l6 2.11v11.67z</Geometry>
|
||||
<Geometry x:Key="ChallengesIcon">M12.09 2.91C10.08.9 7.07.49 4.65 1.67L8.28 5.3c.39.39.39 1.02 0 1.41L6.69 8.3c-.39.4-1.02.4-1.41 0L1.65 4.67C.48 7.1.89 10.09 2.9 12.1c1.86 1.86 4.58 2.35 6.89 1.48l7.96 7.96c1.03 1.03 2.69 1.03 3.71 0 1.03-1.03 1.03-2.69 0-3.71L13.54 9.9c.92-2.34.44-5.1-1.45-6.99z</Geometry>
|
||||
<Geometry x:Key="MatchCaseIcon">M2.5 5.5C2.5 6.33 3.17 7 4 7h3.5v10.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V7H14c.83 0 1.5-.67 1.5-1.5S14.83 4 14 4H4c-.83 0-1.5.67-1.5 1.5zM20 9h-6c-.83 0-1.5.67-1.5 1.5S13.17 12 14 12h1.5v5.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V12H20c.83 0 1.5-.67 1.5-1.5S20.83 9 20 9z</Geometry>
|
||||
<Geometry x:Key="CreatorIcon">M21 13h-6c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1 1zm0-6h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-6 10h6c.55 0 1-.45 1-1s-.45-1-1-1h-6c-.55 0-1 .45-1 1s.45 1 1 1zm-3-8v6c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V9c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2zm-2.1 5.2l-1.26-1.68c-.2-.26-.59-.27-.8-.01L6.5 14.26l-.85-1.03c-.2-.25-.58-.24-.78.01l-.74.95c-.26.33-.02.81.39.81H9.5c.41 0 .65-.47.4-.8z</Geometry>
|
||||
<Geometry x:Key="KeyboardIcon">M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm8 7H9c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1 1zm1-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z</Geometry>
|
||||
<Geometry x:Key="SearchUpIcon">M2.7,17.29c0.39,0.39,1.02,0.39,1.41,0l4.59-4.59c0.39-0.39,1.02-0.39,1.41,0l1.17,1.17c1.17,1.17,3.07,1.17,4.24,0 l4.18-4.17l1.44,1.44c0.31,0.31,0.85,0.09,0.85-0.35V6.5C22,6.22,21.78,6,21.5,6h-4.29c-0.45,0-0.67,0.54-0.35,0.85l1.44,1.44 l-4.17,4.17c-0.39,0.39-1.02,0.39-1.41,0l-1.17-1.17c-1.17-1.17-3.07-1.17-4.24,0L2.7,15.88C2.32,16.27,2.32,16.91,2.7,17.29z</Geometry>
|
||||
<Geometry x:Key="WholeWordIcon">M18 10v3H6v-3c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1z</Geometry>
|
||||
<Geometry x:Key="CloseIcon">M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm4.3 14.3c-.39.39-1.02.39-1.41 0L12 13.41 9.11 16.3c-.39.39-1.02.39-1.41 0-.39-.39-.39-1.02 0-1.41L10.59 12 7.7 9.11c-.39-.39-.39-1.02 0-1.41.39-.39 1.02-.39 1.41 0L12 10.59l2.89-2.89c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41L13.41 12l2.89 2.89c.38.38.38 1.02 0 1.41z</Geometry>
|
||||
<Geometry x:Key="PlayIcon">M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18c.62-.39.62-1.29 0-1.69L9.54 5.98C8.87 5.55 8 6.03 8 6.82z</Geometry>
|
||||
<Geometry x:Key="PauseIcon">M8 19c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2v10c0 1.1.9 2 2 2zm6-12v10c0 1.1.9 2 2 2s2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2z</Geometry>
|
||||
<Geometry x:Key="StopIcon">M8 6h8c1.1 0 2 .9 2 2v8c0 1.1-.9 2-2 2H8c-1.1 0-2-.9-2-2V8c0-1.1.9-2 2-2z</Geometry>
|
||||
<Geometry x:Key="SkipNextIcon">M7.58 16.89l5.77-4.07c.56-.4.56-1.24 0-1.63L7.58 7.11C6.91 6.65 6 7.12 6 7.93v8.14c0 .81.91 1.28 1.58.82zM16 7v10c0 .55.45 1 1 1s1-.45 1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z</Geometry>
|
||||
<Geometry x:Key="SkipPreviousIcon">M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zm3.66 6.82l5.77 4.07c.66.47 1.58-.01 1.58-.82V7.93c0-.81-.91-1.28-1.58-.82l-5.77 4.07c-.57.4-.57 1.24 0 1.64z</Geometry>
|
||||
<Geometry x:Key="AddAudioIcon">M13 10H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm0-4H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm5 8v-3c0-.55-.45-1-1-1s-1 .45-1 1v3h-3c-.55 0-1 .45-1 1s.45 1 1 1h3v3c0 .55.45 1 1 1s1-.45 1-1v-3h3c.55 0 1-.45 1-1s-.45-1-1-1h-3zM3 16h6c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1 1s.45 1 1 1z</Geometry>
|
||||
<Geometry x:Key="SavePlaylistIcon">M14 6H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm0 4H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zM4 16h6c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM19 6c-1.1 0-2 .9-2 2v6.18c-.31-.11-.65-.18-1-.18-1.84 0-3.28 1.64-2.95 3.54.21 1.21 1.2 2.2 2.41 2.41 1.9.33 3.54-1.11 3.54-2.95V8h2c.55 0 1-.45 1-1s-.45-1-1-1h-2z</Geometry>
|
||||
<Geometry x:Key="ImageMergerIcon">M10 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM6 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-4 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z</Geometry>
|
||||
<Geometry x:Key="GliderIcon">M12,17c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S13.1,17,12,17z M17.95,14c-0.52,0-0.94,0.4-0.99,0.92 c-0.2,2.03-1.05,2.68-1.48,3.02C14.68,18.54,14,19,12,19s-2.68-0.46-3.48-1.06c-0.43-0.34-1.28-0.99-1.48-3.02 C6.99,14.4,6.57,14,6.05,14c-0.59,0-1.06,0.51-1,1.09c0.22,2.08,1.07,3.47,2.24,4.41c0.5,0.4,1.1,0.7,1.7,0.9L9,24h6v-3.6 c0.6-0.2,1.2-0.5,1.7-0.9c1.17-0.94,2.03-2.32,2.24-4.41C19.01,14.51,18.53,14,17.95,14z M12,0C5.92,0,1,1.9,1,4.25v3.49 C1,8.55,1.88,9,2.56,8.57C2.7,8.48,2.84,8.39,3,8.31L5,13h2l1.5-6.28C9.6,6.58,10.78,6.5,12,6.5s2.4,0.08,3.5,0.22L17,13h2l2-4.69 c0.16,0.09,0.3,0.17,0.44,0.26C22.12,9,23,8.55,23,7.74V4.25C23,1.9,18.08,0,12,0z M5.88,11.24L4.37,7.69 c0.75-0.28,1.6-0.52,2.53-0.71L5.88,11.24z M18.12,11.24L17.1,6.98c0.93,0.19,1.78,0.43,2.53,0.71L18.12,11.24z</Geometry>
|
||||
<Geometry x:Key="AnchorIcon">M13,9V7.82C14.16,7.4,15,6.3,15,5c0-1.65-1.35-3-3-3S9,3.35,9,5c0,1.3,0.84,2.4,2,2.82V9H9c-0.55,0-1,0.45-1,1v0 c0,0.55,0.45,1,1,1h2v8.92c-2.22-0.33-4.59-1.68-5.55-3.37l1.14-1.14c0.22-0.22,0.19-0.57-0.05-0.75L3.8,12.6 C3.47,12.35,3,12.59,3,13v2c0,3.88,4.92,7,9,7s9-3.12,9-7v-2c0-0.41-0.47-0.65-0.8-0.4l-2.74,2.05c-0.24,0.18-0.27,0.54-0.05,0.75 l1.14,1.14c-0.96,1.69-3.33,3.04-5.55,3.37V11h2c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H13z M12,4c0.55,0,1,0.45,1,1s-0.45,1-1,1 s-1-0.45-1-1S11.45,4,12,4z</Geometry>
|
||||
<Geometry x:Key="FoldIcon">M8.12 19.3c.39.39 1.02.39 1.41 0L12 16.83l2.47 2.47c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41l-3.17-3.17c-.39-.39-1.02-.39-1.41 0l-3.17 3.17c-.4.38-.4 1.02-.01 1.41zm7.76-14.6c-.39-.39-1.02-.39-1.41 0L12 7.17 9.53 4.7c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.03 0 1.42l3.17 3.17c.39.39 1.02.39 1.41 0l3.17-3.17c.4-.39.4-1.03.01-1.42z</Geometry>
|
||||
<Geometry x:Key="UnfoldIcon">M12 5.83l2.46 2.46c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L12.7 3.7c-.39-.39-1.02-.39-1.41 0L8.12 6.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L12 5.83zm0 12.34l-2.46-2.46c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41l3.17 3.18c.39.39 1.02.39 1.41 0l3.17-3.17c.39-.39.39-1.02 0-1.41-.39-.39-1.02-.39-1.41 0L12 18.17z</Geometry>
|
||||
<Geometry x:Key="LocateMeIcon">M11.71,17.99C8.53,17.84,6,15.22,6,12c0-3.31,2.69-6,6-6c3.22,0,5.84,2.53,5.99,5.71l-2.1-0.63C15.48,9.31,13.89,8,12,8 c-2.21,0-4,1.79-4,4c0,1.89,1.31,3.48,3.08,3.89L11.71,17.99z M22,12c0,0.3-0.01,0.6-0.04,0.9l-1.97-0.59C20,12.21,20,12.1,20,12 c0-4.42-3.58-8-8-8s-8,3.58-8,8s3.58,8,8,8c0.1,0,0.21,0,0.31-0.01l0.59,1.97C12.6,21.99,12.3,22,12,22C6.48,22,2,17.52,2,12 C2,6.48,6.48,2,12,2S22,6.48,22,12z M18.23,16.26l2.27-0.76c0.46-0.15,0.45-0.81-0.01-0.95l-7.6-2.28 c-0.38-0.11-0.74,0.24-0.62,0.62l2.28,7.6c0.14,0.47,0.8,0.48,0.95,0.01l0.76-2.27l3.91,3.91c0.2,0.2,0.51,0.2,0.71,0l1.27-1.27 c0.2-0.2,0.2-0.51,0-0.71L18.23,16.26z</Geometry>
|
||||
<Geometry x:Key="MeshIcon">M1.8 6q-.525 0-.887-.35Q.55 5.3.55 4.8V4q0-1.425 1.012-2.438Q2.575.55 4 .55h.8q.5 0 .85.362.35.363.35.888 0 .5-.35.85T4.8 3H4q-.425 0-.712.287Q3 3.575 3 4v.8q0 .5-.35.85T1.8 6ZM4 23.45q-1.425 0-2.438-1.012Q.55 21.425.55 20v-.8q0-.5.363-.85.362-.35.887-.35.5 0 .85.35t.35.85v.8q0 .425.288.712Q3.575 21 4 21h.8q.5 0 .85.35t.35.85q0 .525-.35.887-.35.363-.85.363Zm15.2 0q-.5 0-.85-.363-.35-.362-.35-.887 0-.5.35-.85t.85-.35h.8q.425 0 .712-.288Q21 20.425 21 20v-.8q0-.5.35-.85t.85-.35q.525 0 .888.35.362.35.362.85v.8q0 1.425-1.012 2.438Q21.425 23.45 20 23.45ZM22.2 6q-.5 0-.85-.35T21 4.8V4q0-.425-.288-.713Q20.425 3 20 3h-.8q-.5 0-.85-.35T18 1.8q0-.525.35-.888.35-.362.85-.362h.8q1.425 0 2.438 1.012Q23.45 2.575 23.45 4v.8q0 .5-.362.85-.363.35-.888.35ZM12 17.35l1-.575v-4.1l3.55-2.075V9.425l-1-.575L12 10.925 8.45 8.85l-1 .575V10.6L11 12.675v4.1Zm-1.325 2.325-4.55-2.65q-.625-.35-.975-.963-.35-.612-.35-1.337V9.45q0-.725.35-1.337.35-.613.975-.963l4.55-2.65Q11.3 4.15 12 4.15t1.325.35l4.55 2.65q.625.35.975.963.35.612.35 1.337v5.275q0 .725-.35 1.337-.35.613-.975.963l-4.55 2.65q-.625.35-1.325.35t-1.325-.35Z</Geometry>
|
||||
<Geometry x:Key="ArchiveIcon">M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748 1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1 0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0 0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75 8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z</Geometry>
|
||||
<Geometry x:Key="GitHubIcon">M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z</Geometry>
|
||||
<Geometry x:Key="StatusBarIcon">M22,9v6c0,1.1-0.9,2-2,2h-1l0-2h1V9H4v6h6v2H4c-1.1,0-2-0.9-2-2V9c0-1.1,0.9-2,2-2h16C21.1,7,22,7.9,22,9z
|
||||
M14.04,17.99
|
||||
c0.18,0.39,0.73,0.39,0.91,0l0.63-1.4l1.4-0.63c0.39-0.18,0.39-0.73,0-0.91l-1.4-0.63l-0.63-1.4c-0.18-0.39-0.73-0.39-0.91,0
|
||||
l-0.63,1.4l-1.4,0.63c-0.39,0.18-0.39,0.73,0,0.91l1.4,0.63L14.04,17.99z
|
||||
M16.74,13.43c0.1,0.22,0.42,0.22,0.52,0l0.36-0.8
|
||||
l0.8-0.36c0.22-0.1,0.22-0.42,0-0.52l-0.8-0.36l-0.36-0.8c-0.1-0.22-0.42-0.22-0.52,0l-0.36,0.8l-0.8,0.36
|
||||
c-0.22,0.1-0.22,0.42,0,0.52l0.8,0.36L16.74,13.43z</Geometry>
|
||||
<Geometry x:Key="SearchIcon">M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3
|
||||
9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49
|
||||
19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z</Geometry>
|
||||
<Geometry x:Key="DirectoryIcon">M19.71,15.71l-3.59,3.59c-0.63,0.63-1.71,0.18-1.71-0.71V16h-7c-1.1,0-2-0.9-2-2V5c0-0.55,0.45-1,1-1h0c0.55,0,1,0.45,1,1
|
||||
v9h7v-2.59c0-0.89,1.08-1.34,1.71-0.71l3.59,3.59C20.1,14.68,20.1,15.32,19.71,15.71z</Geometry>
|
||||
<Geometry x:Key="AddIcon">M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1
|
||||
1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z</Geometry>
|
||||
<Geometry x:Key="RemoveIcon">
|
||||
M18.3,5.71L18.3,5.71c-0.39-0.39-1.02-0.39-1.41,0L12,10.59L7.11,5.7c-0.39-0.39-1.02-0.39-1.41,0l0,0
|
||||
c-0.39,0.39-0.39,1.02,0,1.41L10.59,12L5.7,16.89c-0.39,0.39-0.39,1.02,0,1.41l0,0c0.39,0.39,1.02,0.39,1.41,0L12,13.41l4.89,4.89
|
||||
c0.39,0.39,1.02,0.39,1.41,0l0,0c0.39-0.39,0.39-1.02,0-1.41L13.41,12l4.89-4.89C18.68,6.73,18.68,6.09,18.3,5.71z</Geometry>
|
||||
<Geometry x:Key="ArrowIcon">
|
||||
M7.71,9.29l3.88,3.88l3.88-3.88c0.39-0.39,1.02-0.39,1.41,0l0,0c0.39,0.39,0.39,1.02,0,1.41l-4.59,4.59
|
||||
c-0.39,0.39-1.02,0.39-1.41,0L6.29,10.7c-0.39-0.39-0.39-1.02,0-1.41l0,0C6.68,8.91,7.32,8.9,7.71,9.29z</Geometry>
|
||||
<Geometry x:Key="KeyIcon">M3,17h18c0.55,0,1,0.45,1,1v0c0,0.55-0.45,1-1,1H3c-0.55,0-1-0.45-1-1v0C2,17.45,2.45,17,3,17z
|
||||
M2.5,12.57
|
||||
c0.36,0.21,0.82,0.08,1.03-0.28L4,11.47l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02L5.3,10.72
|
||||
h0.95C6.66,10.72,7,10.38,7,9.97v0c0-0.41-0.34-0.75-0.75-0.75H5.3L5.77,8.4C5.98,8.04,5.86,7.58,5.5,7.37l0,0
|
||||
C5.14,7.17,4.68,7.29,4.47,7.65L4,8.47L3.53,7.65C3.32,7.29,2.86,7.17,2.5,7.37l0,0C2.14,7.58,2.02,8.04,2.23,8.4L2.7,9.22H1.75
|
||||
C1.34,9.22,1,9.56,1,9.97v0c0,0.41,0.34,0.75,0.75,0.75H2.7l-0.48,0.83C2.02,11.91,2.14,12.37,2.5,12.57L2.5,12.57z
|
||||
M10.5,12.57
|
||||
L10.5,12.57c0.36,0.21,0.82,0.08,1.03-0.28L12,11.47l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02
|
||||
l-0.48-0.83h0.95c0.41,0,0.75-0.34,0.75-0.75v0c0-0.41-0.34-0.75-0.75-0.75H13.3l0.47-0.82c0.21-0.36,0.08-0.82-0.27-1.03l0,0
|
||||
c-0.36-0.21-0.82-0.08-1.02,0.27L12,8.47l-0.47-0.82c-0.21-0.36-0.67-0.48-1.02-0.27l0,0c-0.36,0.21-0.48,0.67-0.27,1.03
|
||||
l0.47,0.82H9.75C9.34,9.22,9,9.56,9,9.97v0c0,0.41,0.34,0.75,0.75,0.75h0.95l-0.48,0.83C10.02,11.91,10.14,12.37,10.5,12.57z
|
||||
M23,9.97c0-0.41-0.34-0.75-0.75-0.75H21.3l0.47-0.82c0.21-0.36,0.08-0.82-0.27-1.03l0,0c-0.36-0.21-0.82-0.08-1.02,0.27L20,8.47
|
||||
l-0.47-0.82c-0.21-0.36-0.67-0.48-1.02-0.27l0,0c-0.36,0.21-0.48,0.67-0.27,1.03l0.47,0.82h-0.95C17.34,9.22,17,9.56,17,9.97v0
|
||||
c0,0.41,0.34,0.75,0.75,0.75h0.95l-0.48,0.83c-0.21,0.36-0.08,0.82,0.28,1.02l0,0c0.36,0.21,0.82,0.08,1.03-0.28L20,11.47
|
||||
l0.48,0.83c0.21,0.36,0.67,0.48,1.03,0.28l0,0c0.36-0.21,0.48-0.66,0.28-1.02l-0.48-0.83h0.95C22.66,10.72,23,10.38,23,9.97
|
||||
L23,9.97z</Geometry>
|
||||
<Geometry x:Key="BackupIcon">M19,11c0-3.87-3.13-7-7-7C8.78,4,6.07,6.18,5.26,9.15C2.82,9.71,1,11.89,1,14.5C1,17.54,3.46,20,6.5,20
|
||||
c1.76,0,10.25,0,12,0l0,0c2.49-0.01,4.5-2.03,4.5-4.52C23,13.15,21.25,11.26,19,11z
|
||||
M13,13v2c0,0.55-0.45,1-1,1h0
|
||||
c-0.55,0-1-0.45-1-1v-2H9.21c-0.45,0-0.67-0.54-0.35-0.85l2.79-2.79c0.2-0.2,0.51-0.2,0.71,0l2.79,2.79
|
||||
c0.31,0.31,0.09,0.85-0.35,0.85H13z</Geometry>
|
||||
<Geometry x:Key="ExpanderIcon">M16,17.01V11c0-0.55-0.45-1-1-1s-1,0.45-1,1v6.01h-1.79c-0.45,0-0.67,0.54-0.35,0.85l2.79,2.78c0.2,0.19,0.51,0.19,0.71,0
|
||||
l2.79-2.78c0.32-0.31,0.09-0.85-0.35-0.85H16z
|
||||
M8.65,3.35L5.86,6.14c-0.32,0.31-0.1,0.85,0.35,0.85H8V13c0,0.55,0.45,1,1,1
|
||||
s1-0.45,1-1V6.99h1.79c0.45,0,0.67-0.54,0.35-0.85L9.35,3.35C9.16,3.16,8.84,3.16,8.65,3.35z</Geometry>
|
||||
<Geometry x:Key="FolderIcon">M20,6h-8l-1.41-1.41C10.21,4.21,9.7,4,9.17,4H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V8
|
||||
C22,6.9,21.1,6,20,6z
|
||||
M15.98,15.74l-1.07-0.82l-1.07,0.82c-0.39,0.29-0.92-0.08-0.78-0.55l0.42-1.36l-1.2-0.95
|
||||
C11.91,12.6,12.12,12,12.59,12H14l0.43-1.34c0.15-0.46,0.8-0.46,0.95,0L15.82,12h1.41c0.47,0,0.68,0.6,0.31,0.89l-1.2,0.95
|
||||
l0.42,1.36C16.91,15.66,16.37,16.04,15.98,15.74z</Geometry>
|
||||
<Geometry x:Key="ExportIcon">M19.41,7.41l-4.83-4.83C14.21,2.21,13.7,2,13.17,2H6C4.9,2,4.01,2.9,4.01,4L4,20c0,1.1,0.89,2,1.99,2H18c1.1,0,2-0.9,2-2
|
||||
V8.83C20,8.3,19.79,7.79,19.41,7.41z
|
||||
M14.8,15H13v3c0,0.55-0.45,1-1,1s-1-0.45-1-1v-3H9.21c-0.45,0-0.67-0.54-0.35-0.85l2.8-2.79
|
||||
c0.2-0.19,0.51-0.19,0.71,0l2.79,2.79C15.46,14.46,15.24,15,14.8,15z
|
||||
M14,9c-0.55,0-1-0.45-1-1V3.5L18.5,9H14z</Geometry>
|
||||
<Geometry x:Key="SaveIcon">M16.17,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V7.83c0-0.53-0.21-1.04-0.59-1.41l-2.83-2.83
|
||||
C17.21,3.21,16.7,3,16.17,3z M12,18c-1.66,0-3-1.34-3-3s1.34-3,3-3s3,1.34,3,3S13.66,18,12,18z
|
||||
M14,10H7c-0.55,0-1-0.45-1-1V7
|
||||
c0-0.55,0.45-1,1-1h7c0.55,0,1,0.45,1,1v2C15,9.55,14.55,10,14,10z</Geometry>
|
||||
<Geometry x:Key="TextureIcon">M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z
|
||||
M6.6,16.2l2-2.67
|
||||
c0.2-0.27,0.6-0.27,0.8,0L11.25,16l2.6-3.47c0.2-0.27,0.6-0.27,0.8,0l2.75,3.67c0.25,0.33,0.01,0.8-0.4,0.8H7
|
||||
C6.59,17,6.35,16.53,6.6,16.2z</Geometry>
|
||||
<Geometry x:Key="ModelIcon">M12 6q-.825 0-1.412-.588Q10 4.825 10 4t.588-1.413Q11.175 2 12
|
||||
2t1.413.587Q14 3.175 14 4q0 .825-.587 1.412Q12.825 6 12 6ZM9 22V9H3V7h18v2h-6v13h-2v-6h-2v6Z</Geometry>
|
||||
<Geometry x:Key="AnimationIcon">M9 22q-1.45 0-2.725-.55Q5 20.9 4.05 19.95q-.95-.95-1.5-2.225Q2
|
||||
16.45 2 15q0-2.025 1.05-3.7Q4.1 9.625 5.8 8.75q.5-.975 1.238-1.713Q7.775 6.3 8.75
|
||||
5.8q.825-1.7 2.525-2.75T15 2q1.45 0 2.725.55Q19 3.1 19.95 4.05q.95.95 1.5 2.225Q22 7.55 22
|
||||
9q0 2.125-1.05 3.75t-2.75 2.5q-.5.975-1.238 1.712-.737.738-1.712 1.238-.875 1.7-2.55
|
||||
2.75Q11.025 22 9 22Zm0-2q.825 0 1.588-.25Q11.35 19.5 12 19q-1.45 0-2.725-.55Q8 17.9 7.05
|
||||
16.95q-.95-.95-1.5-2.225Q5 13.45 5 12q-.5.65-.75 1.412Q4 14.175 4 15q0 1.05.4 1.95.4.9 1.075
|
||||
1.575.675.675 1.575 1.075.9.4 1.95.4Zm3-3q.825 0 1.613-.25.787-.25 1.437-.75-1.475
|
||||
0-2.75-.562-1.275-.563-2.225-1.513-.95-.95-1.513-2.225Q8 10.425 8 8.95q-.5.65-.75 1.437Q7
|
||||
11.175 7 12q0 1.05.388 1.95.387.9 1.087 1.575.675.7 1.575 1.088.9.387 1.95.387Zm3-3q.45 0
|
||||
.863-.075.412-.075.837-.225.55-1.5.163-2.888-.388-1.387-1.338-2.337-.95-.95-2.337-1.338Q11.8
|
||||
6.75 10.3 7.3q-.15.425-.225.837Q10 8.55 10 9q0 1.05.387 1.95.388.9 1.088 1.575.675.7 1.575
|
||||
1.088.9.387 1.95.387Zm4-1.95q.5-.65.75-1.438Q20 9.825 20
|
||||
9q0-1.05-.387-1.95-.388-.9-1.088-1.575-.675-.7-1.575-1.088Q16.05 4 15 4q-.875
|
||||
0-1.637.25-.763.25-1.413.75 1.475 0 2.75.562 1.275.563 2.225 1.513.95.95 1.513 2.225.562
|
||||
1.275.562 2.75Z</Geometry>
|
||||
<Geometry x:Key="CopyIcon">M3,7L3,7C2.45,7,2,7.45,2,8v13c0,1.1,0.9,2,2,2h11c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H4V8C4,7.45,3.55,7,3,7z
|
||||
M15.59,1.59C15.21,1.21,14.7,1,14.17,1H8C6.9,1,6.01,1.9,6.01,3L6,17c0,1.1,0.89,2,1.99,2H19c1.1,0,2-0.9,2-2V7.83
|
||||
c0-0.53-0.21-1.04-0.59-1.41L15.59,1.59z M14,7V2.5L19.5,8H15C14.45,8,14,7.55,14,7z</Geometry>
|
||||
<Geometry x:Key="DirectoriesIcon">M14.4,6l-0.24-1.2C14.07,4.34,13.66,4,13.18,4H6C5.45,4,5,4.45,5,5v15c0,0.55,0.45,1,1,1l0,0c0.55,0,1-0.45,1-1v-6h5.6
|
||||
l0.24,1.2c0.09,0.47,0.5,0.8,0.98,0.8H19c0.55,0,1-0.45,1-1V7c0-0.55-0.45-1-1-1H14.4z</Geometry>
|
||||
<Geometry x:Key="DirectoriesAddIcon">M20 1v3h3v2h-3v3h-2V6h-3V4h3V1h2zm-8 12c1.1 0 2-.9
|
||||
2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm2-9.75V7h3v3h2.92c.05.39.08.79.08 1.2 0 3.32-2.67 7.25-8
|
||||
11.8-5.33-4.55-8-8.48-8-11.8C4 6.22 7.8 3 12 3c.68 0 1.35.08 2 .25z</Geometry>
|
||||
<Geometry x:Key="ExtractIcon">
|
||||
M20.29,10.29l-3.59-3.59C16.08,6.08,15,6.52,15,7.41V10H8c-2.76,0-5,2.24-5,5v3c0,0.55,0.45,1,1,1h0c0.55,0,1-0.45,1-1v-3
|
||||
c0-1.65,1.35-3,3-3h7v2.59c0,0.89,1.08,1.34,1.71,0.71l3.59-3.59C20.68,11.32,20.68,10.68,20.29,10.29z</Geometry>
|
||||
<Geometry x:Key="GoToIcon">M9.5,5.5c1.1,0,2-0.9,2-2s-0.9-2-2-2s-2,0.9-2,2S8.4,5.5,9.5,5.5z
|
||||
M5.75,8.9L3.23,21.81C3.11,22.43,3.58,23,4.21,23H4.3
|
||||
c0.47,0,0.88-0.33,0.98-0.79L6.85,15L9,17v5c0,0.55,0.45,1,1,1h0c0.55,0,1-0.45,1-1v-6.14c0-0.27-0.11-0.52-0.29-0.71L8.95,13.4
|
||||
l0.6-3c1.07,1.32,2.58,2.23,4.31,2.51c0.6,0.1,1.14-0.39,1.14-1v0c0-0.49-0.36-0.9-0.84-0.98c-1.49-0.25-2.75-1.15-3.51-2.38
|
||||
L9.7,6.95C9.35,6.35,8.7,6,8,6C7.75,6,7.5,6.05,7.25,6.15l-4.63,1.9C2.25,8.2,2,8.57,2,8.97V12c0,0.55,0.45,1,1,1h0
|
||||
c0.55,0,1-0.45,1-1V9.65L5.75,8.9
|
||||
M21,2h-7c-0.55,0-1,0.45-1,1v5c0,0.55,0.45,1,1,1h2.75v13.25c0,0.41,0.34,0.75,0.75,0.75
|
||||
s0.75-0.34,0.75-0.75V9H21c0.55,0,1-0.45,1-1V3C22,2.45,21.55,2,21,2z
|
||||
M20.15,5.85l-1.28,1.29c-0.31,0.32-0.85,0.09-0.85-0.35V6.25
|
||||
h-2.76c-0.41,0-0.75-0.34-0.75-0.75s0.34-0.75,0.75-0.75h2.76V4.21c0-0.45,0.54-0.67,0.85-0.35l1.28,1.29
|
||||
C20.34,5.34,20.34,5.66,20.15,5.85z</Geometry>
|
||||
<Geometry x:Key="DiscordIcon">M22,24L16.75,19L17.38,21H4.5A2.5,2.5 0 0,1 2,18.5V3.5A2.5,2.5 0
|
||||
0,1 4.5,1H19.5A2.5,2.5 0 0,1 22,3.5V24M12,6.8C9.32,6.8 7.44,7.95 7.44,7.95C8.47,7.03
|
||||
10.27,6.5 10.27,6.5L10.1,6.33C8.41,6.36 6.88,7.53 6.88,7.53C5.16,11.12 5.27,14.22
|
||||
5.27,14.22C6.67,16.03 8.75,15.9 8.75,15.9L9.46,15C8.21,14.73 7.42,13.62
|
||||
7.42,13.62C7.42,13.62 9.3,14.9 12,14.9C14.7,14.9 16.58,13.62 16.58,13.62C16.58,13.62
|
||||
15.79,14.73 14.54,15L15.25,15.9C15.25,15.9 17.33,16.03 18.73,14.22C18.73,14.22 18.84,11.12
|
||||
17.12,7.53C17.12,7.53 15.59,6.36 13.9,6.33L13.73,6.5C13.73,6.5 15.53,7.03
|
||||
16.56,7.95C16.56,7.95 14.68,6.8 12,6.8M9.93,10.59C10.58,10.59 11.11,11.16
|
||||
11.1,11.86C11.1,12.55 10.58,13.13 9.93,13.13C9.29,13.13 8.77,12.55 8.77,11.86C8.77,11.16
|
||||
9.28,10.59 9.93,10.59M14.1,10.59C14.75,10.59 15.27,11.16 15.27,11.86C15.27,12.55 14.75,13.13
|
||||
14.1,13.13C13.46,13.13 12.94,12.55 12.94,11.86C12.94,11.16 13.45,10.59 14.1,10.59Z</Geometry>
|
||||
<Geometry x:Key="BugIcon">M14,12H10V10H14M14,16H10V14H14M20,8H17.19C16.74,7.22 16.12,6.55
|
||||
15.37,6.04L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.04,5.06
|
||||
10.59,5.17L8.41,3L7,4.41L8.62,6.04C7.88,6.55 7.26,7.22 6.81,8H4V10H6.09C6.04,10.33 6,10.66
|
||||
6,11V12H4V14H6V15C6,15.34 6.04,15.67 6.09,16H4V18H6.81C7.85,19.79 9.78,21 12,21C14.22,21
|
||||
16.15,19.79 17.19,18H20V16H17.91C17.96,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66
|
||||
17.96,10.33 17.91,10H20V8Z</Geometry>
|
||||
<Geometry x:Key="GiftIcon">M22 10.92L19.26 9.33C21.9 7.08 19.25 2.88 16.08 4.31L15.21 4.68L15.1
|
||||
3.72C15 2.64 14.44 1.87 13.7 1.42C12.06 .467 9.56 1.12 9.16 3.5L6.41 1.92C5.45 1.36 4.23
|
||||
1.69 3.68 2.65L2.68 4.38C2.4 4.86 2.57 5.47 3.05 5.75L10.84 10.25L12.34 7.65L14.07
|
||||
8.65L12.57 11.25L20.36 15.75C20.84 16 21.46 15.86 21.73 15.38L22.73 13.65C23.28 12.69 22.96
|
||||
11.47 22 10.92M12.37 5C11.5 5.25 10.8 4.32 11.24 3.55C11.5 3.07 12.13 2.91 12.61 3.18C13.38
|
||||
3.63 13.23 4.79 12.37 5M17.56 8C16.7 8.25 16 7.32 16.44 6.55C16.71 6.07 17.33 5.91 17.8
|
||||
6.18C18.57 6.63 18.42 7.79 17.56 8M20.87 16.88C21.28 16.88 21.67 16.74 22 16.5V20C22 21.11
|
||||
21.11 22 20 22H4C2.9 22 2 21.11 2 20V11H10.15L11 11.5V20H13V12.65L19.87 16.61C20.17 16.79
|
||||
20.5 16.88 20.87 16.88Z</Geometry>
|
||||
<Geometry x:Key="NoteIcon">M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67
|
||||
1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4
|
||||
4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM8 19h12c.55
|
||||
0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0-6h12c.55 0 1-.45
|
||||
1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM7 6c0 .55.45 1 1 1h12c.55 0 1-.45
|
||||
1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1z</Geometry>
|
||||
<Geometry x:Key="InfoIcon">M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0
|
||||
15c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1-8h-2V7h2v2z</Geometry>
|
||||
<Geometry x:Key="TrashIcon">M6,19c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V7H6V19z
|
||||
M9.17,12.59c-0.39-0.39-0.39-1.02,0-1.41c0.39-0.39,1.02-0.39,1.41,0
|
||||
L12,12.59l1.41-1.41c0.39-0.39,1.02-0.39,1.41,0s0.39,1.02,0,1.41L13.41,14l1.41,1.41c0.39,0.39,0.39,1.02,0,1.41
|
||||
s-1.02,0.39-1.41,0L12,15.41l-1.41,1.41c-0.39,0.39-1.02,0.39-1.41,0c-0.39-0.39-0.39-1.02,0-1.41L10.59,14L9.17,12.59z
|
||||
M18,4h-2.5
|
||||
l-0.71-0.71C14.61,3.11,14.35,3,14.09,3H9.91c-0.26,0-0.52,0.11-0.7,0.29L8.5,4H6C5.45,4,5,4.45,5,5s0.45,1,1,1h12
|
||||
c0.55,0,1-0.45,1-1S18.55,4,18,4z</Geometry>
|
||||
<Geometry x:Key="HomeIcon">M18,4v16H6V4H18
|
||||
M18,2H6C4.9,2,4,2.9,4,4v16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2L18,2z
|
||||
M7,19h10v-6H7 V19z M10,10h4v1h3V5H7v6h3V10z</Geometry>
|
||||
<Geometry x:Key="RegexIcon">M16,16.92C15.67,16.97 15.34,17 15,17C14.66,17 14.33,16.97
|
||||
14,16.92V13.41L11.5,15.89C11,15.5 10.5,15 10.11,14.5L12.59,12H9.08C9.03,11.67 9,11.34
|
||||
9,11C9,10.66 9.03,10.33 9.08,10H12.59L10.11,7.5C10.3,7.25 10.5,7 10.76,6.76V6.76C11,6.5
|
||||
11.25,6.3 11.5,6.11L14,8.59V5.08C14.33,5.03 14.66,5 15,5C15.34,5 15.67,5.03
|
||||
16,5.08V8.59L18.5,6.11C19,6.5 19.5,7 19.89,7.5L17.41,10H20.92C20.97,10.33 21,10.66
|
||||
21,11C21,11.34 20.97,11.67 20.92,12H17.41L19.89,14.5C19.7,14.75 19.5,15
|
||||
19.24,15.24V15.24C19,15.5 18.75,15.7 18.5,15.89L16,13.41V16.92H16V16.92M5,19A2,2 0 0,1
|
||||
7,17A2,2 0 0,1 9,19A2,2 0 0,1 7,21A2,2 0 0,1 5,19H5Z</Geometry>
|
||||
<Geometry x:Key="BackspaceIcon">
|
||||
M22,3H7C6.31,3 5.77,3.35 5.41,3.88L0,12L5.41,20.11C5.77,20.64
|
||||
6.31,21 7,21H22A2,2 0 0,0 24,19V5A2,2 0 0,0
|
||||
22,3M19,15.59L17.59,17L14,13.41L10.41,17L9,15.59L12.59,12L9,8.41L10.41,7L14,10.59L17.59,7L19,8.41L15.41,12</Geometry>
|
||||
<Geometry x:Key="AudioIcon">M3 10v4c0 .55.45 1 1 1h3l3.29 3.29c.63.63 1.71.18
|
||||
1.71-.71V6.41c0-.89-1.08-1.34-1.71-.71L7 9H4c-.55 0-1 .45-1 1zm13.5
|
||||
2c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 4.45v.2c0
|
||||
.38.25.71.6.85C17.18 6.53 19 9.06 19 12s-1.82 5.47-4.4 6.5c-.36.14-.6.47-.6.85v.2c0 .63.63
|
||||
1.07 1.21.85C18.6 19.11 21 15.84 21 12s-2.4-7.11-5.79-8.4c-.58-.23-1.21.22-1.21.85z</Geometry>
|
||||
<Geometry x:Key="MapIcon">M14.65 4.98l-5-1.75c-.42-.15-.88-.15-1.3-.01L4.36 4.56C3.55 4.84 3 5.6
|
||||
3 6.46v11.85c0 1.41 1.41 2.37 2.72 1.86l2.93-1.14c.22-.09.47-.09.69-.01l5 1.75c.42.15.88.15
|
||||
1.3.01l3.99-1.34c.81-.27 1.36-1.04 1.36-1.9V5.69c0-1.41-1.41-2.37-2.72-1.86l-2.93
|
||||
1.14c-.22.08-.46.09-.69.01zM15 18.89l-6-2.11V5.11l6 2.11v11.67z</Geometry>
|
||||
<Geometry x:Key="ChallengesIcon">M12.09 2.91C10.08.9 7.07.49 4.65 1.67L8.28 5.3c.39.39.39 1.02 0
|
||||
1.41L6.69 8.3c-.39.4-1.02.4-1.41 0L1.65 4.67C.48 7.1.89 10.09 2.9 12.1c1.86 1.86 4.58 2.35
|
||||
6.89 1.48l7.96 7.96c1.03 1.03 2.69 1.03 3.71 0 1.03-1.03 1.03-2.69 0-3.71L13.54
|
||||
9.9c.92-2.34.44-5.1-1.45-6.99z</Geometry>
|
||||
<Geometry x:Key="MatchCaseIcon">M2.5 5.5C2.5 6.33 3.17 7 4 7h3.5v10.5c0 .83.67 1.5 1.5
|
||||
1.5s1.5-.67 1.5-1.5V7H14c.83 0 1.5-.67 1.5-1.5S14.83 4 14 4H4c-.83 0-1.5.67-1.5 1.5zM20
|
||||
9h-6c-.83 0-1.5.67-1.5 1.5S13.17 12 14 12h1.5v5.5c0 .83.67 1.5 1.5 1.5s1.5-.67
|
||||
1.5-1.5V12H20c.83 0 1.5-.67 1.5-1.5S20.83 9 20 9z</Geometry>
|
||||
<Geometry x:Key="CreatorIcon">M21 13h-6c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1
|
||||
1zm0-6h-6c-.55 0-1 .45-1 1s.45 1 1 1h6c.55 0 1-.45 1-1s-.45-1-1-1zm-6 10h6c.55 0 1-.45
|
||||
1-1s-.45-1-1-1h-6c-.55 0-1 .45-1 1s.45 1 1 1zm-3-8v6c0 1.1-.9 2-2 2H4c-1.1
|
||||
0-2-.9-2-2V9c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2zm-2.1 5.2l-1.26-1.68c-.2-.26-.59-.27-.8-.01L6.5
|
||||
14.26l-.85-1.03c-.2-.25-.58-.24-.78.01l-.74.95c-.26.33-.02.81.39.81H9.5c.41 0 .65-.47.4-.8z</Geometry>
|
||||
<Geometry x:Key="KeyboardIcon">M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9
|
||||
2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1
|
||||
2H5v-2h2v2zm0-3H5V8h2v2zm8 7H9c-.55 0-1-.45-1-1s.45-1 1-1h6c.55 0 1 .45 1 1s-.45 1-1
|
||||
1zm1-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z</Geometry>
|
||||
<Geometry x:Key="SearchUpIcon">
|
||||
M2.7,17.29c0.39,0.39,1.02,0.39,1.41,0l4.59-4.59c0.39-0.39,1.02-0.39,1.41,0l1.17,1.17c1.17,1.17,3.07,1.17,4.24,0
|
||||
l4.18-4.17l1.44,1.44c0.31,0.31,0.85,0.09,0.85-0.35V6.5C22,6.22,21.78,6,21.5,6h-4.29c-0.45,0-0.67,0.54-0.35,0.85l1.44,1.44
|
||||
l-4.17,4.17c-0.39,0.39-1.02,0.39-1.41,0l-1.17-1.17c-1.17-1.17-3.07-1.17-4.24,0L2.7,15.88C2.32,16.27,2.32,16.91,2.7,17.29z</Geometry>
|
||||
<Geometry x:Key="WholeWordIcon">M18 10v3H6v-3c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1h14c.55
|
||||
0 1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1z</Geometry>
|
||||
<Geometry x:Key="CloseIcon">M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12
|
||||
2zm4.3 14.3c-.39.39-1.02.39-1.41 0L12 13.41 9.11 16.3c-.39.39-1.02.39-1.41
|
||||
0-.39-.39-.39-1.02 0-1.41L10.59 12 7.7 9.11c-.39-.39-.39-1.02 0-1.41.39-.39 1.02-.39 1.41
|
||||
0L12 10.59l2.89-2.89c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41L13.41 12l2.89
|
||||
2.89c.38.38.38 1.02 0 1.41z</Geometry>
|
||||
<Geometry x:Key="PlayIcon">M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18c.62-.39.62-1.29
|
||||
0-1.69L9.54 5.98C8.87 5.55 8 6.03 8 6.82z</Geometry>
|
||||
<Geometry x:Key="PauseIcon">M8 19c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2v10c0 1.1.9 2 2
|
||||
2zm6-12v10c0 1.1.9 2 2 2s2-.9 2-2V7c0-1.1-.9-2-2-2s-2 .9-2 2z</Geometry>
|
||||
<Geometry x:Key="StopIcon">M8 6h8c1.1 0 2 .9 2 2v8c0 1.1-.9 2-2 2H8c-1.1 0-2-.9-2-2V8c0-1.1.9-2
|
||||
2-2z</Geometry>
|
||||
<Geometry x:Key="SkipNextIcon">M7.58 16.89l5.77-4.07c.56-.4.56-1.24 0-1.63L7.58 7.11C6.91 6.65 6
|
||||
7.12 6 7.93v8.14c0 .81.91 1.28 1.58.82zM16 7v10c0 .55.45 1 1 1s1-.45
|
||||
1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z</Geometry>
|
||||
<Geometry x:Key="SkipPreviousIcon">M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1
|
||||
1s-1-.45-1-1V7c0-.55.45-1 1-1zm3.66 6.82l5.77 4.07c.66.47 1.58-.01
|
||||
1.58-.82V7.93c0-.81-.91-1.28-1.58-.82l-5.77 4.07c-.57.4-.57 1.24 0 1.64z</Geometry>
|
||||
<Geometry x:Key="AddAudioIcon">M13 10H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45
|
||||
1-1s-.45-1-1-1zm0-4H3c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm5
|
||||
8v-3c0-.55-.45-1-1-1s-1 .45-1 1v3h-3c-.55 0-1 .45-1 1s.45 1 1 1h3v3c0 .55.45 1 1 1s1-.45
|
||||
1-1v-3h3c.55 0 1-.45 1-1s-.45-1-1-1h-3zM3 16h6c.55 0 1-.45 1-1s-.45-1-1-1H3c-.55 0-1 .45-1
|
||||
1s.45 1 1 1z</Geometry>
|
||||
<Geometry x:Key="SavePlaylistIcon">M14 6H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45
|
||||
1-1s-.45-1-1-1zm0 4H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zM4 16h6c.55 0
|
||||
1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM19 6c-1.1 0-2 .9-2
|
||||
2v6.18c-.31-.11-.65-.18-1-.18-1.84 0-3.28 1.64-2.95 3.54.21 1.21 1.2 2.2 2.41 2.41 1.9.33
|
||||
3.54-1.11 3.54-2.95V8h2c.55 0 1-.45 1-1s-.45-1-1-1h-2z</Geometry>
|
||||
<Geometry x:Key="ImageMergerIcon">M10 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM6 8c-1.1
|
||||
0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9
|
||||
2-2-.9-2-2-2zm12-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-4 8c-1.1 0-2 .9-2 2s.9 2 2 2
|
||||
2-.9 2-2-.9-2-2-2zm4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2
|
||||
2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z</Geometry>
|
||||
<Geometry x:Key="GliderIcon">M12,17c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S13.1,17,12,17z
|
||||
M17.95,14c-0.52,0-0.94,0.4-0.99,0.92
|
||||
c-0.2,2.03-1.05,2.68-1.48,3.02C14.68,18.54,14,19,12,19s-2.68-0.46-3.48-1.06c-0.43-0.34-1.28-0.99-1.48-3.02
|
||||
C6.99,14.4,6.57,14,6.05,14c-0.59,0-1.06,0.51-1,1.09c0.22,2.08,1.07,3.47,2.24,4.41c0.5,0.4,1.1,0.7,1.7,0.9L9,24h6v-3.6
|
||||
c0.6-0.2,1.2-0.5,1.7-0.9c1.17-0.94,2.03-2.32,2.24-4.41C19.01,14.51,18.53,14,17.95,14z
|
||||
M12,0C5.92,0,1,1.9,1,4.25v3.49
|
||||
C1,8.55,1.88,9,2.56,8.57C2.7,8.48,2.84,8.39,3,8.31L5,13h2l1.5-6.28C9.6,6.58,10.78,6.5,12,6.5s2.4,0.08,3.5,0.22L17,13h2l2-4.69
|
||||
c0.16,0.09,0.3,0.17,0.44,0.26C22.12,9,23,8.55,23,7.74V4.25C23,1.9,18.08,0,12,0z
|
||||
M5.88,11.24L4.37,7.69 c0.75-0.28,1.6-0.52,2.53-0.71L5.88,11.24z
|
||||
M18.12,11.24L17.1,6.98c0.93,0.19,1.78,0.43,2.53,0.71L18.12,11.24z</Geometry>
|
||||
<Geometry x:Key="AnchorIcon">M13,9V7.82C14.16,7.4,15,6.3,15,5c0-1.65-1.35-3-3-3S9,3.35,9,5c0,1.3,0.84,2.4,2,2.82V9H9c-0.55,0-1,0.45-1,1v0
|
||||
c0,0.55,0.45,1,1,1h2v8.92c-2.22-0.33-4.59-1.68-5.55-3.37l1.14-1.14c0.22-0.22,0.19-0.57-0.05-0.75L3.8,12.6
|
||||
C3.47,12.35,3,12.59,3,13v2c0,3.88,4.92,7,9,7s9-3.12,9-7v-2c0-0.41-0.47-0.65-0.8-0.4l-2.74,2.05c-0.24,0.18-0.27,0.54-0.05,0.75
|
||||
l1.14,1.14c-0.96,1.69-3.33,3.04-5.55,3.37V11h2c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H13z
|
||||
M12,4c0.55,0,1,0.45,1,1s-0.45,1-1,1 s-1-0.45-1-1S11.45,4,12,4z</Geometry>
|
||||
<Geometry x:Key="FoldIcon">M8.12 19.3c.39.39 1.02.39 1.41 0L12 16.83l2.47 2.47c.39.39 1.02.39
|
||||
1.41 0 .39-.39.39-1.02 0-1.41l-3.17-3.17c-.39-.39-1.02-.39-1.41 0l-3.17 3.17c-.4.38-.4
|
||||
1.02-.01 1.41zm7.76-14.6c-.39-.39-1.02-.39-1.41 0L12 7.17 9.53 4.7c-.39-.39-1.02-.39-1.41
|
||||
0-.39.39-.39 1.03 0 1.42l3.17 3.17c.39.39 1.02.39 1.41 0l3.17-3.17c.4-.39.4-1.03.01-1.42z</Geometry>
|
||||
<Geometry x:Key="UnfoldIcon">M12 5.83l2.46 2.46c.39.39 1.02.39 1.41 0 .39-.39.39-1.02
|
||||
0-1.41L12.7 3.7c-.39-.39-1.02-.39-1.41 0L8.12 6.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39
|
||||
1.41 0L12 5.83zm0 12.34l-2.46-2.46c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41l3.17
|
||||
3.18c.39.39 1.02.39 1.41 0l3.17-3.17c.39-.39.39-1.02 0-1.41-.39-.39-1.02-.39-1.41 0L12
|
||||
18.17z</Geometry>
|
||||
<Geometry x:Key="LocateMeIcon">M11.71,17.99C8.53,17.84,6,15.22,6,12c0-3.31,2.69-6,6-6c3.22,0,5.84,2.53,5.99,5.71l-2.1-0.63C15.48,9.31,13.89,8,12,8
|
||||
c-2.21,0-4,1.79-4,4c0,1.89,1.31,3.48,3.08,3.89L11.71,17.99z
|
||||
M22,12c0,0.3-0.01,0.6-0.04,0.9l-1.97-0.59C20,12.21,20,12.1,20,12
|
||||
c0-4.42-3.58-8-8-8s-8,3.58-8,8s3.58,8,8,8c0.1,0,0.21,0,0.31-0.01l0.59,1.97C12.6,21.99,12.3,22,12,22C6.48,22,2,17.52,2,12
|
||||
C2,6.48,6.48,2,12,2S22,6.48,22,12z
|
||||
M18.23,16.26l2.27-0.76c0.46-0.15,0.45-0.81-0.01-0.95l-7.6-2.28
|
||||
c-0.38-0.11-0.74,0.24-0.62,0.62l2.28,7.6c0.14,0.47,0.8,0.48,0.95,0.01l0.76-2.27l3.91,3.91c0.2,0.2,0.51,0.2,0.71,0l1.27-1.27
|
||||
c0.2-0.2,0.2-0.51,0-0.71L18.23,16.26z</Geometry>
|
||||
<Geometry x:Key="MeshIcon">M1.8 6q-.525 0-.887-.35Q.55 5.3.55 4.8V4q0-1.425 1.012-2.438Q2.575.55
|
||||
4 .55h.8q.5 0 .85.362.35.363.35.888 0 .5-.35.85T4.8 3H4q-.425 0-.712.287Q3 3.575 3 4v.8q0
|
||||
.5-.35.85T1.8 6ZM4 23.45q-1.425 0-2.438-1.012Q.55 21.425.55
|
||||
20v-.8q0-.5.363-.85.362-.35.887-.35.5 0 .85.35t.35.85v.8q0 .425.288.712Q3.575 21 4 21h.8q.5
|
||||
0 .85.35t.35.85q0 .525-.35.887-.35.363-.85.363Zm15.2 0q-.5 0-.85-.363-.35-.362-.35-.887
|
||||
0-.5.35-.85t.85-.35h.8q.425 0 .712-.288Q21 20.425 21 20v-.8q0-.5.35-.85t.85-.35q.525 0
|
||||
.888.35.362.35.362.85v.8q0 1.425-1.012 2.438Q21.425 23.45 20 23.45ZM22.2 6q-.5 0-.85-.35T21
|
||||
4.8V4q0-.425-.288-.713Q20.425 3 20 3h-.8q-.5 0-.85-.35T18
|
||||
1.8q0-.525.35-.888.35-.362.85-.362h.8q1.425 0 2.438 1.012Q23.45 2.575 23.45 4v.8q0
|
||||
.5-.362.85-.363.35-.888.35ZM12 17.35l1-.575v-4.1l3.55-2.075V9.425l-1-.575L12 10.925 8.45
|
||||
8.85l-1 .575V10.6L11 12.675v4.1Zm-1.325
|
||||
2.325-4.55-2.65q-.625-.35-.975-.963-.35-.612-.35-1.337V9.45q0-.725.35-1.337.35-.613.975-.963l4.55-2.65Q11.3
|
||||
4.15 12 4.15t1.325.35l4.55 2.65q.625.35.975.963.35.612.35 1.337v5.275q0 .725-.35
|
||||
1.337-.35.613-.975.963l-4.55 2.65q-.625.35-1.325.35t-1.325-.35Z</Geometry>
|
||||
<Geometry x:Key="ArchiveIcon">M3.5 1.75v11.5c0 .09.048.173.126.217a.75.75 0 0 1-.752 1.298A1.748
|
||||
1.748 0 0 1 2 13.25V1.75C2 .784 2.784 0 3.75 0h5.586c.464 0 .909.185 1.237.513l2.914
|
||||
2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 12.25 15h-.5a.75.75 0 0 1
|
||||
0-1.5h.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177L9.513 1.573a.25.25 0 0
|
||||
0-.177-.073H7.25a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5h-3a.25.25 0 0 0-.25.25Zm3.75
|
||||
8.75h.5c.966 0 1.75.784 1.75 1.75v3a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0
|
||||
1-.75-.75v-3c0-.966.784-1.75 1.75-1.75ZM6 5.25a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0
|
||||
1.5h-.5A.75.75 0 0 1 6 5.25Zm.75 2.25h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8
|
||||
6.75A.75.75 0 0 1 8.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 8 6.75ZM8.75 3h.5a.75.75 0 0
|
||||
1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM8 9.75A.75.75 0 0 1 8.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75
|
||||
0 0 1 8 9.75Zm-1 2.5v2.25h1v-2.25a.25.25 0 0 0-.25-.25h-.5a.25.25 0 0 0-.25.25Z</Geometry>
|
||||
<Geometry x:Key="GitHubIcon">M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207
|
||||
11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729
|
||||
1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304
|
||||
3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381
|
||||
1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399
|
||||
3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242
|
||||
2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823
|
||||
1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386
|
||||
0-6.627-5.373-12-12-12z</Geometry>
|
||||
<Geometry x:Key="SortIcon">M8 16H4l6 6V2H8zm6-11v17h2V8h4l-6-6z</Geometry>
|
||||
<Geometry x:Key="FolderIconAlt">M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z</Geometry>
|
||||
<Geometry x:Key="AssetIcon">M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6Z</Geometry>
|
||||
<Geometry x:Key="DataTableIcon">M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M10,19H7V17H10V19M10,16H7V14H10V16M10,13H7V11H10V13M14,19H11V17H14V19M14,16H11V14H14V16M14,13H11V11H14V13M13,9V3.5L18.5,9H13Z</Geometry>
|
||||
<Geometry x:Key="MapIconAlt">M15,19L9,16.89V5L15,7.11M20.5,3C20.44,3 20.39,3 20.34,3L15,5.1L9,3L3.36,4.9C3.15,4.97 3,5.15 3,5.38V20.5A0.5,0.5 0 0,0 3.5,21C3.55,21 3.61,21 3.66,20.97L9,18.9L15,21L20.64,19.1C20.85,19 21,18.85 21,18.62V3.5A0.5,0.5 0 0,0 20.5,3Z</Geometry>
|
||||
<Geometry x:Key="PluginIcon">M20.5,11H19V7C19,5.89 18.1,5 17,5H13V3.5A2.5,2.5 0 0,0 10.5,1A2.5,2.5 0 0,0 8,3.5V5H4A2,2 0 0,0 2,7V10.8H3.5C5,10.8 6.2,12 6.2,13.5C6.2,15 5,16.2 3.5,16.2H2V20A2,2 0 0,0 4,22H7.8V20.5C7.8,19 9,17.8 10.5,17.8C12,17.8 13.2,19 13.2,20.5V22H17A2,2 0 0,0 19,20V16H20.5A2.5,2.5 0 0,0 23,13.5A2.5,2.5 0 0,0 20.5,11Z</Geometry>
|
||||
<Geometry x:Key="ConfigIcon">M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z</Geometry>
|
||||
<Geometry x:Key="AudioIconAlt">M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M13,13H11V18A2,2 0 0,1 9,20A2,2 0 0,1 7,18A2,2 0 0,1 9,16C9.4,16 9.7,16.1 10,16.3V11H13V13M13,9V3.5L18.5,9H13Z</Geometry>
|
||||
<Geometry x:Key="StaticMeshIconAlt">M5.206,19.956l0.199,42.771c0.003,0.55,0.306,1.054,0.789,1.314l34.161,17.887c0.223,0.119,0.467,0.179,0.711,0.179 c0.001,0,0.002,0,0.003,0c0.103,0.117,0.218,0.227,0.355,0.309c0.236,0.141,0.502,0.212,0.769,0.212 c0.246,0,0.49-0.061,0.712-0.181l33.729-18.292c0.484-0.263,0.787-0.77,0.787-1.319v-44.5c0-0.013-0.005-0.025-0.005-0.039 c-0.001-0.011,0.003-0.021,0.003-0.033c-0.002-0.043-0.019-0.082-0.022-0.124c-0.013-0.082-0.022-0.164-0.047-0.243 c-0.018-0.055-0.041-0.104-0.064-0.157c-0.031-0.07-0.062-0.139-0.104-0.203c-0.031-0.05-0.068-0.095-0.105-0.141 c-0.047-0.058-0.096-0.112-0.152-0.163c-0.044-0.04-0.091-0.076-0.141-0.111c-0.032-0.022-0.059-0.053-0.094-0.073 c-0.032-0.02-0.069-0.028-0.104-0.045c-0.029-0.015-0.052-0.036-0.081-0.049L41.747,0.118c-0.405-0.171-0.864-0.155-1.258,0.042 L6.131,18.071c-0.504,0.254-0.822,0.77-0.825,1.333c0,0.009,0.004,0.017,0.004,0.025C5.249,19.596,5.205,19.772,5.206,19.956z M72.456,18.501l-30.28,16.93L10.111,19.425L41.218,3.151L72.456,18.501z M43.692,78.61V38.021l30.729-17.173v41.09L43.692,78.61z</Geometry>
|
||||
<Geometry x:Key="SkeletalMeshIconAlt">M 299.53 18.813 C 279.92 19.169 258.693 28.151 241.78 45.063 C 219.82 67.023 211.263 96.303 217.562 119.813 C 154.784 90.813 159.904 88.397 97.282 48.219 C 87.209 41.756 77.84 38.799 69.469 38.405 C 55.515 37.751 44.351 44.21 37.343 53.343 C 26.13 67.956 24.96 89.496 48.28 107.75 C 79.307 132.036 107.123 148.79 127.312 167.22 C 147.502 185.647 159.96 207.81 155.656 237.25 C 152.498 258.86 141.966 275.248 129.186 288.72 C 116.408 302.19 101.44 313.206 87.75 325.406 C 60.37 349.806 37.42 377.159 42.687 439.656 C 46.015 479.139 76.845 494.773 102.344 492.031 C 115.094 490.661 125.854 484.695 131.75 474.564 C 137.647 464.432 139.446 449.126 130.72 426.814 C 123.125 407.398 133.822 385.978 149.063 369.72 C 164.303 353.46 185.893 340.9 207.938 344.72 C 214.113 345.79 219.358 349.44 222.968 353.875 C 226.578 358.31 228.964 363.495 230.938 369.125 C 234.884 380.385 237.208 393.799 240.063 407.688 C 245.773 435.465 253.725 463.655 273.125 476.156 C 311.089 500.624 348.383 493.578 365.031 476.626 C 373.356 468.148 376.946 457.766 374.157 445.469 C 371.369 433.169 361.449 418.311 339.877 403.624 C 316.212 387.514 307.221 355.334 306.032 323.499 C 304.844 291.663 311.32 259.422 326.158 239.469 C 333.036 230.219 343.704 226.351 355.814 222.062 C 367.924 217.772 382.021 213.587 396.564 207.374 C 425.651 194.949 456.2 175.177 475.689 130.594 C 492.767 91.524 479.063 66.276 460.409 57.094 C 451.081 52.501 440.279 51.962 429.971 56.468 C 419.661 60.972 409.541 70.654 402.531 88.218 C 389.391 121.15 363.313 139.925 332.095 144.654 C 325.881 145.596 319.481 146.01 312.907 145.967 C 312.461 145.687 312.012 145.397 311.563 145.122 C 317.666 141.304 323.317 136.807 328.407 131.716 C 358.471 101.651 363.457 57.86 339.532 33.934 C 329.066 23.466 314.788 18.531 299.532 18.808 L 299.53 18.813 Z M 297.188 37.969 C 306.761 37.779 315.712 41.139 322.281 48.249 C 337.298 64.499 334.181 94.205 315.314 114.624 C 296.444 135.044 268.986 138.437 253.97 122.187 C 238.953 105.937 242.07 76.2 260.938 55.78 C 271.551 44.295 284.878 38.21 297.188 37.97 L 297.188 37.969 Z M 65.03 62.593 L 127.72 108.061 L 117.438 123.687 L 54.062 77.717 L 65.032 62.593 L 65.03 62.593 Z M 439.095 85.03 L 455.189 94.53 L 418.814 156.125 L 405.782 141.469 L 439.096 85.029 L 439.095 85.03 Z M 142.875 119.062 L 182.815 148.032 C 180.185 153.969 177.865 159.966 175.875 166.094 L 132.595 134.688 L 142.875 119.063 L 142.875 119.062 Z M 214.815 138.938 C 215.543 138.925 216.265 138.931 217.001 138.938 C 248.215 139.218 282.064 146.615 309.845 166.625 C 309.415 199.908 248.937 315.907 248.937 315.907 C 221.243 316.177 195.231 314.66 170.907 301.407 C 170.907 301.407 212.624 138.975 214.813 138.938 L 214.815 138.938 Z M 389.47 151.188 L 402.75 166.156 L 326.937 194.75 C 327.69 188.073 328.132 181.234 328.375 174.22 L 389.469 151.188 L 389.47 151.188 Z M 149.125 302.218 L 161.781 315.968 L 109.471 364.125 L 88.501 358.031 L 149.126 302.221 L 149.125 302.218 Z M 260.281 324.844 L 283.314 373.874 L 266.064 381.124 L 243.344 332.781 L 260.282 324.845 L 260.281 324.844 Z M 83.281 375.969 L 102.221 381.469 L 106.095 466.374 L 87.407 467.218 L 83.282 375.968 L 83.281 375.969 Z M 292.845 390.155 L 335.439 458.875 L 319.564 468.718 L 275.407 397.468 L 292.845 390.154 L 292.845 390.155 Z</Geometry>
|
||||
<Geometry x:Key="BlueprintIcon">M1.5,7.23 V22.5 H19.64 A2.87,2.87 0 0 0 19.64,16.77 H17.73 V7.23 Z M17.73,1.5 V16.77 H19.64 A2.88,2.88 0 0 1 21.64,17.61 A2.85,2.85 0 0 1 22.48,19.68 V4.36 A2.87,2.87 0 0 0 19.64,1.5 Z M13.91,18.68 L5.32,18.68 L5.32,10.09 M7.23,12 L5.32,12 M7.23,14.86 L5.32,14.86 M9.14,16.77 L9.14,18.68 M12,16.77 L12,18.68</Geometry>
|
||||
<Geometry x:Key="MaterialIcon">M165.446 34.793c-23.17.023-45.634 12.97-54.612 36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 181.723-29.213 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 1.238-10.799 1.87-16.189l22.134 3.278 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 7.67 1.12 15.341 2.244 23.012 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z</Geometry>
|
||||
<Geometry x:Key="SkeletonIcon">M 292.845 390.155 L 335.439 458.875 L 319.564 468.718 L 275.407 397.468 L 292.845 390.154 Z M 83.282 375.968 L 83.282 375.969 L 83.281 375.969 Z M 102.221 381.469 L 106.095 466.374 L 87.407 467.218 L 83.282 375.969 Z M 283.314 373.874 L 266.064 381.124 L 243.344 332.781 L 260.282 324.845 Z M 149.125 302.218 L 161.781 315.968 L 109.471 364.125 L 88.501 358.031 L 149.126 302.221 Z M 389.47 151.188 L 402.75 166.156 L 326.937 194.75 C 327.69 188.073 328.132 181.234 328.375 174.22 L 389.469 151.188 Z M 214.815 138.938 C 215.543 138.925 216.265 138.931 217.001 138.938 C 248.215 139.218 282.064 146.615 309.845 166.625 C 309.415 199.908 304.967 225.572 288.565 252.875 C 274.021 243.958 258.239 236.19 241.907 230.781 L 226.437 277.031 L 256.157 282.939 L 248.937 315.907 C 221.243 316.177 195.231 314.66 170.907 301.407 L 178.345 267.501 L 207.97 273.376 L 223.844 225.876 C 210.907 223.124 197.794 222.041 184.781 223.188 C 186.441 189.978 193.497 165.248 208.281 139.158 C 210.449 139.088 212.624 138.975 214.813 138.938 Z M 142.875 119.062 L 182.815 148.032 C 180.185 153.969 177.865 159.966 175.875 166.094 L 132.595 134.688 L 142.875 119.063 Z M 455.189 94.53 L 418.814 156.125 L 405.782 141.469 L 439.095 85.03 Z M 65.032 62.593 L 65.031 62.594 L 65.03 62.593 Z M 127.72 108.061 L 117.438 123.687 L 54.062 77.717 L 65.031 62.594 Z M 297.188 37.969 C 306.761 37.779 315.712 41.139 322.281 48.249 C 337.298 64.499 334.181 94.205 315.314 114.624 C 296.444 135.044 268.986 138.437 253.97 122.187 C 238.953 105.937 242.07 76.2 260.938 55.78 C 271.551 44.295 284.878 38.21 297.188 37.97 Z</Geometry>
|
||||
<Geometry x:Key="PhysicsIcon">M129.593,64.314c23.543-30.833,44.788-45.063,54.751-45.063c1.37,0,2.507,0.258,3.386,0.775c5.324,3.076,6.332,16.619,2.766,34.505c5.686,1.086,11.14,2.326,16.335,3.722c5.583-26.958,1.861-45.619-10.649-52.856c-12.716-7.34-30.498-1.318-51.434,17.42c-12.018,10.754-24.622,25.416-36.339,42.062c-11.687,0.676-23.237,1.953-34.188,3.813c-7.913-26.6-7.343-44.886-0.783-48.667c0.879-0.517,2.016-0.775,3.386-0.775c7.289,0,19.255,7.237,32.023,19.385c3.618-4.471,7.263-8.736,10.907-12.742C97.657,5.036,78.246-2.253,65.013,5.397C52.297,12.712,48.626,31.114,54.39,58.64c0.901,4.301,2.036,8.788,3.376,13.409C25.626,79.809,2,93.278,2,111.935c0,15.378,16.231,28.637,45.696,37.322l1.241,0.362l0.362-1.215c1.344-4.42,2.869-8.917,4.523-13.388l0.465-1.292l-1.318-0.388c-20.392-5.97-34.065-14.577-34.065-21.4c0-7.721,16.139-17.594,44.084-24.042c3.821,10.43,8.516,21.254,13.893,32.034c-8.08,17.761-14.137,35.252-17.321,50.473c-5.764,27.5-2.094,45.903,10.623,53.217c3.463,2.016,7.366,3.024,11.605,3.024c10.571,0,23.468-6.384,37.606-18.532c-3.851-3.929-7.625-8.064-11.295-12.38c-10.519,8.891-19.979,14.06-26.105,14.06c-1.344,0-2.481-0.259-3.386-0.776c-8.213-4.751-7.064-32.19,8.403-70.244c24.572,42.417,63.859,87.871,92.371,87.871c4.239,0,8.141-1.008,11.605-3.024h0.026c26.285-15.146,10.054-73.998-16.516-123.493c-6.306-1.008-13.207-1.835-20.729-2.43l0.853,1.447c33.316,57.689,38.795,103.592,27.94,109.872c-0.905,0.517-2.042,0.776-3.386,0.776c-13.13,0-45.98-24.787-77.797-79.891c-2.015-3.492-3.924-6.939-5.738-10.338c3.243-6.601,6.866-13.421,10.907-20.419c3.659-6.338,7.331-12.256,10.986-17.8c3.423-0.101,6.903-0.163,10.466-0.163c66.606,0,109.122,18.222,109.122,30.757c0,6.436-12.199,14.448-30.731,20.367c2.042,5.324,3.903,10.623,5.531,15.843c27.164-8.684,42.078-21.452,42.078-36.21C254,81.266,190.199,64.601,129.593,64.314z M91.919,90.689c-1.915,3.32-3.771,6.67-5.566,10.036c-2.506-5.53-4.744-10.887-6.695-16.017c5.395-0.837,11.099-1.547,17.094-2.107C95.11,85.272,93.492,87.964,91.919,90.689z M111.783,114.85c0,10.231,8.324,18.555,18.555,18.555c10.231,0,18.555-8.324,18.555-18.555s-8.324-18.555-18.555-18.555C120.107,96.294,111.783,104.618,111.783,114.85z</Geometry>
|
||||
<Geometry x:Key="LocaleIcon">M11 1H3C1.9 1 1 1.9 1 3V15L4 12H9V11C9 8.8 10.79 7 13 7V3C13 1.9 12.1 1 11 1M11 4L9.5 4C9.16 5.19 8.54 6.3 7.68 7.26L7.66 7.28L8.92 8.53L8.55 9.54L7 8L4.5 10.5L3.81 9.77L6.34 7.28C5.72 6.59 5.22 5.82 4.86 5H5.85C6.16 5.6 6.54 6.17 7 6.68C7.72 5.88 8.24 4.97 8.57 4L3 4V3H6.5V2H7.5V3H11V4M21 9H13C11.9 9 11 9.9 11 11V18C11 19.1 11.9 20 13 20H20L23 23V11C23 9.9 22.1 9 21 9M19.63 19L18.78 16.75H15.22L14.38 19H12.88L16.25 10H17.75L21.13 19H19.63M17 12L18.22 15.25H15.79L17 12Z</Geometry>
|
||||
<Geometry x:Key="FontIcon">M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z</Geometry>
|
||||
<Geometry x:Key="LuaIcon">M10.5,5A8.5,8.5 0 0,0 2,13.5A8.5,8.5 0 0,0 10.5,22A8.5,8.5 0 0,0 19,13.5A8.5,8.5 0 0,0 10.5,5M13.5,13A2.5,2.5 0 0,1 11,10.5A2.5,2.5 0 0,1 13.5,8A2.5,2.5 0 0,1 16,10.5A2.5,2.5 0 0,1 13.5,13M19.5,2A2.5,2.5 0 0,0 17,4.5A2.5,2.5 0 0,0 19.5,7A2.5,2.5 0 0,0 22,4.5A2.5,2.5 0 0,0 19.5,2</Geometry>
|
||||
<Geometry x:Key="JsonIcon">M5,3H7V5H5V10A2,2 0 0,1 3,12A2,2 0 0,1 5,14V19H7V21H5C3.93,20.73 3,20.1 3,19V15A2,2 0 0,0 1,13H0V11H1A2,2 0 0,0 3,9V5A2,2 0 0,1 5,3M19,3A2,2 0 0,1 21,5V9A2,2 0 0,0 23,11H24V13H23A2,2 0 0,0 21,15V19A2,2 0 0,1 19,21H17V19H19V14A2,2 0 0,1 21,12A2,2 0 0,1 19,10V5H17V3H19M12,15A1,1 0 0,1 13,16A1,1 0 0,1 12,17A1,1 0 0,1 11,16A1,1 0 0,1 12,15M8,15A1,1 0 0,1 9,16A1,1 0 0,1 8,17A1,1 0 0,1 7,16A1,1 0 0,1 8,15M16,15A1,1 0 0,1 17,16A1,1 0 0,1 16,17A1,1 0 0,1 15,16A1,1 0 0,1 16,15Z</Geometry>
|
||||
<Geometry x:Key="TxtIcon">M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z</Geometry>
|
||||
<Geometry x:Key="TextureIconAlt">M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V4C4,2.89 4.89,2 6,2M6,20H15L18,20V12L14,16L12,14L6,20M8,9A2,2 0 0,0 6,11A2,2 0 0,0 8,13A2,2 0 0,0 10,11A2,2 0 0,0 8,9Z</Geometry>
|
||||
<Geometry x:Key="VideoIcon">M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32M232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32M96 224a32 32 0 1 1-32 32a32 32 0 0 1 32-32m288 224H64v-32l64-64l32 32l128-128l96 96z</Geometry>
|
||||
<Geometry x:Key="CppIcon">M 21.955078 6.001953 L 13.535156 1.269531 C 12.896484 0.912109 12.103516 0.912109 11.464844 1.269531 L 3.044922 6.001953 C 2.400391 6.363281 2 7.041016 2 7.767578 L 2 17.232422 C 2 17.958984 2.400391 18.636719 3.044922 18.998047 L 11.464844 23.730469 C 11.785156 23.910156 12.142578 24 12.5 24 C 12.857422 24 13.214844 23.910156 13.535156 23.730469 L 21.955078 18.998047 C 22.599609 18.636719 23 17.958984 23 17.232422 L 23 7.767578 C 23 7.041016 22.599609 6.363281 21.955078 6.001953 Z M 12.5 18.5 C 9.191406 18.5 6.5 15.808594 6.5 12.5 C 6.5 9.191406 9.191406 6.5 12.5 6.5 C 14.390625 6.5 16.136719 7.376953 17.271484 8.871094 L 15.080078 10.138672 C 14.421875 9.417969 13.486328 9 12.5 9 C 10.570313 9 9 10.570313 9 12.5 C 9 14.429688 10.570313 16 12.5 16 C 13.486328 16 14.421875 15.582031 15.080078 14.861328 L 17.271484 16.128906 C 16.136719 17.623047 14.390625 18.5 12.5 18.5 Z M 18.5 13 L 17.5 13 L 17.5 14 L 16.5 14 L 16.5 13 L 15.5 13 L 15.5 12 L 16.5 12 L 16.5 11 L 17.5 11 L 17.5 12 L 18.5 12 Z M 22 13 L 21 13 L 21 14 L 20 14 L 20 13 L 19 13 L 19 12 L 20 12 L 20 11 L 21 11 L 21 12 L 22 12 Z</Geometry>
|
||||
<Geometry x:Key="AnimationIconAlt">M4,2C2.89,2 2,2.89 2,4V14H4V4H14V2H4M8,6C6.89,6 6,6.89 6,8V18H8V8H18V6H8M12,10C10.89,10 10,10.89 10,12V20C10,21.11 10.89,22 12,22H20C21.11,22 22,21.11 22,20V12C22,10.89 21.11,10 20,10H12Z</Geometry>
|
||||
<Geometry x:Key="ClearFiltersIcon">M14.46,15.88L15.88,14.46L18,16.59L20.12,14.46L21.54,15.88L19.41,18L21.54,20.12L20.12,21.54L18,19.41L15.88,21.54L14.46,20.12L16.59,18L14.46,15.88M12,17V15H7V17H12M17,11H7V13H14.69C13.07,14.07 12,15.91 12,18C12,19.09 12.29,20.12 12.8,21H5C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H19A2,2 0 0,1 21,5V12.8C20.12,12.29 19.09,12 18,12L17,12.08V11M17,9V7H7V9H17Z</Geometry>
|
||||
<Geometry x:Key="ParticleIcon">M18,11a1,1,0,0,1-1,1,5,5,0,0,0-5,5,1,1,0,0,1-2,0,5,5,0,0,0-5-5,1,1,0,0,1,0-2,5,5,0,0,0,5-5,1,1,0,0,1,2,0,5,5,0,0,0,5,5A1,1,0,0,1,18,11Z M19,24a1,1,0,0,1-1,1,2,2,0,0,0-2,2,1,1,0,0,1-2,0,2,2,0,0,0-2-2,1,1,0,0,1,0-2,2,2,0,0,0,2-2,1,1,0,0,1,2,0,2,2,0,0,0,2,2A1,1,0,0,1,19,24Z M28,17a1,1,0,0,1-1,1,4,4,0,0,0-4,4,1,1,0,0,1-2,0,4,4,0,0,0-4-4,1,1,0,0,1,0-2,4,4,0,0,0,4-4,1,1,0,0,1,2,0,4,4,0,0,0,4,4A1,1,0,0,1,28,17Z</Geometry>
|
||||
<Geometry x:Key="WorldIcon">M24.965,14.125c1.913,2.718,2.076,2.976,2.092,3.345c0.646,0.529,1.002,1.082,1.002,1.621 c0,2.141-5.571,4.535-13.03,4.535c-7.457,0-13.03-2.396-13.03-4.535c0-0.859,0.912-1.76,2.475-2.529 c0.373-0.715,0.843-1.61,1.429-2.721C2.456,14.931,0,16.703,0,19.091c0,4.244,7.743,6.535,15.029,6.535 c7.287,0,15.03-2.291,15.03-6.535C30.059,16.896,27.977,15.228,24.965,14.125z M12.849,20.742c4.61,0,8.348-0.45,8.348-1.01c0-0.029-0.442-0.652-0.855-1.229c2.933-0.05,5.217-0.445,5.217-0.927 c0-0.013-5.186-7.367-6.614-9.396c-0.082-0.117-0.218-0.187-0.36-0.188c-0.144,0-0.279,0.07-0.362,0.187l-1.804,2.551 L13.24,4.668c-0.078-0.145-0.228-0.236-0.392-0.236c-0.165,0-0.315,0.091-0.393,0.236C10.802,7.788,4.5,19.685,4.5,19.731 C4.499,20.291,8.236,20.742,12.849,20.742z</Geometry>
|
||||
<Geometry x:Key="FolderIconAlt">M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0
|
||||
22,18V8C22,6.89 21.1,6 20,6H12L10,4Z</Geometry>
|
||||
<Geometry x:Key="AssetIcon">M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0
|
||||
0,0 20,20V8L14,2H6Z</Geometry>
|
||||
<Geometry x:Key="DataTableIcon">
|
||||
M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0
|
||||
20,20V8L14,2M10,19H7V17H10V19M10,16H7V14H10V16M10,13H7V11H10V13M14,19H11V17H14V19M14,16H11V14H14V16M14,13H11V11H14V13M13,9V3.5L18.5,9H13Z</Geometry>
|
||||
<Geometry x:Key="MapIconAlt">M15,19L9,16.89V5L15,7.11M20.5,3C20.44,3 20.39,3
|
||||
20.34,3L15,5.1L9,3L3.36,4.9C3.15,4.97 3,5.15 3,5.38V20.5A0.5,0.5 0 0,0 3.5,21C3.55,21
|
||||
3.61,21 3.66,20.97L9,18.9L15,21L20.64,19.1C20.85,19 21,18.85 21,18.62V3.5A0.5,0.5 0 0,0
|
||||
20.5,3Z</Geometry>
|
||||
<Geometry x:Key="PluginIcon">M20.5,11H19V7C19,5.89 18.1,5 17,5H13V3.5A2.5,2.5 0 0,0
|
||||
10.5,1A2.5,2.5 0 0,0 8,3.5V5H4A2,2 0 0,0 2,7V10.8H3.5C5,10.8 6.2,12 6.2,13.5C6.2,15 5,16.2
|
||||
3.5,16.2H2V20A2,2 0 0,0 4,22H7.8V20.5C7.8,19 9,17.8 10.5,17.8C12,17.8 13.2,19
|
||||
13.2,20.5V22H17A2,2 0 0,0 19,20V16H20.5A2.5,2.5 0 0,0 23,13.5A2.5,2.5 0 0,0 20.5,11Z</Geometry>
|
||||
<Geometry x:Key="ConfigIcon">M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1
|
||||
15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67
|
||||
19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05
|
||||
19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18
|
||||
14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66
|
||||
7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22
|
||||
2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65
|
||||
4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03
|
||||
4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22
|
||||
10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34
|
||||
16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05
|
||||
21.73,14.78 21.54,14.63L19.43,12.97Z</Geometry>
|
||||
<Geometry x:Key="AudioIconAlt">M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0
|
||||
20,20V8L14,2M13,13H11V18A2,2 0 0,1 9,20A2,2 0 0,1 7,18A2,2 0 0,1 9,16C9.4,16 9.7,16.1
|
||||
10,16.3V11H13V13M13,9V3.5L18.5,9H13Z</Geometry>
|
||||
<Geometry x:Key="StaticMeshIconAlt">M5.206,19.956l0.199,42.771c0.003,0.55,0.306,1.054,0.789,1.314l34.161,17.887c0.223,0.119,0.467,0.179,0.711,0.179
|
||||
c0.001,0,0.002,0,0.003,0c0.103,0.117,0.218,0.227,0.355,0.309c0.236,0.141,0.502,0.212,0.769,0.212
|
||||
c0.246,0,0.49-0.061,0.712-0.181l33.729-18.292c0.484-0.263,0.787-0.77,0.787-1.319v-44.5c0-0.013-0.005-0.025-0.005-0.039
|
||||
c-0.001-0.011,0.003-0.021,0.003-0.033c-0.002-0.043-0.019-0.082-0.022-0.124c-0.013-0.082-0.022-0.164-0.047-0.243
|
||||
c-0.018-0.055-0.041-0.104-0.064-0.157c-0.031-0.07-0.062-0.139-0.104-0.203c-0.031-0.05-0.068-0.095-0.105-0.141
|
||||
c-0.047-0.058-0.096-0.112-0.152-0.163c-0.044-0.04-0.091-0.076-0.141-0.111c-0.032-0.022-0.059-0.053-0.094-0.073
|
||||
c-0.032-0.02-0.069-0.028-0.104-0.045c-0.029-0.015-0.052-0.036-0.081-0.049L41.747,0.118c-0.405-0.171-0.864-0.155-1.258,0.042
|
||||
L6.131,18.071c-0.504,0.254-0.822,0.77-0.825,1.333c0,0.009,0.004,0.017,0.004,0.025C5.249,19.596,5.205,19.772,5.206,19.956z
|
||||
M72.456,18.501l-30.28,16.93L10.111,19.425L41.218,3.151L72.456,18.501z
|
||||
M43.692,78.61V38.021l30.729-17.173v41.09L43.692,78.61z</Geometry>
|
||||
<Geometry x:Key="SkeletalMeshIconAlt">M 299.53 18.813 C 279.92 19.169 258.693 28.151 241.78
|
||||
45.063 C 219.82 67.023 211.263 96.303 217.562 119.813 C 154.784 90.813 159.904 88.397 97.282
|
||||
48.219 C 87.209 41.756 77.84 38.799 69.469 38.405 C 55.515 37.751 44.351 44.21 37.343 53.343
|
||||
C 26.13 67.956 24.96 89.496 48.28 107.75 C 79.307 132.036 107.123 148.79 127.312 167.22 C
|
||||
147.502 185.647 159.96 207.81 155.656 237.25 C 152.498 258.86 141.966 275.248 129.186 288.72
|
||||
C 116.408 302.19 101.44 313.206 87.75 325.406 C 60.37 349.806 37.42 377.159 42.687 439.656 C
|
||||
46.015 479.139 76.845 494.773 102.344 492.031 C 115.094 490.661 125.854 484.695 131.75
|
||||
474.564 C 137.647 464.432 139.446 449.126 130.72 426.814 C 123.125 407.398 133.822 385.978
|
||||
149.063 369.72 C 164.303 353.46 185.893 340.9 207.938 344.72 C 214.113 345.79 219.358 349.44
|
||||
222.968 353.875 C 226.578 358.31 228.964 363.495 230.938 369.125 C 234.884 380.385 237.208
|
||||
393.799 240.063 407.688 C 245.773 435.465 253.725 463.655 273.125 476.156 C 311.089 500.624
|
||||
348.383 493.578 365.031 476.626 C 373.356 468.148 376.946 457.766 374.157 445.469 C 371.369
|
||||
433.169 361.449 418.311 339.877 403.624 C 316.212 387.514 307.221 355.334 306.032 323.499 C
|
||||
304.844 291.663 311.32 259.422 326.158 239.469 C 333.036 230.219 343.704 226.351 355.814
|
||||
222.062 C 367.924 217.772 382.021 213.587 396.564 207.374 C 425.651 194.949 456.2 175.177
|
||||
475.689 130.594 C 492.767 91.524 479.063 66.276 460.409 57.094 C 451.081 52.501 440.279
|
||||
51.962 429.971 56.468 C 419.661 60.972 409.541 70.654 402.531 88.218 C 389.391 121.15
|
||||
363.313 139.925 332.095 144.654 C 325.881 145.596 319.481 146.01 312.907 145.967 C 312.461
|
||||
145.687 312.012 145.397 311.563 145.122 C 317.666 141.304 323.317 136.807 328.407 131.716 C
|
||||
358.471 101.651 363.457 57.86 339.532 33.934 C 329.066 23.466 314.788 18.531 299.532 18.808
|
||||
L 299.53 18.813 Z M 297.188 37.969 C 306.761 37.779 315.712 41.139 322.281 48.249 C 337.298
|
||||
64.499 334.181 94.205 315.314 114.624 C 296.444 135.044 268.986 138.437 253.97 122.187 C
|
||||
238.953 105.937 242.07 76.2 260.938 55.78 C 271.551 44.295 284.878 38.21 297.188 37.97 L
|
||||
297.188 37.969 Z M 65.03 62.593 L 127.72 108.061 L 117.438 123.687 L 54.062 77.717 L 65.032
|
||||
62.593 L 65.03 62.593 Z M 439.095 85.03 L 455.189 94.53 L 418.814 156.125 L 405.782 141.469
|
||||
L 439.096 85.029 L 439.095 85.03 Z M 142.875 119.062 L 182.815 148.032 C 180.185 153.969
|
||||
177.865 159.966 175.875 166.094 L 132.595 134.688 L 142.875 119.063 L 142.875 119.062 Z M
|
||||
214.815 138.938 C 215.543 138.925 216.265 138.931 217.001 138.938 C 248.215 139.218 282.064
|
||||
146.615 309.845 166.625 C 309.415 199.908 248.937 315.907 248.937 315.907 C 221.243 316.177
|
||||
195.231 314.66 170.907 301.407 C 170.907 301.407 212.624 138.975 214.813 138.938 L 214.815
|
||||
138.938 Z M 389.47 151.188 L 402.75 166.156 L 326.937 194.75 C 327.69 188.073 328.132
|
||||
181.234 328.375 174.22 L 389.469 151.188 L 389.47 151.188 Z M 149.125 302.218 L 161.781
|
||||
315.968 L 109.471 364.125 L 88.501 358.031 L 149.126 302.221 L 149.125 302.218 Z M 260.281
|
||||
324.844 L 283.314 373.874 L 266.064 381.124 L 243.344 332.781 L 260.282 324.845 L 260.281
|
||||
324.844 Z M 83.281 375.969 L 102.221 381.469 L 106.095 466.374 L 87.407 467.218 L 83.282
|
||||
375.968 L 83.281 375.969 Z M 292.845 390.155 L 335.439 458.875 L 319.564 468.718 L 275.407
|
||||
397.468 L 292.845 390.154 L 292.845 390.155 Z</Geometry>
|
||||
<Geometry x:Key="BlueprintIcon">M1.5,7.23 V22.5 H19.64 A2.87,2.87 0 0 0 19.64,16.77 H17.73 V7.23
|
||||
Z M17.73,1.5 V16.77 H19.64 A2.88,2.88 0 0 1 21.64,17.61 A2.85,2.85 0 0 1 22.48,19.68 V4.36
|
||||
A2.87,2.87 0 0 0 19.64,1.5 Z M13.91,18.68 L5.32,18.68 L5.32,10.09 M7.23,12 L5.32,12
|
||||
M7.23,14.86 L5.32,14.86 M9.14,16.77 L9.14,18.68 M12,16.77 L12,18.68</Geometry>
|
||||
<Geometry x:Key="MaterialIcon">M165.446 34.793c-23.17.023-45.634 12.97-54.612 36.323l-83.67
|
||||
326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 181.723-29.213
|
||||
263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72
|
||||
1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403
|
||||
1.238-10.799 1.87-16.189l22.134 3.278
|
||||
2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092
|
||||
15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781
|
||||
2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943
|
||||
7.67 1.12 15.341 2.244 23.012
|
||||
3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542
|
||||
7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35
|
||||
2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276
|
||||
208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583
|
||||
13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267
|
||||
1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696
|
||||
2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386
|
||||
2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337
|
||||
114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033
|
||||
13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986
|
||||
20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882
|
||||
31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564
|
||||
2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279
|
||||
10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123
|
||||
68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z</Geometry>
|
||||
<Geometry x:Key="SkeletonIcon">M 292.845 390.155 L 335.439 458.875 L 319.564 468.718 L 275.407
|
||||
397.468 L 292.845 390.154 Z M 83.282 375.968 L 83.282 375.969 L 83.281 375.969 Z M 102.221
|
||||
381.469 L 106.095 466.374 L 87.407 467.218 L 83.282 375.969 Z M 283.314 373.874 L 266.064
|
||||
381.124 L 243.344 332.781 L 260.282 324.845 Z M 149.125 302.218 L 161.781 315.968 L 109.471
|
||||
364.125 L 88.501 358.031 L 149.126 302.221 Z M 389.47 151.188 L 402.75 166.156 L 326.937
|
||||
194.75 C 327.69 188.073 328.132 181.234 328.375 174.22 L 389.469 151.188 Z M 214.815 138.938
|
||||
C 215.543 138.925 216.265 138.931 217.001 138.938 C 248.215 139.218 282.064 146.615 309.845
|
||||
166.625 C 309.415 199.908 304.967 225.572 288.565 252.875 C 274.021 243.958 258.239 236.19
|
||||
241.907 230.781 L 226.437 277.031 L 256.157 282.939 L 248.937 315.907 C 221.243 316.177
|
||||
195.231 314.66 170.907 301.407 L 178.345 267.501 L 207.97 273.376 L 223.844 225.876 C
|
||||
210.907 223.124 197.794 222.041 184.781 223.188 C 186.441 189.978 193.497 165.248 208.281
|
||||
139.158 C 210.449 139.088 212.624 138.975 214.813 138.938 Z M 142.875 119.062 L 182.815
|
||||
148.032 C 180.185 153.969 177.865 159.966 175.875 166.094 L 132.595 134.688 L 142.875
|
||||
119.063 Z M 455.189 94.53 L 418.814 156.125 L 405.782 141.469 L 439.095 85.03 Z M 65.032
|
||||
62.593 L 65.031 62.594 L 65.03 62.593 Z M 127.72 108.061 L 117.438 123.687 L 54.062 77.717 L
|
||||
65.031 62.594 Z M 297.188 37.969 C 306.761 37.779 315.712 41.139 322.281 48.249 C 337.298
|
||||
64.499 334.181 94.205 315.314 114.624 C 296.444 135.044 268.986 138.437 253.97 122.187 C
|
||||
238.953 105.937 242.07 76.2 260.938 55.78 C 271.551 44.295 284.878 38.21 297.188 37.97 Z</Geometry>
|
||||
<Geometry x:Key="PhysicsIcon">
|
||||
M129.593,64.314c23.543-30.833,44.788-45.063,54.751-45.063c1.37,0,2.507,0.258,3.386,0.775c5.324,3.076,6.332,16.619,2.766,34.505c5.686,1.086,11.14,2.326,16.335,3.722c5.583-26.958,1.861-45.619-10.649-52.856c-12.716-7.34-30.498-1.318-51.434,17.42c-12.018,10.754-24.622,25.416-36.339,42.062c-11.687,0.676-23.237,1.953-34.188,3.813c-7.913-26.6-7.343-44.886-0.783-48.667c0.879-0.517,2.016-0.775,3.386-0.775c7.289,0,19.255,7.237,32.023,19.385c3.618-4.471,7.263-8.736,10.907-12.742C97.657,5.036,78.246-2.253,65.013,5.397C52.297,12.712,48.626,31.114,54.39,58.64c0.901,4.301,2.036,8.788,3.376,13.409C25.626,79.809,2,93.278,2,111.935c0,15.378,16.231,28.637,45.696,37.322l1.241,0.362l0.362-1.215c1.344-4.42,2.869-8.917,4.523-13.388l0.465-1.292l-1.318-0.388c-20.392-5.97-34.065-14.577-34.065-21.4c0-7.721,16.139-17.594,44.084-24.042c3.821,10.43,8.516,21.254,13.893,32.034c-8.08,17.761-14.137,35.252-17.321,50.473c-5.764,27.5-2.094,45.903,10.623,53.217c3.463,2.016,7.366,3.024,11.605,3.024c10.571,0,23.468-6.384,37.606-18.532c-3.851-3.929-7.625-8.064-11.295-12.38c-10.519,8.891-19.979,14.06-26.105,14.06c-1.344,0-2.481-0.259-3.386-0.776c-8.213-4.751-7.064-32.19,8.403-70.244c24.572,42.417,63.859,87.871,92.371,87.871c4.239,0,8.141-1.008,11.605-3.024h0.026c26.285-15.146,10.054-73.998-16.516-123.493c-6.306-1.008-13.207-1.835-20.729-2.43l0.853,1.447c33.316,57.689,38.795,103.592,27.94,109.872c-0.905,0.517-2.042,0.776-3.386,0.776c-13.13,0-45.98-24.787-77.797-79.891c-2.015-3.492-3.924-6.939-5.738-10.338c3.243-6.601,6.866-13.421,10.907-20.419c3.659-6.338,7.331-12.256,10.986-17.8c3.423-0.101,6.903-0.163,10.466-0.163c66.606,0,109.122,18.222,109.122,30.757c0,6.436-12.199,14.448-30.731,20.367c2.042,5.324,3.903,10.623,5.531,15.843c27.164-8.684,42.078-21.452,42.078-36.21C254,81.266,190.199,64.601,129.593,64.314z
|
||||
M91.919,90.689c-1.915,3.32-3.771,6.67-5.566,10.036c-2.506-5.53-4.744-10.887-6.695-16.017c5.395-0.837,11.099-1.547,17.094-2.107C95.11,85.272,93.492,87.964,91.919,90.689z
|
||||
M111.783,114.85c0,10.231,8.324,18.555,18.555,18.555c10.231,0,18.555-8.324,18.555-18.555s-8.324-18.555-18.555-18.555C120.107,96.294,111.783,104.618,111.783,114.85z</Geometry>
|
||||
<Geometry x:Key="LocaleIcon">M11 1H3C1.9 1 1 1.9 1 3V15L4 12H9V11C9 8.8 10.79 7 13 7V3C13 1.9
|
||||
12.1 1 11 1M11 4L9.5 4C9.16 5.19 8.54 6.3 7.68 7.26L7.66 7.28L8.92 8.53L8.55 9.54L7 8L4.5
|
||||
10.5L3.81 9.77L6.34 7.28C5.72 6.59 5.22 5.82 4.86 5H5.85C6.16 5.6 6.54 6.17 7 6.68C7.72 5.88
|
||||
8.24 4.97 8.57 4L3 4V3H6.5V2H7.5V3H11V4M21 9H13C11.9 9 11 9.9 11 11V18C11 19.1 11.9 20 13
|
||||
20H20L23 23V11C23 9.9 22.1 9 21 9M19.63 19L18.78 16.75H15.22L14.38 19H12.88L16.25
|
||||
10H17.75L21.13 19H19.63M17 12L18.22 15.25H15.79L17 12Z</Geometry>
|
||||
<Geometry x:Key="FontIcon">M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3
|
||||
12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z</Geometry>
|
||||
<Geometry x:Key="LuaIcon">M10.5,5A8.5,8.5 0 0,0 2,13.5A8.5,8.5 0 0,0 10.5,22A8.5,8.5 0 0,0
|
||||
19,13.5A8.5,8.5 0 0,0 10.5,5M13.5,13A2.5,2.5 0 0,1 11,10.5A2.5,2.5 0 0,1 13.5,8A2.5,2.5 0
|
||||
0,1 16,10.5A2.5,2.5 0 0,1 13.5,13M19.5,2A2.5,2.5 0 0,0 17,4.5A2.5,2.5 0 0,0 19.5,7A2.5,2.5 0
|
||||
0,0 22,4.5A2.5,2.5 0 0,0 19.5,2</Geometry>
|
||||
<Geometry x:Key="JsonIcon">M5,3H7V5H5V10A2,2 0 0,1 3,12A2,2 0 0,1 5,14V19H7V21H5C3.93,20.73
|
||||
3,20.1 3,19V15A2,2 0 0,0 1,13H0V11H1A2,2 0 0,0 3,9V5A2,2 0 0,1 5,3M19,3A2,2 0 0,1 21,5V9A2,2
|
||||
0 0,0 23,11H24V13H23A2,2 0 0,0 21,15V19A2,2 0 0,1 19,21H17V19H19V14A2,2 0 0,1 21,12A2,2 0
|
||||
0,1 19,10V5H17V3H19M12,15A1,1 0 0,1 13,16A1,1 0 0,1 12,17A1,1 0 0,1 11,16A1,1 0 0,1
|
||||
12,15M8,15A1,1 0 0,1 9,16A1,1 0 0,1 8,17A1,1 0 0,1 7,16A1,1 0 0,1 8,15M16,15A1,1 0 0,1
|
||||
17,16A1,1 0 0,1 16,17A1,1 0 0,1 15,16A1,1 0 0,1 16,15Z</Geometry>
|
||||
<Geometry x:Key="TxtIcon">M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89
|
||||
3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z</Geometry>
|
||||
<Geometry x:Key="TextureIconAlt">M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22
|
||||
4,21.1 4,20V4C4,2.89 4.89,2 6,2M6,20H15L18,20V12L14,16L12,14L6,20M8,9A2,2 0 0,0 6,11A2,2 0
|
||||
0,0 8,13A2,2 0 0,0 10,11A2,2 0 0,0 8,9Z</Geometry>
|
||||
<Geometry x:Key="VideoIcon">M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0
|
||||
32-32V32a32 32 0 0 0-32-32M232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0
|
||||
0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9
|
||||
9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9
|
||||
9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0
|
||||
32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32M96 224a32 32 0 1 1-32 32a32 32 0 0 1
|
||||
32-32m288 224H64v-32l64-64l32 32l128-128l96 96z</Geometry>
|
||||
<Geometry x:Key="CppIcon">M 21.955078 6.001953 L 13.535156 1.269531 C 12.896484 0.912109
|
||||
12.103516 0.912109 11.464844 1.269531 L 3.044922 6.001953 C 2.400391 6.363281 2 7.041016 2
|
||||
7.767578 L 2 17.232422 C 2 17.958984 2.400391 18.636719 3.044922 18.998047 L 11.464844
|
||||
23.730469 C 11.785156 23.910156 12.142578 24 12.5 24 C 12.857422 24 13.214844 23.910156
|
||||
13.535156 23.730469 L 21.955078 18.998047 C 22.599609 18.636719 23 17.958984 23 17.232422 L
|
||||
23 7.767578 C 23 7.041016 22.599609 6.363281 21.955078 6.001953 Z M 12.5 18.5 C 9.191406
|
||||
18.5 6.5 15.808594 6.5 12.5 C 6.5 9.191406 9.191406 6.5 12.5 6.5 C 14.390625 6.5 16.136719
|
||||
7.376953 17.271484 8.871094 L 15.080078 10.138672 C 14.421875 9.417969 13.486328 9 12.5 9 C
|
||||
10.570313 9 9 10.570313 9 12.5 C 9 14.429688 10.570313 16 12.5 16 C 13.486328 16 14.421875
|
||||
15.582031 15.080078 14.861328 L 17.271484 16.128906 C 16.136719 17.623047 14.390625 18.5
|
||||
12.5 18.5 Z M 18.5 13 L 17.5 13 L 17.5 14 L 16.5 14 L 16.5 13 L 15.5 13 L 15.5 12 L 16.5 12
|
||||
L 16.5 11 L 17.5 11 L 17.5 12 L 18.5 12 Z M 22 13 L 21 13 L 21 14 L 20 14 L 20 13 L 19 13 L
|
||||
19 12 L 20 12 L 20 11 L 21 11 L 21 12 L 22 12 Z</Geometry>
|
||||
<Geometry x:Key="AnimationIconAlt">M4,2C2.89,2 2,2.89 2,4V14H4V4H14V2H4M8,6C6.89,6 6,6.89
|
||||
6,8V18H8V8H18V6H8M12,10C10.89,10 10,10.89 10,12V20C10,21.11 10.89,22 12,22H20C21.11,22
|
||||
22,21.11 22,20V12C22,10.89 21.11,10 20,10H12Z</Geometry>
|
||||
<Geometry x:Key="ClearFiltersIcon">M14.46,15.88L15.88,14.46L18,16.59L20.12,14.46L21.54,15.88L19.41,18L21.54,20.12L20.12,21.54L18,19.41L15.88,21.54L14.46,20.12L16.59,18L14.46,15.88M12,17V15H7V17H12M17,11H7V13H14.69C13.07,14.07
|
||||
12,15.91 12,18C12,19.09 12.29,20.12 12.8,21H5C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H19A2,2
|
||||
0 0,1 21,5V12.8C20.12,12.29 19.09,12 18,12L17,12.08V11M17,9V7H7V9H17Z</Geometry>
|
||||
<Geometry x:Key="ParticleIcon">
|
||||
M18,11a1,1,0,0,1-1,1,5,5,0,0,0-5,5,1,1,0,0,1-2,0,5,5,0,0,0-5-5,1,1,0,0,1,0-2,5,5,0,0,0,5-5,1,1,0,0,1,2,0,5,5,0,0,0,5,5A1,1,0,0,1,18,11Z
|
||||
M19,24a1,1,0,0,1-1,1,2,2,0,0,0-2,2,1,1,0,0,1-2,0,2,2,0,0,0-2-2,1,1,0,0,1,0-2,2,2,0,0,0,2-2,1,1,0,0,1,2,0,2,2,0,0,0,2,2A1,1,0,0,1,19,24Z
|
||||
M28,17a1,1,0,0,1-1,1,4,4,0,0,0-4,4,1,1,0,0,1-2,0,4,4,0,0,0-4-4,1,1,0,0,1,0-2,4,4,0,0,0,4-4,1,1,0,0,1,2,0,4,4,0,0,0,4,4A1,1,0,0,1,28,17Z</Geometry>
|
||||
<Geometry x:Key="WorldIcon">M24.965,14.125c1.913,2.718,2.076,2.976,2.092,3.345c0.646,0.529,1.002,1.082,1.002,1.621
|
||||
c0,2.141-5.571,4.535-13.03,4.535c-7.457,0-13.03-2.396-13.03-4.535c0-0.859,0.912-1.76,2.475-2.529
|
||||
c0.373-0.715,0.843-1.61,1.429-2.721C2.456,14.931,0,16.703,0,19.091c0,4.244,7.743,6.535,15.029,6.535
|
||||
c7.287,0,15.03-2.291,15.03-6.535C30.059,16.896,27.977,15.228,24.965,14.125z
|
||||
M12.849,20.742c4.61,0,8.348-0.45,8.348-1.01c0-0.029-0.442-0.652-0.855-1.229c2.933-0.05,5.217-0.445,5.217-0.927
|
||||
c0-0.013-5.186-7.367-6.614-9.396c-0.082-0.117-0.218-0.187-0.36-0.188c-0.144,0-0.279,0.07-0.362,0.187l-1.804,2.551
|
||||
L13.24,4.668c-0.078-0.145-0.228-0.236-0.392-0.236c-0.165,0-0.315,0.091-0.393,0.236C10.802,7.788,4.5,19.685,4.5,19.731
|
||||
C4.499,20.291,8.236,20.742,12.849,20.742z</Geometry>
|
||||
<Geometry x:Key="VerseIcon">M 0 0 L 191 380 L 381 0 L 227 0 L 298 52 L 204 238 L 85 1 Z</Geometry>
|
||||
<Geometry x:Key="CurveIcon">M9.96,11.31C10.82,8.1 11.5,6 13,6C14.5,6 15.18,8.1 16.04,11.31C17,14.92 18.1,19 22,19V17C19.8,17 19,14.54 17.97,10.8C17.08,7.46 16.15,4 13,4C9.85,4 8.92,7.46 8.03,10.8C7.03,14.54 6.2,17 4,17V2H2V22H22V20H4V19C7.9,19 9,14.92 9.96,11.31Z</Geometry>
|
||||
<Geometry x:Key="FunctionIcon">M15.6,5.29C14.5,5.19 13.53,6 13.43,7.11L13.18,10H16V12H13L12.56,17.07C12.37,19.27 10.43,20.9 8.23,20.7C6.92,20.59 5.82,19.86 5.17,18.83L6.67,17.33C6.91,18.07 7.57,18.64 8.4,18.71C9.5,18.81 10.47,18 10.57,16.89L11,12H8V10H11.17L11.44,6.93C11.63,4.73 13.57,3.1 15.77,3.3C17.08,3.41 18.18,4.14 18.83,5.17L17.33,6.67C17.09,5.93 16.43,5.36 15.6,5.29Z</Geometry>
|
||||
<Geometry x:Key="MaterialFunctionIcon">M165.446 34.793c-23.17.023-45.634 12.97-54.612 36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 181.723-29.213 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 1.238-10.799 1.87-16.189l22.134 3.278 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 7.67 1.12 15.341 2.244 23.012 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z M350 153.5c-13.2-1.2-25.8 8.4-27 21.2l-3 34.8h36v24h-36l-5.3 60.8c-2.3 26.4-25.6 45.9-52 43.4-15.7-1.3-28.9-10.1-36.7-22.4l18-18c2.9 8.9 10.8 15.7 20.7 16.5 13.2 1.2 25.8-8.4 27-21.2l5.2-58.9h-36v-24h38l3.3-36.8c2.3-26.4 25.6-45.9 52-43.4 15.7 1.3 28.9 10.1 36.7 22.4l-18 18c-2.9-8.9-10.8-15.7-20.7-16.5z</Geometry>
|
||||
<Geometry x:Key="MonitorIcon">M21,16H3V4H21M21,2H3C1.89,2 1,2.89 1,4V16A2,2 0 0,0 3,18H10V20H8V22H16V20H14V18H21A2,2 0 0,0 23,16V4C23,2.89 22.1,2 21,2Z</Geometry>
|
||||
<Geometry x:Key="ClapperIcon">M60.131 21.423H35.659l24.279-2.656l1.878-.206l-.224-1.876l-1.53-12.849l-.183-1.524l-1.527-.12l-2.22-.173L55.888 2l-.24.044l-51.923 9.565L2 11.927l.207 1.744l.404 3.397v16.381l.477.029v16.524l1.473.32l52.982 11.516l.746.162l.646-.408l2.191-1.383l.874-.55V21.423h-1.869M55.985 3.884l2.22.174l1.37 11.494l-1.739-2.536l-6.791-8.222l4.94-.91M42.58 6.354l9.299 11.413l-8.489.929l-8.431-10.938l7.621-1.404M28.059 9.029l7.692 10.503l-6.908.756l-7.046-10.105l6.262-1.154m-11.981 2.206l6.482 9.74l-5.731.626l-5.988-9.401l5.237-.965m-5.461 15.844l-2.77-3.601l.096-.184h4.72l-2.046 3.785m1.064 3.165c0 .55-.393.973-.874.946c-.479-.027-.863-.488-.863-1.029s.385-.965.863-.945c.481.018.874.479.874 1.028M4.516 17.246l-.453-3.797l1.961-.361l5.554 9.089l-1.146.125l-2.766.303l-.588-1l-2.562-4.359M6.474 22.8c0 .525-.359.952-.799.957c-.437.002-.787-.414-.787-.931c0-.519.351-.945.787-.957c.439-.011.799.406.799.931m-.799 6.213c.439.018.799.457.799.982c0 .525-.359.929-.799.903c-.437-.024-.787-.463-.787-.98c0-.518.35-.922.787-.905m54.456 15.454l-1.867.482l-43.419-5.381v4.129l43.419 6.875l1.867-.797v1.365l-1.867.814l-53.307-8.87v-.948l8.956 1.414v-4.098l-8.956-1.11v-.948l53.307 6.174l1.867-.468v1.367m0-8.235l-1.867.311l-53.307-3.89v-.923l9.713.62l-1.161-1.51l4.27-7.546h5.096l-5.473 9.183l5.727.369l6.006-9.552h6.882l-6.614 9.957l6.905.445l7.319-10.402h8.458L43.94 34.189l8.485.547l5.937-7.888l1.769-3.007v12.391</Geometry>
|
||||
<Geometry x:Key="XmlIcon">M19 3H5C3.89 3 3 3.89 3 5V19C3 20.11 3.89 21 5 21H19C20.11 21 21 20.11 21 19V5C21 3.89 20.11 3 19 3M8 15H6.5L6 13L5.5 15H4L4.75 12L4 9H5.5L6 11L6.5 9H8L7.25 12L8 15M15.5 15H14V10.5H13V14H11.5V10.5H10.5V15H9V11C9 9.9 9.9 9 11 9H13.5C14.61 9 15.5 9.9 15.5 11V15M20 15H17V9H18.5V13.5H20V15Z</Geometry>
|
||||
<Geometry x:Key="FoliageIcon">m397.529,58.225c-37.359,0-72.27,11.235-100.957,32.49-25.401,18.819-44.228,44.84-51.653,71.391-8.498,30.386-1.593,57.841 18.431,75.96-6.892,12.102-13.298,24.592-18.372,36.707-4.66-11.592-10.865-21.973-17.882-31.224 9.949-15.808 11.327-35.12 3.511-54.911-7.36-18.635-22.266-35.818-41.974-48.386-21.258-13.556-46.288-20.721-72.383-20.721-33.485,0-67.836,12.078-99.338,34.928l-16.912,12.268 20.162,5.478c33.26,9.036 59.805,34.679 83.225,57.303 23.91,23.098 46.495,44.914 72.659,44.921 0.004,0 0.008,0 0.012,0 12.875,0 25.18-5.146 37.498-15.667 11.82,16.664 20.228,37.094 20.228,61.938v127h20c0,0 0.018-122.778 0.018-129.384 0-15.96 9.362-39.486 26.042-68.882 12.387,6.689 23.962,9.954 35.235,9.954 36.76,0 60.665-35.173 85.974-72.41 22.59-33.238 48.194-70.911 86.29-90.421l18.581-9.516-19.061-8.516c-30.153-13.47-60.209-20.3-89.334-20.3zm-221.471,196.203c-0.002,0-0.004,0-0.007,0-18.085-0.005-36.938-18.218-58.768-39.306-20.663-19.961-43.588-42.108-72.305-55.135 23.345-13.586 47.248-20.456 71.272-20.456 48.227,0 84.676,28.4 95.755,56.453 2.869,7.266 5.835,19.295 0.99,31.335-17.942-18.216-37.69-30.663-49.979-38.408-3.594-2.266-6.698-4.222-8.771-5.695l-11.59,16.299c2.526,1.797 5.85,3.892 9.697,6.316 12.659,7.979 31.868,20.09 48.451,37.523-8.638,7.436-16.76,11.074-24.745,11.074zm208.452-78.693c-23.213,34.155-43.261,63.652-69.432,63.652-7.676,0-15.897-2.358-24.996-7.165 0.894-1.439 1.797-2.886 2.722-4.348 19.815-31.329 39.938-56.696 40.139-56.949l-15.649-12.454c-1.715,2.155-22.828,28.846-43.394,61.905-12.095-13.03-15.666-31.622-9.72-52.884 6.252-22.354 22.397-44.482 44.298-60.708 17.584-13.028 47.309-28.56 89.051-28.56 20.458,0 41.53,3.779 62.861,11.258-32.716,22.745-55.46,56.209-75.88,86.253z</Geometry>
|
||||
<Geometry x:Key="MaterialParameterCollectionIcon">M165.446 34.793c-23.17.023-45.634 12.97-54.612 36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396 181.723-29.213 263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72 1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403 1.238-10.799 1.87-16.189l22.134 3.278 2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092 15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781 2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943 7.67 1.12 15.341 2.244 23.012 3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542 7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35 2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276 208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583 13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267 1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696 2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386 2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337 114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033 13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986 20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882 31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564 2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279 10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123 68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z M341 395l-36 -40 -45 20 3 -13 24 -11c5,-2 9,-4 11,-5 -2,-2 -5,-5 -8,-8l-19 -21 2 -12 33 36 49 -22 -3 13 -33 15c-2,1 -4,2 -6,2 2,2 4,4 5,5l24 26 -3 13zm-15 -177l-10 54 -9 -2 10 -54 9 2zm25 5l-10 54 -9 -2 10 -54 9 2zm39 -76l-2 10 -64 -12c2,3 4,6 5,11 2,4 3,8 3,12l-10 -2c-2,-6 -4,-12 -7,-17 -3,-5 -6,-9 -9,-11l1 -6 82 16z</Geometry>
|
||||
<Geometry x:Key="CertificateIcon">M4,3C2.89,3 2,3.89 2,5V15A2,2 0 0,0 4,17H12V22L15,19L18,22V17H20A2,2 0 0,0 22,15V8L22,6V5A2,2 0 0,0 20,3H16V3H4M12,5L15,7L18,5V8.5L21,10L18,11.5V15L15,13L12,15V11.5L9,10L12,8.5V5M4,5H9V7H4V5M4,9H7V11H4V9M4,13H9V15H4V13Z</Geometry>
|
||||
<Geometry x:Key="RedirectorIcon">M289.718,1208.22 L283.795,1202.28 C283.404,1201.89 282.768,1201.89 282.376,1202.28 C281.984,1202.68 282,1203.35 282,1204 L282,1207 L266,1207 L266,1204 C266,1203.35 266.016,1202.68 265.624,1202.28 C265.232,1201.89 264.597,1201.89 264.205,1202.28 L258.282,1208.22 C258.073,1208.43 257.983,1208.71 257.998,1208.98 C257.983,1209.26 258.073,1209.54 258.282,1209.75 L264.205,1215.69 C264.597,1216.08 265.232,1216.08 265.624,1215.69 C266.016,1215.29 266,1214.39 266,1214 L266,1211 L282,1211 L282,1214 C282,1214.65 281.984,1215.29 282.376,1215.69 C282.768,1216.08 283.404,1216.08 283.795,1215.69 L289.718,1209.75 C289.927,1209.54 290.017,1209.26 290.002,1208.98 C290.017,1208.71 289.927,1208.43 289.718,1208.22</Geometry>
|
||||
<Geometry x:Key="CodeIcon">M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V4C4,2.89 4.89,2 6,2M6.12,15.5L9.86,19.24L11.28,17.83L8.95,15.5L11.28,13.17L9.86,11.76L6.12,15.5M17.28,15.5L13.54,11.76L12.12,13.17L14.45,15.5L12.12,17.83L13.54,19.24L17.28,15.5Z</Geometry>
|
||||
<Geometry x:Key="GitIcon">M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z</Geometry>
|
||||
<Geometry x:Key="HtmlIcon">M12,17.56L16.07,16.43L16.62,10.33H9.38L9.2,8.3H16.8L17,6.31H7L7.56,12.32H14.45L14.22,14.9L12,15.5L9.78,14.9L9.64,13.24H7.64L7.93,16.43L12,17.56M4.07,3H19.93L18.5,19.2L12,21L5.5,19.2L4.07,3Z</Geometry>
|
||||
<Geometry x:Key="JavaScriptIcon">M3,3H21V21H3V3M7.73,18.04C8.13,18.89 8.92,19.59 10.27,19.59C11.77,19.59 12.8,18.79 12.8,17.04V11.26H11.1V17C11.1,17.86 10.75,18.08 10.2,18.08C9.62,18.08 9.38,17.68 9.11,17.21L7.73,18.04M13.71,17.86C14.21,18.84 15.22,19.59 16.8,19.59C18.4,19.59 19.6,18.76 19.6,17.23C19.6,15.82 18.79,15.19 17.35,14.57L16.93,14.39C16.2,14.08 15.89,13.87 15.89,13.37C15.89,12.96 16.2,12.64 16.7,12.64C17.18,12.64 17.5,12.85 17.79,13.37L19.1,12.5C18.55,11.54 17.77,11.17 16.7,11.17C15.19,11.17 14.22,12.13 14.22,13.4C14.22,14.78 15.03,15.43 16.25,15.95L16.67,16.13C17.45,16.47 17.91,16.68 17.91,17.26C17.91,17.74 17.46,18.09 16.76,18.09C15.93,18.09 15.45,17.66 15.09,17.06L13.71,17.86Z</Geometry>
|
||||
<Geometry x:Key="CssIcon">M5,3L4.35,6.34H17.94L17.5,8.5H3.92L3.26,11.83H16.85L16.09,15.64L10.61,17.45L5.86,15.64L6.19,14H2.85L2.06,18L9.91,21L18.96,18L20.16,11.97L20.4,10.76L21.94,3H5Z</Geometry>
|
||||
<Geometry x:Key="CsvIcon">M14 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20 20V8L14 2M15 16L13 20H10L12 16H9V11H15V16M13 9V3.5L18.5 9H13Z</Geometry>
|
||||
<Geometry x:Key="AIIcon">M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 12,2M7.5,13A2.5,2.5 0 0,0 5,15.5A2.5,2.5 0 0,0 7.5,18A2.5,2.5 0 0,0 10,15.5A2.5,2.5 0 0,0 7.5,13M16.5,13A2.5,2.5 0 0,0 14,15.5A2.5,2.5 0 0,0 16.5,18A2.5,2.5 0 0,0 19,15.5A2.5,2.5 0 0,0 16.5,13Z</Geometry>
|
||||
|
||||
<Geometry x:Key="CurveIcon">M9.96,11.31C10.82,8.1 11.5,6 13,6C14.5,6 15.18,8.1
|
||||
16.04,11.31C17,14.92 18.1,19 22,19V17C19.8,17 19,14.54 17.97,10.8C17.08,7.46 16.15,4
|
||||
13,4C9.85,4 8.92,7.46 8.03,10.8C7.03,14.54 6.2,17 4,17V2H2V22H22V20H4V19C7.9,19 9,14.92
|
||||
9.96,11.31Z</Geometry>
|
||||
<Geometry x:Key="FunctionIcon">M15.6,5.29C14.5,5.19 13.53,6
|
||||
13.43,7.11L13.18,10H16V12H13L12.56,17.07C12.37,19.27 10.43,20.9 8.23,20.7C6.92,20.59
|
||||
5.82,19.86 5.17,18.83L6.67,17.33C6.91,18.07 7.57,18.64 8.4,18.71C9.5,18.81 10.47,18
|
||||
10.57,16.89L11,12H8V10H11.17L11.44,6.93C11.63,4.73 13.57,3.1 15.77,3.3C17.08,3.41 18.18,4.14
|
||||
18.83,5.17L17.33,6.67C17.09,5.93 16.43,5.36 15.6,5.29Z</Geometry>
|
||||
<Geometry x:Key="MaterialFunctionIcon">M165.446 34.793c-23.17.023-45.634 12.97-54.612
|
||||
36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396
|
||||
181.723-29.213
|
||||
263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72
|
||||
1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403
|
||||
1.238-10.799 1.87-16.189l22.134 3.278
|
||||
2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092
|
||||
15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781
|
||||
2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943
|
||||
7.67 1.12 15.341 2.244 23.012
|
||||
3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542
|
||||
7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35
|
||||
2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276
|
||||
208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583
|
||||
13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267
|
||||
1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696
|
||||
2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386
|
||||
2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337
|
||||
114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033
|
||||
13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986
|
||||
20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882
|
||||
31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564
|
||||
2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279
|
||||
10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123
|
||||
68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z M350 153.5c-13.2-1.2-25.8 8.4-27
|
||||
21.2l-3 34.8h36v24h-36l-5.3 60.8c-2.3 26.4-25.6 45.9-52
|
||||
43.4-15.7-1.3-28.9-10.1-36.7-22.4l18-18c2.9 8.9 10.8 15.7 20.7 16.5 13.2 1.2 25.8-8.4
|
||||
27-21.2l5.2-58.9h-36v-24h38l3.3-36.8c2.3-26.4 25.6-45.9 52-43.4 15.7 1.3 28.9 10.1 36.7
|
||||
22.4l-18 18c-2.9-8.9-10.8-15.7-20.7-16.5z</Geometry>
|
||||
<Geometry x:Key="MonitorIcon">M21,16H3V4H21M21,2H3C1.89,2 1,2.89 1,4V16A2,2 0 0,0
|
||||
3,18H10V20H8V22H16V20H14V18H21A2,2 0 0,0 23,16V4C23,2.89 22.1,2 21,2Z</Geometry>
|
||||
<Geometry x:Key="ClapperIcon">M60.131
|
||||
21.423H35.659l24.279-2.656l1.878-.206l-.224-1.876l-1.53-12.849l-.183-1.524l-1.527-.12l-2.22-.173L55.888
|
||||
2l-.24.044l-51.923 9.565L2 11.927l.207 1.744l.404
|
||||
3.397v16.381l.477.029v16.524l1.473.32l52.982
|
||||
11.516l.746.162l.646-.408l2.191-1.383l.874-.55V21.423h-1.869M55.985 3.884l2.22.174l1.37
|
||||
11.494l-1.739-2.536l-6.791-8.222l4.94-.91M42.58 6.354l9.299
|
||||
11.413l-8.489.929l-8.431-10.938l7.621-1.404M28.059 9.029l7.692
|
||||
10.503l-6.908.756l-7.046-10.105l6.262-1.154m-11.981 2.206l6.482
|
||||
9.74l-5.731.626l-5.988-9.401l5.237-.965m-5.461 15.844l-2.77-3.601l.096-.184h4.72l-2.046
|
||||
3.785m1.064 3.165c0
|
||||
.55-.393.973-.874.946c-.479-.027-.863-.488-.863-1.029s.385-.965.863-.945c.481.018.874.479.874
|
||||
1.028M4.516 17.246l-.453-3.797l1.961-.361l5.554
|
||||
9.089l-1.146.125l-2.766.303l-.588-1l-2.562-4.359M6.474 22.8c0
|
||||
.525-.359.952-.799.957c-.437.002-.787-.414-.787-.931c0-.519.351-.945.787-.957c.439-.011.799.406.799.931m-.799
|
||||
6.213c.439.018.799.457.799.982c0
|
||||
.525-.359.929-.799.903c-.437-.024-.787-.463-.787-.98c0-.518.35-.922.787-.905m54.456
|
||||
15.454l-1.867.482l-43.419-5.381v4.129l43.419
|
||||
6.875l1.867-.797v1.365l-1.867.814l-53.307-8.87v-.948l8.956
|
||||
1.414v-4.098l-8.956-1.11v-.948l53.307
|
||||
6.174l1.867-.468v1.367m0-8.235l-1.867.311l-53.307-3.89v-.923l9.713.62l-1.161-1.51l4.27-7.546h5.096l-5.473
|
||||
9.183l5.727.369l6.006-9.552h6.882l-6.614 9.957l6.905.445l7.319-10.402h8.458L43.94
|
||||
34.189l8.485.547l5.937-7.888l1.769-3.007v12.391</Geometry>
|
||||
<Geometry x:Key="XmlIcon">M19 3H5C3.89 3 3 3.89 3 5V19C3 20.11 3.89 21 5 21H19C20.11 21 21 20.11
|
||||
21 19V5C21 3.89 20.11 3 19 3M8 15H6.5L6 13L5.5 15H4L4.75 12L4 9H5.5L6 11L6.5 9H8L7.25 12L8
|
||||
15M15.5 15H14V10.5H13V14H11.5V10.5H10.5V15H9V11C9 9.9 9.9 9 11 9H13.5C14.61 9 15.5 9.9 15.5
|
||||
11V15M20 15H17V9H18.5V13.5H20V15Z</Geometry>
|
||||
<Geometry x:Key="FoliageIcon">m397.529,58.225c-37.359,0-72.27,11.235-100.957,32.49-25.401,18.819-44.228,44.84-51.653,71.391-8.498,30.386-1.593,57.841
|
||||
18.431,75.96-6.892,12.102-13.298,24.592-18.372,36.707-4.66-11.592-10.865-21.973-17.882-31.224
|
||||
9.949-15.808 11.327-35.12
|
||||
3.511-54.911-7.36-18.635-22.266-35.818-41.974-48.386-21.258-13.556-46.288-20.721-72.383-20.721-33.485,0-67.836,12.078-99.338,34.928l-16.912,12.268
|
||||
20.162,5.478c33.26,9.036 59.805,34.679 83.225,57.303 23.91,23.098 46.495,44.914
|
||||
72.659,44.921 0.004,0 0.008,0 0.012,0 12.875,0 25.18-5.146 37.498-15.667 11.82,16.664
|
||||
20.228,37.094 20.228,61.938v127h20c0,0 0.018-122.778 0.018-129.384 0-15.96 9.362-39.486
|
||||
26.042-68.882 12.387,6.689 23.962,9.954 35.235,9.954 36.76,0 60.665-35.173 85.974-72.41
|
||||
22.59-33.238 48.194-70.911
|
||||
86.29-90.421l18.581-9.516-19.061-8.516c-30.153-13.47-60.209-20.3-89.334-20.3zm-221.471,196.203c-0.002,0-0.004,0-0.007,0-18.085-0.005-36.938-18.218-58.768-39.306-20.663-19.961-43.588-42.108-72.305-55.135
|
||||
23.345-13.586 47.248-20.456 71.272-20.456 48.227,0 84.676,28.4 95.755,56.453 2.869,7.266
|
||||
5.835,19.295
|
||||
0.99,31.335-17.942-18.216-37.69-30.663-49.979-38.408-3.594-2.266-6.698-4.222-8.771-5.695l-11.59,16.299c2.526,1.797
|
||||
5.85,3.892 9.697,6.316 12.659,7.979 31.868,20.09
|
||||
48.451,37.523-8.638,7.436-16.76,11.074-24.745,11.074zm208.452-78.693c-23.213,34.155-43.261,63.652-69.432,63.652-7.676,0-15.897-2.358-24.996-7.165
|
||||
0.894-1.439 1.797-2.886 2.722-4.348 19.815-31.329 39.938-56.696
|
||||
40.139-56.949l-15.649-12.454c-1.715,2.155-22.828,28.846-43.394,61.905-12.095-13.03-15.666-31.622-9.72-52.884
|
||||
6.252-22.354 22.397-44.482 44.298-60.708 17.584-13.028 47.309-28.56 89.051-28.56 20.458,0
|
||||
41.53,3.779 62.861,11.258-32.716,22.745-55.46,56.209-75.88,86.253z</Geometry>
|
||||
<Geometry x:Key="MaterialParameterCollectionIcon">M165.446 34.793c-23.17.023-45.634 12.97-54.612
|
||||
36.323l-83.67 326.167c-12.673 94.537 81.04 88.742 137.957 65.396 81.422-33.396
|
||||
181.723-29.213
|
||||
263.244-8.26l6.45-17.218c-7.38-2.638-15.334-5.988-22.252-8.039.473-4.364.955-8.72
|
||||
1.437-13.074l23.038 4.118 3.234-18.1c-8.074-1.441-16.147-2.885-24.221-4.328.615-5.403
|
||||
1.238-10.799 1.87-16.189l22.134 3.278
|
||||
2.693-18.186c-7.548-1.12-15.098-2.238-22.647-3.355.456-3.765.91-7.53 1.375-11.29 7.615 1.092
|
||||
15.231 2.183 22.847 3.273l2.607-18.2-23.164-3.316c.46-3.593 1.29-9.988 1.76-13.577l22.781
|
||||
2.55 2.045-17.57c-7.467-.834-14.935-1.671-22.402-2.508.783-5.767 1.917-11.182 2.728-16.943
|
||||
7.67 1.12 15.341 2.244 23.012
|
||||
3.368l2.31-17.139c-7.683-1.127-15.366-2.25-23.05-3.374.792-5.415 1.252-10.129 2.071-15.542
|
||||
7.074 1.264 14.149 2.528 21.223 3.79l3.232-18.1-21.654-3.866c.736-4.676 1.473-9.35
|
||||
2.23-14.026 6.978 1.673 13.955 3.347 20.932 5.022L465.276
|
||||
208c-7.401-1.778-14.803-3.554-22.204-5.33a2809.25 2809.25 0 0 1 2.132-12.477c6.98 1.583
|
||||
13.961 3.165 20.942 4.746l4.064-17.93c-7.271-1.65-14.543-3.298-21.815-4.946.769-4.267
|
||||
1.55-8.535 2.342-12.805l20.742 5.151 4.431-17.843-21.751-5.405c.741-3.847 1.494-7.696
|
||||
2.254-11.548l20.28 5.014 4.413-17.849-21.057-5.207a2444.47 2444.47 0 0 1 2.571-12.374c8.386
|
||||
2.41 13.13 2.364 21.41 4.99L486 88.456c-83.808-26.776-179.25-33.22-244.192-6.453-24.337
|
||||
114.036-37.305 221.4-68.032 338.64-3.407 13-14.47 21.89-27.342 28.064-27 11.608-64.033
|
||||
13.778-84.63-4.91-10.971-10.34-16.174-27.036-12.467-47.579 2.303-12.762 10.883-21.986
|
||||
20.834-26.378 19.749-7.074 43.492-4.25 58.893 7.95 12.463 9.302 12.318 38.283-3.882
|
||||
31.82-9.639-6.17-1.964-11.851-8.615-17.378-11.6-7.428-26.42-10.872-38.972-5.57-5.564
|
||||
2.455-8.887 5.737-10.166 12.822-2.94 16.29.685 24.996 6.985 30.933 18.333 13.49 45.279
|
||||
10.495 64.068 1.712 10.045-4.82 16.277-11.436 17.511-16.147 30.538-116.518 43.443-224.123
|
||||
68.293-339.964-11.796-28.344-35.67-41.247-58.84-41.225z M341 395l-36 -40 -45 20 3 -13 24
|
||||
-11c5,-2 9,-4 11,-5 -2,-2 -5,-5 -8,-8l-19 -21 2 -12 33 36 49 -22 -3 13 -33 15c-2,1 -4,2 -6,2
|
||||
2,2 4,4 5,5l24 26 -3 13zm-15 -177l-10 54 -9 -2 10 -54 9 2zm25 5l-10 54 -9 -2 10 -54 9 2zm39
|
||||
-76l-2 10 -64 -12c2,3 4,6 5,11 2,4 3,8 3,12l-10 -2c-2,-6 -4,-12 -7,-17 -3,-5 -6,-9 -9,-11l1
|
||||
-6 82 16z</Geometry>
|
||||
<Geometry x:Key="CertificateIcon">
|
||||
M4,3C2.89,3 2,3.89 2,5V15A2,2 0 0,0
|
||||
4,17H12V22L15,19L18,22V17H20A2,2 0 0,0 22,15V8L22,6V5A2,2 0 0,0
|
||||
20,3H16V3H4M12,5L15,7L18,5V8.5L21,10L18,11.5V15L15,13L12,15V11.5L9,10L12,8.5V5M4,5H9V7H4V5M4,9H7V11H4V9M4,13H9V15H4V13Z</Geometry>
|
||||
<Geometry x:Key="RedirectorIcon">M289.718,1208.22 L283.795,1202.28 C283.404,1201.89
|
||||
282.768,1201.89 282.376,1202.28 C281.984,1202.68 282,1203.35 282,1204 L282,1207 L266,1207
|
||||
L266,1204 C266,1203.35 266.016,1202.68 265.624,1202.28 C265.232,1201.89 264.597,1201.89
|
||||
264.205,1202.28 L258.282,1208.22 C258.073,1208.43 257.983,1208.71 257.998,1208.98
|
||||
C257.983,1209.26 258.073,1209.54 258.282,1209.75 L264.205,1215.69 C264.597,1216.08
|
||||
265.232,1216.08 265.624,1215.69 C266.016,1215.29 266,1214.39 266,1214 L266,1211 L282,1211
|
||||
L282,1214 C282,1214.65 281.984,1215.29 282.376,1215.69 C282.768,1216.08 283.404,1216.08
|
||||
283.795,1215.69 L289.718,1209.75 C289.927,1209.54 290.017,1209.26 290.002,1208.98
|
||||
C290.017,1208.71 289.927,1208.43 289.718,1208.22</Geometry>
|
||||
<Geometry x:Key="CodeIcon">
|
||||
M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1
|
||||
4,20V4C4,2.89 4.89,2
|
||||
6,2M6.12,15.5L9.86,19.24L11.28,17.83L8.95,15.5L11.28,13.17L9.86,11.76L6.12,15.5M17.28,15.5L13.54,11.76L12.12,13.17L14.45,15.5L12.12,17.83L13.54,19.24L17.28,15.5Z</Geometry>
|
||||
<Geometry x:Key="GitIcon">M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28
|
||||
11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61
|
||||
13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0
|
||||
17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5
|
||||
11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81
|
||||
13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19
|
||||
10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z</Geometry>
|
||||
<Geometry x:Key="HtmlIcon">
|
||||
M12,17.56L16.07,16.43L16.62,10.33H9.38L9.2,8.3H16.8L17,6.31H7L7.56,12.32H14.45L14.22,14.9L12,15.5L9.78,14.9L9.64,13.24H7.64L7.93,16.43L12,17.56M4.07,3H19.93L18.5,19.2L12,21L5.5,19.2L4.07,3Z</Geometry>
|
||||
<Geometry x:Key="JavaScriptIcon">M3,3H21V21H3V3M7.73,18.04C8.13,18.89 8.92,19.59
|
||||
10.27,19.59C11.77,19.59 12.8,18.79 12.8,17.04V11.26H11.1V17C11.1,17.86 10.75,18.08
|
||||
10.2,18.08C9.62,18.08 9.38,17.68 9.11,17.21L7.73,18.04M13.71,17.86C14.21,18.84 15.22,19.59
|
||||
16.8,19.59C18.4,19.59 19.6,18.76 19.6,17.23C19.6,15.82 18.79,15.19
|
||||
17.35,14.57L16.93,14.39C16.2,14.08 15.89,13.87 15.89,13.37C15.89,12.96 16.2,12.64
|
||||
16.7,12.64C17.18,12.64 17.5,12.85 17.79,13.37L19.1,12.5C18.55,11.54 17.77,11.17
|
||||
16.7,11.17C15.19,11.17 14.22,12.13 14.22,13.4C14.22,14.78 15.03,15.43
|
||||
16.25,15.95L16.67,16.13C17.45,16.47 17.91,16.68 17.91,17.26C17.91,17.74 17.46,18.09
|
||||
16.76,18.09C15.93,18.09 15.45,17.66 15.09,17.06L13.71,17.86Z</Geometry>
|
||||
<Geometry x:Key="CssIcon">
|
||||
M5,3L4.35,6.34H17.94L17.5,8.5H3.92L3.26,11.83H16.85L16.09,15.64L10.61,17.45L5.86,15.64L6.19,14H2.85L2.06,18L9.91,21L18.96,18L20.16,11.97L20.4,10.76L21.94,3H5Z</Geometry>
|
||||
<Geometry x:Key="CsvIcon">M14 2H6C4.9 2 4 2.9 4 4V20C4 21.1 4.9 22 6 22H18C19.1 22 20 21.1 20
|
||||
20V8L14 2M15 16L13 20H10L12 16H9V11H15V16M13 9V3.5L18.5 9H13Z</Geometry>
|
||||
<Geometry x:Key="AIIcon">M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1
|
||||
21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1
|
||||
0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1
|
||||
12,2M7.5,13A2.5,2.5 0 0,0 5,15.5A2.5,2.5 0 0,0 7.5,18A2.5,2.5 0 0,0 10,15.5A2.5,2.5 0 0,0
|
||||
7.5,13M16.5,13A2.5,2.5 0 0,0 14,15.5A2.5,2.5 0 0,0 16.5,18A2.5,2.5 0 0,0 19,15.5A2.5,2.5 0
|
||||
0,0 16.5,13Z</Geometry>
|
||||
|
||||
<!-- For specific games-->
|
||||
<Geometry x:Key="BorderlandsIcon">M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6 ZM12,11A3,3 0 1,0 12,17A3,3 0 0,0 12,11 ZM12,12.5L14,16H13L12,14.5L11,16H10L12,12.5Z</Geometry>
|
||||
<Geometry x:Key="AionIcon">M609 180.1c-19.4 2.3-38.2 7.8-56.5 16.8-53.8 26.5-89.2 74.9-98.7 135.1-1.1 7-1.3 133.1-1.3 739 0 693.9.1 731 1.8 741.4 12.8 79.4 70.7 137.8 149.2 150.6 11.8 2 20.6 2 563.5 2s551.7 0 563.5-2c57.2-9.3 104-43 130.8-94.1 9.1-17.2 14.6-33.9 18.4-55.4 1.6-9.4 1.8-40.6 2-554l.3-544-268.2-268.2L1345.5 179l-364.5.1c-200.5.1-367.9.5-372 1m893 378.4L1747.5 804H1256V558.5c0-135 .1-245.5.3-245.5.1 0 110.7 110.5 245.7 245.5m-792.1 532c24.5 1.3 47 2.9 49.8 3.4 7.1 1.3 12.8 5.5 22.5 16.4 6.4 7.3 9.2 11.5 13.6 20.7 9.2 19.4 21.4 47.2 44.4 101.5 27.5 65.1 39.7 92.3 55.5 124 6.9 13.7 16.1 32.9 20.5 42.5 8.2 17.9 15.4 31.9 18.3 35.5 1.5 1.8 1.5-7.2.9-109-.6-108.7-.7-111.1-2.7-116.5-3.1-8.3-10-14.5-24.7-22-10.1-5.1-11.9-6.4-10.9-7.6 1.6-2 5.8-1.8 21.3 1.1 19.3 3.6 39.1 4.5 97.7 4.5 42.1 0 51.9.3 53.4 1.4 1.8 1.3 1.8 1.4-.1 1.9-1 .3-3.9.8-6.4 1.2s-8.5 1.7-13.5 3c-4.9 1.3-12.1 2.6-16 3-7.9.8-14.3 3.2-18 6.9l-2.5 2.5v123.7c0 121.8 0 123.8 2 125.9 1.4 1.5 2.1 4.1 2.6 9.2.8 8.1 2.2 10.1 12.6 17.2 9.3 6.5 9.3 6.5-26.7 7.3-17.6.4-45.3.7-61.5.5-29.2-.2-29.5-.2-29.8-2.3-.2-1.7.7-2.5 5.5-4.5 3.2-1.3 7.5-4.1 9.8-6.4 4.5-4.5 8.3-11 7.2-12.2-1.3-1.2-72.8-1.6-90.2-.5-13.5.9-16.2.8-17.5-.4-1.9-1.9-.9-2.7 8-6.4 9.8-4.1 11-5.2 11-11 0-3.9-3.7-13.2-22.3-56.1l-22.3-51.4-4.5-.6c-13.1-2-52.1-3.1-69.3-2-14.4.9-38.5 3.6-39.3 4.4-.1.1-5.6 13.5-12.3 29.7s-16 38.7-20.7 50c-7.4 17.9-8.5 21.1-8.1 25.1.6 5.6 3.9 10.3 10.2 14.3 4.8 3 5.8 5.1 2.9 5.8-1 .2-10.6 0-21.3-.5-21.7-.9-83.9-.2-108.4 1.3-22.1 1.4-22.5.3-1.7-5 17.9-4.6 33.3-9.6 42.4-13.7l7.7-3.6 6.9-13.1c3.8-7.2 14.2-27.5 23.1-45.2 17.9-35.6 19-38.9 15.5-47.9-1-2.7-1.4-5.6-1.1-7.1.4-1.5 8.1-10.1 17.5-19.8 9.2-9.4 17.6-18.6 18.5-20.4s6.4-15.7 12.2-30.8c5.7-15.1 17.9-46.7 27.1-70.2l16.6-42.7-9.3-18.2c-5.1-10-10.7-19.8-12.5-21.6-6-6.1-16.6-9.9-32-11.4-7.8-.8-8-.9-8.3-3.6s-.3-2.7 5.9-2.7c3.5 0 26.3 1.1 50.8 2.5m999.3 20.4c3 5.2 4.8 10.9 9.7 31 8.8 35.5 11.8 55.6 14.2 93.1 1.5 24.1.6 87-1.5 108-1.8 17.4-4.4 37.5-5.3 40.5-.3 1.3-.2 1.7.5 1 1.2-1.2 11.9-33.8 16.2-49.5 1.8-6.3 3.7-12.4 4.2-13.4 3.4-6.4 2.2 14.4-2 34.9-1.3 6.3-1.5 9.6-.9 10.7 2.1 3.3-9.4 55.8-18.3 83.3-5.5 17.2-15.6 42.7-18.1 45.9-1.1 1.5-2.6 2.3-3.4 1.9-.8-.3-5.7-6.9-10.9-14.7-17.4-26.2-33.3-45.2-60.7-72.1-16.4-16.1-29.1-27.5-45.6-41-4-3.2-7.5-6.5-7.8-7.3-1.2-3.2 5.5.3 19.9 10.4 8.1 5.8 15 10.3 15.2 10.2.4-.5-17.3-14.6-37.1-29.4-43.5-32.7-81.4-58.4-86.1-58.4-1.3 0-1.4 9.9-.8 86.7.4 61.2 1 87.5 1.8 89.3 1.4 3.1 7.5 7.2 14 9.5 6.9 2.4 7.6 3.2 4.6 5.5-2.4 1.9-5 2-74.2 2-45.3 0-71.8-.4-71.8-1 0-.9 3.2-1.9 12-3.9 9.2-2.1 22.3-6.2 26.9-8.6 7.6-3.8 8.9-8.7 10.1-38 1.3-29.8 2.5-203 1.5-217.8-.7-11.3-.9-12-3.8-15.3-1.6-1.9-4.3-4.2-6-5-5.1-2.7-24.7-6.3-42.9-7.9-9.7-.8-18.4-1.8-19.2-2.1-1.4-.5-2.2-2-1.3-2.6.3-.2 73.8-1.9 90.7-2.1 12.6-.2 13.9-.4 19.5-3 4.8-2.3 8.6-3.1 19.5-4.2 18.5-1.9 34.2-2.3 34.7-.9.3 1-2.3 4.6-10.9 14.7l-3.3 3.9-.3 20.2-.3 20.2 5.7 8c17.5 24.5 49.6 55.6 93.9 91 20 16.1 58.7 45.6 59.1 45.1.7-.7 6.5-38.1 8.5-55.7 3-25 3.3-66.8.6-84-2.5-16.2-9.6-43-11.4-43-.2 0-8.1 7.2-17.5 16.1-9.3 8.8-17.2 15.8-17.5 15.5s2.7-4.5 6.8-9.3c13-15.6 35.1-41.7 37.2-44.1 1.1-1.2 1.8-2.2 1.4-2.2-.3 0-16.9 17-36.8 37.7-37.3 38.8-41.5 43-42.6 41.9-.8-.8-4.1 3.1 54-63.3 28.4-32.6 51.7-59.6 51.7-59.9s-3.2 2.3-7 5.7c-14.3 12.9-15.9 13.8-7.5 4.4 16.1-18.1 32.8-35.6 33.9-35.2.6.2 2.8 3.2 4.8 6.6m-578.4 94.3c-.3.7-5 4.4-10.5 8.3-13.5 9.4-17.7 12.9-31.6 26.4-8.1 8-13.5 14.2-17.6 20.5-6.8 10.7-11.5 18.6-10.9 18.6.3 0 2-2.1 3.8-4.8 5.1-7.1 19.5-21.6 28.5-28.7 24.4-19.1 53.7-31.3 89-37.2 13.7-2.2 53.7-2.5 68.5-.5 45.5 6.4 82.4 22.6 109.1 48 26 24.7 40.4 54.7 45 93.7 1.7 14.2.6 42.3-2.1 54.9-8.5 39.6-25.4 68.8-53.5 92.6-15.5 13-29.1 20.9-45.7 26.5-18.4 6.1-35.4 7.7-56 5.3l-10.3-1.3 10.5-.6c11.4-.8 27.2-3.2 31.1-4.9 2.3-.9 2.2-1-.6-.5-15.1 2.4-38.9 3.2-48.9 1.5-11.5-1.9-10.1-4 6.3-9.9 6.2-2.3 15.4-6.2 20.4-8.8 56.5-29.2 84.7-97.9 69.1-168.3-11.5-51.5-43.4-85-89.3-93.6-11.4-2.1-32.9-2.2-44.2 0-40.6 7.7-70 34.9-84.5 78.1-5.8 17.5-7.7 31.8-7.1 54 .6 21.3 2.2 32.3 7.3 49.2 11.8 39 34.4 64.6 78.4 88.7 4.7 2.6 9.6 5.8 11 7.1 2.3 2.4 2.4 2.6.7 4.2-1.6 1.6-3.8 1.8-17 1.7-45.3-.2-82.1-18.2-112.6-55-4.2-5.1-9.6-12.4-12.1-16.2-2.5-3.9-4.9-7.1-5.4-7.1-.5-.1-.6 3.7-.3 8.5l.5 8.5-2.4-2.2c-3-2.8-10.5-17.2-14.3-27.7-7.2-19.5-12.1-46.9-12.1-67.8 0-30.8 5.7-56.3 18.5-81.9 16.2-32.6 43.1-58.4 79-75.7 10.3-4.9 13-5.7 12.3-3.6 M731 1231.2c-6.2 15.5-15.9 40.1-21.6 54.5-5.7 14.5-10.4 26.7-10.4 27.2 0 1.5 7.9 2 39 2.7 26.5.5 51.1-.3 52.6-1.8.6-.6-46.1-108.6-47.5-110.1-.5-.5-5.9 11.9-12.1 27.5</Geometry>
|
||||
<Geometry x:Key="BorderlandsIcon">M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0
|
||||
6,22H18A2,2 0 0,0 20,20V8L14,2H6 ZM12,11A3,3 0 1,0 12,17A3,3 0 0,0 12,11
|
||||
ZM12,12.5L14,16H13L12,14.5L11,16H10L12,12.5Z</Geometry>
|
||||
<Geometry x:Key="AionIcon">M609 180.1c-19.4 2.3-38.2 7.8-56.5 16.8-53.8 26.5-89.2 74.9-98.7
|
||||
135.1-1.1 7-1.3 133.1-1.3 739 0 693.9.1 731 1.8 741.4 12.8 79.4 70.7 137.8 149.2 150.6 11.8
|
||||
2 20.6 2 563.5 2s551.7 0 563.5-2c57.2-9.3 104-43 130.8-94.1 9.1-17.2 14.6-33.9 18.4-55.4
|
||||
1.6-9.4 1.8-40.6 2-554l.3-544-268.2-268.2L1345.5 179l-364.5.1c-200.5.1-367.9.5-372 1m893
|
||||
378.4L1747.5 804H1256V558.5c0-135 .1-245.5.3-245.5.1 0 110.7 110.5 245.7 245.5m-792.1
|
||||
532c24.5 1.3 47 2.9 49.8 3.4 7.1 1.3 12.8 5.5 22.5 16.4 6.4 7.3 9.2 11.5 13.6 20.7 9.2 19.4
|
||||
21.4 47.2 44.4 101.5 27.5 65.1 39.7 92.3 55.5 124 6.9 13.7 16.1 32.9 20.5 42.5 8.2 17.9 15.4
|
||||
31.9 18.3 35.5 1.5 1.8
|
||||
1.5-7.2.9-109-.6-108.7-.7-111.1-2.7-116.5-3.1-8.3-10-14.5-24.7-22-10.1-5.1-11.9-6.4-10.9-7.6
|
||||
1.6-2 5.8-1.8 21.3 1.1 19.3 3.6 39.1 4.5 97.7 4.5 42.1 0 51.9.3 53.4 1.4 1.8 1.3 1.8 1.4-.1
|
||||
1.9-1 .3-3.9.8-6.4 1.2s-8.5 1.7-13.5 3c-4.9 1.3-12.1 2.6-16 3-7.9.8-14.3 3.2-18 6.9l-2.5
|
||||
2.5v123.7c0 121.8 0 123.8 2 125.9 1.4 1.5 2.1 4.1 2.6 9.2.8 8.1 2.2 10.1 12.6 17.2 9.3 6.5
|
||||
9.3 6.5-26.7 7.3-17.6.4-45.3.7-61.5.5-29.2-.2-29.5-.2-29.8-2.3-.2-1.7.7-2.5 5.5-4.5 3.2-1.3
|
||||
7.5-4.1 9.8-6.4 4.5-4.5 8.3-11
|
||||
7.2-12.2-1.3-1.2-72.8-1.6-90.2-.5-13.5.9-16.2.8-17.5-.4-1.9-1.9-.9-2.7 8-6.4 9.8-4.1 11-5.2
|
||||
11-11 0-3.9-3.7-13.2-22.3-56.1l-22.3-51.4-4.5-.6c-13.1-2-52.1-3.1-69.3-2-14.4.9-38.5
|
||||
3.6-39.3 4.4-.1.1-5.6 13.5-12.3 29.7s-16 38.7-20.7 50c-7.4 17.9-8.5 21.1-8.1 25.1.6 5.6 3.9
|
||||
10.3 10.2 14.3 4.8 3 5.8 5.1 2.9 5.8-1 .2-10.6 0-21.3-.5-21.7-.9-83.9-.2-108.4 1.3-22.1
|
||||
1.4-22.5.3-1.7-5 17.9-4.6 33.3-9.6 42.4-13.7l7.7-3.6 6.9-13.1c3.8-7.2 14.2-27.5 23.1-45.2
|
||||
17.9-35.6 19-38.9 15.5-47.9-1-2.7-1.4-5.6-1.1-7.1.4-1.5 8.1-10.1 17.5-19.8 9.2-9.4 17.6-18.6
|
||||
18.5-20.4s6.4-15.7 12.2-30.8c5.7-15.1 17.9-46.7
|
||||
27.1-70.2l16.6-42.7-9.3-18.2c-5.1-10-10.7-19.8-12.5-21.6-6-6.1-16.6-9.9-32-11.4-7.8-.8-8-.9-8.3-3.6s-.3-2.7
|
||||
5.9-2.7c3.5 0 26.3 1.1 50.8 2.5m999.3 20.4c3 5.2 4.8 10.9 9.7 31 8.8 35.5 11.8 55.6 14.2
|
||||
93.1 1.5 24.1.6 87-1.5 108-1.8 17.4-4.4 37.5-5.3 40.5-.3 1.3-.2 1.7.5 1 1.2-1.2 11.9-33.8
|
||||
16.2-49.5 1.8-6.3 3.7-12.4 4.2-13.4 3.4-6.4 2.2 14.4-2 34.9-1.3 6.3-1.5 9.6-.9 10.7 2.1
|
||||
3.3-9.4 55.8-18.3 83.3-5.5 17.2-15.6 42.7-18.1 45.9-1.1 1.5-2.6 2.3-3.4
|
||||
1.9-.8-.3-5.7-6.9-10.9-14.7-17.4-26.2-33.3-45.2-60.7-72.1-16.4-16.1-29.1-27.5-45.6-41-4-3.2-7.5-6.5-7.8-7.3-1.2-3.2
|
||||
5.5.3 19.9 10.4 8.1 5.8 15 10.3 15.2
|
||||
10.2.4-.5-17.3-14.6-37.1-29.4-43.5-32.7-81.4-58.4-86.1-58.4-1.3 0-1.4 9.9-.8 86.7.4 61.2 1
|
||||
87.5 1.8 89.3 1.4 3.1 7.5 7.2 14 9.5 6.9 2.4 7.6 3.2 4.6 5.5-2.4 1.9-5 2-74.2 2-45.3
|
||||
0-71.8-.4-71.8-1 0-.9 3.2-1.9 12-3.9 9.2-2.1 22.3-6.2 26.9-8.6 7.6-3.8 8.9-8.7 10.1-38
|
||||
1.3-29.8 2.5-203
|
||||
1.5-217.8-.7-11.3-.9-12-3.8-15.3-1.6-1.9-4.3-4.2-6-5-5.1-2.7-24.7-6.3-42.9-7.9-9.7-.8-18.4-1.8-19.2-2.1-1.4-.5-2.2-2-1.3-2.6.3-.2
|
||||
73.8-1.9 90.7-2.1 12.6-.2 13.9-.4 19.5-3 4.8-2.3 8.6-3.1 19.5-4.2 18.5-1.9 34.2-2.3
|
||||
34.7-.9.3 1-2.3 4.6-10.9 14.7l-3.3 3.9-.3 20.2-.3 20.2 5.7 8c17.5 24.5 49.6 55.6 93.9 91 20
|
||||
16.1 58.7 45.6 59.1 45.1.7-.7 6.5-38.1 8.5-55.7 3-25
|
||||
3.3-66.8.6-84-2.5-16.2-9.6-43-11.4-43-.2 0-8.1 7.2-17.5 16.1-9.3 8.8-17.2 15.8-17.5
|
||||
15.5s2.7-4.5 6.8-9.3c13-15.6 35.1-41.7 37.2-44.1 1.1-1.2 1.8-2.2 1.4-2.2-.3 0-16.9 17-36.8
|
||||
37.7-37.3 38.8-41.5 43-42.6 41.9-.8-.8-4.1 3.1 54-63.3 28.4-32.6 51.7-59.6 51.7-59.9s-3.2
|
||||
2.3-7 5.7c-14.3 12.9-15.9 13.8-7.5 4.4 16.1-18.1 32.8-35.6 33.9-35.2.6.2 2.8 3.2 4.8
|
||||
6.6m-578.4 94.3c-.3.7-5 4.4-10.5 8.3-13.5 9.4-17.7 12.9-31.6 26.4-8.1 8-13.5 14.2-17.6
|
||||
20.5-6.8 10.7-11.5 18.6-10.9 18.6.3 0 2-2.1 3.8-4.8 5.1-7.1 19.5-21.6 28.5-28.7 24.4-19.1
|
||||
53.7-31.3 89-37.2 13.7-2.2 53.7-2.5 68.5-.5 45.5 6.4 82.4 22.6 109.1 48 26 24.7 40.4 54.7 45
|
||||
93.7 1.7 14.2.6 42.3-2.1 54.9-8.5 39.6-25.4 68.8-53.5 92.6-15.5 13-29.1 20.9-45.7 26.5-18.4
|
||||
6.1-35.4 7.7-56 5.3l-10.3-1.3 10.5-.6c11.4-.8 27.2-3.2 31.1-4.9 2.3-.9 2.2-1-.6-.5-15.1
|
||||
2.4-38.9 3.2-48.9 1.5-11.5-1.9-10.1-4 6.3-9.9 6.2-2.3 15.4-6.2 20.4-8.8 56.5-29.2 84.7-97.9
|
||||
69.1-168.3-11.5-51.5-43.4-85-89.3-93.6-11.4-2.1-32.9-2.2-44.2 0-40.6 7.7-70 34.9-84.5
|
||||
78.1-5.8 17.5-7.7 31.8-7.1 54 .6 21.3 2.2 32.3 7.3 49.2 11.8 39 34.4 64.6 78.4 88.7 4.7 2.6
|
||||
9.6 5.8 11 7.1 2.3 2.4 2.4 2.6.7 4.2-1.6 1.6-3.8 1.8-17
|
||||
1.7-45.3-.2-82.1-18.2-112.6-55-4.2-5.1-9.6-12.4-12.1-16.2-2.5-3.9-4.9-7.1-5.4-7.1-.5-.1-.6
|
||||
3.7-.3 8.5l.5 8.5-2.4-2.2c-3-2.8-10.5-17.2-14.3-27.7-7.2-19.5-12.1-46.9-12.1-67.8 0-30.8
|
||||
5.7-56.3 18.5-81.9 16.2-32.6 43.1-58.4 79-75.7 10.3-4.9 13-5.7 12.3-3.6 M731 1231.2c-6.2
|
||||
15.5-15.9 40.1-21.6 54.5-5.7 14.5-10.4 26.7-10.4 27.2 0 1.5 7.9 2 39 2.7 26.5.5 51.1-.3
|
||||
52.6-1.8.6-.6-46.1-108.6-47.5-110.1-.5-.5-5.9 11.9-12.1 27.5</Geometry>
|
||||
</ResourceDictionary>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -14,7 +14,7 @@
|
|||
Background="Transparent">
|
||||
<TabControl x:Name="SearchTabControl"
|
||||
SelectionChanged="OnTabItemChange">
|
||||
<TabItem Style="{StaticResource TabItemFillSpace}"
|
||||
<TabItem Theme="{StaticResource TabItemFillSpace}"
|
||||
Header="By Path">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
Watermark="Write your pattern and press enter..." />
|
||||
<StackPanel Grid.Column="1"
|
||||
Orientation="Horizontal">
|
||||
<ToggleButton ToolTip="Match Case"
|
||||
<ToggleButton ToolTip.Tip="Match Case"
|
||||
Padding="5"
|
||||
IsChecked="{Binding SearchTab.HasMatchCaseEnabled}">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -67,7 +67,7 @@
|
|||
</Canvas>
|
||||
</Viewbox>
|
||||
</ToggleButton>
|
||||
<ToggleButton ToolTip="Regex"
|
||||
<ToggleButton ToolTip.Tip="Regex"
|
||||
Padding="5"
|
||||
IsChecked="{Binding SearchTab.HasRegexEnabled}">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -80,7 +80,7 @@
|
|||
</Canvas>
|
||||
</Viewbox>
|
||||
</ToggleButton>
|
||||
<Button ToolTip="Sort File Sizes"
|
||||
<Button ToolTip.Tip="Sort File Sizes"
|
||||
Padding="5"
|
||||
Click="OnSearchSortClick">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
</Canvas>
|
||||
</Viewbox>
|
||||
</Button>
|
||||
<Button ToolTip="Clear Search Filter"
|
||||
<Button ToolTip.Tip="Clear Search Filter"
|
||||
Padding="5"
|
||||
Click="OnDeleteSearchClick">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -126,7 +126,7 @@
|
|||
x:Name="SearchDataGrid"
|
||||
IsReadOnly="True"
|
||||
AutoGenerateColumns="False"
|
||||
ItemsSource="{Binding SearchTab.SearchResultsView, IsAsync=True}"
|
||||
ItemsSource="{Binding SearchTab.SearchResultsView}"
|
||||
DoubleTapped="OnAssetDoubleClick">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Path"
|
||||
|
|
@ -406,7 +406,7 @@
|
|||
</DataGrid>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
<TabItem Style="{StaticResource TabItemFillSpace}"
|
||||
<TabItem Theme="{StaticResource TabItemFillSpace}"
|
||||
HorizontalAlignment="Stretch">
|
||||
<TabItem.Header>
|
||||
<TextBlock>
|
||||
|
|
@ -475,7 +475,7 @@
|
|||
Watermark="Write your pattern and press enter..." />
|
||||
<StackPanel Grid.Column="1"
|
||||
Orientation="Horizontal">
|
||||
<ToggleButton ToolTip="Match Case"
|
||||
<ToggleButton ToolTip.Tip="Match Case"
|
||||
Padding="5"
|
||||
IsChecked="{Binding RefTab.HasMatchCaseEnabled}">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -488,7 +488,7 @@
|
|||
</Canvas>
|
||||
</Viewbox>
|
||||
</ToggleButton>
|
||||
<ToggleButton ToolTip="Regex"
|
||||
<ToggleButton ToolTip.Tip="Regex"
|
||||
Padding="5"
|
||||
IsChecked="{Binding RefTab.HasRegexEnabled}">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -501,7 +501,7 @@
|
|||
</Canvas>
|
||||
</Viewbox>
|
||||
</ToggleButton>
|
||||
<Button ToolTip="Sort File Sizes"
|
||||
<Button ToolTip.Tip="Sort File Sizes"
|
||||
Padding="5"
|
||||
Click="OnSearchSortClick">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -514,7 +514,7 @@
|
|||
</Canvas>
|
||||
</Viewbox>
|
||||
</Button>
|
||||
<Button ToolTip="Clear Search Filter"
|
||||
<Button ToolTip.Tip="Clear Search Filter"
|
||||
Padding="5"
|
||||
Click="OnDeleteSearchClick">
|
||||
<Viewbox Width="16"
|
||||
|
|
@ -548,7 +548,7 @@
|
|||
x:Name="RefDataGrid"
|
||||
IsReadOnly="True"
|
||||
AutoGenerateColumns="False"
|
||||
ItemsSource="{Binding RefTab.SearchResultsView, IsAsync=True}"
|
||||
ItemsSource="{Binding RefTab.SearchResultsView}"
|
||||
DoubleTapped="OnAssetDoubleClick">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Path"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:local="clr-namespace:FModel"
|
||||
xmlns:views="clr-namespace:FModel.Views"
|
||||
xmlns:c4pMeshes="clr-namespace:CUE4Parse_Conversion.Meshes;assembly=CUE4Parse-Conversion"
|
||||
xmlns:controls="clr-namespace:FModel.Views.Resources.Controls"
|
||||
xmlns:converters="clr-namespace:FModel.Views.Resources.Converters"
|
||||
|
|
@ -55,7 +56,7 @@
|
|||
Text="Output Directory *"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 0 0 5"
|
||||
ToolTip="Directory where log files, backups and other do-not-delete files will be put in." />
|
||||
ToolTip.Tip="Directory where log files, backups and other do-not-delete files will be put in." />
|
||||
<TextBox x:Name="ImJackedBro"
|
||||
Grid.Row="0"
|
||||
Grid.Column="2"
|
||||
|
|
@ -72,14 +73,14 @@
|
|||
<CheckBox Grid.Row="0"
|
||||
Grid.Column="6"
|
||||
Margin="5 0 0 5"
|
||||
ToolTip="Customize the directory of more output folders"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
ToolTip.Tip="Customize the directory of more output folders"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
IsChecked="{Binding SettingsView.UseCustomOutputFolders, Mode=TwoWay}" />
|
||||
<Grid Grid.Row="1"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="7"
|
||||
HorizontalAlignment="Right"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
IsVisible="{Binding SettingsView.UseCustomOutputFolders}">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
|
|
@ -90,7 +91,7 @@
|
|||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="10" />
|
||||
<ColumnDefinition Width="{Binding ActualWidth, ElementName=ImJackedBro}" />
|
||||
<ColumnDefinition Width="{Binding Bounds.Width, ElementName=ImJackedBro}" />
|
||||
<ColumnDefinition Width="5" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
|
@ -189,7 +190,7 @@
|
|||
Grid.ColumnSpan="5"
|
||||
ItemsSource="{Binding SettingsView.DiscordRpcs}"
|
||||
SelectedItem="{Binding SettingsView.SelectedDiscordRpc, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}">
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Converter={x:Static converters:EnumToStringConverter.Instance}}" />
|
||||
|
|
@ -200,7 +201,7 @@
|
|||
<Separator Grid.Row="3"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="7"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="GAME"></Separator>
|
||||
|
||||
<TextBlock Grid.Row="4"
|
||||
|
|
@ -226,14 +227,14 @@
|
|||
Text="UE Versions *"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 0 0 5"
|
||||
ToolTip="Override the UE version to use when parsing packages" />
|
||||
ToolTip.Tip="Override the UE version to use when parsing packages" />
|
||||
<controls:FilterableComboBox Grid.Row="5"
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="5"
|
||||
SelectedItem="{Binding SettingsView.SelectedUeGame, Mode=TwoWay}"
|
||||
ItemsSource="{Binding SettingsView.UeGames}"
|
||||
Style="{StaticResource UComboBox}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
Theme="{StaticResource UComboBox}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -247,13 +248,13 @@
|
|||
Text="Texture Platform *"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 0 0 5"
|
||||
ToolTip="Override the game's platform to ensure texture compatibility" />
|
||||
ToolTip.Tip="Override the game's platform to ensure texture compatibility" />
|
||||
<ComboBox Grid.Row="6"
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="5"
|
||||
ItemsSource="{Binding SettingsView.Platforms}"
|
||||
SelectedItem="{Binding SettingsView.SelectedUePlatform, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -267,13 +268,13 @@
|
|||
Text="Compressed Audio"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 0 0 5"
|
||||
ToolTip="What to do when encountering a compressed audio file" />
|
||||
ToolTip.Tip="What to do when encountering a compressed audio file" />
|
||||
<ComboBox Grid.Row="7"
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="5"
|
||||
ItemsSource="{Binding SettingsView.CompressedAudios}"
|
||||
SelectedItem="{Binding SettingsView.SelectedCompressedAudio, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -287,13 +288,13 @@
|
|||
Text="Packages Language"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 0 0 5"
|
||||
ToolTip="Language used and shown when parsing packages" />
|
||||
ToolTip.Tip="Language used and shown when parsing packages" />
|
||||
<ComboBox Grid.Row="8"
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="5"
|
||||
ItemsSource="{Binding SettingsView.AssetLanguages}"
|
||||
SelectedItem="{Binding SettingsView.SelectedAssetLanguage, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -307,7 +308,7 @@
|
|||
Text="Keep Directory Structure"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 5 0 10"
|
||||
ToolTip="Auto-save packages following their game directory" />
|
||||
ToolTip.Tip="Auto-save packages following their game directory" />
|
||||
<CheckBox Grid.Row="9"
|
||||
Grid.Column="2"
|
||||
Content="{Binding IsChecked, RelativeSource={RelativeSource Self}, Converter={x:Static converters:BoolToToggleConverter.Instance}}"
|
||||
|
|
@ -322,7 +323,7 @@
|
|||
<CheckBox Grid.Row="10"
|
||||
Grid.Column="2"
|
||||
Margin="0 5 0 0"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Content="{Binding IsChecked, RelativeSource={RelativeSource Self}, Converter={x:Static converters:BoolToToggleConverter.Instance}}"
|
||||
IsChecked="{Binding SettingsView.MappingEndpoint.Overwrite, Mode=TwoWay}" />
|
||||
|
||||
|
|
@ -331,14 +332,14 @@
|
|||
Text="Mapping File Path"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 10 0 0"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
IsVisible="{Binding SettingsView.MappingEndpoint.Overwrite}" />
|
||||
<TextBox Grid.Row="11"
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="3"
|
||||
Margin="0 10 0 0"
|
||||
Text="{Binding SettingsView.MappingEndpoint.FilePath, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
IsVisible="{Binding SettingsView.MappingEndpoint.Overwrite}" />
|
||||
<Button Grid.Row="11"
|
||||
Grid.Column="6"
|
||||
|
|
@ -346,13 +347,13 @@
|
|||
HorizontalAlignment="Right"
|
||||
Click="OnBrowseMappings"
|
||||
Margin="0 10 0 0"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
IsVisible="{Binding SettingsView.MappingEndpoint.Overwrite}" />
|
||||
|
||||
<Separator Grid.Row="12"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="7"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="ADVANCED"></Separator>
|
||||
|
||||
<TextBlock Grid.Row="13"
|
||||
|
|
@ -388,13 +389,13 @@
|
|||
Text="AES Reload at Launch"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 0 0 5"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
IsVisible="{Binding SettingsView.AesEndpoint.IsValid}" />
|
||||
<ComboBox Grid.Row="14"
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="5"
|
||||
Margin="0 0 0 5"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
ItemsSource="{Binding SettingsView.AesReloads}"
|
||||
SelectedItem="{Binding SettingsView.SelectedAesReload, Mode=TwoWay}"
|
||||
IsVisible="{Binding SettingsView.AesEndpoint.IsValid}">
|
||||
|
|
@ -414,7 +415,7 @@
|
|||
Grid.Column="2"
|
||||
Grid.ColumnSpan="5"
|
||||
Margin="0 0 0 5"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}">
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="5" />
|
||||
|
|
@ -467,7 +468,7 @@
|
|||
Text="Decompile Blueprint to Pseudo C++"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 0 0 5"
|
||||
ToolTip="Adds a right click option to decompile UClass packages into a pseudo C++ friendly format" />
|
||||
ToolTip.Tip="Adds a right click option to decompile UClass packages into a pseudo C++ friendly format" />
|
||||
<CheckBox Grid.Row="19"
|
||||
Grid.Column="2"
|
||||
Content="{Binding IsChecked, RelativeSource={RelativeSource Self}, Converter={x:Static converters:BoolToToggleConverter.Instance}}"
|
||||
|
|
@ -517,7 +518,7 @@
|
|||
VerticalAlignment="Center"
|
||||
VerticalContentAlignment="Center"
|
||||
MaxLength="20"
|
||||
ToolTip="Enter decryption key in numeric or hexadecimal format (valid key is up to 20 digits or 8 bytes long)"
|
||||
ToolTip.Tip="Enter decryption key in numeric or hexadecimal format (valid key is up to 20 digits or 8 bytes long)"
|
||||
TextAlignment="Right"
|
||||
TextChanged="CriwareKeyBox_TextChanged"
|
||||
Loaded="CriwareKeyBox_Loaded" />
|
||||
|
|
@ -539,7 +540,7 @@
|
|||
|
||||
<Image Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Source="avares://FModel/Resources/T_Placeholder_Item_Image.png" />
|
||||
<!-- TODO(P2-003): Image source DataTrigger on SelectedCosmeticStyle not yet
|
||||
supported (needs IValueConverter or code-behind) -->
|
||||
|
|
@ -566,7 +567,7 @@
|
|||
Grid.Column="2"
|
||||
ItemsSource="{Binding SettingsView.CosmeticStyles}"
|
||||
SelectedItem="{Binding SettingsView.SelectedCosmeticStyle, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -626,7 +627,7 @@
|
|||
Text="Model Export Directory *"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0 0 0 5"
|
||||
ToolTip="This will be the directory where Meshes, Materials and Animations will be exported" />
|
||||
ToolTip.Tip="This will be the directory where Meshes, Materials and Animations will be exported" />
|
||||
<TextBox Grid.Row="0"
|
||||
Grid.Column="2"
|
||||
IsReadOnly="True"
|
||||
|
|
@ -649,7 +650,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
ItemsSource="{Binding SettingsView.MeshExportFormats}"
|
||||
SelectedItem="{Binding SettingsView.SelectedMeshExportFormat, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -686,7 +687,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
ItemsSource="{Binding SettingsView.SocketExportFormats}"
|
||||
SelectedItem="{Binding SettingsView.SelectedSocketExportFormat, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5"
|
||||
IsEnabled="{Binding SettingsView.SocketSettingsEnabled}">
|
||||
<ComboBox.ItemTemplate>
|
||||
|
|
@ -707,7 +708,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
ItemsSource="{Binding SettingsView.CompressionFormats}"
|
||||
SelectedItem="{Binding SettingsView.SelectedCompressionFormat, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5"
|
||||
IsEnabled="{Binding SettingsView.CompressionSettingsEnabled}">
|
||||
<ComboBox.ItemTemplate>
|
||||
|
|
@ -727,7 +728,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
ItemsSource="{Binding SettingsView.LodExportFormats}"
|
||||
SelectedItem="{Binding SettingsView.SelectedLodExportFormat, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -739,7 +740,7 @@
|
|||
<Separator Grid.Row="6"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="5"
|
||||
Style="{StaticResource CustomSeparator}" />
|
||||
Theme="{StaticResource CustomSeparator}" />
|
||||
|
||||
<TextBlock Grid.Row="7"
|
||||
Grid.Column="0"
|
||||
|
|
@ -857,7 +858,7 @@
|
|||
<Separator Grid.Row="16"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="5"
|
||||
Style="{StaticResource CustomSeparator}" />
|
||||
Theme="{StaticResource CustomSeparator}" />
|
||||
|
||||
<TextBlock Grid.Row="17"
|
||||
Grid.Column="0"
|
||||
|
|
@ -869,7 +870,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
ItemsSource="{Binding SettingsView.NaniteMeshExportFormats}"
|
||||
SelectedItem="{Binding SettingsView.SelectedNaniteMeshExportFormat, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -888,7 +889,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
ItemsSource="{Binding SettingsView.MaterialExportFormats}"
|
||||
SelectedItem="{Binding SettingsView.SelectedMaterialExportFormat, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -907,7 +908,7 @@
|
|||
Grid.ColumnSpan="3"
|
||||
ItemsSource="{Binding SettingsView.TextureExportFormats}"
|
||||
SelectedItem="{Binding SettingsView.SelectedTextureExportFormat, Mode=TwoWay}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Views.SettingsView}}}"
|
||||
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type views:SettingsView}}}"
|
||||
Margin="0 0 0 5">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
|
|
@ -958,7 +959,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="0"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding DirLeftTab, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
<TextBlock Grid.Row="1"
|
||||
|
|
@ -967,13 +967,12 @@
|
|||
VerticalAlignment="Center" />
|
||||
<controls:HotkeyTextBox Grid.Row="1"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
HotKey="{Binding DirRightTab, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
|
||||
<Separator Grid.Row="2"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
Style="{StaticResource CustomSeparator}" />
|
||||
Theme="{StaticResource CustomSeparator}" />
|
||||
|
||||
<TextBlock Grid.Row="3"
|
||||
Grid.Column="0"
|
||||
|
|
@ -982,7 +981,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="3"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding SwitchAssetExplorer, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
<TextBlock Grid.Row="4"
|
||||
|
|
@ -992,7 +990,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="4"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding AssetLeftTab, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
<TextBlock Grid.Row="5"
|
||||
|
|
@ -1002,7 +999,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="5"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding AssetRightTab, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
<TextBlock Grid.Row="6"
|
||||
|
|
@ -1012,7 +1008,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="6"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding AssetAddTab, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
<TextBlock Grid.Row="7"
|
||||
|
|
@ -1021,13 +1016,12 @@
|
|||
VerticalAlignment="Center" />
|
||||
<controls:HotkeyTextBox Grid.Row="7"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
HotKey="{Binding AssetRemoveTab, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
|
||||
<Separator Grid.Row="8"
|
||||
Grid.Column="0"
|
||||
Grid.ColumnSpan="3"
|
||||
Style="{StaticResource CustomSeparator}" />
|
||||
Theme="{StaticResource CustomSeparator}" />
|
||||
|
||||
<TextBlock Grid.Row="9"
|
||||
Grid.Column="0"
|
||||
|
|
@ -1036,7 +1030,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="9"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding AddAudio, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
<TextBlock Grid.Row="10"
|
||||
|
|
@ -1046,7 +1039,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="10"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding PlayPauseAudio, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
<TextBlock Grid.Row="11"
|
||||
|
|
@ -1056,7 +1048,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="11"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding PreviousAudio, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
<TextBlock Grid.Row="12"
|
||||
|
|
@ -1066,7 +1057,6 @@
|
|||
Margin="0 0 0 5" />
|
||||
<controls:HotkeyTextBox Grid.Row="12"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource TextBoxDefaultStyle}"
|
||||
Margin="0 0 0 5"
|
||||
HotKey="{Binding NextAudio, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}" />
|
||||
</Grid>
|
||||
|
|
|
|||
|
|
@ -37,21 +37,11 @@
|
|||
<ColumnDefinition Width="5" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<!-- <Grid.Style> -->
|
||||
<!-- <Style TargetType="Grid"> -->
|
||||
<!-- <Setter Property="Visibility" Value="Visible" /> -->
|
||||
<!-- <Style.Triggers> -->
|
||||
<!-- <DataTrigger Binding="{Binding Title, RelativeSource={RelativeSource
|
||||
AncestorType=adonisControls:AdonisWindow}}" Value="Releases"> -->
|
||||
<!-- <Setter Property="Visibility" Value="Collapsed" /> -->
|
||||
<!-- </DataTrigger> -->
|
||||
<!-- </Style.Triggers> -->
|
||||
<!-- </Style> -->
|
||||
<!-- </Grid.Style> -->
|
||||
|
||||
|
||||
<Button Grid.Column="0"
|
||||
VerticalAlignment="Top"
|
||||
Height="{Binding ActualHeight, ElementName=RemindButton}"
|
||||
Height="{Binding Bounds.Height, ElementName=RemindButton}"
|
||||
Click="OnDownloadLatest">
|
||||
Download Latest Release
|
||||
</Button>
|
||||
|
|
@ -85,20 +75,27 @@
|
|||
</Grid>
|
||||
|
||||
<Separator Grid.Row="2"
|
||||
Style="{StaticResource CustomSeparator}"
|
||||
Theme="{StaticResource CustomSeparator}"
|
||||
Tag="History" />
|
||||
<ScrollViewer Grid.Row="3"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
HorizontalScrollBarVisibility="Disabled">
|
||||
<Grid>
|
||||
<!-- TODO(P3-UpdateVM): GroupStyle/GroupItem/HeaderStringFormat are WPF-only APIs not
|
||||
supported by Avalonia ItemsControl. Date grouping will be re-implemented once
|
||||
CommitsView is migrated from System.Windows.Data.ListCollectionView to an
|
||||
Avalonia-compatible collection (see TODO on CommitsView property). -->
|
||||
<ItemsControl ItemsSource="{Binding CommitsView, IsAsync=True}">
|
||||
<ItemsControl ItemsSource="{Binding CommitGroups}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<controls:CommitControl Margin="0 0 0 1" />
|
||||
<StackPanel>
|
||||
<TextBlock Text="{Binding Date, StringFormat={}{0:dddd, MMMM d, yyyy}}"
|
||||
FontWeight="SemiBold"
|
||||
Margin="0 8 0 4" />
|
||||
<ItemsControl ItemsSource="{Binding Items}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<controls:CommitControl Margin="0 0 0 1" />
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
|
|
@ -106,14 +103,7 @@
|
|||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Top"
|
||||
Margin="0 20"
|
||||
IsVisible="{Binding CommitsView.Count, FallbackValue=0,
|
||||
Converter={x:Static converters:IsNotZeroConverter.Instance},
|
||||
ConverterParameter=invert}">
|
||||
<!-- TODO(P3-UpdateVM): CommitsView is System.Windows.Data.ListCollectionView.
|
||||
Once UpdateViewModel is migrated to Avalonia, replace CommitsView.Count
|
||||
with a dedicated HasNoCommits bool property or bind against the
|
||||
ObservableCollection directly so Count changes trigger INPC. -->
|
||||
</TextBlock>
|
||||
IsVisible="{Binding HasNoCommits}" />
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user