--- /dev/null
- <HintPath>$(SolutionDir)packages\OpenTK.Next.1.2.2336.6514-pre\lib\net20\OpenTK.dll</HintPath>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{B6D911CD-1D09-42FC-B300-9187190F2AE1}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>CrowIDE</RootNamespace>
+ <AssemblyName>CrowIDE</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <OutputPath>$(SolutionDir)build/$(Configuration)</OutputPath>
+ <IntermediateOutputPath>$(SolutionDir)build/obj/$(Configuration)</IntermediateOutputPath>
+ <CustomCommands>
+ <CustomCommands>
+ <Command type="Execute" command="${TargetName}" workingdir="${SolutionDir}/build/${ProjectConfigName}" />
+ </CustomCommands>
+ </CustomCommands>
+ <ReleaseVersion>0.5</ReleaseVersion>
+ <StartupObject>CrowIDE.CrowIDE</StartupObject>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <DefineConstants>DEBUG;</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
+ <OutputPath>$(SolutionDir)build\$(Configuration)</OutputPath>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>none</DebugType>
+ <Optimize>true</Optimize>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>0</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
+ <OutputPath>$(SolutionDir)build\$(Configuration)</OutputPath>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="cairo-sharp">
+ <Package>gtk-sharp-3.0</Package>
+ </Reference>
+ <Reference Include="gdk-sharp">
+ <Package>gtk-sharp-2.0</Package>
+ </Reference>
+ <Reference Include="gio-sharp">
+ <Package>gio-sharp-3.0</Package>
+ </Reference>
+ <Reference Include="glib-sharp">
+ <Package>glib-sharp-3.0</Package>
+ </Reference>
+ <Reference Include="OpenTK">
++ <HintPath>$(SolutionDir)packages\OpenTK.2.0.0\lib\net20\OpenTK.dll</HintPath>
++ <Package>opentk</Package>
+ </Reference>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <ItemGroup>
+ <ProjectReference Include="..\Crow.csproj">
+ <Project>{C2980F9B-4798-4C05-99E2-E174810F7C7B}</Project>
+ <Name>Crow</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="OpenTKGameWindow.cs" />
+ <Compile Include="OpenGL\Shader.cs" />
+ <Compile Include="OpenGL\Texture.cs" />
+ <Compile Include="OpenGL\vaoMesh.cs" />
+ <Compile Include="src\CrowIDE.cs" />
+ <Compile Include="src\ImlVisualEditor.cs" />
+ <Compile Include="src\MembersView.cs" />
+ <Compile Include="src\Extensions.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="ui\" />
+ <Folder Include="src\" />
+ <Folder Include="images\" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="ui\imlEditor.crow" />
+ <EmbeddedResource Include="images\save.svg" />
+ <EmbeddedResource Include="ui\IDE.style" />
+ <EmbeddedResource Include="ui\MembersView.template">
+ <LogicalName>CrowIDE.MembersView.template</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="ui\bindingExplorer.crow" />
+ <EmbeddedResource Include="ui\bindingExpITemp.crow" />
+ <EmbeddedResource Include="ui\LQIsExplorer.crow" />
+ <EmbeddedResource Include="Default.style" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="ui\test.crow">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
+ </ItemGroup>
+</Project>
--- /dev/null
- public class PropertyContainer : IBindable, IValueChange
+//
+// MembersView.cs
+//
+// Author:
+// Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+// 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 <http://www.gnu.org/licenses/>.
+using System;
+using Crow;
+using System.Xml.Serialization;
+using System.ComponentModel;
+using System.Reflection;
+using System.Collections.Generic;
+
+namespace CrowIDE
+{
- #region IBindable implementation
- public object DataSource {
- get { return null; }
- set {
- throw new NotImplementedException ();
- }
- }
- List<Binding> bindings = new List<Binding> ();
- public List<Binding> Bindings {
- get { return bindings; }
- }
- #endregion
-
- #region IValueChange implementation
++ public class PropertyContainer : IValueChange
+ {
++ #region IValueChange implementation
+ public event EventHandler<ValueChangeEventArgs> 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<PropertyContainer> props = new List<PropertyContainer> ();
+ 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()
+ {
+ }
+ }
+}