]> O.S.I.I.S - jp/crow.git/commitdiff
Combobox
authorjpbruyere <jp.bruyere@hotmail.com>
Thu, 17 Sep 2015 16:30:01 +0000 (18:30 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Thu, 17 Sep 2015 16:30:01 +0000 (18:30 +0200)
14 files changed:
GOLib.csproj
Templates/ComboListOverlay.goml [deleted file]
Templates/Combobox.goml [new file with mode: 0755]
Templates/ComboboxOverlay.goml [new file with mode: 0755]
Tests/GOLIBTest_Listbox.cs
Tests/GOLIBTests.cs
Tests/Interfaces/testCombobox.goml [new file with mode: 0755]
Tests/Tests.csproj
src/GraphicObjects/Combobox.cs [new file with mode: 0644]
src/GraphicObjects/GraphicObject.cs
src/GraphicObjects/ListBox.cs
src/GraphicObjects/TemplatedControl.cs
src/Interface.cs
src/SelectionChangeEventArgs.cs [new file with mode: 0644]

index e2e9dfa56560f972c86cd984987f78475aa832da..1c5d4263eb834d7551539bab772df0a20ddf19d8 100644 (file)
     <Compile Include="src\GraphicObjects\Popper.cs" />\r
     <Compile Include="src\GraphicObjects\Scrollbar.cs" />\r
     <Compile Include="src\TextChangeEventArgs.cs" />\r
-    <Compile Include="src\ValueChangeEventArgs.cs" />\r
     <Compile Include="src\LayoutChangeEventArgs.cs" />\r
     <Compile Include="src\ReflexionExtensions.cs" />\r
     <Compile Include="src\XCursor.cs" />\r
     <Compile Include="src\GraphicObjects\TextRun.cs" />\r
     <Compile Include="src\GraphicObjects\MessageBox.cs" />\r
     <Compile Include="src\GraphicObjects\Groupbox.cs" />\r
+    <Compile Include="src\GraphicObjects\Combobox.cs" />\r
+    <Compile Include="src\SelectionChangeEventArgs.cs" />\r
+    <Compile Include="src\ValueChangeEventArgs.cs" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <Reference Include="System" />\r
     <EmbeddedResource Include="Templates\Spinner.goml" />\r
     <EmbeddedResource Include="Templates\Spinner %28copier%29.goml" />\r
     <EmbeddedResource Include="Templates\ItemTemplate.goml" />\r
-    <EmbeddedResource Include="Templates\ComboListOverlay.goml" />\r
     <EmbeddedResource Include="Templates\Expandable.goml" />\r
     <EmbeddedResource Include="Images\Icons\expandable.svg" />\r
     <EmbeddedResource Include="Templates\Checkbox2.goml" />\r
     <EmbeddedResource Include="Templates\MessageBox.goml" />\r
     <EmbeddedResource Include="Images\Icons\iconInfo.svg" />\r
     <EmbeddedResource Include="Templates\Groupbox.goml" />\r
+    <EmbeddedResource Include="Templates\Combobox.goml" />\r
+    <EmbeddedResource Include="Templates\ComboboxOverlay.goml" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <None Include="Images\Icons\Cursors\hand" />\r
diff --git a/Templates/ComboListOverlay.goml b/Templates/ComboListOverlay.goml
deleted file mode 100755 (executable)
index 65bac62..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>\r
-<Border MaximumSize="0;100" Fit="True" Background="Gray">\r
-       <Scroller Height="0" MaximumSize="0;100" Background="DimGray" Margin="0" VerticalScrolling="true">\r
-               <VerticalStack Name="List" Margin="0" VerticalAlignment="Top"/>\r
-       </Scroller>\r
-</Border>
\ No newline at end of file
diff --git a/Templates/Combobox.goml b/Templates/Combobox.goml
new file mode 100755 (executable)
index 0000000..2182404
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>\r
+<Border CornerRadius="0" BorderColor="LightGray" Height="{TemplatedHeight}" Width="{TemplatedWidth}">\r
+       <HorizontalStack Margin="1" Spacing="1" Height="{TemplatedHeight}" Width="{TemplatedWidth}">\r
+               <Label Margin="1" Foreground="Black" Background="White" Text="{Text}" \r
+                       Height="{TemplatedHeight}" Width="{TemplatedWidth}"/>\r
+               <Button Width="14" Height="14" >\r
+                       <Image Margin="0"  Path="#go.Images.Icons.updown.svg" SvgSub="down"/>\r
+               </Button>\r
+       </HorizontalStack>\r
+</Border>
\ No newline at end of file
diff --git a/Templates/ComboboxOverlay.goml b/Templates/ComboboxOverlay.goml
new file mode 100755 (executable)
index 0000000..349be30
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>\r
+<Border BorderWidth="1" Margin="1" MinimumSize="20;20" Height="{TemplatedHeight}" Width="{TemplatedWidth}" >\r
+       <Scroller  Name="scroller1" Margin="1" VerticalScrolling="true"\r
+               Height="{TemplatedHeight}" Width="{TemplatedWidth}">\r
+               <VerticalStack Height="-1" Width="{TemplatedWidth}" Name="List" Margin="0" VerticalAlignment="Top"/>\r
+       </Scroller>\r
+</Border>
\ No newline at end of file
index 0189e3f6b9f8f5c908476e06edfd840d6f0ae56e..1c19338e64c778c280ac3efffcd92c156b04393b 100644 (file)
@@ -64,19 +64,18 @@ namespace test
 //                             new ClsItem("string 2"),\r
 //                             new ClsItem("string 3")\r
 //                     });\r
-               public List<string> TestList;\r
-//             string[] TestList = new string[] \r
-//                     {\r
-//                             "string 1",\r
-//                             "string 2",\r
-//                             "string 3"\r
-//                     };      \r
+               public List<string> TestList = new List<string>( new string[] \r
+                       {\r
+                               "string 1",\r
+                               "string 2",\r
+                               "string 3"\r
+                       });     \r
 \r
                protected override void OnLoad (EventArgs e)\r
                {\r
                        base.OnLoad (e);\r
 \r
-                       TestList = Directory.GetFileSystemEntries("/mnt/data/MagicCardDataBase/a/", "*.txt",SearchOption.AllDirectories).ToList();\r
+                       //TestList = Directory.GetFileSystemEntries("/mnt/data/MagicCardDataBase/a/", "*.txt",SearchOption.AllDirectories).ToList();\r
                        LoadInterface("Interfaces/test_Listbox.goml");\r
 \r
 //                     TestList [1].Field = "test string";\r
index 14c6c1a159968ba860a58dec23963d086f184862..f5521f07582130a35a0b50884cfaf9c6b561bc0a 100644 (file)
@@ -12,6 +12,7 @@ using System.Diagnostics;
 //using GGL;\r
 using go;\r
 using System.Threading;\r
+using System.Collections.Generic;\r
 \r
 \r
 namespace test\r
@@ -31,6 +32,7 @@ namespace test
                int frameCpt = 0;\r
                int idx = 0;\r
                string[] testFiles = {\r
+                       "testCombobox.goml",\r
                        "testBorder.goml",\r
                        "testContainer.goml",\r
                        "testLabel.goml",\r
@@ -85,6 +87,13 @@ namespace test
                public string update = "";\r
                #endregion\r
 \r
+               public List<String> TestList = new List<string>( new string[] \r
+                       {\r
+                               "string 1",\r
+                               "string 2",\r
+                               "string 3"\r
+                       });     \r
+\r
                protected override void OnLoad (EventArgs e)\r
                {\r
                        base.OnLoad (e);\r
diff --git a/Tests/Interfaces/testCombobox.goml b/Tests/Interfaces/testCombobox.goml
new file mode 100755 (executable)
index 0000000..c022d22
--- /dev/null
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>\r
+<Combobox Height="-1" Data="{TestList}"/>
\ No newline at end of file
index 06eba8421a5e63ca87610d167f8cde443e7578a2..ca65a6b0974eac603358453486ad9359b7bedf8e 100644 (file)
     <None Include="Interfaces\testBorder.goml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="Interfaces\testCombobox.goml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <Folder Include="Interfaces\" />
diff --git a/src/GraphicObjects/Combobox.cs b/src/GraphicObjects/Combobox.cs
new file mode 100644 (file)
index 0000000..5cbc875
--- /dev/null
@@ -0,0 +1,293 @@
+using System;\r
+\r
+\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+//using OpenTK.Graphics.OpenGL;\r
+\r
+using Cairo;\r
+\r
+using winColors = System.Drawing.Color;\r
+using System.Diagnostics;\r
+using System.Xml.Serialization;\r
+using OpenTK.Input;\r
+using System.ComponentModel;\r
+using System.Xml;\r
+using System.IO;\r
+using System.Collections;\r
+\r
+namespace go\r
+{\r
+       [DefaultTemplate("#go.Templates.Combobox.goml")]\r
+       [DefaultOverlayTemplate("#go.Templates.ComboboxOverlay.goml")]\r
+       public class Combobox : TemplatedContainer\r
+    {          \r
+               #region CTOR\r
+               public Combobox() : base(){     }       \r
+               #endregion\r
+\r
+               bool _isPopped;\r
+               string text;\r
+               GraphicObject _overlay;\r
+               Group _list;\r
+               IList data;\r
+               int _selectedIndex;\r
+               object _selectedItem;\r
+               string _itemTemplate;\r
+               string _overlayTemplate;\r
+\r
+               public event EventHandler<SelectionChangeEventArgs> SelectedItemChanged;\r
+\r
+               #region implemented abstract members of TemplatedControl\r
+               protected override void loadTemplate (GraphicObject template)\r
+               {\r
+                       base.loadTemplate (template);\r
+                       loadOverlayTemplate (null);\r
+               }\r
+               public override GraphicObject Content {\r
+                       get {\r
+                               throw new NotImplementedException ();\r
+                       }\r
+                       set {\r
+                               throw new NotImplementedException ();\r
+                       }\r
+               }\r
+               #endregion\r
+\r
+               protected virtual void loadOverlayTemplate(GraphicObject overlayTemplate)\r
+               {\r
+                       if (overlayTemplate == null) {\r
+                               DefaultOverlayTemplate dt = (DefaultOverlayTemplate)this.GetType ().GetCustomAttributes (typeof(DefaultOverlayTemplate), true).FirstOrDefault ();\r
+                               Overlay = Interface.Load (dt.Path, this, !Interface.DontResoveGOML);\r
+                       } else\r
+                               Overlay = overlayTemplate;\r
+                       _list = Overlay.FindByName ("List") as Group;\r
+               }\r
+\r
+               [XmlAttributeAttribute][DefaultValue("#go.Templates.ItemTemplate.goml")]\r
+               public string ItemTemplate {\r
+                       get { return _itemTemplate; }\r
+                       set { \r
+                               //TODO:reload list with new template?\r
+                               _itemTemplate = value; \r
+                       }\r
+               }\r
+               [XmlAttributeAttribute][DefaultValue("#go.Templates.ComboboxOverlay.goml")]\r
+               public string OverlayTemplate {\r
+                       get { return _overlayTemplate; }\r
+                       set { \r
+                               //TODO:reload list with new template?\r
+                               _overlayTemplate = value; \r
+\r
+                               Overlay = Interface.Load (_overlayTemplate, this, !Interface.DontResoveGOML);\r
+                               _list = Overlay.FindByName ("List") as Group;\r
+                       }\r
+               }\r
+               [XmlAttributeAttribute][DefaultValue(-1)]\r
+               public int SelectedIndex{\r
+                       get { return _selectedIndex; }\r
+                       set { _selectedIndex = value; }\r
+               }\r
+               public object SelectedItem{\r
+                       set {                           \r
+                               _selectedItem = value;\r
+\r
+//                             NotifyValueChanged ("SelectedItem", _selectedItem);\r
+//\r
+                               if (SelectedItem == null)\r
+                                       Text = "";\r
+                               else\r
+                                       Text = _selectedItem.ToString ();\r
+                       }\r
+                               \r
+                       get { return _selectedItem; }\r
+               }\r
+               [XmlAttributeAttribute][DefaultValue(null)]\r
+               public IList Data {\r
+                       get {\r
+                               return data;\r
+                       }\r
+                       set {                           \r
+                               data = value;\r
+                               if (_list == null)\r
+                                       return;\r
+\r
+                               foreach (GraphicObject c in _list.Children) {\r
+                                       c.ClearBinding ();\r
+                               }\r
+                               _list.Children.Clear ();\r
+                               _list.registerForGraphicUpdate ();\r
+                               if (data == null)\r
+                                       return;\r
+\r
+                               #if DEBUG\r
+                               Stopwatch loadingTime = new Stopwatch ();\r
+                               loadingTime.Start ();\r
+                               #endif\r
+\r
+                               MemoryStream ms = new MemoryStream ();\r
+                               using (Stream stream = Interface.GetStreamFromPath (ItemTemplate))                                      \r
+                                       stream.CopyTo (ms);\r
+\r
+                               Type t = Interface.GetTopContainerOfGOMLStream (ms);\r
+\r
+                               foreach (var item in data) {\r
+                                       ms.Seek(0,SeekOrigin.Begin);\r
+                                       GraphicObject g = Interface.Load (ms, t, item);\r
+                                       g.MouseClick += itemClick;\r
+                                       _list.addChild(g);\r
+                               }\r
+\r
+                               ms.Dispose ();\r
+\r
+                               #if DEBUG\r
+                               loadingTime.Stop ();\r
+                               Debug.WriteLine("Listbox Loading: {0} ticks \t, {1} ms",\r
+                                       loadingTime.ElapsedTicks,\r
+                                       loadingTime.ElapsedMilliseconds);\r
+                               #endif\r
+                       }\r
+               }\r
+\r
+               void itemClick(object sender, OpenTK.Input.MouseButtonEventArgs e){\r
+                       object datasource = (sender as GraphicObject).DataSource;\r
+                       SelectedItem = datasource;\r
+                       SelectedItemChanged.Raise (sender, new SelectionChangeEventArgs(datasource));\r
+                       IsPopped = false;\r
+\r
+                       //Debug.WriteLine ((sender as GraphicObject).DataSource);\r
+               }\r
+\r
+               public event EventHandler Pop;\r
+               public event EventHandler Unpop;\r
+\r
+               public GraphicObject Overlay {\r
+                       get { return _overlay; }\r
+                       set { \r
+                               if (_overlay != null) {\r
+                                       _overlay.LayoutChanged -= _overlay_LayoutChanged;\r
+                                       _overlay.MouseLeave -= _content_MouseLeave;\r
+                               }\r
+                               \r
+                               _overlay = value; \r
+\r
+                               if (_overlay == null)\r
+                                       return;\r
+\r
+                               _overlay.Focusable = true;\r
+                               _overlay.LayoutChanged += _overlay_LayoutChanged;\r
+                               _overlay.MouseLeave += _content_MouseLeave;\r
+                       }\r
+               }\r
+\r
+               void _content_MouseLeave (object sender, MouseMoveEventArgs e)\r
+               {\r
+                       IsPopped = false;\r
+               }\r
+\r
+               void _overlay_LayoutChanged (object sender, LayoutChangeEventArgs e)\r
+               {\r
+                       ILayoutable tc = Overlay.Parent as ILayoutable;\r
+                       if (tc == null)\r
+                               return;\r
+                       Rectangle r = this.ScreenCoordinates (this.Slot);\r
+                       if (e.LayoutType == LayoutingType.Width) {\r
+                               if (Overlay.Slot.Width < tc.ClientRectangle.Width) {\r
+                                       if (r.Left + Overlay.Slot.Width > tc.ClientRectangle.Right)\r
+                                               Overlay.Left = tc.ClientRectangle.Right - Overlay.Slot.Width;\r
+                                       else\r
+                                               Overlay.Left = r.Left;\r
+                               }else\r
+                                       Overlay.Left = 0;\r
+                       }else if (e.LayoutType == LayoutingType.Height) {\r
+                               if (Overlay.Slot.Height < tc.ClientRectangle.Height) {\r
+                                       if (r.Bottom + Overlay.Slot.Height > tc.ClientRectangle.Bottom)\r
+                                               Overlay.Top = r.Top - Overlay.Slot.Height;\r
+                                       else\r
+                                               Overlay.Top = r.Bottom;\r
+                               }else\r
+                                       Overlay.Top = 0;\r
+                       }\r
+               }\r
+               public override void ClearBinding ()\r
+               {\r
+                       //ensure popped window is cleared\r
+                       if (Overlay != null) {\r
+                               if (Overlay.Parent != null) {\r
+                                       IGOLibHost tc = Overlay.Parent as IGOLibHost;\r
+                                       if (tc != null)\r
+                                               tc.DeleteWidget (Overlay);\r
+                               }\r
+                       }\r
+                       base.ClearBinding ();\r
+\r
+               }\r
+\r
+               [XmlAttributeAttribute()][DefaultValue(true)]//overiden to get default to true\r
+               public override bool Focusable\r
+               {\r
+                       get { return base.Focusable; }\r
+                       set { base.Focusable = value; }\r
+               }\r
+\r
+               [XmlAttributeAttribute()][DefaultValue("Combobox")]\r
+               public string Text {\r
+                       get { return text; } \r
+                       set {\r
+                               if (text == value)\r
+                                       return;\r
+                               text = value; \r
+                               NotifyValueChanged ("Text", text);\r
+                       }\r
+               }        \r
+\r
+               [XmlAttributeAttribute()][DefaultValue(false)]\r
+        public bool IsPopped\r
+        {\r
+                       get { return _isPopped; }\r
+            set\r
+            {\r
+                               _isPopped = value;\r
+\r
+                               if (_isPopped) {\r
+                                       onPop (this, null);\r
+                                       NotifyValueChanged ("SvgSub", "expanded");\r
+                                       return;\r
+                               }\r
+\r
+                               onUnpop (this, null);\r
+                               NotifyValueChanged ("SvgSub", "collapsed");\r
+            }\r
+        }\r
+                       \r
+               public virtual void onPop(object sender, EventArgs e)\r
+               {\r
+                       IGOLibHost tc = TopContainer;\r
+                       if (tc == null)\r
+                               return;\r
+                       if (Overlay != null) {\r
+                               Overlay.Visible = true;\r
+                               if (Overlay.Parent == null)\r
+                                       tc.AddWidget (Overlay);\r
+                               (tc as OpenTKGameWindow).PutOnTop (Overlay);\r
+                       }\r
+                       Pop.Raise (this, e);\r
+               }\r
+               public virtual void onUnpop(object sender, EventArgs e)\r
+               {\r
+                       IGOLibHost tc = TopContainer;\r
+                       if (tc == null)\r
+                               return;\r
+                       Overlay.Visible = false;\r
+                       Unpop.Raise (this, e);\r
+               }\r
+                       \r
+               public override void onMouseClick (object sender, MouseButtonEventArgs e)\r
+               {\r
+                       IsPopped = !IsPopped;\r
+                       base.onMouseClick (sender, e);\r
+               }\r
+\r
+       }\r
+}\r
index a068a0d50466f3c5c7b240767abe3eafe420b526..a78273ec995766621abdfc3530faadbbe00b72b8 100644 (file)
@@ -239,7 +239,7 @@ namespace go
                        get { return _font; }\r
                        set { _font = value; }\r
                }\r
-               [XmlAttributeAttribute()][DefaultValue(2.0)]\r
+               [XmlAttributeAttribute()][DefaultValue(0.0)]\r
                public virtual double CornerRadius {\r
                        get { return _cornerRadius; }\r
                        set {\r
index a73791c848c6abe65350afecda55d2a4f0677553..4222bc50972a94a3a2454f2da828ecb5e68eaf7b 100644 (file)
@@ -25,19 +25,25 @@ using System.ComponentModel;
 //TODO: implement ItemTemplate node in xml
 using System.IO;
 using System.Diagnostics;
+using System.Xml;
 
 
 namespace go
 {
        [DefaultTemplate("#go.Templates.Listbox.goml")]
        //[DefaultTemplate("#go.Templates.ItemTemplate.goml")]
-       public class ListBox : TemplatedControl
+       public class ListBox : TemplatedControl, IXmlSerializable
        {
+               #region CTOR
+               public ListBox () : base() {}
+               #endregion
+
                Group _list;
+               IList data;
+               int _selectedIndex;
+               string _itemTemplate;
 
-               public ListBox () : base()
-               {
-               }
+               public event EventHandler<SelectionChangeEventArgs> SelectedItemChanged;
 
                #region implemented abstract members of TemplatedControl
                protected override void loadTemplate (GraphicObject template = null)
@@ -47,21 +53,21 @@ namespace go
                }
                #endregion
 
-               IList data;
-               int _selectedIndex;
-               string _itemTemplate;
-
                [XmlAttributeAttribute][DefaultValue("#go.Templates.ItemTemplate.goml")]
                public string ItemTemplate {
                        get { return _itemTemplate; }
-                       set { _itemTemplate = value; }
+                       set { 
+                               //TODO:reload list with new template?
+                               _itemTemplate = value; 
+                       }
                }
+               [XmlAttributeAttribute][DefaultValue(-1)]
                public int SelectedIndex{
                        get { return _selectedIndex; }
                        set { _selectedIndex = value; }
                }
                public object SelectedItem{
-                       get { return data[_selectedIndex]; }
+                       get { return data == null ? null : data[_selectedIndex]; }
                }
                [XmlAttributeAttribute][DefaultValue(null)]
                public IList Data {
@@ -85,10 +91,8 @@ namespace go
                                #endif
 
                                MemoryStream ms = new MemoryStream ();
-                               using (Stream stream = Interface.GetStreamFromPath (ItemTemplate)) {
-                                       
+                               using (Stream stream = Interface.GetStreamFromPath (ItemTemplate))                                      
                                        stream.CopyTo (ms);
-                               }
                                        
                                Type t = Interface.GetTopContainerOfGOMLStream (ms);
 
@@ -97,8 +101,8 @@ namespace go
                                        GraphicObject g = Interface.Load (ms, t, item);
                                        g.MouseClick += itemClick;
                                        _list.addChild(g);
-
                                }
+
                                ms.Dispose ();
 
                                #if DEBUG
@@ -109,10 +113,72 @@ namespace go
                                #endif
                        }
                }
+
                void itemClick(object sender, OpenTK.Input.MouseButtonEventArgs e){
+                       SelectedItemChanged.Raise (sender, new SelectionChangeEventArgs((sender as GraphicObject).DataSource));
                        NotifyValueChanged ("SelectedItem", (sender as GraphicObject).DataSource);
                        //Debug.WriteLine ((sender as GraphicObject).DataSource);
                }
+
+               #region IXmlSerializable
+               public override System.Xml.Schema.XmlSchema GetSchema(){ return null; }
+               public override void ReadXml(System.Xml.XmlReader reader)
+               {
+                       //Template could be either an attribute containing path or expressed inlined
+                       //as a Template Element
+                       using (System.Xml.XmlReader subTree = reader.ReadSubtree())
+                       {
+                               subTree.Read ();
+
+                               string template = reader.GetAttribute ("Template");
+                               string tmp = subTree.ReadOuterXml ();
+
+                               //Load template from path set as attribute in templated control
+                               if (string.IsNullOrEmpty (template)) {                                  
+                                       //seek for template tag first
+                                       using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) {
+                                               //load template first if inlined
+
+                                               xr.Read (); //skip current node
+
+                                               while (!xr.EOF) {
+                                                       xr.Read (); //read first child
+                                                       if (!xr.IsStartElement ())
+                                                               continue;
+                                                       if (xr.Name == "Template") {
+                                                               xr.Read ();
+
+                                                               Type t = Type.GetType ("go." + xr.Name);
+                                                               GraphicObject go = (GraphicObject)Activator.CreateInstance (t);                                
+                                                               (go as IXmlSerializable).ReadXml (xr);
+
+                                                               loadTemplate (go);
+
+                                                               xr.Read ();//go close tag
+                                                               xr.Read ();//Template close tag
+                                                               break;
+                                                       } else {
+                                                               xr.ReadInnerXml ();
+                                                       }
+                                               }
+                                       }                               
+                               } else
+                                       loadTemplate (Interface.Load (template, this, !Interface.DontResoveGOML));
+
+
+                               //normal xml read
+                               using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) {
+                                       xr.Read ();
+                                       base.ReadXml(xr);
+                               }
+                       }
+               }
+               public override void WriteXml(System.Xml.XmlWriter writer)
+               {
+                       //TODO:
+                       throw new NotImplementedException();
+               }
+               #endregion
        }
 }
 
