]> O.S.I.I.S - jp/crow.git/commitdiff
in design saving of GraphicObject
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 26 Feb 2018 11:47:39 +0000 (12:47 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 26 Feb 2018 11:47:39 +0000 (12:47 +0100)
14 files changed:
CrowIDE/CrowIDE.csproj
CrowIDE/src/MembersView.cs
CrowIDE/src/PropertyContainer.cs [new file with mode: 0644]
CrowIDE/ui/IDE.style
CrowIDE/ui/MembersItem.template
CrowIDE/ui/MembersView.template
src/GraphicObjects/Container.cs
src/GraphicObjects/GraphicObject.cs
src/GraphicObjects/Group.cs
src/GraphicObjects/TemplatedContainer.cs
src/GraphicObjects/TemplatedControl.cs
src/GraphicObjects/TemplatedGroup.cs
src/Instantiator.cs
src/ItemTemplate.cs

index 566a1e69d823fc0306da17537b94e75b4667944c..322e9beea866b8cc2a63eaab3b384e63dd124fef 100644 (file)
     <Compile Include="src\SourceEditor\Token.cs" />
     <Compile Include="src\SourceEditor\XMLParser.cs" />
     <Compile Include="src\SourceEditor\StyleParser.cs" />
+    <Compile Include="src\PropertyContainer.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="ui\" />
index 48b3e074b4b37ad7e43ac853b7cb62a1be31c5d5..79bcf5c415f408367836de35c2ea2134980032ff 100644 (file)
@@ -25,62 +25,10 @@ using System.ComponentModel;
 using System.Reflection;
 using System.Collections.Generic;
 using System.Linq;
+using Cairo;
 
 namespace Crow.Coding
-{
-       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) {
-                                                       if (value is string) {
-                                                               pi.SetValue (instance, Enum.Parse (pi.PropertyType, (string)value));
-                                                       }else
-                                                               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 object[] Choices {
-                       get {
-                               return Enum.GetValues (pi.PropertyType).Cast<object>().ToArray();
-                       }
-               }
-
-               public PropertyContainer(PropertyInfo prop, object _instance){
-                       pi = prop;
-                       instance = _instance;
-               }
-
-       }
+{      
        public class MembersView : ListBox
        {               
                object instance;
@@ -116,11 +64,26 @@ namespace Crow.Coding
                                                props.Add (new PropertyContainer (pi, instance));
                                        }
                                }
-                               Data = props.ToArray ();
+                               Data = props.OrderBy(p=>p.Name).ToArray ();
                        }
                }
                public MembersView () : base()
                {
                }
+
+//             public override void Paint (ref Context ctx)
+//             {
+//                     base.Paint (ref ctx);
+//
+//                     if (SelectedIndex < 0)
+//                             return;
+//
+//                     Rectangle r =  Parent.ContextCoordinates(Items [SelectedIndex].Slot);
+//                     ctx.SetSourceRGB (0, 0, 1);
+//                     ctx.Rectangle (r);
+//                     ctx.LineWidth = 2;
+//                     ctx.Stroke ();
+//             }
+
        }
 }
