mirror of
https://github.com/fadden/6502bench.git
synced 2024-11-18 15:06:07 +00:00
c13daa7085
Notable items include the column show/hide buttons, which were straightforward except for the "determine the default width" part, and the font picker, which is no longer a standard dialog. The latter was complicated by the absence of a good way to detect whether a font is mono-spaced or not without calling back into code meant for WinForms font manipulation (with a dash of PInvoke). Yay WPF. Also, enabled character ellipsis for code list items.
196 lines
10 KiB
XML
196 lines
10 KiB
XML
<!--
|
|
Copyright 2019 faddenSoft
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<!--
|
|
ListViewItem control template and style. This is used for the main code ListView. The
|
|
most significant consideration is getting long comments and notes into the 5th column and
|
|
having them span multiple columns. Most of this came from the default style (WPF 4.5).
|
|
|
|
This interacts with DisplayList.FormattedParts.
|
|
|
|
See also https://github.com/fadden/DisasmUiTest
|
|
-->
|
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
|
|
|
<!-- some brushes, extracted from the default style -->
|
|
<LinearGradientBrush x:Key="ListItemHoverFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="#FFF1FBFF" Offset="0"/>
|
|
<GradientStop Color="#FFD5F1FE" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<LinearGradientBrush x:Key="ListItemSelectedFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="#FFD9F4FF" Offset="0"/>
|
|
<GradientStop Color="#FF9BDDFB" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<LinearGradientBrush x:Key="ListItemSelectedInactiveFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="#FFEEEDED" Offset="0"/>
|
|
<GradientStop Color="#FFDDDDDD" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<LinearGradientBrush x:Key="ListItemSelectedHoverFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="#FFEAF9FF" Offset="0"/>
|
|
<GradientStop Color="#FFC9EDFD" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<!-- Column set for the long-comment lines. The first five columns will be empty, but
|
|
have their widths set to match those in the containing ListView.
|
|
If you don't set DisplayMemberBinding, it will try to ToString() the entire object.
|
|
-->
|
|
<GridViewColumnCollection x:Key="gvcc">
|
|
<GridViewColumn Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[0].ActualWidth}" DisplayMemberBinding="{Binding Offset}"/>
|
|
<GridViewColumn Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[1].ActualWidth}" DisplayMemberBinding="{Binding Addr}"/>
|
|
<GridViewColumn Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[2].ActualWidth}" DisplayMemberBinding="{Binding Bytes}"/>
|
|
<GridViewColumn Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[3].ActualWidth}" DisplayMemberBinding="{Binding Flags}"/>
|
|
<GridViewColumn Width="{Binding
|
|
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}
|
|
}, Path=View.Columns[4].ActualWidth}" DisplayMemberBinding="{Binding Attr}"/>
|
|
<!-- This column holds the long comment. Leave the width unset. -->
|
|
<GridViewColumn Header="two" DisplayMemberBinding="{Binding Path=Comment}"/>
|
|
</GridViewColumnCollection>
|
|
|
|
<!-- Template for long lines. This is a modification of the default style, with
|
|
Content and Columns attributes defined in the GridViewRowPresenter. It appears we
|
|
inherit the FocusVisualStyle from the default. -->
|
|
<ControlTemplate x:Key="longCommentTemplate" TargetType="{x:Type ListViewItem}">
|
|
<StackPanel>
|
|
<Border BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
Background="{TemplateBinding Background}"
|
|
CornerRadius="2"
|
|
SnapsToDevicePixels="true">
|
|
<Border x:Name="InnerBorder" BorderThickness="1" CornerRadius="1">
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition MaxHeight="11"/>
|
|
<RowDefinition/>
|
|
</Grid.RowDefinitions>
|
|
<Rectangle x:Name="UpperHighlight" Fill="#75FFFFFF" Visibility="Collapsed"/>
|
|
<GridViewRowPresenter Content="{TemplateBinding Content}"
|
|
Columns="{StaticResource gvcc}"
|
|
Grid.RowSpan="2"
|
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
|
|
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
|
|
</Grid>
|
|
</Border>
|
|
</Border>
|
|
</StackPanel>
|
|
|
|
<!-- triggers for hover, selection, and activation effects -->
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="true">
|
|
<Setter Property="Background" Value="{StaticResource ListItemHoverFill}"/>
|
|
<Setter Property="BorderBrush" Value="#FFCCF0FF"/>
|
|
<Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
|
|
</Trigger>
|
|
<Trigger Property="IsSelected" Value="true">
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedFill}"/>
|
|
<Setter Property="BorderBrush" Value="#FF98DDFB"/>
|
|
<Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
|
|
<Setter Property="Visibility" TargetName="UpperHighlight" Value="Visible"/>
|
|
<Setter Property="Fill" TargetName="UpperHighlight" Value="#40FFFFFF"/>
|
|
</Trigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="true"/>
|
|
<Condition Property="Selector.IsSelectionActive" Value="false"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}"/>
|
|
<Setter Property="BorderBrush" Value="#FFCFCFCF"/>
|
|
</MultiTrigger>
|
|
<MultiTrigger>
|
|
<MultiTrigger.Conditions>
|
|
<Condition Property="IsSelected" Value="true"/>
|
|
<Condition Property="IsMouseOver" Value="true"/>
|
|
</MultiTrigger.Conditions>
|
|
<Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}"/>
|
|
<Setter Property="BorderBrush" Value="#FF98DDFB"/>
|
|
</MultiTrigger>
|
|
<Trigger Property="IsEnabled" Value="false">
|
|
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
|
|
<Style x:Key="codeListItemStyle" TargetType="{x:Type ListViewItem}">
|
|
<!-- There's a one-pixel gap between items, possibly space for grid lines, that
|
|
can't seem to be eliminated. Declaring a negative margin removes it. This is
|
|
necessary because the gap isn't a mouse target, so if your mouse is in just the
|
|
wrong place you'll feel like you clicked and nothing happened. -->
|
|
<Setter Property="Margin" Value="0,-1,0,0"/>
|
|
|
|
<!-- This causes individual TextBoxes to stretch to fill the column. This is nice
|
|
because the cell-highlight stuff will set the background on the full cell rather than
|
|
just the bit with the text. -->
|
|
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
|
|
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Path=IsLongComment}" Value="True">
|
|
<Setter Property="Template" Value="{StaticResource longCommentTemplate}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
|
|
<!-- Highlighting for individual cells. -->
|
|
<LinearGradientBrush x:Key="HighlightedCellFill" EndPoint="0,1" StartPoint="0,0">
|
|
<GradientStop Color="#FFD9Fff4" Offset="0"/>
|
|
<GradientStop Color="#FF9Bfbdd" Offset="1"/>
|
|
</LinearGradientBrush>
|
|
|
|
<DataTemplate x:Key="addrHighlightTemplate">
|
|
<TextBlock>
|
|
<TextBlock.Style>
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Path=HasAddrLabelHighlight}" Value="True">
|
|
<Setter Property="TextBlock.Background" Value="{StaticResource HighlightedCellFill}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</TextBlock.Style>
|
|
<TextBlock.Text>
|
|
<Binding Path="Addr"/>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</DataTemplate>
|
|
<DataTemplate x:Key="labelHighlightTemplate">
|
|
<TextBlock>
|
|
<TextBlock.Style>
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
|
|
<Style.Triggers>
|
|
<DataTrigger Binding="{Binding Path=HasAddrLabelHighlight}" Value="True">
|
|
<Setter Property="TextBlock.Background" Value="{StaticResource HighlightedCellFill}"/>
|
|
</DataTrigger>
|
|
</Style.Triggers>
|
|
</Style>
|
|
</TextBlock.Style>
|
|
<TextBlock.Text>
|
|
<Binding Path="Label"/>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
</DataTemplate>
|
|
</ResourceDictionary> |