Browse Source

Convert SettingsEditor to Wpf

newNRvisualizers
Peter Forstmeier 13 years ago
parent
commit
f89bd5107a
  1. 17
      src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEditor.csproj
  2. 9
      src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEntry.cs
  3. 30
      src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsViewContent.cs
  4. 63
      src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsViewXaml.xaml
  5. 254
      src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsViewXaml.xaml.cs
  6. 3
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ApplicationSettings.xaml

17
src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEditor.csproj

@ -38,6 +38,8 @@ @@ -38,6 +38,8 @@
<FileAlignment>4096</FileAlignment>
</PropertyGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
@ -45,11 +47,15 @@ @@ -45,11 +47,15 @@
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<None Include="EmptySettingsFile.xft">
@ -75,6 +81,10 @@ @@ -75,6 +81,10 @@
<Compile Include="ProxyPropertyDescriptor.cs" />
<Compile Include="SettingsEntryPropertyGridWrapper.cs" />
<Compile Include="ISettingsEntryHost.cs" />
<Compile Include="SettingsViewXaml.xaml.cs">
<DependentUpon>SettingsViewXaml.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="SpecialTypes.cs" />
<Compile Include="SettingsDocument.cs" />
<Compile Include="SettingsCodeGeneratorTool.cs" />
@ -95,6 +105,13 @@ @@ -95,6 +105,13 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj">
<Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project>
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Page Include="SettingsViewXaml.xaml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

9
src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEntry.cs

@ -33,14 +33,6 @@ namespace ICSharpCode.SettingsEditor @@ -33,14 +33,6 @@ namespace ICSharpCode.SettingsEditor
object value;
ISettingsEntryHost host;
[Obsolete("This constructor is required by the DataGridView, but not used because we " +
"use the BindingSourceAddingNew event. Use the overload specifying a host " +
"argument instead!")]
public SettingsEntry()
{
throw new NotSupportedException();
}
public SettingsEntry(ISettingsEntryHost host)
{
if (host == null)
@ -155,6 +147,7 @@ namespace ICSharpCode.SettingsEditor @@ -155,6 +147,7 @@ namespace ICSharpCode.SettingsEditor
OnPropertyChanged(new PropertyChangedEventArgs("Name"));
}
}
[Browsable(false)]
public string Provider {

30
src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsViewContent.cs

@ -19,7 +19,8 @@ namespace ICSharpCode.SettingsEditor @@ -19,7 +19,8 @@ namespace ICSharpCode.SettingsEditor
{
public class SettingsViewContent : AbstractViewContentHandlingLoadErrors, IHasPropertyContainer
{
SettingsView view = new SettingsView();
// SettingsView view = new SettingsView();
SettingsViewXaml view = new SettingsViewXaml();
PropertyContainer propertyContainer = new PropertyContainer();
SettingsDocument setDoc = new SettingsDocument();
MemoryStream appConfigStream;
@ -28,6 +29,7 @@ namespace ICSharpCode.SettingsEditor @@ -28,6 +29,7 @@ namespace ICSharpCode.SettingsEditor
public SettingsViewContent(OpenedFile file) : base(file)
{
TryOpenAppConfig(false);
/*
view.SelectionChanged += delegate {
propertyContainer.SelectedObjects = view.GetSelectedEntriesForPropertyGrid().ToArray();
};
@ -37,7 +39,26 @@ namespace ICSharpCode.SettingsEditor @@ -37,7 +39,26 @@ namespace ICSharpCode.SettingsEditor
if (appConfigFile != null)
appConfigFile.MakeDirty();
};
*/
this.UserContent = view;
view.SelectionChanged += ((s,e) =>
{
Console.WriteLine("SettingsViewContent.SelectionChanged");
propertyContainer.SelectedObjects = view.GetSelectedEntriesForPropertyGrid().ToArray();
});
view.SettingsChanged += ((s,e) =>
{
Console.WriteLine("SettingsViewContent.SettingsChanged");
if (this.PrimaryFile != null)
this.PrimaryFile.MakeDirty();
if (appConfigFile != null)
appConfigFile.MakeDirty();
});
}
void TryOpenAppConfig(bool createIfNotExists)
@ -61,6 +82,8 @@ namespace ICSharpCode.SettingsEditor @@ -61,6 +82,8 @@ namespace ICSharpCode.SettingsEditor
protected override void LoadInternal(OpenedFile file, Stream stream)
{
Console.WriteLine ("LoadInternal");
if (file == PrimaryFile) {
try {
XmlDocument doc = new XmlDocument();
@ -75,6 +98,7 @@ namespace ICSharpCode.SettingsEditor @@ -75,6 +98,7 @@ namespace ICSharpCode.SettingsEditor
appConfigStream = new MemoryStream();
stream.CopyTo(appConfigStream);
}
}
void ShowLoadError(string message)
@ -117,11 +141,14 @@ namespace ICSharpCode.SettingsEditor @@ -117,11 +141,14 @@ namespace ICSharpCode.SettingsEditor
appConfigStream.WriteTo(stream);
}
}
}
#region Update app.config
void UpdateAppConfig(XDocument appConfigDoc)
{
Console.WriteLine("UpdateAppConfig(XDocument appConfigDoc)");
/*
var entries = view.GetAllEntries();
var userEntries = entries.Where(e => e.Scope == SettingScope.User);
var appEntries = entries.Where(e => e.Scope == SettingScope.Application);
@ -147,6 +174,7 @@ namespace ICSharpCode.SettingsEditor @@ -147,6 +174,7 @@ namespace ICSharpCode.SettingsEditor
if (appSettings != null) {
UpdateSettings(appSettings, appEntries);
}
*/
}
void RegisterAppConfigSection(XElement configSections, bool hasUserEntries, bool hasAppEntries)

63
src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsViewXaml.xaml

@ -0,0 +1,63 @@ @@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<UserControl
x:Class="ICSharpCode.SettingsEditor.SettingsViewXaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sd="clr-namespace:ICSharpCode.SharpDevelop;assembly=ICSharpCode.SharpDevelop"
xmlns:local="clr-namespace:ICSharpCode.SettingsEditor">
<Grid>
<DataGrid Background="AliceBlue" x:Name="datagrid"
AutoGenerateColumns="False"
ItemsSource="{Binding Entries}"
AddingNewItem="Datagrid_AddingNewItem"
SelectionChanged="datagrid_SelectionChanged"
CanUserAddRows="True"
CanUserDeleteRows="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Name " Width="200" Binding="{Binding Name}"></DataGridTextColumn>
<DataGridTemplateColumn Header="Type" Width="150">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
ItemsSource="{Binding TypeNames,UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
SelectedItem="{Binding Path=Type}">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Type}" VerticalAlignment="Stretch" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Scope" Width="150">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
sd:EnumBinding.EnumType="{x:Type local:SettingScope}"
SelectedValue="{Binding Path=Scope}">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Scope}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Value" Width="*"
Binding="{Binding SerializedValue,UpdateSourceTrigger=PropertyChanged}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>

