Skip to content

Commit 58c1317

Browse files
committed
Add search function when editing GMD + version bump
1 parent dc4d296 commit 58c1317

File tree

8 files changed

+156
-76
lines changed

8 files changed

+156
-76
lines changed

Cirilla.Core/Cirilla.Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5-
<Version>0.6.0.0</Version>
5+
<Version>0.6.1.0</Version>
66
<Authors>Fusion86</Authors>
77
<Company />
88
</PropertyGroup>

Cirilla/Cirilla.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
</Compile>
8989
<Compile Include="SettingBindingExtension.cs" />
9090
<Compile Include="Spacing.cs" />
91+
<Compile Include="UserControls\GMDEditor.xaml.cs">
92+
<DependentUpon>GMDEditor.xaml</DependentUpon>
93+
</Compile>
9194
<Compile Include="UserControls\ITMItemEditor.xaml.cs">
9295
<DependentUpon>ITMItemEditor.xaml</DependentUpon>
9396
</Compile>
@@ -125,6 +128,10 @@
125128
<DependentUpon>MainWindow.xaml</DependentUpon>
126129
<SubType>Code</SubType>
127130
</Compile>
131+
<Page Include="UserControls\GMDEditor.xaml">
132+
<SubType>Designer</SubType>
133+
<Generator>MSBuild:Compile</Generator>
134+
</Page>
128135
<Page Include="UserControls\ITMItemEditor.xaml">
129136
<SubType>Designer</SubType>
130137
<Generator>MSBuild:Compile</Generator>

Cirilla/MainWindow.xaml

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,12 @@
66
xmlns:root="clr-namespace:Cirilla"
77
xmlns:vm="clr-namespace:Cirilla.ViewModels"
88
xmlns:uc="clr-namespace:Cirilla.UserControls"
9-
xmlns:convert="clr-namespace:Cirilla.Converters"
109
mc:Ignorable="d"
1110
Title="Cirilla Toolkit" Height="450" Width="800">
1211
<Window.DataContext>
1312
<vm:MainWindowViewModel x:Name="vm"/>
1413
</Window.DataContext>
1514

16-
<Window.Resources>
17-
<convert:InverseBooleanConverter x:Key="InverseBooleanConverter"/>
18-
</Window.Resources>
19-
2015
<DockPanel>
2116
<Menu DockPanel.Dock="Top" Background="White">
2217
<MenuItem Header="File">
@@ -40,70 +35,7 @@
4035
<root:BindingProxy x:Key="proxy" Data="{Binding}" />
4136

