<Compile Include="src\GraphicObjects\Button.cs" />\r
<Compile Include="src\GraphicObjects\GraduatedSlider.cs" />\r
<Compile Include="src\GraphicObjects\Slider.cs" />\r
- <Compile Include="src\ValueChangeEventArgs.cs" />\r
<Compile Include="src\GraphicObjects\NumericControl.cs" />\r
<Compile Include="src\GraphicObjects\Scroller.cs" />\r
<Compile Include="src\GraphicObjects\ILayoutable.cs" />\r
<Compile Include="src\GraphicObjects\AnalogMeter.cs" />\r
<Compile Include="src\GraphicObjects\Border.cs" />\r
<Compile Include="src\Font.cs" />\r
- <Compile Include="src\TextChangeEventArgs.cs" />\r
<Compile Include="src\OpenGL\QuadVAO.cs" />\r
<Compile Include="src\OpenGL\Shader.cs" />\r
<Compile Include="src\OpenGL\TexturedShader.cs" />\r
<Compile Include="src\GraphicObjects\TemplatedContainer.cs" />\r
<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
</ItemGroup>\r
<ItemGroup>\r
<Reference Include="System" />\r
<Button Width="12" Height="12" MouseClick="onScrollBack">\r
<Image Margin="1" Path="#go.Images.Icons.updown.svg" SvgSub="up"/>\r
</Button>\r
- <Slider Name="Slider" Value="{Scroll}" Maximum="{MaximumScroll}" Width="{Width}" Height="{Height}" Orientation="{Orientation}"/>\r
+ <Slider Name="Slider" Value="{Scroll}" Maximum="{MaximumScroll}" \r
+ Width="{Width}" Height="{Height}" Orientation="{Orientation}"\r
+ ValueChanged="onSliderValueChange"/>\r
<Button Width="12" Height="12" MouseClick="onScrollForth">\r
<Image Margin="1" Path="#go.Images.Icons.updown.svg" SvgSub="down"/>\r
</Button>\r
}\r
);\r
i++;\r
- if (i > 50)\r
+ if (i > 250)\r
break;\r
}\r
ValueChanged.Raise(this, new ValueChangeEventArgs ("TestList", TestList));\r
</VerticalStack>\r
<HorizontalStack Height="350" Width="250">\r
<Scroller Name="scroller1" Background="DimGray" Height="0" Width="0" \r
- Margin="5" VerticalScrolling="true">\r
+ Margin="5" VerticalScrolling="true" ScrollY="{../scrollbar1.Scroll}">\r
<VerticalStack Name="colors" VerticalAlignment="Top" Margin="1">\r
<ProgressBar Name="pbBar2" Width="100" Height="20" Value="50"\r
BorderWidth="2" BorderColor="White" Foreground="BlueCrayola" Background="DarkGray"/>\r
public static void ResolveBinding(DynAttribute binding, object _source)
{
object srcGO = _source;
+ string statement = binding.Value;
Type srcType = _source.GetType ();
Type dstType = binding.Source.GetType ();
srcGO = (srcGO as GraphicObject).FindByName (bindTrg [0]);
srcType = srcGO.GetType ();
}
- miSrc = srcType.GetMember (bindTrg.LastOrDefault()).FirstOrDefault ();
- }else
- miSrc = srcType.GetMember (binding.Value).FirstOrDefault ();
+ statement = bindTrg.LastOrDefault ();
+ }
+ miSrc = srcType.GetMember (statement).FirstOrDefault ();
#region initialize target with actual value
System.Reflection.Emit.Label labContinue = il.DefineLabel();
#region test if valueChange event is the correct one
- il.Emit (OpCodes.Ldstr, binding.Value);
+ il.Emit (OpCodes.Ldstr, statement);
//push name from arg
il.Emit(OpCodes.Ldarg_1);
FieldInfo fiMbName = typeof(ValueChangeEventArgs).GetField("MemberName");
il.MarkLabel(labContinue);
#endregion
- string[] srcLines = binding.Value.Trim().Split (new char[] { ';' });
- foreach (string srcLine in srcLines) {
+// string[] srcLines = binding.Value.Trim().Split (new char[] { ';' });
+// foreach (string srcLine in srcLines) {
//MethodInfo infoWriteLine = typeof(System.Diagnostics.Debug).GetMethod("WriteLine", new Type[] { typeof(string) });
-
- string statement = srcLine.Trim ();
+
//load target ref onto the stack
FieldInfo fiRefs = typeof(Interface).GetField("References");
//
il.Emit(OpCodes.Callvirt, piTarget.GetSetMethod());
- }
+ //}
il.MarkLabel(labFailed);
il.Emit(OpCodes.Ret);
get { return child; }\r
set { child = value; }\r
}\r
- public T SetChild<T> (T _child)\r
+ public virtual T SetChild<T> (T _child)\r
{\r
return base.SetChild (_child);\r
}\r
{\r
#region IValueChange implementation\r
public event EventHandler<ValueChangeEventArgs> ValueChanged;\r
- void NotifyValueChanged(string MemberName, object _value)\r
+ public virtual void NotifyValueChanged(string MemberName, object _value)\r
{\r
ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value)); \r
}\r
public event EventHandler<KeyboardKeyEventArgs> KeyUp;\r
public event EventHandler Focused;\r
public event EventHandler Unfocused;\r
-\r
+ public event EventHandler<LayoutChangeEventArgs> LayoutChanged;\r
#endregion\r
\r
#region public properties\r
if ((Parent as GenericStack).Orientation == Orientation.Vertical)\r
this.Parent.RegisterForLayouting ((int)LayoutingType.PositionChildren);\r
break;\r
- } \r
+ }\r
+ LayoutChanged.Raise (this, new LayoutChangeEventArgs (layoutType));\r
}\r
public virtual void UpdateLayout (LayoutingType layoutType)\r
{ \r
namespace go
{
- public abstract class NumericControl : TemplatedControl, IValueChange
+ public abstract class NumericControl : TemplatedControl
{
#region CTOR
public NumericControl () : base()
}
#endregion
- #region event handlers
- public EventHandler<ValueChangeEventArgs> ValueChanged;
- public virtual void onValueChanged(object sender, ValueChangeEventArgs e)
- {
- ValueChanged.Raise (sender, e);
- }
- #endregion
#region private fields
double _actualValue, minValue, maxValue, smallStep, bigStep;
else
_actualValue = value;
- onValueChanged(this,new ValueChangeEventArgs("Value", Convert.ToInt32( _actualValue)));
+ NotifyValueChanged("Value", _actualValue);
registerForGraphicUpdate();
}
}
if (_scroll == value)\r
return;\r
_scroll = value;\r
+ if (_scroll < 0.0)\r
+ _scroll = 0.0;\r
+ else if (_scroll > _maximumScroll)\r
+ _scroll = _maximumScroll;\r
registerForGraphicUpdate ();\r
ValueChanged.Raise(this, new ValueChangeEventArgs ("Scroll", _scroll));\r
}\r
public void onScrollForth (object sender, MouseButtonEventArgs e)\r
{\r
Scroll += _slider.LargeIncrement;\r
+\r
+ }\r
+\r
+ public void onSliderValueChange(object sender, ValueChangeEventArgs e){\r
+ Scroll = Convert.ToDouble(e.NewValue);\r
}\r
+\r
}\r
}\r
bool _verticalScrolling;\r
bool _horizontalScrolling;\r
bool _scrollbarVisible;\r
- int _scrollX = 0;\r
- int _scrollY = 0;\r
+ double _scrollX = 0.0;\r
+ double _scrollY = 0.0;\r
\r
\r
#region public properties\r
}\r
\r
\r
- [XmlIgnore] \r
- public int ScrollX {\r
+ [XmlAttributeAttribute][DefaultValue(0.0)]\r
+ public double ScrollX {\r
get {\r
return _scrollX;\r
}\r
set {\r
+ if (_scrollX == value)\r
+ return;\r
_scrollX = value;\r
ValueChanged.Raise(this, new ValueChangeEventArgs("ScrollX", _scrollX));\r
+ RegisterForRedraw();\r
}\r
}\r
\r
\r
- [XmlIgnore]\r
- public int ScrollY {\r
+ [XmlAttributeAttribute][DefaultValue(0.0)]\r
+ public double ScrollY {\r
get {\r
return _scrollY;\r
}\r
set {\r
+ if (_scrollY == value)\r
+ return;\r
_scrollY = value;\r
ValueChanged.Raise(this, new ValueChangeEventArgs("ScrollY", _scrollY));\r
+ RegisterForRedraw();\r
}\r
}\r
\r
}\r
\r
#region GraphicObject Overrides\r
- protected override void OnLayoutChanges (LayoutingType layoutType)\r
+ void OnChildLayoutChanges (object sender, LayoutChangeEventArgs arg)\r
{\r
- base.OnLayoutChanges (layoutType);\r
-\r
if (_verticalScrolling) {\r
- if (layoutType == LayoutingType.Height)\r
+ if (arg.LayoutType == LayoutingType.Height)\r
ValueChanged.Raise(this, new ValueChangeEventArgs("MaximumScroll", MaximumScroll)); \r
- }else if (layoutType == LayoutingType.Width)\r
+ }else if (arg.LayoutType == LayoutingType.Width)\r
ValueChanged.Raise(this, new ValueChangeEventArgs("MaximumScroll", MaximumScroll)); \r
}\r
+ public override T SetChild<T> (T _child)\r
+ { \r
+ GraphicObject c = child as GraphicObject;\r
+ if (c != null)\r
+ c.LayoutChanged -= OnChildLayoutChanges;\r
+ c = _child as GraphicObject;\r
+ if (c != null)\r
+ c.LayoutChanged += OnChildLayoutChanges;\r
+ return base.SetChild (_child);\r
+ }\r
#endregion\r
\r
#region Mouse handling\r
}\r
public override void onMouseMove (object sender, MouseMoveEventArgs e)\r
{\r
- Point m = e.Position - new Point (ScrollX, ScrollY);\r
+ Point m = e.Position - new Point ((int)ScrollX, (int)ScrollY);\r
base.onMouseMove (sender, new MouseMoveEventArgs(m.X,m.Y,e.XDelta,e.YDelta));\r
}\r
public override void onMouseWheel (object sender, MouseWheelEventArgs e)\r
\r
ScrollY -= e.Delta * ScrollSpeed;\r
\r
- if (ScrollY < 0)\r
- ScrollY = 0;\r
+ if (ScrollY < 0.0)\r
+ ScrollY = 0.0;\r
else if (ScrollY > Child.Slot.Height - ClientRectangle.Height)\r
ScrollY = Child.Slot.Height - ClientRectangle.Height;\r
\r
\r
ScrollX -= e.Delta * ScrollSpeed;\r
\r
- if (ScrollX < 0)\r
- ScrollX = 0;\r
+ if (ScrollX < 0.0)\r
+ ScrollX = 0.0;\r
else if (ScrollX > Child.Slot.Width - ClientRectangle.Width)\r
ScrollX = Child.Slot.Width - ClientRectangle.Width;\r
}\r
\r
\r
//renderBounds.Y = -scrollY;\r
- RegisterForRedraw();\r
+ //RegisterForRedraw();\r
//Parent.registerForGraphicUpdate ();\r
}\r
#endregion\r
\r
public override Rectangle ContextCoordinates (Rectangle r)\r
{\r
- return base.ContextCoordinates (r) - new Point(ScrollX,ScrollY);\r
+ return base.ContextCoordinates (r) - new Point((int)ScrollX,(int)ScrollY);\r
}\r
public override Rectangle ScreenCoordinates (Rectangle r)\r
{\r
- return base.ScreenCoordinates (r) - new Point(ScrollX,ScrollY);\r
+ return base.ScreenCoordinates (r) - new Point((int)ScrollX,(int)ScrollY);\r
}\r
\r
public override void registerClipRect ()\r
set { _orientation = value; }\r
}\r
#endregion\r
+ [XmlAttributeAttribute()][DefaultValue(10.0)]\r
+ public override double Maximum {\r
+ get { return base.Maximum; }\r
+ set {\r
+ if (value == base.Maximum)\r
+ return;\r
+ base.Maximum = value;\r
+ LargeIncrement = base.Maximum / 10.0;\r
+ SmallIncrement = LargeIncrement / 5.0;\r
\r
+ }\r
+ }\r
#region GraphicObject Overrides\r
[XmlAttributeAttribute()][DefaultValue("Gray")]\r
public override Color Background {\r
Value -= this.SmallIncrement;
labCpt.Text = Value.ToString ();
}
- public override void onValueChanged (object sender, ValueChangeEventArgs e)
- {
- //labCpt.Text = e.NewValue.ToString ();
- base.onValueChanged (sender, e);
- }
+
}
}
continue;
}
- FieldInfo fi = CompilerServices.getEventHandlerField (es.Source.GetType (), es.MemberName);
- Delegate del = Delegate.CreateDelegate (fi.FieldType, hostClass, mi);
- fi.SetValue (es.Source, del);
+ EventInfo ei = es.Source.GetType ().GetEvent (es.MemberName);
+ MethodInfo addHandler = ei.GetAddMethod ();
+ Delegate del = Delegate.CreateDelegate (ei.EventHandlerType, hostClass, mi);
+
+
+ addHandler.Invoke(es.Source, new object[] {del});
+
}
} else {
CompilerServices.ResolveBinding (es, hostClass);
--- /dev/null
+using System;
+
+namespace go
+{
+ public class LayoutChangeEventArgs: EventArgs
+ {
+ public LayoutingType LayoutType;
+
+ public LayoutChangeEventArgs (LayoutingType _layoutType) : base()
+ {
+ LayoutType = _layoutType;
+ }
+ }
+}
+
Rectangle r = rInList;\r
\r
if (sw.VerticalScrolling)\r
- r.Top -= sw.ScrollY;\r
+ r.Top -= (int)sw.ScrollY;\r
if (sw.HorizontalScrolling)\r
- r.Left -= sw.ScrollX;\r
+ r.Left -= (int)sw.ScrollX;\r
\r
newList.Add(r);\r
}\r
if (sw != null)\r
{\r
if (sw.VerticalScrolling) {\r
- rebasedR.Top -= sw.ScrollY;\r
+ rebasedR.Top -= (int)sw.ScrollY;\r
// if (sw.scrollY < 0)\r
// Debug.WriteLine ("..");\r
}if (sw.HorizontalScrolling)\r
- rebasedR.Left -= sw.ScrollX;\r
+ rebasedR.Left -= (int)sw.ScrollX;\r
}\r
\r
newList.Add(rebasedR);\r
namespace go
{
- public class ValueChangeEventArgs: EventArgs
+ public class TextChangeEventArgs: EventArgs
{
- public string MemberName;
- public object NewValue;
+ public String Text;
-
- public ValueChangeEventArgs (string _memberName, object _newValue) : base()
+ public TextChangeEventArgs (string _newValue) : base()
{
- MemberName = _memberName;
- NewValue = _newValue;
+ Text = _newValue;
}
}
}
namespace go
{
- public class TextChangeEventArgs: EventArgs
+ public class ValueChangeEventArgs: EventArgs
{
- public String Text;
+ public string MemberName;
+ public object NewValue;
- public TextChangeEventArgs (string _newValue) : base()
+
+ public ValueChangeEventArgs (string _memberName, object _newValue) : base()
{
- Text = _newValue;
+ MemberName = _memberName;
+ NewValue = _newValue;
}
}
}