diff --git a/CrowIDE/src/PropertyContainer.cs b/CrowIDE/src/PropertyContainer.cs
new file mode 100644 (file)
index 0000000..feea647
--- /dev/null
@@ -0,0 +1,98 @@
+//
+// PropertyContainer.cs
+//
+// Author:
+//       Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// Copyright (c) 2013-2017 Jean-Philippe Bruyère
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+using System;
+using System.Reflection;
+using System.Linq;
+
+namespace Crow.Coding
+{
+       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;
+               GraphicObject go;
+
+               public string Name { get { return pi.Name; }}
+               public object Value {
+                       get { return go.design_members.ContainsKey(Name) ?
+                               go.design_members[Name] : pi.GetValue(instance); }
+                       set {
+                               if (go.design_members.ContainsKey (Name)) {
+                                       if (go.design_members [Name] == (string)value)
+                                               return;
+                               }
+                               go.design_members [Name] = (string)value;
+//                             try {
+//                                     if (!pi.PropertyType.IsAssignableFrom(value.GetType()) && pi.PropertyType != typeof(string)){
+//                                             if (pi.PropertyType.IsEnum) {
+//                                                     if (value is string) {
+//                                                             pi.SetValue (instance, Enum.Parse (pi.PropertyType, (string)value));
+//                                                     }else
+//                                                             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 object[] Choices {
+                       get {
+                               return Enum.GetValues (pi.PropertyType).Cast<object>().ToArray();
+                       }
+               }
+
+               public Fill LabForeground {
+                       get { return go.design_members.ContainsKey(Name) ? Color.Black : Color.DimGray;}
+               }
+
+               public PropertyContainer(PropertyInfo prop, object _instance){
+                       pi = prop;
+                       instance = _instance;
+                       go = instance as GraphicObject;
+               }
+
+       }
+}
+
index 3a0cdcd396445604158f1cabea9607b5fc5513e0..3dce97faaa1be2df252b571612aaa6ab71bfb188 100644 (file)
@@ -2,3 +2,16 @@
        Width=14;
        Height=14;
 }
+MemberViewLabel {
+       Margin=1;
+       Height=Fit;
+       Width=50%;
+       Background=White;
+}
+MemberViewHStack {
+       Focusable=true;
+       Height=Fit;
+       Spacing=1;
+       MouseEnter={Background=UnitedNationsBlue};
+       MouseLeave={Background=Transparent};
+}
index a3cf670e0e458e7806688b26f997d9f515037e82..5c5640619a084fde707b252e22c46f31a1dd2f2f 100644 (file)
@@ -1,25 +1,19 @@
 <?xml version="1.0"?>
 <ItemTemplate>
-       <HorizontalStack Focusable="true"  Height="Fit" Spacing="0"
-                       MouseEnter="{Background=UnitedNationsBlue}"
-                       MouseLeave="{Background=Transparent}" >
-               <Label Margin="1" Text="{Name}" Height="Fit" Width="50%"/>
-               <TextBox Margin="1" Text="{²Value}" Height="Fit" Width="50%"/>
+       <HorizontalStack Style="MemberViewHStack" >
+               <Label Style="MemberViewLabel" Text="{Name}" Foreground = "{LabForeground}"/>
+               <TextBox Margin="1" Text="{²Value}" Height="Fit" Foreground = "{LabForeground}"/>
        </HorizontalStack>
 </ItemTemplate>
 <ItemTemplate DataType="System.Boolean">
-       <HorizontalStack Focusable="true"  Height="Fit" Spacing="0"
-                       MouseEnter="{Background=UnitedNationsBlue}"
-                       MouseLeave="{Background=Transparent}" >
-               <Label Margin="1" Text="{Name}" Height="Fit" Width="50%"/>
-               <CheckBox Background="White" Height="Stretched" Caption="" IsChecked="{²Value}"/>
+       <HorizontalStack Style="MemberViewHStack" >
+               <Label Style="MemberViewLabel" Text="{Name}" Foreground = "{LabForeground}"/>
+               <CheckBox Background="White" Foreground = "{LabForeground}" Height="Stretched" Caption="" IsChecked="{²Value}"/>
        </HorizontalStack>
 </ItemTemplate>
 <ItemTemplate DataType="System.Enum">
-       <HorizontalStack Focusable="true"  Height="Fit" Spacing="0"
-                       MouseEnter="{Background=UnitedNationsBlue}"
-                       MouseLeave="{Background=Transparent}" >
-               <Label Margin="1" Text="{Name}" Height="Fit" Width="50%"/>
+       <HorizontalStack Style="MemberViewHStack" >
+               <Label Style="MemberViewLabel" Text="{Name}" Foreground = "{LabForeground}"/>
                <ComboBox Margin="0"  Height="Stretched" Width="50%" Data="{Choices}"
                                SelectedItem="{²Value}">
                        <Template>
@@ -29,7 +23,7 @@
                                                        <Template>
                                                                <Border CornerRadius="0" Foreground="LightGray" Background="White">
                                                                        <HorizontalStack Margin="0" Spacing="1">
