mirror of
https://github.com/crskycode/GARbro.git
synced 2024-11-23 13:45:34 +08:00
(GUI): implemented encoding setting.
This commit is contained in:
parent
816e392d03
commit
f2ae663ae8
@ -99,7 +99,7 @@ namespace GARbro.GUI
|
|||||||
private IEnumerable<Encoding> m_encoding_list = GetEncodingList();
|
private IEnumerable<Encoding> m_encoding_list = GetEncodingList();
|
||||||
public IEnumerable<Encoding> TextEncodings { get { return m_encoding_list; } }
|
public IEnumerable<Encoding> TextEncodings { get { return m_encoding_list; } }
|
||||||
|
|
||||||
private static IEnumerable<Encoding> GetEncodingList ()
|
internal static IEnumerable<Encoding> GetEncodingList (bool exclude_utf16 = false)
|
||||||
{
|
{
|
||||||
var list = new HashSet<Encoding>();
|
var list = new HashSet<Encoding>();
|
||||||
list.Add (Encoding.Default);
|
list.Add (Encoding.Default);
|
||||||
@ -108,8 +108,11 @@ namespace GARbro.GUI
|
|||||||
list.Add (Encoding.GetEncoding (932));
|
list.Add (Encoding.GetEncoding (932));
|
||||||
list.Add (Encoding.GetEncoding (936));
|
list.Add (Encoding.GetEncoding (936));
|
||||||
list.Add (Encoding.UTF8);
|
list.Add (Encoding.UTF8);
|
||||||
list.Add (Encoding.Unicode);
|
if (!exclude_utf16)
|
||||||
list.Add (Encoding.BigEndianUnicode);
|
{
|
||||||
|
list.Add (Encoding.Unicode);
|
||||||
|
list.Add (Encoding.BigEndianUnicode);
|
||||||
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,8 +24,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Data;
|
using System.Windows.Data;
|
||||||
@ -45,6 +47,11 @@ namespace GARbro.GUI
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
this.DataContext = this.ViewModel = CreateSettingsTree();
|
this.DataContext = this.ViewModel = CreateSettingsTree();
|
||||||
|
this.Closing += (s, e) => {
|
||||||
|
var section = SectionsPane.SelectedItem as SettingsSectionView;
|
||||||
|
if (section != null)
|
||||||
|
LastSelectedSection = section.Label;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsViewModel ViewModel;
|
SettingsViewModel ViewModel;
|
||||||
@ -68,9 +75,6 @@ namespace GARbro.GUI
|
|||||||
{
|
{
|
||||||
ApplyChanges();
|
ApplyChanges();
|
||||||
DialogResult = true;
|
DialogResult = true;
|
||||||
var section = SectionsPane.SelectedItem as SettingsSectionView;
|
|
||||||
if (section != null)
|
|
||||||
LastSelectedSection = section.Label;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ApplyChanges ()
|
private void ApplyChanges ()
|
||||||
@ -103,23 +107,15 @@ namespace GARbro.GUI
|
|||||||
IEnumerable<SettingsSectionView> EnumerateFormatsSettings ()
|
IEnumerable<SettingsSectionView> EnumerateFormatsSettings ()
|
||||||
{
|
{
|
||||||
var list = new List<SettingsSectionView>();
|
var list = new List<SettingsSectionView>();
|
||||||
foreach (var format in FormatCatalog.Instance.Formats.Where (f => f.Settings != null && f.Settings.Any()))
|
var formats = FormatCatalog.Instance.Formats.Where (f => f.Settings != null && f.Settings.Any());
|
||||||
|
foreach (var format in formats.OrderBy (f => f.Tag))
|
||||||
{
|
{
|
||||||
var pane = new WrapPanel();
|
var pane = new WrapPanel();
|
||||||
foreach (var setting in format.Settings)
|
foreach (var setting in format.Settings)
|
||||||
{
|
{
|
||||||
if (setting.Value is bool)
|
var widget = CreateSettingWidget (setting, setting.Value as dynamic);
|
||||||
{
|
if (widget != null)
|
||||||
var view = new ResourceSettingView<bool> (setting);
|
pane.Children.Add (widget);
|
||||||
view.ValueChanged += (s, e) => ViewModel.HasChanges = true;
|
|
||||||
this.OnApplyChanges += (s, e) => view.Apply();
|
|
||||||
|
|
||||||
var check_box = new CheckBox {
|
|
||||||
Template = (ControlTemplate)this.Resources["BoundCheckBox"],
|
|
||||||
DataContext = view,
|
|
||||||
};
|
|
||||||
pane.Children.Add (check_box);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (pane.Children.Count > 0)
|
if (pane.Children.Count > 0)
|
||||||
{
|
{
|
||||||
@ -134,6 +130,57 @@ namespace GARbro.GUI
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UIElement CreateSettingWidget (IResourceSetting setting, bool value)
|
||||||
|
{
|
||||||
|
return new CheckBox {
|
||||||
|
Template = (ControlTemplate)this.Resources["BoundCheckBox"],
|
||||||
|
DataContext = CreateSettingView<bool> (setting),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
UIElement CreateSettingWidget (IResourceSetting setting, Encoding value)
|
||||||
|
{
|
||||||
|
var view = CreateSettingView<Encoding> (setting);
|
||||||
|
// XXX make a control template in XAML instead
|
||||||
|
var container = new StackPanel {
|
||||||
|
Orientation = Orientation.Vertical,
|
||||||
|
Margin = new Thickness (2.0),
|
||||||
|
DataContext = view,
|
||||||
|
};
|
||||||
|
var caption = new TextBlock {
|
||||||
|
Text = view.Text,
|
||||||
|
ToolTip = view.Description,
|
||||||
|
};
|
||||||
|
var combo_box = new ComboBox {
|
||||||
|
ItemsSource = MainWindow.GetEncodingList (true),
|
||||||
|
Margin = new Thickness (0,4,0,0),
|
||||||
|
DisplayMemberPath = "EncodingName",
|
||||||
|
ToolTip = view.Description,
|
||||||
|
};
|
||||||
|
var binding = new Binding ("Value") {
|
||||||
|
Mode = BindingMode.TwoWay,
|
||||||
|
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
|
||||||
|
};
|
||||||
|
BindingOperations.SetBinding (combo_box, ComboBox.SelectedItemProperty, binding);
|
||||||
|
container.Children.Add (caption);
|
||||||
|
container.Children.Add (combo_box);
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIElement CreateSettingWidget<TUnknown> (IResourceSetting setting, TUnknown value)
|
||||||
|
{
|
||||||
|
Trace.WriteLine (string.Format ("Unknown setting type {0}", value.GetType()), "[GUI]");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ISettingView CreateSettingView<TValue> (IResourceSetting setting)
|
||||||
|
{
|
||||||
|
var view = new ResourceSettingView<TValue> (setting);
|
||||||
|
view.ValueChanged += (s, e) => ViewModel.HasChanges = true;
|
||||||
|
this.OnApplyChanges += (s, e) => view.Apply();
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
|
||||||
static IEnumerable<SettingsSectionView> EnumerateSections (IEnumerable<SettingsSectionView> list)
|
static IEnumerable<SettingsSectionView> EnumerateSections (IEnumerable<SettingsSectionView> list)
|
||||||
{
|
{
|
||||||
foreach (var section in list)
|
foreach (var section in list)
|
||||||
@ -205,7 +252,19 @@ namespace GARbro.GUI
|
|||||||
public IEnumerable<SettingsSectionView> Children { get; set; }
|
public IEnumerable<SettingsSectionView> Children { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ResourceSettingView<TValue>
|
public interface ISettingView
|
||||||
|
{
|
||||||
|
IResourceSetting Source { get; }
|
||||||
|
bool IsChanged { get; }
|
||||||
|
string Text { get; }
|
||||||
|
string Description { get; }
|
||||||
|
|
||||||
|
void Apply ();
|
||||||
|
|
||||||
|
event PropertyChangedEventHandler ValueChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ResourceSettingView<TValue> : ISettingView
|
||||||
{
|
{
|
||||||
public IResourceSetting Source { get; private set; }
|
public IResourceSetting Source { get; private set; }
|
||||||
public bool IsChanged { get; private set; }
|
public bool IsChanged { get; private set; }
|
||||||
|
Loading…
Reference in New Issue
Block a user