diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2015-06-11 14:02:13 +0200 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2015-06-11 14:02:13 +0200 |
| commit | f986e2521e113bd67a2f06b92c2ca774aa1e0937 (patch) | |
| tree | f039053c4dbd77cb5b1e199e5f9f17bd27a62ce7 /src/GraphicObjects | |
| parent | 24cf921e07c87c5491c68f3f59f6664410333dbd (diff) | |
- popper (buggy)
- many redraw issue
Diffstat (limited to 'src/GraphicObjects')
| -rw-r--r-- | src/GraphicObjects/Expandable.cs | 69 | ||||
| -rw-r--r-- | src/GraphicObjects/GenericStack.cs | 3 | ||||
| -rw-r--r-- | src/GraphicObjects/Popper.cs | 111 | ||||
| -rw-r--r-- | src/GraphicObjects/TemplatedContainer.cs | 95 |
4 files changed, 223 insertions, 55 deletions
diff --git a/src/GraphicObjects/Expandable.cs b/src/GraphicObjects/Expandable.cs index 5bf535a4..369930a8 100644 --- a/src/GraphicObjects/Expandable.cs +++ b/src/GraphicObjects/Expandable.cs @@ -19,17 +19,25 @@ using System.IO; namespace go
{
[DefaultTemplate("#go.Templates.Expandable.goml")]
- public class Expandable : TemplatedControl
+ public class Expandable : TemplatedContainer
{
bool _isExpanded;
Label _caption;
Image _image;
-
- public Container Content;
+ Container _contentContainer;
public event EventHandler Expand;
public event EventHandler Collapse;
+ public override GraphicObject Content {
+ get {
+ return _contentContainer == null ? null : _contentContainer.Child;
+ }
+ set {
+ _contentContainer.SetChild(value);
+ }
+ }
+
public Expandable() : base()
{
}
@@ -38,8 +46,8 @@ namespace go {
base.loadTemplate (template);
+ _contentContainer = this.child.FindByName ("Content") as Container;
_caption = this.child.FindByName ("Caption") as Label;
- Content = this.child.FindByName ("Content") as Container;
_image = this.child.FindByName ("Image") as Image;
if (_image == null)
@@ -84,12 +92,12 @@ namespace go public virtual void onExpand(object sender, EventArgs e)
{
- Content.Visible = true;
+ _contentContainer.Visible = true;
Expand.Raise (this, e);
}
public virtual void onCollapse(object sender, EventArgs e)
{
- Content.Visible = false;
+ _contentContainer.Visible = false;
Collapse.Raise (this, e);
}
@@ -99,54 +107,5 @@ namespace go base.onMouseClick (sender, e);
}
- public override void ReadXml(System.Xml.XmlReader reader)
- {
- using (System.Xml.XmlReader subTree = reader.ReadSubtree ()) {
- subTree.Read ();
- string tmp = subTree.ReadOuterXml ();
-
- //seek for template tag
- using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) {
- xr.Read ();
- base.ReadXml (xr);
- }
- //process content
- using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) {
- xr.Read (); //skip current node
-
- while (!xr.EOF) {
- xr.Read (); //read first child
-
- if (!xr.IsStartElement ())
- continue;
- if (xr.Name == "Template")
- continue;
-
- Type t = Type.GetType ("go." + xr.Name);
- GraphicObject go = (GraphicObject)Activator.CreateInstance (t);
-
- (go as IXmlSerializable).ReadXml (xr);
-
- Content.SetChild (go);
-
- xr.Read (); //closing tag
- }
-
- }
- }
- }
- public override void WriteXml(System.Xml.XmlWriter writer)
- {
- base.WriteXml(writer);
-
- if (Content == null)
- return;
- if (Content.Child == null)
- return;
- //TODO: if template is not the default one, we have to save it
- writer.WriteStartElement(Content.Child.GetType().Name);
- (Content.Child as IXmlSerializable).WriteXml(writer);
- writer.WriteEndElement();
- }
}
}
diff --git a/src/GraphicObjects/GenericStack.cs b/src/GraphicObjects/GenericStack.cs index 0b37f07b..b703f61b 100644 --- a/src/GraphicObjects/GenericStack.cs +++ b/src/GraphicObjects/GenericStack.cs @@ -158,6 +158,9 @@ namespace go }
}
ComputeChildrenPositions ();
+ //if no layouting remains in queue for item, registre for redraw
+ if (Interface.LayoutingQueue.Where (lq => lq.GraphicObject == this).Count () <= 0)
+ this.RegisterForRedraw ();
}else
base.UpdateLayout(layoutType);
}
diff --git a/src/GraphicObjects/Popper.cs b/src/GraphicObjects/Popper.cs new file mode 100644 index 00000000..0bbe3a52 --- /dev/null +++ b/src/GraphicObjects/Popper.cs @@ -0,0 +1,111 @@ +using System;
+
+
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+//using OpenTK.Graphics.OpenGL;
+
+using Cairo;
+
+using winColors = System.Drawing.Color;
+using System.Diagnostics;
+using System.Xml.Serialization;
+using OpenTK.Input;
+using System.ComponentModel;
+using System.Xml;
+using System.IO;
+
+namespace go
+{
+ [DefaultTemplate("#go.Templates.Popper.goml")]
+ public class Popper : TemplatedContainer
+ {
+ bool _isPopped;
+ Label _caption;
+ Image _image;
+ GraphicObject _content;
+
+ public event EventHandler Pop;
+ public event EventHandler Unpop;
+
+ public override GraphicObject Content {
+ get { return _content; }
+ set { _content = value; }
+ }
+ public Popper() : base()
+ {
+ }
+
+ protected override void loadTemplate(GraphicObject template = null)
+ {
+ base.loadTemplate (template);
+
+ _caption = this.child.FindByName ("Caption") as Label;
+ _image = this.child.FindByName ("Image") as Image;
+
+ if (_image == null)
+ return;
+ _image.SvgSub = "collapsed";
+
+ this.Pop += (object sender, EventArgs e) => {_image.SvgSub = "expanded";};
+ this.Unpop += (object sender, EventArgs e) => {_image.SvgSub = "collapsed";};
+
+ }
+
+
+ [XmlAttributeAttribute()][DefaultValue("Popper")]
+ public string Title {
+ get { return _caption.Text; }
+ set {
+ if (_caption == null)
+ return;
+ _caption.Text = value;
+ }
+ }
+
+ [XmlAttributeAttribute()][DefaultValue(false)]
+ public bool IsPopped
+ {
+ get { return _isPopped; }
+ set
+ {
+ if (value == _isPopped)
+ return;
+
+ _isPopped = value;
+
+ if (_isPopped)
+ onPop (this, null);
+ else
+ onUnpop (this, null);
+
+ registerForGraphicUpdate();
+ }
+ }
+
+ public virtual void onPop(object sender, EventArgs e)
+ {
+ if (Content != null) {
+ Rectangle r = this.ScreenCoordinates (this.Slot);
+ Content.Visible = true;
+ Content.Left = r.Left;
+ Content.Top = r.Bottom;
+ TopContainer.AddWidget (Content);
+ }
+ Pop.Raise (this, e);
+ }
+ public virtual void onUnpop(object sender, EventArgs e)
+ {
+ TopContainer.DeleteWidget (Content);
+ Unpop.Raise (this, e);
+ }
+
+ public override void onMouseClick (object sender, MouseButtonEventArgs e)
+ {
+ IsPopped = !IsPopped;
+ base.onMouseClick (sender, e);
+ }
+
+ }
+}
diff --git a/src/GraphicObjects/TemplatedContainer.cs b/src/GraphicObjects/TemplatedContainer.cs new file mode 100644 index 00000000..4d8eb832 --- /dev/null +++ b/src/GraphicObjects/TemplatedContainer.cs @@ -0,0 +1,95 @@ +// +// TemplatedContainer.cs +// +// Author: +// Jean-Philippe Bruyère <jp.bruyere@hotmail.com> +// +// Copyright (c) 2015 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 System.Xml.Serialization; +using System.Xml; + +namespace go +{ + public abstract class TemplatedContainer : TemplatedControl + { + [XmlIgnore] + public abstract GraphicObject Content{ get; set;} + + protected override void loadTemplate (GraphicObject template) + { + base.loadTemplate (template); + } + public TemplatedContainer () : base() + { + } + public override GraphicObject FindByName (string nameToFind) + { + if (Name == nameToFind) + return this; + + return Content == null ? null : Content.FindByName (nameToFind); + } + public override void ReadXml(System.Xml.XmlReader reader) + { + using (System.Xml.XmlReader subTree = reader.ReadSubtree ()) { + subTree.Read (); + string tmp = subTree.ReadOuterXml (); + + //seek for template tag + using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { + xr.Read (); + base.ReadXml (xr); + } + //process content + using (XmlReader xr = new XmlTextReader (tmp, XmlNodeType.Element, null)) { + xr.Read (); //skip current node + + while (!xr.EOF) { + xr.Read (); //read first child + + if (!xr.IsStartElement ()) + continue; + if (xr.Name == "Template") + continue; + + Type t = Type.GetType ("go." + xr.Name); + GraphicObject go = (GraphicObject)Activator.CreateInstance (t); + + (go as IXmlSerializable).ReadXml (xr); + + Content = go; + + xr.Read (); //closing tag + } + + } + } + } + public override void WriteXml(System.Xml.XmlWriter writer) + { + base.WriteXml(writer); + + if (Content == null) + return; + //TODO: if template is not the default one, we have to save it + writer.WriteStartElement(Content.GetType().Name); + (Content as IXmlSerializable).WriteXml(writer); + writer.WriteEndElement(); + } + } +} + |