4237
<DataTemplate DataType="{x:Type vm:GMDViewModel}">
43-
<TabControl Margin="5">
44-
<TabItem Header="Header">
45-
<DataGrid ItemsSource="{Binding HeaderMetadata}" ColumnWidth="*" AutoGenerateColumns="False" BorderThickness="0" CanUserAddRows="False">
46-
<DataGrid.Columns>
47-
<DataGridTextColumn Header="Key" Binding="{Binding Key}" IsReadOnly="True"/>
48-
<DataGridTextColumn Header="Value" Binding="{Binding Value}" IsReadOnly="True"/>
49-
<!--<DataGridTemplateColumn Header="Frozen" Width="60">
50-
<DataGridTemplateColumn.CellTemplate>
51-
<DataTemplate>
52-
<CheckBox IsChecked="{Binding ValueFrozen}"/>
53-
</DataTemplate>
54-
</DataGridTemplateColumn.CellTemplate>
55-
</DataGridTemplateColumn>-->
56-
</DataGrid.Columns>
57-
</DataGrid>
58-
</TabItem>
59-
60-
<TabItem Header="Entries">
61-
<DataGrid ItemsSource="{Binding Entries}" ColumnWidth="*" AutoGenerateColumns="False" BorderThickness="0" CanUserDeleteRows="{root:SettingBinding UnsafeModeEnabled}" CanUserAddRows="False">
62-
<DataGrid.Columns>
63-
<DataGridTextColumn Header="Index" Binding="{Binding Index}" IsReadOnly="True" Width="50"/>
64-
<DataGridTextColumn Header="Key" Binding="{Binding Key}" IsReadOnly="{root:SettingBinding UnsafeModeEnabled, Converter={StaticResource InverseBooleanConverter}}"/>
65-
<DataGridTextColumn Header="Value" Binding="{Binding Value}">
66-
<DataGridTextColumn.EditingElementStyle>
67-
<Style TargetType="TextBox">
68-
<Setter Property="AcceptsReturn" Value="true" />
69-
</Style>
70-
</DataGridTextColumn.EditingElementStyle>
71-
72-
<!--<DataGridTextColumn.CellStyle>
73-
<Style TargetType="DataGridCell">
74-
<Style.Triggers>
75-
<DataTrigger Binding="{Binding Key}" Value="">
76-
<Setter Property="IsTabStop" Value="False"/>
77-
<Setter Property="Focusable" Value="False"/>
78-
</DataTrigger>
79-
</Style.Triggers>
80-
</Style>
81-
</DataGridTextColumn.CellStyle>-->
82-
</DataGridTextColumn>
83-
</DataGrid.Columns>
84-
85-
<DataGrid.RowStyle>
86-
<Style TargetType="DataGridRow">
87-
<Style.Triggers>
88-
<DataTrigger Binding="{Binding Value}" Value="Invalid Message">
89-
<Setter Property="Background" Value="Yellow"/>
90-
</DataTrigger>
91-
<DataTrigger Binding="{Binding Key}" Value="">
92-
<Setter Property="Background" Value="Orange"/>
93-
</DataTrigger>
94-
</Style.Triggers>
95-
</Style>
96-
</DataGrid.RowStyle>
97-
98-
<DataGrid.ContextMenu>
99-
<ContextMenu>
100-
<MenuItem Header="Add Normal entry (with key)" Command="{Binding AddEntryCommand}"/>
101-
<MenuItem Header="Add Padding entry (no key)" Command="{Binding AddEntryNoKeyCommand}"/>
102-
</ContextMenu>
103-
</DataGrid.ContextMenu>
104-
</DataGrid>
105-
</TabItem>
106-
</TabControl>
38+
<uc:GMDEditor Margin="5" DataContext="{Binding}"/>
10739
</DataTemplate>
10840

10941
<DataTemplate DataType="{x:Type vm:ITMViewModel}">

Cirilla/Properties/AssemblyInfo.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
// General Information about an assembly is controlled through the following
88
// set of attributes. Change these attribute values to modify the information
99
// associated with an assembly.
10-
[assembly: AssemblyTitle("Cirilla")]
11-
[assembly: AssemblyDescription("")]
10+
[assembly: AssemblyTitle("Cirilla Toolkit")]
11+
[assembly: AssemblyDescription("View and edit certain Monster Hunter World files in a frontend for the Cirilla.Core library.")]
1212
[assembly: AssemblyConfiguration("")]
1313
[assembly: AssemblyCompany("")]
14-
[assembly: AssemblyProduct("Cirilla")]
15-
[assembly: AssemblyCopyright("Copyright © 2018")]
14+
[assembly: AssemblyProduct("Cirilla Toolkit")]
15+
[assembly: AssemblyCopyright("")]
1616
[assembly: AssemblyTrademark("")]
1717
[assembly: AssemblyCulture("")]
1818