index 0599c6e39826e7388ae544ef4871172df017c40d..4dbe21e555454d7d1c3180a4ccdfc019bdf28993 100644 (file)
@@ -28,37 +28,44 @@ using System.Diagnostics;
 
 namespace go
 {
-       [AttributeUsage(AttributeTargets.Class)]
-       public class DefaultTemplate : Attribute
+//     [AttributeUsage(AttributeTargets.Class)]
+       public class TemplateAttribute : Attribute
        {
                public string Path = "";
-               public DefaultTemplate(string path)
+               public TemplateAttribute(string path)
                {
                        Path = path;
                }
        }
        [AttributeUsage(AttributeTargets.Class)]
-       public class DefaultItemTemplate : Attribute
+       public class DefaultTemplate : TemplateAttribute
        {
-               public string Path = "";
-               public DefaultItemTemplate(string path)
-               {
-                       Path = path;
-               }
+               public DefaultTemplate(string path) : base(path){}
+       }
+       [AttributeUsage(AttributeTargets.Class)]
+       public class DefaultOverlayTemplate : TemplateAttribute
+       {
+               public DefaultOverlayTemplate(string path) : base(path){}
+       }
+       [AttributeUsage(AttributeTargets.Class)]
+       public class DefaultItemTemplate : TemplateAttribute
+       {
+               public DefaultItemTemplate(string path) : base(path){}
        }
 
        public abstract class TemplatedControl : PrivateContainer, IXmlSerializable
        {
-               public TemplatedControl () : base()
-               {
-               }
+               #region CTOR
+               public TemplatedControl () : base()     {}
+               #endregion
+
+               string _template;
 
-//             string _templatePath;
-//             [XmlAttributeAttribute()]
-//             public virtual string Template {
-//                     get { return _templatePath; }
-//                     set { _templatePath = value; }
-//             }
+               [XmlAttributeAttribute][DefaultValue("#go.Templates.Template.goml")]
+               public string Template {
+                       get { return _template; }
+                       set { _template = value; }
+               }
 
                #region GraphicObject overrides
                [XmlAttributeAttribute()][DefaultValue(-1)]
@@ -110,7 +117,6 @@ namespace go
                }
                        
                #region IXmlSerializable
-
                public override System.Xml.Schema.XmlSchema GetSchema(){ return null; }
                public override void ReadXml(System.Xml.XmlReader reader)
                {
@@ -165,16 +171,9 @@ namespace go
                }
                public override void WriteXml(System.Xml.XmlWriter writer)
                {
-                       base.WriteXml(writer);
-//
-//                     if (child == null)
-//                             return;
-//
-//                     writer.WriteStartElement(child.GetType().Name);
-//                     (child as IXmlSerializable).WriteXml(writer);
-//                     writer.WriteEndElement();
+                       //TODO:
+                       throw new NotImplementedException();
                }
-
                #endregion
        }
 }
index 723bdad70ec249e8d3d177f42166856b29a221da..551cd1d354370a5b29fd62b83239acd4dbd130c4 100644 (file)
@@ -61,7 +61,7 @@ namespace go
 
                        if (dstIdx < 0) {
                                if (FreeRefIndices.Count == 0) {
-                                       dstIdx = Interface.References.Count;
+                                       dstIdx = Interface.References.Count();
                                        Interface.References.Add (o);
                                } else {
                                        dstIdx = FreeRefIndices.Dequeue ();
diff --git a/src/SelectionChangeEventArgs.cs b/src/SelectionChangeEventArgs.cs
new file mode 100644 (file)
index 0000000..da706db
--- /dev/null
@@ -0,0 +1,16 @@
+using System;
+
+namespace go
+{
+       public class SelectionChangeEventArgs: EventArgs
+       {               
+               public object NewValue;
+
+
+               public SelectionChangeEventArgs (object _newValue) : base()
+               {
+                       NewValue = _newValue;
+               }
+       }
+}
+