mirror of
https://github.com/haven1433/HexManiacAdvance.git
synced 2026-10-02 05:06:35 -05:00
Refactor
For a long time now, MainWindow has housed basically all the xaml for the entire application. It got too big. It now houses all the xaml for the view of the EditorViewModel (basically the viewmodel of the overall appliaction) while the tab content has been moved to a TabView (which has the ViewPort for a viewmodel). The TabView contains the HexElement, along with all the goods that wrap around it (the column/row headers, the address bar at the bottom, various scroll bars, the tools). Several of the methods were able to move from the main window to the TabView.
This commit is contained in:
194
src/HexManiac.WPF/Controls/TabView.xaml
Normal file
194
src/HexManiac.WPF/Controls/TabView.xaml
Normal file
@@ -0,0 +1,194 @@
|
||||
<UserControl x:Class="HavenSoft.HexManiac.WPF.Controls.TabView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:hsg3hvmtr="clr-namespace:HavenSoft.HexManiac.Core.ViewModels.Tools;assembly=HexManiac.Core"
|
||||
xmlns:hsg3ww="clr-namespace:HavenSoft.HexManiac.WPF.Windows"
|
||||
xmlns:hsg3hv="clr-namespace:HavenSoft.HexManiac.WPF.Controls">
|
||||
<UserControl.Resources>
|
||||
<BooleanToVisibilityConverter x:Key="BoolToVisibility" />
|
||||
<hsg3hv:IntegerToHexConverter x:Key="Hex"/>
|
||||
</UserControl.Resources>
|
||||
<DockPanel>
|
||||
<!-- Bottom Bar -->
|
||||
<TextBlock DockPanel.Dock="Bottom" Text="{Binding SelectedAddress}" MouseRightButtonUp="AddressShowMenu"/>
|
||||
<!-- Tool Headers -->
|
||||
<StackPanel DockPanel.Dock="Left" Visibility="{Binding HasTools, Converter={StaticResource BoolToVisibility}}">
|
||||
<Button Content="Text" Command="{Binding Tools.StringToolCommand}" Margin="0,2">
|
||||
<Button.LayoutTransform>
|
||||
<RotateTransform Angle="-90"/>
|
||||
</Button.LayoutTransform>
|
||||
<Button.Style>
|
||||
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Tools.SelectedIndex}" Value="0">
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource Accent}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Button.Style>
|
||||
</Button>
|
||||
<Button Content="Table" Command="{Binding Tools.TableToolCommand}" Margin="0,2">
|
||||
<Button.LayoutTransform>
|
||||
<RotateTransform Angle="-90"/>
|
||||
</Button.LayoutTransform>
|
||||
<Button.Style>
|
||||
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Tools.SelectedIndex}" Value="1">
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource Accent}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Button.Style>
|
||||
</Button>
|
||||
<Button Content="Tool3" Command="{Binding Tools.Tool3Command}" Margin="0,2">
|
||||
<Button.LayoutTransform>
|
||||
<RotateTransform Angle="-90"/>
|
||||
</Button.LayoutTransform>
|
||||
<Button.Style>
|
||||
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Tools.SelectedIndex}" Value="2">
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource Accent}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Button.Style>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
<!-- Tools -->
|
||||
<Grid DockPanel.Dock="Left" DataContext="{Binding Tools}">
|
||||
<Grid.Style>
|
||||
<Style TargetType="Grid">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding SelectedIndex}" Value="-1">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Grid.Style>
|
||||
<DockPanel Name="StringToolPanel">
|
||||
<DockPanel.Style>
|
||||
<Style TargetType="DockPanel">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding SelectedIndex}" Value="0">
|
||||
<Setter Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DockPanel.Style>
|
||||
<TextBlock Text="Address:" Margin="5,15,0,0" DockPanel.Dock="Top"/>
|
||||
<TextBox Text="{Binding StringTool.Address, Converter={StaticResource Hex}, UpdateSourceTrigger=PropertyChanged}" Margin="5" DockPanel.Dock="Top"/>
|
||||
<TextBlock DockPanel.Dock="Top" Text="{Binding StringTool.Message}" Width="255" HorizontalAlignment="Center" TextWrapping="Wrap" Visibility="{Binding StringTool.ShowMessage, Converter={StaticResource BoolToVisibility}}"/>
|
||||
<Button Margin="0,3" Command="{Binding StringTool.CheckIsText}" Content="Show As Text" HorizontalAlignment="Right" DockPanel.Dock="Top" Visibility="{Binding StringTool.ShowMessage, Converter={StaticResource BoolToVisibility}}"/>
|
||||
<Button Command="{Binding StringTool.InsertText}" Content="Insert New Text" HorizontalAlignment="Right" DockPanel.Dock="Top" Visibility="{Binding StringTool.ShowMessage, Converter={StaticResource BoolToVisibility}}"/>
|
||||
<TextBlock Text="Content:" Margin="5,30,0,0" DockPanel.Dock="Top"/>
|
||||
<TextBox Margin="5,5" AcceptsReturn="True" MinHeight="50" Width="255" TextWrapping="Wrap" FontFamily="Consolas" VerticalScrollBarVisibility="Auto"
|
||||
SelectionChanged="StringToolContentSelectionChanged"
|
||||
IsEnabled="{Binding StringTool.Enabled}"
|
||||
Text="{Binding StringTool.Content, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</DockPanel>
|
||||
<ScrollViewer Width="265" Name="TableToolPanel" VerticalScrollBarVisibility="Visible">
|
||||
<ScrollViewer.Style>
|
||||
<Style TargetType="ScrollViewer">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding SelectedIndex}" Value="1">
|
||||
<Setter Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</ScrollViewer.Style>
|
||||
<StackPanel>
|
||||
<TextBlock Text="{Binding TableTool.CurrentElementName}" HorizontalAlignment="Center" Margin="0,2" MaxWidth="200" TextWrapping="Wrap" TextAlignment="Center"/>
|
||||
<Grid>
|
||||
<Button Margin="5" Content="Previous" Command="{Binding TableTool.Previous}" HorizontalAlignment="Left"/>
|
||||
<Button Margin="5" Content="Next" Command="{Binding TableTool.Next}" HorizontalAlignment="Right"/>
|
||||
</Grid>
|
||||
<Button Margin="5" Content="Append" Command="{Binding TableTool.Append}" HorizontalAlignment="Right"/>
|
||||
<ItemsControl ItemsSource="{Binding TableTool.Children}" Grid.IsSharedSizeScope="True">
|
||||
<ItemsControl.Resources>
|
||||
<DataTemplate DataType="{x:Type hsg3hvmtr:FieldArrayElementViewModel}">
|
||||
<Grid HorizontalAlignment="Stretch" Margin="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="LeftColumn"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding Name}" Margin="5,0" Grid.Column="0"/>
|
||||
<TextBox Text="{Binding Content, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
<DataTemplate DataType="{x:Type hsg3hvmtr:ComboBoxArrayElementViewModel}">
|
||||
<Grid HorizontalAlignment="Stretch" Margin="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="LeftColumn"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding Name}" Margin="5,0" Grid.Column="0"/>
|
||||
<ComboBox SelectedIndex="{Binding SelectedIndex}" ItemsSource="{Binding Options}" Grid.Column="1"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.Resources>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
<StackPanel Name="Tool3Panel">
|
||||
<StackPanel.Style>
|
||||
<Style TargetType="StackPanel">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding SelectedIndex}" Value="2">
|
||||
<Setter Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</StackPanel.Style>
|
||||
<TextBlock Text="Coming Soon!" Margin="5,15,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<!-- Anchor Editor -->
|
||||
<Border DockPanel.Dock="Top" Height="19" BorderThickness="0,0,0,1" BorderBrush="{DynamicResource Backlight}">
|
||||
<DockPanel Visibility="{Binding AnchorTextVisible, Converter={StaticResource BoolToVisibility}}" >
|
||||
<TextBlock Width="70" Text="Anchor: " TextAlignment="Right" ToolTipService.ShowDuration="15000">
|
||||
<TextBlock.ToolTip>
|
||||
<ToolTip Background="{DynamicResource Backlight}" BorderBrush="{DynamicResource Accent}" BorderThickness="1">
|
||||
<TextBlock TextAlignment="Left">
|
||||
<Bold>Anchor Editor</Bold> <LineBreak/>
|
||||
Anchors can have a name and a format. <LineBreak/>
|
||||
<LineBreak/>
|
||||
Named anchors persist between sessions. <LineBreak/>
|
||||
You can also use names in pointers and with Goto <Italic Foreground="{DynamicResource Secondary}">(Ctrl+G)</Italic>. <LineBreak/>
|
||||
<LineBreak/>
|
||||
Formats change how the data is displayed and edited. <LineBreak/>
|
||||
For example, "" formats data as text. <LineBreak/>
|
||||
To learn more about formats, visit the Wiki.
|
||||
</TextBlock>
|
||||
</ToolTip>
|
||||
</TextBlock.ToolTip>
|
||||
</TextBlock>
|
||||
<TextBox Text="{Binding AnchorText, UpdateSourceTrigger=PropertyChanged}" Margin="0,0,25,0"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
<!-- Column Headers -->
|
||||
<hsg3hv:HorizontalSlantedTextControl DockPanel.Dock="Top" HeaderRows="{Binding ColumnHeaders}" ColumnWidth="{x:Static hsg3hv:HexContent.CellWidth}" HorizontalOffset="{Binding ElementName=HexContent, Path=HorizontalScrollValue}"/>
|
||||
<!-- Row Headers -->
|
||||
<ItemsControl DockPanel.Dock="Left" Width="70" ItemsSource="{Binding Headers}" Background="{DynamicResource Backlight}" MouseDown="HeaderMouseDown">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Viewbox Height="{x:Static hsg3hv:HexContent.CellHeight}" HorizontalAlignment="Right" Margin="0,0,2,0">
|
||||
<TextBlock Foreground="{DynamicResource Secondary}" Text="{Binding}" FontFamily="Consolas" Padding="1"/>
|
||||
</Viewbox>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
<Line Width="1" DockPanel.Dock="Left" Stroke="{DynamicResource Background}"/>
|
||||
<ScrollBar DockPanel.Dock="Right"
|
||||
Minimum="{Binding MinimumScroll}" Maximum="{Binding MaximumScroll}" Value="{Binding ScrollValue}"
|
||||
SmallChange="1" LargeChange="{Binding Height}" />
|
||||
<ScrollBar DockPanel.Dock="Bottom" Orientation="Horizontal" SmallChange="10" LargeChange="{x:Static hsg3hv:HexContent.CellWidth}"
|
||||
Minimum="0" Maximum="{Binding HorizontalScrollMaximum, ElementName=HexContent}" Value="{Binding HorizontalScrollValue, ElementName=HexContent}"
|
||||
Visibility="{Binding ShowHorizontalScroll, ElementName=HexContent, Converter={StaticResource BoolToVisibility}}" />
|
||||
<hsg3hv:HexContent x:Name="HexContent" ViewPort="{Binding}" ShowGrid="{Binding DataContext.ShowMatrix, RelativeSource={RelativeSource AncestorType=hsg3ww:MainWindow}}" Margin=".5,.5,0,0"/>
|
||||
</DockPanel>
|
||||
</UserControl>
|
||||
42
src/HexManiac.WPF/Controls/TabView.xaml.cs
Normal file
42
src/HexManiac.WPF/Controls/TabView.xaml.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
using HavenSoft.HexManiac.Core.Models;
|
||||
using HavenSoft.HexManiac.Core.ViewModels;
|
||||
using HavenSoft.HexManiac.Core.ViewModels.Tools;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace HavenSoft.HexManiac.WPF.Controls {
|
||||
public partial class TabView {
|
||||
public IFileSystem FileSystem => (IFileSystem)Application.Current.MainWindow.Resources["FileSystem"];
|
||||
public TabView() => InitializeComponent();
|
||||
|
||||
private void StringToolContentSelectionChanged(object sender, RoutedEventArgs e) {
|
||||
var textbox = (TextBox)sender;
|
||||
var tools = textbox.DataContext as ToolTray;
|
||||
if (tools == null || tools.StringTool == null) return;
|
||||
tools.StringTool.ContentIndex = textbox.SelectionStart;
|
||||
tools.StringTool.ContentSelectionLength = textbox.SelectionLength;
|
||||
}
|
||||
|
||||
private void HeaderMouseDown(object sender, MouseButtonEventArgs e) {
|
||||
HexContent.RaiseEvent(e);
|
||||
}
|
||||
|
||||
private readonly Popup contextMenu = new Popup();
|
||||
private void AddressShowMenu(object sender, MouseButtonEventArgs e) {
|
||||
var element = (FrameworkElement)sender;
|
||||
var viewModel = element.DataContext as ViewPort;
|
||||
if (viewModel == null) return;
|
||||
contextMenu.Child = new Button {
|
||||
Content = "Copy Address"
|
||||
}.SetEvent(Button.ClickEvent, (sender2, e2) => {
|
||||
viewModel.CopyAddress.Execute(FileSystem);
|
||||
contextMenu.IsOpen = false;
|
||||
});
|
||||
contextMenu.PlacementTarget = element;
|
||||
contextMenu.StaysOpen = false;
|
||||
contextMenu.IsOpen = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -59,6 +59,9 @@
|
||||
<Compile Include="Controls\Swatch.xaml.cs">
|
||||
<DependentUpon>Swatch.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Controls\TabView.xaml.cs">
|
||||
<DependentUpon>TabView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Windows\ThemeSelector.xaml.cs">
|
||||
<DependentUpon>ThemeSelector.xaml</DependentUpon>
|
||||
</Compile>
|
||||
@@ -70,6 +73,10 @@
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="Controls\TabView.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="Windows\AboutWindow.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
|
||||
@@ -1,19 +1,14 @@
|
||||
<Window x:Class="HavenSoft.HexManiac.WPF.Windows.MainWindow"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:hsg3ww="clr-namespace:HavenSoft.HexManiac.WPF.Windows"
|
||||
xmlns:hsg3hv="clr-namespace:HavenSoft.HexManiac.WPF.Controls"
|
||||
xmlns:hsv="clr-namespace:HavenSoft.HexManiac.WPF.Resources"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib"
|
||||
xmlns:hsg3hvmtr="clr-namespace:HavenSoft.HexManiac.Core.ViewModels.Tools;assembly=HexManiac.Core"
|
||||
Icon="..\Resources\AppIcon.ico"
|
||||
PreviewMouseDown="RunDeferredActions"
|
||||
Title="Hex Maniac Advance" Height="470" Width="880" AllowDrop="True" Background="{DynamicResource Backlight}">
|
||||
<Window.Resources>
|
||||
<BooleanToVisibilityConverter x:Key="BoolToVisibility" />
|
||||
<hsg3hv:IntegerToBooleanViaMatchConverter x:Key="IndexMatch"/>
|
||||
<hsg3hv:IntegerToHexConverter x:Key="Hex"/>
|
||||
<hsg3hv:MultiplyConverter x:Key="Mult"/>
|
||||
</Window.Resources>
|
||||
<Window.InputBindings>
|
||||
<KeyBinding Key="N" Modifiers="Ctrl" Command="{Binding New}" />
|
||||
@@ -253,189 +248,7 @@
|
||||
</TabControl.ItemTemplate>
|
||||
<TabControl.ContentTemplate>
|
||||
<DataTemplate>
|
||||
<DockPanel>
|
||||
<!-- Bottom Bar -->
|
||||
<TextBlock DockPanel.Dock="Bottom" Text="{Binding SelectedAddress}" MouseRightButtonUp="AddressShowMenu"/>
|
||||
<!-- Tool Headers -->
|
||||
<StackPanel DockPanel.Dock="Left" Visibility="{Binding HasTools, Converter={StaticResource BoolToVisibility}}">
|
||||
<Button Content="Text" Command="{Binding Tools.StringToolCommand}" Margin="0,2">
|
||||
<Button.LayoutTransform>
|
||||
<RotateTransform Angle="-90"/>
|
||||
</Button.LayoutTransform>
|
||||
<Button.Style>
|
||||
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Tools.SelectedIndex}" Value="0">
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource Accent}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Button.Style>
|
||||
</Button>
|
||||
<Button Content="Table" Command="{Binding Tools.TableToolCommand}" Margin="0,2">
|
||||
<Button.LayoutTransform>
|
||||
<RotateTransform Angle="-90"/>
|
||||
</Button.LayoutTransform>
|
||||
<Button.Style>
|
||||
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Tools.SelectedIndex}" Value="1">
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource Accent}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Button.Style>
|
||||
</Button>
|
||||
<Button Content="Tool3" Command="{Binding Tools.Tool3Command}" Margin="0,2">
|
||||
<Button.LayoutTransform>
|
||||
<RotateTransform Angle="-90"/>
|
||||
</Button.LayoutTransform>
|
||||
<Button.Style>
|
||||
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding Tools.SelectedIndex}" Value="2">
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource Accent}"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Button.Style>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
<!-- Tools -->
|
||||
<Grid DockPanel.Dock="Left" DataContext="{Binding Tools}">
|
||||
<Grid.Style>
|
||||
<Style TargetType="Grid">
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding SelectedIndex}" Value="-1">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Grid.Style>
|
||||
<DockPanel Name="StringToolPanel">
|
||||
<DockPanel.Style>
|
||||
<Style TargetType="DockPanel">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding SelectedIndex}" Value="0">
|
||||
<Setter Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</DockPanel.Style>
|
||||
<TextBlock Text="Address:" Margin="5,15,0,0" DockPanel.Dock="Top"/>
|
||||
<TextBox Text="{Binding StringTool.Address, Converter={StaticResource Hex}, UpdateSourceTrigger=PropertyChanged}" Margin="5" DockPanel.Dock="Top"/>
|
||||
<TextBlock DockPanel.Dock="Top" Text="{Binding StringTool.Message}" Width="255" HorizontalAlignment="Center" TextWrapping="Wrap" Visibility="{Binding StringTool.ShowMessage, Converter={StaticResource BoolToVisibility}}"/>
|
||||
<Button Margin="0,3" Command="{Binding StringTool.CheckIsText}" Content="Show As Text" HorizontalAlignment="Right" DockPanel.Dock="Top" Visibility="{Binding StringTool.ShowMessage, Converter={StaticResource BoolToVisibility}}"/>
|
||||
<Button Command="{Binding StringTool.InsertText}" Content="Insert New Text" HorizontalAlignment="Right" DockPanel.Dock="Top" Visibility="{Binding StringTool.ShowMessage, Converter={StaticResource BoolToVisibility}}"/>
|
||||
<TextBlock Text="Content:" Margin="5,30,0,0" DockPanel.Dock="Top"/>
|
||||
<TextBox Margin="5,5" AcceptsReturn="True" MinHeight="50" Width="255" TextWrapping="Wrap" FontFamily="Consolas" VerticalScrollBarVisibility="Auto"
|
||||
SelectionChanged="StringToolContentSelectionChanged"
|
||||
IsEnabled="{Binding StringTool.Enabled}"
|
||||
Text="{Binding StringTool.Content, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</DockPanel>
|
||||
<ScrollViewer Width="265" Name="TableToolPanel" VerticalScrollBarVisibility="Visible">
|
||||
<ScrollViewer.Style>
|
||||
<Style TargetType="ScrollViewer">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding SelectedIndex}" Value="1">
|
||||
<Setter Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</ScrollViewer.Style>
|
||||
<StackPanel>
|
||||
<TextBlock Text="{Binding TableTool.CurrentElementName}" HorizontalAlignment="Center" Margin="0,2" MaxWidth="200" TextWrapping="Wrap" TextAlignment="Center"/>
|
||||
<Grid>
|
||||
<Button Margin="5" Content="Previous" Command="{Binding TableTool.Previous}" HorizontalAlignment="Left"/>
|
||||
<Button Margin="5" Content="Next" Command="{Binding TableTool.Next}" HorizontalAlignment="Right"/>
|
||||
</Grid>
|
||||
<Button Margin="5" Content="Append" Command="{Binding TableTool.Append}" HorizontalAlignment="Right"/>
|
||||
<ItemsControl ItemsSource="{Binding TableTool.Children}" Grid.IsSharedSizeScope="True">
|
||||
<ItemsControl.Resources>
|
||||
<DataTemplate DataType="{x:Type hsg3hvmtr:FieldArrayElementViewModel}">
|
||||
<Grid HorizontalAlignment="Stretch" Margin="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="LeftColumn"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding Name}" Margin="5,0" Grid.Column="0"/>
|
||||
<TextBox Text="{Binding Content, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
<DataTemplate DataType="{x:Type hsg3hvmtr:ComboBoxArrayElementViewModel}">
|
||||
<Grid HorizontalAlignment="Stretch" Margin="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="LeftColumn"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="{Binding Name}" Margin="5,0" Grid.Column="0"/>
|
||||
<ComboBox SelectedIndex="{Binding SelectedIndex}" ItemsSource="{Binding Options}" Grid.Column="1"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.Resources>
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
<StackPanel Name="Tool3Panel">
|
||||
<StackPanel.Style>
|
||||
<Style TargetType="StackPanel">
|
||||
<Setter Property="Visibility" Value="Collapsed"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding SelectedIndex}" Value="2">
|
||||
<Setter Property="Visibility" Value="Visible"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</StackPanel.Style>
|
||||
<TextBlock Text="Coming Soon!" Margin="5,15,0,0"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
<!-- Anchor Editor -->
|
||||
<Border DockPanel.Dock="Top" Height="19" BorderThickness="0,0,0,1" BorderBrush="{DynamicResource Backlight}">
|
||||
<DockPanel Visibility="{Binding AnchorTextVisible, Converter={StaticResource BoolToVisibility}}" >
|
||||
<TextBlock Width="70" Text="Anchor: " TextAlignment="Right" ToolTipService.ShowDuration="15000">
|
||||
<TextBlock.ToolTip>
|
||||
<ToolTip Background="{DynamicResource Backlight}" BorderBrush="{DynamicResource Accent}" BorderThickness="1">
|
||||
<TextBlock TextAlignment="Left">
|
||||
<Bold>Anchor Editor</Bold> <LineBreak/>
|
||||
Anchors can have a name and a format. <LineBreak/>
|
||||
<LineBreak/>
|
||||
Named anchors persist between sessions. <LineBreak/>
|
||||
You can also use names in pointers and with Goto <Italic Foreground="{DynamicResource Secondary}">(Ctrl+G)</Italic>. <LineBreak/>
|
||||
<LineBreak/>
|
||||
Formats change how the data is displayed and edited. <LineBreak/>
|
||||
For example, "" formats data as text. <LineBreak/>
|
||||
To learn more about formats, visit the Wiki.
|
||||
</TextBlock>
|
||||
</ToolTip>
|
||||
</TextBlock.ToolTip>
|
||||
</TextBlock>
|
||||
<TextBox Text="{Binding AnchorText, UpdateSourceTrigger=PropertyChanged}" Margin="0,0,25,0"/>
|
||||
</DockPanel>
|
||||
</Border>
|
||||
<!-- Column Headers -->
|
||||
<hsg3hv:HorizontalSlantedTextControl DockPanel.Dock="Top" HeaderRows="{Binding ColumnHeaders}" ColumnWidth="{x:Static hsg3hv:HexContent.CellWidth}" HorizontalOffset="{Binding ElementName=HexContent, Path=HorizontalScrollValue}"/>
|
||||
<!-- Row Headers -->
|
||||
<ItemsControl DockPanel.Dock="Left" Width="70" ItemsSource="{Binding Headers}" Background="{DynamicResource Backlight}" MouseDown="HeaderMouseDown">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Viewbox Height="{x:Static hsg3hv:HexContent.CellHeight}" HorizontalAlignment="Right" Margin="0,0,2,0">
|
||||
<TextBlock Foreground="{DynamicResource Secondary}" Text="{Binding}" FontFamily="Consolas" Padding="1"/>
|
||||
</Viewbox>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
<Line Width="1" DockPanel.Dock="Left" Stroke="{DynamicResource Background}"/>
|
||||
<ScrollBar DockPanel.Dock="Right"
|
||||
Minimum="{Binding MinimumScroll}" Maximum="{Binding MaximumScroll}" Value="{Binding ScrollValue}"
|
||||
SmallChange="1" LargeChange="{Binding Height}" />
|
||||
<ScrollBar DockPanel.Dock="Bottom" Orientation="Horizontal" SmallChange="10" LargeChange="{x:Static hsg3hv:HexContent.CellWidth}"
|
||||
Minimum="0" Maximum="{Binding HorizontalScrollMaximum, ElementName=HexContent}" Value="{Binding HorizontalScrollValue, ElementName=HexContent}"
|
||||
Visibility="{Binding ShowHorizontalScroll, ElementName=HexContent, Converter={StaticResource BoolToVisibility}}" />
|
||||
<hsg3hv:HexContent x:Name="HexContent" ViewPort="{Binding}" ShowGrid="{Binding DataContext.ShowMatrix, RelativeSource={RelativeSource AncestorType=hsg3ww:MainWindow}}" Margin=".5,.5,0,0"/>
|
||||
</DockPanel>
|
||||
<hsg3hv:TabView/>
|
||||
</DataTemplate>
|
||||
</TabControl.ContentTemplate>
|
||||
</TabControl>
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace HavenSoft.HexManiac.WPF.Windows {
|
||||
}
|
||||
}
|
||||
|
||||
private static FrameworkElement GetChild(DependencyObject depObj, string name, object dataContext) {
|
||||
public static FrameworkElement GetChild(DependencyObject depObj, string name, object dataContext) {
|
||||
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) {
|
||||
var child = VisualTreeHelper.GetChild(depObj, i);
|
||||
var childContext = child.GetValue(DataContextProperty);
|
||||
@@ -119,11 +119,6 @@ namespace HavenSoft.HexManiac.WPF.Windows {
|
||||
|
||||
#endregion
|
||||
|
||||
private void HeaderMouseDown(object sender, MouseButtonEventArgs e) {
|
||||
var selectedElement = (HexContent)GetChild(Tabs, "HexContent", ViewModel[ViewModel.SelectedIndex]);
|
||||
selectedElement.RaiseEvent(e);
|
||||
}
|
||||
|
||||
private void ExitClicked(object sender, EventArgs e) {
|
||||
ViewModel.CloseAll.Execute();
|
||||
if (ViewModel.Count == 0) Close();
|
||||
@@ -166,14 +161,6 @@ namespace HavenSoft.HexManiac.WPF.Windows {
|
||||
foreach (var action in copy) action();
|
||||
}
|
||||
|
||||
private void StringToolContentSelectionChanged(object sender, RoutedEventArgs e) {
|
||||
var textbox = (TextBox)sender;
|
||||
var tools = textbox.DataContext as ToolTray;
|
||||
if (tools == null || tools.StringTool == null) return;
|
||||
tools.StringTool.ContentIndex = textbox.SelectionStart;
|
||||
tools.StringTool.ContentSelectionLength = textbox.SelectionLength;
|
||||
}
|
||||
|
||||
private void AnimateFocusToCorner(object sender, DependencyPropertyChangedEventArgs e) {
|
||||
var element = (FrameworkElement)sender;
|
||||
if (element.Visibility != Visibility.Visible) return;
|
||||
@@ -194,21 +181,5 @@ namespace HavenSoft.HexManiac.WPF.Windows {
|
||||
themeWindow.Show();
|
||||
}
|
||||
}
|
||||
|
||||
private readonly Popup contextMenu = new Popup();
|
||||
private void AddressShowMenu(object sender, MouseButtonEventArgs e) {
|
||||
var element = (FrameworkElement)sender;
|
||||
var viewModel = element.DataContext as ViewPort;
|
||||
if (viewModel == null) return;
|
||||
contextMenu.Child = new Button {
|
||||
Content = "Copy Address"
|
||||
}.SetEvent(Button.ClickEvent, (sender2, e2) => {
|
||||
viewModel.CopyAddress.Execute(FileSystem);
|
||||
contextMenu.IsOpen = false;
|
||||
});
|
||||
contextMenu.PlacementTarget = element;
|
||||
contextMenu.StaysOpen = false;
|
||||
contextMenu.IsOpen = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
<StackPanel HorizontalAlignment="Right" VerticalAlignment="Top" Grid.Column="1">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
|
||||
<TextBlock Text="Background Color:" Foreground="{Binding PrimaryColor}"/>
|
||||
<TextBox Name="Background" Foreground="{Binding Primary}" Background="{Binding Backlight}" Text="{Binding BackgroundColor, UpdateSourceTrigger=PropertyChanged}" Width="200" Margin="5,0"/>
|
||||
<Popup PlacementTarget="{Binding ElementName=Background}" Placement="Bottom" HorizontalOffset="-30" IsOpen="{Binding ElementName=Background, Path=IsKeyboardFocused, Mode=OneWay}">
|
||||
<TextBox Name="BackgroundColorText" Foreground="{Binding Primary}" Background="{Binding Backlight}" Text="{Binding BackgroundColor, UpdateSourceTrigger=PropertyChanged}" Width="200" Margin="5,0"/>
|
||||
<Popup PlacementTarget="{Binding ElementName=BackgroundColorText}" Placement="Bottom" HorizontalOffset="-30" IsOpen="{Binding ElementName=BackgroundColorText, Path=IsKeyboardFocused, Mode=OneWay}">
|
||||
<controls:Swatch Result="{Binding BackgroundColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="230" Height="200"/>
|
||||
</Popup>
|
||||
</StackPanel>
|
||||
|
||||
Reference in New Issue
Block a user