@@ -51,5 +51,5 @@
5151
// You can specify all the values or you can default the Build and Revision Numbers
5252
// by using the '*' as shown below:
5353
// [assembly: AssemblyVersion("1.0.*")]
54-
[assembly: AssemblyVersion("0.5.0.0")]
55-
[assembly: AssemblyFileVersion("0.5.0.0")]
54+
[assembly: AssemblyVersion("0.6.0.0")]
55+
[assembly: AssemblyFileVersion("0.6.0.0")]
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<UserControl x:Class="Cirilla.UserControls.GMDEditor"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6+
xmlns:root="clr-namespace:Cirilla"
7+
xmlns:convert="clr-namespace:Cirilla.Converters"
8+
mc:Ignorable="d"
9+
d:DesignHeight="450" d:DesignWidth="800">
10+
<UserControl.Resources>
11+
<convert:InverseBooleanConverter x:Key="InverseBooleanConverter"/>
12+
</UserControl.Resources>
13+
14+
<TabControl>
15+
<TabItem Header="Header">
16+
<DataGrid ItemsSource="{Binding HeaderMetadata}" ColumnWidth="*" AutoGenerateColumns="False" BorderThickness="0" CanUserAddRows="False">
17+
<DataGrid.Columns>
18+
<DataGridTextColumn Header="Key" Binding="{Binding Key}" IsReadOnly="True"/>
19+
<DataGridTextColumn Header="Value" Binding="{Binding Value}" IsReadOnly="True"/>
20+
</DataGrid.Columns>
21+
</DataGrid>
22+
</TabItem>
23+
24+
<TabItem Header="Entries">
25+
<Grid>
26+
<Grid.RowDefinitions>
27+
<RowDefinition Height="Auto"/>
28+
<RowDefinition Height="*"/>
29+
</Grid.RowDefinitions>
30+
31+
<Grid Grid.Row="0" Margin="5">
32+
<Grid.ColumnDefinitions>
33+
<ColumnDefinition Width="Auto"/>
34+
<ColumnDefinition Width="*"/>
35+
</Grid.ColumnDefinitions>
36+
37+
<TextBlock Grid.Column="0" Text="Search: "/>
38+
<TextBox Grid.Column="1" Text="{Binding SearchQuery, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}">
39+
<TextBox.InputBindings>
40+
<KeyBinding Key="Return" Command="{Binding TriggerSearchCommand}"/>
41+
</TextBox.InputBindings>
42+
</TextBox>
43+
</Grid>
44+
45+
<DataGrid Grid.Row="1" ItemsSource="{Binding FilteredEntries}" ColumnWidth="*" AutoGenerateColumns="False" BorderThickness="0" CanUserDeleteRows="{root:SettingBinding UnsafeModeEnabled}" CanUserAddRows="False">
46+
<DataGrid.Columns>
47+
<DataGridTextColumn Header="Index" Binding="{Binding Index}" IsReadOnly="True" Width="50"/>
48+
<DataGridTextColumn Header="Key" Binding="{Binding Key}" IsReadOnly="{root:SettingBinding UnsafeModeEnabled, Converter={StaticResource InverseBooleanConverter}}"/>
49+
<DataGridTextColumn Header="Value" Binding="{Binding Value}">
50+
<DataGridTextColumn.EditingElementStyle>
51+
<Style TargetType="TextBox">
52+
<Setter Property="AcceptsReturn" Value="true" />
53+
</Style>
54+
</DataGridTextColumn.EditingElementStyle>
55+
</DataGridTextColumn>
56+
</DataGrid.Columns>
57+
58+
<DataGrid.RowStyle>
59+
<Style TargetType="DataGridRow">
60+
<Style.Triggers>
61+
<DataTrigger Binding="{Binding Value}" Value="Invalid Message">
62+
<Setter Property="Background" Value="Yellow"/>
63+
</DataTrigger>
64+
<DataTrigger Binding="{Binding Key}" Value="">
65+
<Setter Property="Background" Value="Orange"/>
66+
</DataTrigger>
67+
</Style.Triggers>
68+
</Style>
69+
</DataGrid.RowStyle>
70+
71+
<DataGrid.ContextMenu>
72+
<ContextMenu>
73+
<MenuItem Header="Add Normal entry (with key)" Command="{Binding AddEntryCommand}"/>
74+
<MenuItem Header="Add Padding entry (no key)" Command="{Binding AddEntryNoKeyCommand}"/>
75+
</ContextMenu>
76+
</DataGrid.ContextMenu>
77+
</DataGrid>
78+
</Grid>
79+
</TabItem>
80+
</TabControl>
81+
</UserControl>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using System.Windows;
7+
using System.Windows.Controls;
8+
using System.Windows.Data;
9+
using System.Windows.Documents;
10+
using System.Windows.Input;
11+
using System.Windows.Media;
12+
using System.Windows.Media.Imaging;
13+
using System.Windows.Navigation;
14+
using System.Windows.Shapes;
15+
16+
namespace Cirilla.UserControls
17+
{
18+
/// <summary>
19+
/// Interaction logic for GMDEditor.xaml
20+
/// </summary>
21+
public partial class GMDEditor : UserControl
22+
{
23+
public GMDEditor()
24+
{
25+
InitializeComponent();
26+
}
27+
}
28+
}