254
src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsViewXaml.xaml.cs

@ -0,0 +1,254 @@ @@ -0,0 +1,254 @@
/*
* Created by SharpDevelop.
* User: Peter Forstmeier
* Date: 21.01.2013
* Time: 19:57
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Widgets;
namespace ICSharpCode.SettingsEditor
{
/// <summary>
/// Interaction logic for SettingsViewXaml.xaml
/// </summary>
public partial class SettingsViewXaml : UserControl,ISettingsEntryHost
{
public event EventHandler SettingsChanged;
public event EventHandler SelectionChanged;
// Remove empty constr from settingsentry
static readonly Type[] defaultAvailableTypes = new Type[] {
typeof(bool),
typeof(byte),
typeof(char),
typeof(decimal),
typeof(double),
typeof(float),
typeof(int),
typeof(long),
typeof(sbyte),
typeof(short),
typeof(string),
typeof(System.Collections.Specialized.StringCollection),
typeof(System.DateTime),
typeof(System.Drawing.Color),
typeof(System.Drawing.Font),
typeof(System.Drawing.Point),
typeof(System.Drawing.Size),
typeof(System.Guid),
typeof(System.TimeSpan),
typeof(uint),
typeof(ulong),
typeof(ushort)
};
List<string> typeNames = new List<string>();
List<Type> types = new List<Type>();
IAmbience ambience;
ICompilation compilation;
public SettingsViewXaml()
{
InitializeComponent();
ambience = AmbienceService.GetCurrentAmbience();
compilation = MinimalCorlib.Instance.CreateCompilation();
foreach (Type type in defaultAvailableTypes) {
types.Add(type);
typeNames.Add(ambience.ConvertType(type.ToTypeReference().Resolve(compilation)));
}
foreach (SpecialTypeDescriptor d in SpecialTypeDescriptor.Descriptors) {
types.Add(d.type);
typeNames.Add(d.name);
}
Entries = new ObservableCollection<SettingsVM>();
}
public void ShowEntries(IList<SettingsEntry> list)
{
foreach (var element in list) {
Entries.Add(new SettingsVM(element));
}
Entries.CollectionChanged += ((s,e)=>
{
OnSettingsChanged(e);
});
foreach (var element in Entries) {
element.PropertyChanged += ((s,e) => {
OnSettingsChanged(e);
});
}
this.DataContext = this;
if (Entries.Count > 0) {
datagrid.SelectedItem = Entries[0];
}
}
public IEnumerable<SettingsEntry> GetAllEntries()
{
List<SettingsEntry> l = new List<SettingsEntry>();
foreach (var element in Entries) {
var s = element.Entry;
if (!String.IsNullOrEmpty(s.Name)) {
l.Add(s);
}
}
l.Sort(delegate(SettingsEntry a, SettingsEntry b) {
return a.Name.CompareTo(b.Name);
});
return l;
}
public List<SettingsEntryPropertyGridWrapper> GetSelectedEntriesForPropertyGrid()
{
List<SettingsEntryPropertyGridWrapper> l = new List<SettingsEntryPropertyGridWrapper>();
if (datagrid.SelectedItems.Count > 0) {
foreach (var element in datagrid.SelectedItems) {
var vm = element as SettingsVM;
if (vm != null) {
var settings = vm.Entry;
if (settings != null) {
l.Add(new SettingsEntryPropertyGridWrapper(settings));
}
}
}
}
return l;
}
#region Properties
public ObservableCollection<SettingsVM> Entries {get;set;}
public List<string> TypeNames {
get {return typeNames;}
}
#endregion
#region ISettingsEntryHost
public string GetDisplayNameForType(Type type)
{
foreach (SpecialTypeDescriptor d in SpecialTypeDescriptor.Descriptors) {
if (type == d.type)
return d.name;
}
return ambience.ConvertType(type.ToTypeReference().Resolve(compilation));
}
public Type GetTypeByDisplayName(string displayName)
{
for (int i = 0; i < typeNames.Count; i++) {
if (typeNames[i] == displayName)
return types[i];
}
return null;
}
#endregion
protected virtual void OnSettingsChanged(EventArgs e)
{
if (SettingsChanged != null) {
SettingsChanged(this, e);
}
}
void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (SelectionChanged != null)
SelectionChanged(this, e);
}
void Datagrid_AddingNewItem(object sender, AddingNewItemEventArgs e)
{
var settings = new SettingsEntry(this);
settings.Type = typeof(string);
var vm = new SettingsVM(settings);
e.NewItem = vm;
}
}
public class SettingsVM: ViewModelBase
{
public SettingsVM ()
{
}
public SettingsVM (SettingsEntry entry)
{
this.Entry = entry;
}
public SettingsEntry Entry {get; private set;}
public string Name
{
get {return this.Entry.Name;}
set {Entry.Name = value;
base.OnPropertyChanged("Name");
}
}
public string Type
{
get {return Entry.WrappedSettingType;}
set {Entry.WrappedSettingType = value;
base.OnPropertyChanged("Type");
}
}
public string SerializedValue {
get {return Entry.SerializedValue;}
set {Entry.SerializedValue = value;
base.OnPropertyChanged("SerializedValue");}
}
public SettingScope Scope {
get { return Entry.Scope; }
set { Entry.Scope = value;
Console.WriteLine(Scope.ToString());
base.OnPropertyChanged("Scope");}
}
}
}

3
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ApplicationSettings.xaml

@ -8,7 +8,8 @@ @@ -8,7 +8,8 @@
xmlns:widgets="http://icsharpcode.net/sharpdevelop/widgets"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:optionpanels="clr-namespace:ICSharpCode.SharpDevelop.Gui.OptionPanels"
xmlns:project="clr-namespace:ICSharpCode.SharpDevelop.Project">
xmlns:project="clr-namespace:ICSharpCode.SharpDevelop.Project"
>
<optionpanels:ProjectOptionPanel.Resources>
<optionpanels:StorageLocationConverter x:Key="locationConverter" />

Loading…
Cancel
Save