From e01022e6734e1aefd358658db681d7d6821b91b2 Mon Sep 17 00:00:00 2001 From: jpbruyere Date: Tue, 16 Aug 2016 06:30:37 +0200 Subject: [PATCH] * CrowIDE.csproj, imlEditor.crow, MembersView.cs, ImlVisualEditor.cs, MembersView.template: MembersView * ListBox.cs: check data baseTypes before choosing default itemTemplate --- CrowIDE/CrowIDE.csproj | 4 ++ CrowIDE/src/ImlVisualEditor.cs | 25 ++++++---- CrowIDE/src/MembersView.cs | 81 +++++++++++++++++++++++++++++++++ CrowIDE/ui/MembersView.template | 9 ++++ CrowIDE/ui/imlEditor.crow | 21 +++++++-- src/GraphicObjects/ListBox.cs | 14 ++++-- 6 files changed, 138 insertions(+), 16 deletions(-) create mode 100644 CrowIDE/src/MembersView.cs create mode 100755 CrowIDE/ui/MembersView.template diff --git a/CrowIDE/CrowIDE.csproj b/CrowIDE/CrowIDE.csproj index 6a3a9139..e04c95e4 100644 --- a/CrowIDE/CrowIDE.csproj +++ b/CrowIDE/CrowIDE.csproj @@ -75,6 +75,7 @@ + @@ -85,6 +86,9 @@ + + CrowIDE.MembersView.template + diff --git a/CrowIDE/src/ImlVisualEditor.cs b/CrowIDE/src/ImlVisualEditor.cs index 8b6808d1..d612ea39 100644 --- a/CrowIDE/src/ImlVisualEditor.cs +++ b/CrowIDE/src/ImlVisualEditor.cs @@ -59,7 +59,6 @@ namespace CrowIDE reloadFromSource (); } } - [XmlAttributeAttribute][DefaultValue("")] public string ImlPath { get { return imlPath; } @@ -74,6 +73,9 @@ namespace CrowIDE reloadFromPath (); } } + + + void reloadFromSource(){ if (string.IsNullOrEmpty (imlSource)) { reload_iTor (null); @@ -113,6 +115,7 @@ namespace CrowIDE } } } + [XmlAttributeAttribute()][DefaultValue(true)] public bool DrawGrid { get { return drawGrid; } @@ -135,14 +138,9 @@ namespace CrowIDE RegisterForRedraw (); } } - public ImlVisualEditor () : base() - { - imlVE = new Interface (); - Thread t = new Thread (interfaceThread); - t.IsBackground = true; - t.Start (); + [XmlIgnore]public object SelectedItem { + get { return imlVE.HoverWidget; } } - void interfaceThread() { while (true) { @@ -186,8 +184,15 @@ namespace CrowIDE GraphicObject oldHW = imlVE.HoverWidget; Rectangle scr = this.ScreenCoordinates (this.getSlot ()); imlVE.ProcessMouseMove (e.X - scr.X, e.Y - scr.Y); - if (oldHW != imlVE.HoverWidget) - RegisterForRedraw (); + if (oldHW == imlVE.HoverWidget) + return; + RegisterForRedraw (); + + } + public override void onMouseDown (object sender, MouseButtonEventArgs e) + { + base.onMouseDown (sender, e); + NotifyValueChanged ("SelectedItem", imlVE.HoverWidget); } protected override void onDraw (Cairo.Context gr) { diff --git a/CrowIDE/src/MembersView.cs b/CrowIDE/src/MembersView.cs new file mode 100644 index 00000000..52f8da04 --- /dev/null +++ b/CrowIDE/src/MembersView.cs @@ -0,0 +1,81 @@ +// +// 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 { + PropertyInfo pi; + object instance; + + public string Name { get { return pi.Name; }} + public object Value { get { return pi.GetValue(instance); }} + + 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 --git a/CrowIDE/ui/MembersView.template b/CrowIDE/ui/MembersView.template new file mode 100755 index 00000000..9eacd19e --- /dev/null +++ b/CrowIDE/ui/MembersView.template @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/CrowIDE/ui/imlEditor.crow b/CrowIDE/ui/imlEditor.crow index e08c2efe..11478f0c 100644 --- a/CrowIDE/ui/imlEditor.crow +++ b/CrowIDE/ui/imlEditor.crow @@ -11,12 +11,12 @@ - - + - + @@ -30,6 +30,21 @@ Width="14" /> + + + + + + + + + + + + diff --git a/src/GraphicObjects/ListBox.cs b/src/GraphicObjects/ListBox.cs index ffbaf3e8..f91a9836 100644 --- a/src/GraphicObjects/ListBox.cs +++ b/src/GraphicObjects/ListBox.cs @@ -182,9 +182,17 @@ namespace Crow ItemTemplate iTemp = null; Type dataType = data [i].GetType (); - if (ItemTemplates.ContainsKey (dataType.FullName)) - iTemp = ItemTemplates [dataType.FullName]; - else + while (dataType.FullName != "System.Object") { + if (ItemTemplates.ContainsKey (dataType.FullName)) { + iTemp = ItemTemplates [dataType.FullName]; + break; + } + dataType = dataType.BaseType; + if (dataType == null) + break; + } + + if (iTemp == null) iTemp = ItemTemplates ["default"]; lock (CurrentInterface.LayoutMutex) { -- 2.47.3