-                                                                               <Label Width="Stretched" MinimumSize="80,10" Margin="1" Foreground="Black" Background="White"
+                                                                               <Label Width="Stretched" MinimumSize="80,10" Margin="1" Foreground = "{LabForeground}" Background="White"
                                                                                        Text="{../../../../../SelectedItem}"/>
                                                                                <Button Width="12" Height="12" Focusable="false"
                                                                                        Template="#Crow.Templates.ArrowBut.template">
        </HorizontalStack>
 </ItemTemplate>
 <ItemTemplate DataType="Crow.Fill">
-       <HorizontalStack Focusable="true"  Height="Fit" Spacing="0"
-                       MouseEnter="{Background=UnitedNationsBlue}"
-                       MouseLeave="{Background=Transparent}" >
-               <Label Margin="1" Text="{Name}" Height="Fit" Width="50%"/>
+       <HorizontalStack Style="MemberViewHStack" >
+               <Label Style="MemberViewLabel" Text="{Name}" Foreground = "{LabForeground}"/>
                <Popper Background="White" Margin="0" Height="Stretched" Caption="{Value}">
                        <Template>
-                               <CheckBox Caption="{./Caption}" IsChecked="{²./IsPopped}" Foreground="{./Foreground}" Background="{./Background}">
+                               <CheckBox Caption="{./Caption}" IsChecked="{²./IsPopped}" Background="{./Background}">
                                        <Template>
                                                <HorizontalStack Spacing="3" Height="Fit" Background="{./Background}">
-                                                       <Border Foreground="Black" Width="16" Height="10" CornerRadius="3"
+                                                       <Border Foreground="{LabForeground}" Width="16" Height="10" CornerRadius="3"
                                                                Background="{Value}">
                                                        </Border>
-                                                       <Label Text="{./Caption}" Foreground="Black"/>
+                                                       <Label Text="{./Caption}" Foreground="{LabForeground}"/>
                                                </HorizontalStack>
                                        </Template>
                                </CheckBox>
index 411834c474db2ca5e5fee66209357ab350891f17..9784d737e321739a398cbc8a56be5bfe20c3cce9 100755 (executable)
@@ -7,7 +7,7 @@
                <Scroller  Name="scroller1" Margin="1" VerticalScrolling="true"
                        Background="{./Background}"
                        ScrollY="{../scrollbar1.Value}">
-                       <VerticalStack
+                       <VerticalStack Spacing="1"
                                Height="Fit" Name="ItemsContainer" Margin="0" VerticalAlignment="Top"/>
                </Scroller>
                <ScrollBar
index fedee0af8d232dd475e90a8dfe2d7f8bfb3f50a7..364bad833285491ddf819753efffecd48875d2df 100644 (file)
@@ -38,6 +38,18 @@ namespace Crow
        /// </summary>
     public class Container : PrivateContainer
     {
+               #if DESIGN_MODE
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+                       if (child == null)
+                               return;
+                       child.getIML (doc, parentElem.LastChild);
+               }
+               #endif
+
                #region CTOR
                protected Container() : base(){}
                public Container (Interface iface) : base(iface){}
index 768b5c0759fe0654fedc0d12840e40b742b7b611..fadbe124f3a0846a39878f1c2a24b08020c07c21 100644 (file)
@@ -36,6 +36,12 @@ using System.Diagnostics;
 using Crow.IML;
 using System.Threading;
 
