JD2022-TU1/main/tools/apps/ResourceViewer/MainWindow.xaml

423 lines
25 KiB
XML

<Window x:Class="ResourceViewer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ResourceViewer"
xmlns:perforce="clr-namespace:JD.Perforce;assembly=JD.Perforce"
xmlns:gui="clr-namespace:JD.Remoting.Gui;assembly=JD.Remoting"
Title="Resource Viewer"
Height="800"
Width="1018"
MinHeight="800"
MinWidth="1015"
Loaded="OnLoaded"
Closing="OnClosing"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Icon="/ResourceViewer;component/Resources/process.ico" >
<Window.Resources>
<local:BoolToBrushConverter x:Key="BoolToBrushConverter" />
<local:RatioToBrushConverter x:Key="RatioToBrushConverter" />
<local:RatioGreenToRedToBrushConverter x:Key="RatioGreenToRedToBrushConverter" />
<Style x:Key="GenericButtonStyle" TargetType="Button">
<Setter Property="Margin" Value="2"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontSize" Value="12px"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Background" >
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="LightCyan" Offset="0.1"/>
<GradientStop Color="LightSlateGray" Offset="0.8"/>
<GradientStop Color="LightCyan" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
<!-- List box style to have the same selected and mouse over styles even the list has the fosus or not -->
<Style x:Key="SameStyleFocusedUnfocusedListBox" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="Gainsboro"/>
<Setter Property="FontWeight" Value="Regular"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Foreground" Value="LavenderBlush"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="LightSteelBlue"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontWeight" Value="DemiBold"/>
</Trigger>
</Style.Triggers>
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="SteelBlue" Opacity="1"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="SteelBlue" Opacity="1"/>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
</Style.Resources>
</Style>
</Window.Resources>
<Grid >
<StatusBar Name="_statusBar" HorizontalContentAlignment="Stretch" Margin="0,0,0,0" Height="30" VerticalAlignment="Bottom" FontFamily="Arial" Background="#FFB7B7AD">
<StackPanel Height="30" HorizontalAlignment="Left" Margin="0,0,0,0" Name="_statusBarStackPanel" VerticalAlignment="Center" Orientation="Horizontal">
<gui:EngineConnectionStatusWpfUserControl Name="_engineConnectionStatusUserControl" Margin="0,0,0,0" FontSize="12" HorizontalAlignment="Left" />
<perforce:P4ConnectionStatusWpfUserControl Name="_p4ConnectionStatusUserControl" Margin="0,0,0,0" FontSize="12" HorizontalAlignment="Left" />
<Label Height="25"
Name="_targetLabel"
Margin="4,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Background="Transparent"
Foreground="Black"
FontFamily="Arial"
FontSize="12"
FontWeight="Bold" />
<local:FiltererWarningUserControl x:Name="_filterWarningUserControl" Visibility="Hidden" Width="200" Margin="4,0,4,0" VerticalAlignment="Stretch" />
<local:FiltererWarningUserControl x:Name="_checkoutWarningUserControl" Visibility="Hidden" Margin="4,0,4,0" VerticalAlignment="Stretch" />
</StackPanel>
</StatusBar>
<ToolBar Height="32" Name="_toolBar" VerticalAlignment="Top" Background="#FFB7B7AD" >
<StackPanel HorizontalAlignment="Stretch" Margin="2,0,2,0" Name="_toolBarStackPanel" VerticalAlignment="Center" Orientation="Horizontal" IsEnabled="{Binding Path=EngineConnected}">
<ComboBox Height="26" HorizontalAlignment="Left" Margin="0,0,0,0" Name="_resourceTypeComboBox" ItemsSource="{Binding Path=ResourceTypeComboList}" VerticalAlignment="Center" Width="120" FontFamily="Arial" SelectionChanged="OnResourceTypeComboBoxSelectionChanged" VerticalContentAlignment="Center" ToolTip="Select type of resource to display" />
<Image Height="26" Name="_findImage" Margin="10,0,0,0" Stretch="None" Width="24" Source="/ResourceViewer;component/Resources/Icons_16x16_Find.png" />
<TextBox Height="26" Name="_findkeyTextBox" Width="160" TextChanged="OnFindKeyTextChanged" ToolTip="Enter a wildcard to filter resources" />
<Button Height="26" Name="_refreshButton" Width="48" Margin="4,0,0,0"
ToolTip="Click to refresh data from engine"
Click="OnRefreshButtonClick">
<Image Source="/ResourceViewer;component/Resources/Icons_16x16_Refresh.png" />
</Button>
<Label Content="Local data directory" Margin="20,0,0,0" Height="24" Name="label1" Width="120" VerticalContentAlignment="Center" VerticalAlignment="Center" FontFamily="Arial" FontSize="12" />
<TextBox Height="23" Name="_textBoxRootDataPath" Width="310" IsReadOnly="True" ToolTip="Current data root path" />
</StackPanel>
<Button Height="26" Name="_releaseNotesButton" Width="48" Margin="4,0,4,0"
ToolTip="Click to have release notes information"
Click="OnReleaseNotesButtonClick">
<Image Source="/ResourceViewer;component/Resources/Icons_128x128_ReleaseNotes.png" />
</Button>
<Button Height="26" Name="_helpButton" Width="48" Margin="4,0,4,0"
ToolTip="Click to display help"
Click="OnHelpButtonClick">
<Image Source="/ResourceViewer;component/Resources/Icons_128x128_Help.png" />
</Button>
</ToolBar>
<Grid Margin="0,32">
<Grid.RowDefinitions>
<RowDefinition Height="350*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="350*"/>
</Grid.RowDefinitions>
<Grid Margin="0,0,0,0" HorizontalAlignment="Stretch">
<DataGrid AutoGenerateColumns="False" Name="_resourceDataGrid"
ItemsSource="{Binding Path=ResourceInfoDatagridList}"
SelectionChanged="OnDataGridSelectionChanged"
SelectionMode="Extended"
FontFamily="Arial"
FontSize="12"
CanUserReorderColumns="False"
CanUserResizeRows="False"
CanUserSortColumns="True"
CanUserAddRows="False" Focusable="False"
VerticalAlignment="Stretch"
FontStretch="Normal"
Foreground="#FF000032"
EnableRowVirtualization="True"
EnableColumnVirtualization="True"
ContextMenuOpening="OnDataGridContextMenuOpening"
MouseDoubleClick="OnDataGridMouseDoubleClick"
ToolTip="Double Click to explore file">
<DataGrid.ContextMenu>
<ContextMenu Height="23" Name="_popupMenu">
<MenuItem Header="Explore" />
<MenuItem Header="Open" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTextColumn
Header="Name"
SortMemberPath="ShortName"
x:Name="columnIDName"
Binding="{Binding Path=ShortName}"
IsReadOnly="True"
Width="250"
MaxWidth="500"
SortDirection="Descending" >
</DataGridTextColumn>
<DataGridTextColumn
Header="Loaded"
SortMemberPath="Loaded"
x:Name="columnIDLoaded"
Binding="{Binding Path=LoadedValue}"
IsReadOnly="True"
Width="50"
SortDirection="Descending" >
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="{Binding Loaded, Converter={StaticResource BoolToBrushConverter}}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn
Header="Cooked"
SortMemberPath="Cooked"
x:Name="columnIDCooked"
Binding="{Binding Path=CookedValue}"
IsReadOnly="True"
Width="50"
SortDirection="Descending" >
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="{Binding Cooked, Converter={StaticResource BoolToBrushConverter}}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn
Header="Type"
SortMemberPath="TypeNameValue"
x:Name="columnIDType"
Binding="{Binding Path=TypeNameValue}"
IsReadOnly="True"
Width="150"
SortDirection="Descending" >
</DataGridTextColumn>
<DataGridTextColumn
Header="Custom Info"
SortMemberPath="CustomInfo"
x:Name="columnIDCustomInfo"
Binding="{Binding Path=CustomInfo}"
IsReadOnly="True"
Width="150"
SortDirection="Descending" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Right" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn
Header="Load (ms)"
SortMemberPath="LoadingTime"
x:Name="columnIDLoadingTime"
Binding="{Binding Path=LoadingTime}"
IsReadOnly="True"
Width="80"
SortDirection="Descending" >
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="{Binding LoadTimeRatio, Converter={StaticResource RatioGreenToRedToBrushConverter}}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Right" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn
Header="Mem (KB)"
SortMemberPath="MemoryUsage"
x:Name="columnIDMemoryUsage"
Binding="{Binding Path=MemoryUsage}"
IsReadOnly="True"
Width="80"
SortDirection="Descending" >
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="{Binding MemoryRatio, Converter={StaticResource RatioToBrushConverter}}"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Right" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn
Header="File Path"
SortMemberPath="PathName"
x:Name="columnIDPath"
Binding="{Binding Path=PathName}"
IsReadOnly="True"
Width="400"
SortDirection="Descending" >
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
<GridSplitter Grid.Row="1"
Grid.Column="0"
VerticalAlignment="Top"
HorizontalAlignment="Stretch"
Background="Black"
Height="5"
Margin="0,0,0,0"
ResizeBehavior="PreviousAndNext"/>
<Grid Grid.Row="2" Background="AliceBlue" >
<Grid Name="_gridimage" Width="264" Height="264" Background="Black" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,4,0">
<Image Name="_textureImage"
DataContext="{Binding ElementName=_resourceDataGrid, Path=SelectedItem}"
Stretch="UniformToFill"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
UseLayoutRounding="False"
Margin="4,4,4,4" >
</Image>
</Grid>
<Grid Margin="338,10,275,0" Name="_resourceGroupBox" Background="LightSteelBlue" VerticalAlignment="Stretch" HorizontalAlignment="Right" Width="378">
<Button Height="36" Width="64" Margin="5,0,0,4" Name="_saveButton"
Style="{StaticResource GenericButtonStyle}"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Click="OnSaveButtonClick"
ToolTip="Save All : Click to save all changes made on texture configurations">
<Image Source="/ResourceViewer;component/Resources/Icons_256x256_SaveAll.png" />
</Button>
<Button Height="36" Width="64" Margin="5,0,0,107" Opacity="1" OpacityMask="Black" Name="_recookButton"
Style="{StaticResource GenericButtonStyle}"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Click="OnRecookButtonClick"
ToolTip="Recook : Click to force engine to recook the selected texture only">
<Image Source="/ResourceViewer;component/Resources/Icons_64x64_Recook.png" />
</Button>
<Button Height="36" Width="64" Margin="5,0,0,66" Opacity="1" OpacityMask="Black" Name="_recookAllButton"
Style="{StaticResource GenericButtonStyle}"
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Click="OnRecookAllButtonClick"
ToolTip="Recook All : Click to force engine to recook all changed textures">
<Image Source="/ResourceViewer;component/Resources/Icons_64x64_RecookAll.png" />
</Button>
<ListBox Width="67" Height="153" Margin="4,6,0,0" Name="_targetListBox"
SelectionMode="Extended" HorizontalAlignment="Left" VerticalAlignment="Top"
ToolTip="Multi select targets you want your changes to by applied on"
SelectionChanged="OnTargetListSelectionChanged"
ItemContainerStyle="{StaticResource SameStyleFocusedUnfocusedListBox}" />
<local:PropertyGrid x:Name="_resourcePropertyGrid" Width="300" Margin="4,4,4,4" HorizontalAlignment="Right" VerticalAlignment="Stretch"/>
</Grid>
<Grid Name="_resourceInfoGrid"
Background="LightSteelBlue"
Width="339"
HorizontalAlignment="Left"
VerticalAlignment="Stretch"
Margin="0,10,0,0" >
<DataGrid AutoGenerateColumns="False"
Margin="6,50,6,0"
Name="_infoDataGrid"
RowHeaderWidth="NaN"
ItemsSource="{Binding Path=StatisticsList}"
FontFamily="Arial"
SelectionMode="Single"
CanUserSortColumns="False"
CanUserResizeRows="False"
CanUserResizeColumns="False"
CanUserReorderColumns="False"
FrozenColumnCount="4"
FontSize="12"
MinRowHeight="30"
BorderThickness="1"
AlternatingRowBackground="Lavender"
Background="Gainsboro"
VerticalAlignment="Top">
<DataGrid.Columns>
<DataGridTextColumn Width="120" x:Name="titleID" Binding="{Binding Path=Title}" IsReadOnly="True">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="File Count" SortMemberPath="Count" x:Name="colIDCount" Binding="{Binding Path=Count}" IsReadOnly="True">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Load (ms)" SortMemberPath="LoadingTime" x:Name="colIDLoadingTime_infoDataGrid" Binding="{Binding Path=LoadingTime}" IsReadOnly="True">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Mem (KB)" SortMemberPath="MemoryUsage" x:Name="colIDMemoryUsage_infoDataGrid" Binding="{Binding Path=MemoryUsage}" IsReadOnly="True">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Label Content="Resources information" FontFamily="Arial" FontWeight="SemiBold" FontSize="12" Height="28" HorizontalAlignment="Left" Margin="7,11,0,0" VerticalAlignment="Top" VerticalContentAlignment="Center"/>
</Grid>
<Label Content=""
Name="_labelImageSize"
BorderBrush="Black"
Foreground="Black"
Background="LightBlue"
Height="25"
Width="264"
Margin="0,0,4,0"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
VerticalContentAlignment="Center"
FontFamily="Arial"
FontSize="12"
FontWeight="SemiBold"
BorderThickness="1,0,0,1"/>
</Grid>
</Grid>
</Grid>
</Window>