From: jpbruyere Date: Thu, 5 Jan 2017 14:47:33 +0000 (+0100) Subject: Merge branch 'master' into CrowIDE X-Git-Tag: v0.5.1~28^2~12 X-Git-Url: https://git.osiis.dedyn.io/?a=commitdiff_plain;h=de203479f11c68946c1204ee95877698b22bff85;p=jp%2Fcrow.git Merge branch 'master' into CrowIDE --- de203479f11c68946c1204ee95877698b22bff85 diff --cc CrowIDE/CrowIDE.csproj index d4990c50,00000000..b9f16d25 mode 100644,000000..100644 --- a/CrowIDE/CrowIDE.csproj +++ b/CrowIDE/CrowIDE.csproj @@@ -1,103 -1,0 +1,104 @@@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {B6D911CD-1D09-42FC-B300-9187190F2AE1} + Exe + CrowIDE + CrowIDE + v4.5 + $(SolutionDir)build/$(Configuration) + $(SolutionDir)build/obj/$(Configuration) + + + + + + 0.5 + CrowIDE.CrowIDE + + + true + full + false + DEBUG; + prompt + 4 + false + $(SolutionDir)build\obj\$(Configuration) + $(SolutionDir)build\$(Configuration) + + + none + true + prompt + 0 + false + $(SolutionDir)build\obj\$(Configuration) + $(SolutionDir)build\$(Configuration) + + + + + + + + gtk-sharp-3.0 + + + gtk-sharp-2.0 + + + gio-sharp-3.0 + + + glib-sharp-3.0 + + - $(SolutionDir)packages\OpenTK.Next.1.2.2336.6514-pre\lib\net20\OpenTK.dll ++ $(SolutionDir)packages\OpenTK.2.0.0\lib\net20\OpenTK.dll ++ opentk + + + + + + {C2980F9B-4798-4C05-99E2-E174810F7C7B} + Crow + + + + + + + + + + + + + + + + + + + + + + + CrowIDE.MembersView.template + + + + + + + + + PreserveNewest + + + diff --cc CrowIDE/src/MembersView.cs index d8a76951,00000000..69f182d0 mode 100644,000000..100644 --- a/CrowIDE/src/MembersView.cs +++ b/CrowIDE/src/MembersView.cs @@@ -1,131 -1,0 +1,118 @@@ +// +// MembersView.cs +// +// Author: +// Jean-Philippe Bruyère +// +// Copyright (c) 2016 jp +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +using System; +using Crow; +using System.Xml.Serialization; +using System.ComponentModel; +using System.Reflection; +using System.Collections.Generic; + +namespace CrowIDE +{ - public class PropertyContainer : IBindable, IValueChange ++ public class PropertyContainer : IValueChange + { - #region IBindable implementation - public object DataSource { - get { return null; } - set { - throw new NotImplementedException (); - } - } - List bindings = new List (); - public List Bindings { - get { return bindings; } - } - #endregion - - #region IValueChange implementation ++ #region IValueChange implementation + public event EventHandler ValueChanged; + public virtual void NotifyValueChanged(string MemberName, object _value) + { + ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value)); + } + #endregion + + PropertyInfo pi; + object instance; + + public string Name { get { return pi.Name; }} + public object Value { + get { return pi.GetValue(instance); } + set { + try { + if (!pi.PropertyType.IsAssignableFrom(value.GetType()) && pi.PropertyType != typeof(string)){ + if (pi.PropertyType.IsEnum) { + pi.SetValue (instance, value); + } else { + MethodInfo me = pi.PropertyType.GetMethod + ("Parse", BindingFlags.Static | BindingFlags.Public, + System.Type.DefaultBinder, new Type [] {typeof (string)},null); + pi.SetValue (instance, me.Invoke (null, new object[] { value }), null); + } + }else + pi.SetValue(instance, value); + } catch (Exception ex) { + System.Diagnostics.Debug.WriteLine ("Error setting property:"+ ex.ToString()); + } + NotifyValueChanged ("Value", value); + } + } + public string Type { get { return pi.PropertyType.IsEnum ? + "System.Enum" + : pi.PropertyType.FullName; }} + public string[] Choices { + get { + return Enum.GetNames (pi.PropertyType); + } + } + + public PropertyContainer(PropertyInfo prop, object _instance){ + pi = prop; + instance = _instance; + } + + } + public class MembersView : ListBox + { + object instance; + + [XmlAttributeAttribute][DefaultValue(null)] + public virtual object Instance { + get { return instance; } + set { + if (instance == value) + return; + instance = value; + NotifyValueChanged ("Instance", instance); + + if (instance == null) { + Data = null; + return; + } + + MemberInfo[] members = instance.GetType ().GetMembers (BindingFlags.Public | BindingFlags.Instance); + + List props = new List (); + foreach (MemberInfo m in members) { + if (m.MemberType == MemberTypes.Property) { + PropertyInfo pi = m as PropertyInfo; + if (!pi.CanWrite) + continue; + if (pi.GetCustomAttribute (typeof(XmlIgnoreAttribute)) != null) + continue; + props.Add (new PropertyContainer (pi, instance)); + } + } + Data = props.ToArray (); + } + } + public MembersView () : base() + { + } + } +} diff --cc Templates/ColorPicker.template index e128ff71,4c1e1280..dbc34851 --- a/Templates/ColorPicker.template +++ b/Templates/ColorPicker.template @@@ -46,4 -46,4 +46,4 @@@ -- ++ diff --cc Tests/Tests.csproj index ea03ce1a,a95a034a..7fd48e36 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@@ -46,7 -45,7 +45,8 @@@ - $(SolutionDir)packages\OpenTK.Next.1.2.2336.6514-pre\lib\net20\OpenTK.dll + $(SolutionDir)packages\OpenTK.2.0.0\lib\net20\OpenTK.dll ++ opentk