+
+#if DESIGN_MODE
+using System.Xml;
+using System.IO;
+#endif
+
 namespace Crow
 {
        /// <summary>
@@ -50,6 +56,42 @@ namespace Crow
                public int design_column;
                public string design_imlPath;
                public Dictionary<string,string> design_members = new Dictionary<string, string>();
+               public bool design_isTGItem = false;
+
+               public string GetIML(){
+                       XmlDocument doc = new XmlDocument( );
+
+                       using (StringWriter sw = new StringWriter ()) {
+                               XmlWriterSettings settings = new XmlWriterSettings {
+                                       Indent = true,
+                                       IndentChars = "\t",
+                               };
+                               using (XmlWriter xtw = XmlWriter.Create (sw, settings)) {
+                                       //(1) the xml declaration is recommended, but not mandatory
+                                       XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration ("1.0", "UTF-8", null);
+                                       doc.InsertBefore (xmlDeclaration, null);
+                                       getIML (doc, (XmlNode)doc);
+                                       doc.WriteTo (xtw);
+                               }
+                               return sw.ToString ();
+                       }
+               }
+
+               public virtual void getIML(XmlDocument doc, XmlNode parentElem) {
+                       if (this.design_isTGItem)
+                               return;
+                       
+                       XmlElement xe = doc.CreateElement(this.GetType().Name);
+
+                       foreach (KeyValuePair<string,string> kv in design_members) {
+                               XmlAttribute xa = doc.CreateAttribute (kv.Key);
+                               xa.Value = kv.Value;
+                               xe.Attributes.Append (xa);
+                       }
+
+                       parentElem.AppendChild (xe);
+               }
+
                #endif
 
                #region IDisposable implementation
index cfec77742605add4f7bd072376d0effdfd3c6d66..2875b4de191c3f1d09911e8c807c0dc119bb733f 100644 (file)
@@ -38,6 +38,18 @@ namespace Crow
 {
        public class Group : GraphicObject
     {
+               #if DESIGN_MODE
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+                       foreach (GraphicObject g in Children) {
+                               g.getIML (doc, parentElem.LastChild);   
+                       }
+               }
+               #endif
+
                protected ReaderWriterLockSlim childrenRWLock = new ReaderWriterLockSlim();
 
                #region CTOR
index 3e0dd801fcbea1d0e9713f61ad2296aa2a9f21cb..a779595d9b30d002a28c005940ad68c7aa79f52c 100644 (file)
@@ -38,6 +38,18 @@ namespace Crow
        /// </summary>
        public class TemplatedContainer : TemplatedControl
        {
+               #if DESIGN_MODE
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+                       if (!HasContent)
+                               return;
+                       Content.getIML (doc, parentElem.LastChild);
+               }
+               #endif
+
                #region CTOR
                protected TemplatedContainer() : base(){}
                public TemplatedContainer (Interface iface) : base(iface){}
index c231fd0f8a0938b59d0b8cb6228876a22a094e55..54991a415960e24b1e85080c36cfdb12302f49f4 100644 (file)
@@ -43,6 +43,20 @@ namespace Crow
        /// </summary>
        public abstract class TemplatedControl : PrivateContainer
        {
+               #if DESIGN_MODE
+               public bool design_inlineTemplate = false;
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+                       if (child == null || !design_inlineTemplate)
+                               return;
+                       XmlElement xe = doc.CreateElement("Template");
+                       child.getIML (doc, xe);
+                       parentElem.LastChild.AppendChild (xe);
+               }
+               #endif
                #region CTOR
                protected TemplatedControl() : base(){}
                public TemplatedControl (Interface iface) : base(iface){}
index 8e0ffb448d9cc7f716fbcf93a1df6f676d8cdbc4..a5cd2dd6b5d70a4239ab9156c553b16138f6e0a1 100644 (file)
@@ -40,6 +40,24 @@ namespace Crow
 {
        public abstract class TemplatedGroup : TemplatedControl
        {
+               #if DESIGN_MODE
+               public override void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem)
+               {
+                       if (this.design_isTGItem)
+                               return;
+                       base.getIML (doc, parentElem);
+
+                       if (string.IsNullOrEmpty(_itemTemplate)) {
+                               foreach (ItemTemplate it in ItemTemplates.Values) 
+                                       it.getIML (doc, parentElem.LastChild);                          
+                       }
+
+                       foreach (GraphicObject g in Items) {
+                               g.getIML (doc, parentElem.LastChild);   
+                       }
+               }
+               #endif
+
                #region CTOR
                protected TemplatedGroup() : base(){}
                public TemplatedGroup (Interface iface) : base(iface){}
@@ -429,6 +447,9 @@ namespace Crow
 
                        lock (IFace.LayoutMutex) {
                                g = iTemp.CreateInstance();
+                               #if DESIGN_MODE
+                               g.design_isTGItem = true;
+                               #endif
                                page.AddChild (g);
 //                             if (isPaged)
                                g.LogicalParent = this;
index 5c4b82f3f59d3ce84ee6f98f95597455e9c620ca..c0b886ada2684694d959d2938f7409827a1b512e 100644 (file)
@@ -263,7 +263,7 @@ namespace Crow.IML
                                itemTmpID += path+dataType+datas;
                                if (!iface.Instantiators.ContainsKey (itemTmpID))
                                        iface.Instantiators [itemTmpID] =
-                                               new ItemTemplate (iface, Interface.GetStreamFromPath (path), dataTest, dataType, datas);
+                                               new ItemTemplate (iface, path, dataTest, dataType, datas);
                        }
                        return new string [] { dataType, itemTmpID, datas, dataTest };
                }
@@ -289,6 +289,11 @@ namespace Crow.IML
                                                continue;
                                        if (reader.Name == "Template") {
                                                inlineTemplate = true;
+                                               #if DESIGN_MODE
+                                               ctx.il.Emit (OpCodes.Ldloc_0);
+                                               ctx.il.Emit (OpCodes.Ldc_I4_1);
+                                               ctx.il.Emit (OpCodes.Stfld, typeof(TemplatedControl).GetField("design_inlineTemplate"));
+                                               #endif
                                                reader.Read ();
                                                readChildren (reader, ctx, -1);
                                        } else if (reader.Name == "ItemTemplate")
index 7eb9d752b2a9e6798cd2481910922baa3d95a698..dda9d15279b40c27d7fe823d9ee193f2e14dcc62 100644 (file)
@@ -48,6 +48,48 @@ namespace Crow
        /// 
        /// </summary>
        public class ItemTemplate : Instantiator {
+               #if DESIGN_MODE
+               public void getIML (System.Xml.XmlDocument doc, System.Xml.XmlNode parentElem){         
+                       if (sourcePath == "#Crow.DefaultItem.template")
+                               return;
+                       
+                       XmlElement xe = doc.CreateElement("ItemTemplate");
+                       XmlAttribute xa = null;
+
+                       if (string.IsNullOrEmpty (sourcePath)) {
+                               //inline item template
+                               using (GraphicObject go = this.CreateInstance())
+                                       go.getIML (doc, xe);
+                       } else {
+                               xa = doc.CreateAttribute ("Path");
+                               xa.Value = sourcePath;
+                               xe.Attributes.Append (xa);
+                       }
+
+                       if (strDataType != "default") {
+                               xa = doc.CreateAttribute ("DataType");
+                               xa.Value = strDataType;
+                               xe.Attributes.Append (xa);
+
+                               if (dataTest != "TypeOf"){
+                                       xa = doc.CreateAttribute ("DataTest");
+                                       xa.Value = dataTest;
+                                       xe.Attributes.Append (xa);
+                               }
+                       }
+
+                       if (!string.IsNullOrEmpty(fetchMethodName)){
+                               xa = doc.CreateAttribute ("Data");
+                               xa.Value = fetchMethodName;
+                               xe.Attributes.Append (xa);
+                       }
+                               
+                       parentElem.AppendChild (xe);
+
+                               
+               }
+               #endif
+
                public EventHandler Expand;
                public BooleanTestOnInstance HasSubItems;
                string strDataType;
@@ -61,7 +103,7 @@ namespace Crow
                /// <param name="path">IML file to parse</param>
                /// <param name="_dataType">type this item will be choosen for, or member of the data item</param>
                /// <param name="_fetchDataMethod">for hierarchical data, method to call for children fetching</param>
-               public ItemTemplate(Interface _iface, string path, string _dataTest = "TypeOf", string _dataType = null, string _fetchDataMethod = null)
+               public ItemTemplate(Interface _iface, string path, string _dataTest = "TypeOf", string _dataType = "default", string _fetchDataMethod = null)
                        : base(_iface, path) {
                        strDataType = _dataType;
                        fetchMethodName = _fetchDataMethod;
@@ -251,6 +293,9 @@ namespace Crow
 
                        il.Emit (OpCodes.Callvirt, miGetDatas);
                }
+
+       
+       
        }
 }