Cirilla/ViewModels/FileTypeTabItemViewModelBase.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.Win32;
22
using System.ComponentModel;
33
using System.IO;
4+
using System.Runtime.CompilerServices;
45

56
namespace Cirilla.ViewModels
67
{
@@ -33,5 +34,10 @@ protected FileTypeTabItemViewModelBase(string path)
3334
{
3435
Filepath = path;
3536
}
37+
38+
protected void NotifyPropertyChanged([CallerMemberName] string name = null)
39+
{
40+
PropertyChanged(this, new PropertyChangedEventArgs(name));
41+
}
3642
}
3743
}

Cirilla/ViewModels/GMDViewModel.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using System;
44
using System.Collections.ObjectModel;
55
using System.Windows;
6+
using System.ComponentModel;
7+
using System.Windows.Data;
68

79
namespace Cirilla.ViewModels
810
{
@@ -11,8 +13,12 @@ public class GMDViewModel : FileTypeTabItemViewModelBase
1113
public ObservableCollection<KeyValueViewModel> HeaderMetadata { get; } = new ObservableCollection<KeyValueViewModel>();
1214
public ObservableCollection<GMDEntryViewModel> Entries { get; } = new ObservableCollection<GMDEntryViewModel>();
1315

16+
public string SearchQuery { get; set; }
17+
public ICollectionView FilteredEntries { get; }
18+
1419
public RelayCommand AddEntryCommand { get; }
1520
public RelayCommand AddEntryNoKeyCommand { get; }
21+
public RelayCommand TriggerSearchCommand { get; }
1622

1723
private GMD _context;
1824

@@ -23,6 +29,7 @@ public GMDViewModel(string path) : base(path)
2329
// Commands
2430
AddEntryCommand = new RelayCommand(AddEntry, IsUnsafeModeEnabled);
2531
AddEntryNoKeyCommand = new RelayCommand(AddEntryNoKey, IsUnsafeModeEnabled);
32+
TriggerSearchCommand = new RelayCommand(TriggerSearch, () => true);
2633

2734
// Header metadata
2835
HeaderMetadata.Add(new KeyValueViewModel("Version", "0x" + _context.Header.Version.ToHexString()));
@@ -37,6 +44,10 @@ public GMDViewModel(string path) : base(path)
3744
// Entries
3845
for (int i = 0; i < _context.Entries.Count; i++)
3946
Entries.Add(new GMDEntryViewModel(i, _context.Entries[i]));
47+
48+
// Filtered Entries CollectionViewSource
49+
FilteredEntries = CollectionViewSource.GetDefaultView(Entries);
50+
FilteredEntries.Filter = Entries_Filter;
4051
}
4152

4253
public override void Save(string path)
@@ -80,5 +91,20 @@ public void AddEntryNoKey()
8091
}
8192

8293
public bool IsUnsafeModeEnabled() => Properties.Settings.Default.Config.UnsafeModeEnabled;
94+
95+
public void TriggerSearch()
96+
{
97+
FilteredEntries.Refresh();
98+
NotifyPropertyChanged(nameof(FilteredEntries));
99+
}
100+
101+
private bool Entries_Filter(object obj)
102+
{
103+
if (string.IsNullOrEmpty(SearchQuery))
104+
return true;
105+
106+
GMDEntryViewModel entry = obj as GMDEntryViewModel;
107+
return entry.Value.IndexOf(SearchQuery, StringComparison.InvariantCultureIgnoreCase) != -1;
108+
}
83109
}
84110
}

0 commit comments

Comments
 (0)