From 2ffad673c182840a70909a74ec3fd9f83cd76660 Mon Sep 17 00:00:00 2001 From: jpbruyere Date: Wed, 25 Jan 2017 09:25:14 +0100 Subject: [PATCH] CrowThread;AlwaysOnTop win;GTree explorer; --- Crow.csproj | 1 + CrowIDE/CrowIDE.csproj | 1 + CrowIDE/src/CrowIDE.cs | 34 +++++---- CrowIDE/src/ImlVisualEditor.cs | 100 ++++++++++++++++----------- CrowIDE/src/MembersView.cs | 2 +- CrowIDE/ui/GTreeExpITemp.crow | 8 +-- CrowIDE/ui/GTreeExplorer.crow | 53 +++++++++----- CrowIDE/ui/MemberView.crow | 94 +++++++++++++++++++++++++ CrowIDE/ui/MembersView.template | 16 +++-- CrowIDE/ui/imlEditor.crow | 95 +------------------------ src/CrowThread.cs | 58 ++++++++++++++++ src/GraphicObjects/GenericStack.cs | 1 + src/GraphicObjects/GraphicObject.cs | 10 +-- src/GraphicObjects/Popper.cs | 7 +- src/GraphicObjects/TemplatedGroup.cs | 18 +++-- src/GraphicObjects/TreeView.cs | 27 +++++++- src/Interface.cs | 33 ++++++--- 17 files changed, 358 insertions(+), 200 deletions(-) create mode 100644 CrowIDE/ui/MemberView.crow create mode 100644 src/CrowThread.cs diff --git a/Crow.csproj b/Crow.csproj index 13a0a351..25e7f10d 100644 --- a/Crow.csproj +++ b/Crow.csproj @@ -153,6 +153,7 @@ + diff --git a/CrowIDE/CrowIDE.csproj b/CrowIDE/CrowIDE.csproj index 2e747f23..ec173d3d 100644 --- a/CrowIDE/CrowIDE.csproj +++ b/CrowIDE/CrowIDE.csproj @@ -82,6 +82,7 @@ + diff --git a/CrowIDE/src/CrowIDE.cs b/CrowIDE/src/CrowIDE.cs index 6bb1e7ef..afaab3a4 100644 --- a/CrowIDE/src/CrowIDE.cs +++ b/CrowIDE/src/CrowIDE.cs @@ -43,7 +43,6 @@ namespace CrowIDE { } ImlVisualEditor imlVE; - GraphicObject bindingExp, lqisExp; protected override void OnLoad (EventArgs e) { @@ -63,22 +62,31 @@ namespace CrowIDE if (e.Key == OpenTK.Input.Key.Escape) { Quit (null, null); return; + } else if (e.Key == OpenTK.Input.Key.F4) { + loadWindow ("#CrowIDE.ui.MemberView.crow"); } else if (e.Key == OpenTK.Input.Key.F5) { - if (bindingExp != null) { - CrowInterface.DeleteWidget (bindingExp); - } - bindingExp = CrowInterface.LoadInterface ("#CrowIDE.ui.GTreeExplorer.crow"); - bindingExp.DataSource = imlVE; - return; + loadWindow ("#CrowIDE.ui.GTreeExplorer.crow"); } else if (e.Key == OpenTK.Input.Key.F6) { - if (lqisExp != null) { - CrowInterface.DeleteWidget (lqisExp); - } - lqisExp = CrowInterface.LoadInterface ("#CrowIDE.ui.LQIsExplorer.crow"); - lqisExp.DataSource = imlVE; - return; + loadWindow ("#CrowIDE.ui.LQIsExplorer.crow"); } } + void loadWindow(string path){ + try { + GraphicObject g = CrowInterface.FindByName (path); + if (g != null) + return; + g = CrowInterface.LoadInterface (path); + g.Name = path; + g.DataSource = imlVE; + } catch (Exception ex) { + System.Diagnostics.Debug.WriteLine (ex.ToString ()); + } + } + void closeWindow (string path){ + GraphicObject g = CrowInterface.FindByName (path); + if (g != null) + CrowInterface.DeleteWidget (g); + } protected void onCommandSave(object sender, MouseButtonEventArgs e){ System.Diagnostics.Debug.WriteLine("save"); } diff --git a/CrowIDE/src/ImlVisualEditor.cs b/CrowIDE/src/ImlVisualEditor.cs index 0a89bad8..cab3846d 100644 --- a/CrowIDE/src/ImlVisualEditor.cs +++ b/CrowIDE/src/ImlVisualEditor.cs @@ -45,10 +45,43 @@ namespace CrowIDE Interface imlVE; Instantiator itor; string imlSource; + GraphicObject selectedItem; bool drawGrid; int gridSpacing; + [XmlAttributeAttribute][DefaultValue(true)] + public bool DrawGrid { + get { return drawGrid; } + set { + if (drawGrid == value) + return; + drawGrid = value; + NotifyValueChanged ("DrawGrid", drawGrid); + RegisterForRedraw (); + } + } + [XmlAttributeAttribute][DefaultValue(10)] + public int GridSpacing { + get { return gridSpacing; } + set { + if (gridSpacing == value) + return; + gridSpacing = value; + NotifyValueChanged ("GridSpacing", gridSpacing); + RegisterForRedraw (); + } + } + [XmlAttributeAttribute]public GraphicObject SelectedItem { + get { return selectedItem; } + set { + if (selectedItem == value) + return; + selectedItem = value; + NotifyValueChanged ("SelectedItem", selectedItem); + RegisterForRedraw (); + } + } [XmlIgnore]public List LQIs { get { return imlVE.LQIs; } } @@ -109,7 +142,9 @@ namespace CrowIDE using (StreamReader sr = new StreamReader (imlPath)) { ImlSource = sr.ReadToEnd (); } + NotifyValueChanged ("GraphicTree", null); NotifyValueChanged ("GraphicTree", GraphicTree); + SelectedItem = null; } void reload_iTor(Instantiator new_iTot){ itor = new_iTot; @@ -125,31 +160,6 @@ namespace CrowIDE } } - [XmlAttributeAttribute()][DefaultValue(true)] - public bool DrawGrid { - get { return drawGrid; } - set { - if (drawGrid == value) - return; - drawGrid = value; - NotifyValueChanged ("DrawGrid", drawGrid); - RegisterForRedraw (); - } - } - [XmlAttributeAttribute()][DefaultValue(10)] - public int GridSpacing { - get { return gridSpacing; } - set { - if (gridSpacing == value) - return; - gridSpacing = value; - NotifyValueChanged ("GridSpacing", gridSpacing); - RegisterForRedraw (); - } - } - [XmlIgnore]public object SelectedItem { - get { return imlVE.HoverWidget; } - } void interfaceThread() { while (true) { @@ -201,7 +211,7 @@ namespace CrowIDE public override void onMouseDown (object sender, MouseButtonEventArgs e) { base.onMouseDown (sender, e); - NotifyValueChanged ("SelectedItem", imlVE.HoverWidget); + SelectedItem = imlVE.HoverWidget; } protected override void onDraw (Cairo.Context gr) { @@ -240,19 +250,25 @@ namespace CrowIDE imlVE.IsDirty = false; } - if (imlVE.HoverWidget == null) - return; - - Rectangle hr = imlVE.HoverWidget.ScreenCoordinates(imlVE.HoverWidget.getSlot ()); + Rectangle hr; + if (imlVE.HoverWidget != null) { + hr = imlVE.HoverWidget.ScreenCoordinates (imlVE.HoverWidget.getSlot ()); +// gr.SetSourceColor (Color.LightGray); +// gr.DrawCote (new Cairo.PointD (hr.X, hr.Center.Y), new Cairo.PointD (hr.Right, hr.Center.Y)); +// gr.DrawCote (new Cairo.PointD (hr.Center.X, hr.Y), new Cairo.PointD (hr.Center.X, hr.Bottom)); + //hr.Inflate (2); + gr.SetSourceColor (Color.LightGray); + gr.SetDash (new double[]{ 3.0, 3.0 }, 0.0); + gr.Rectangle (hr, 1.0); + } - gr.SetSourceColor (Color.LightGray); - gr.DrawCote (new Cairo.PointD (hr.X, hr.Center.Y), new Cairo.PointD (hr.Right, hr.Center.Y)); - gr.DrawCote (new Cairo.PointD (hr.Center.X, hr.Y), new Cairo.PointD (hr.Center.X, hr.Bottom)); - hr.Inflate (2); - gr.SetSourceColor (Color.LightGray); - gr.SetDash (new double[]{ 3.0, 3.0 },0.0); + if (SelectedItem == null) + return; + hr = SelectedItem.ScreenCoordinates(SelectedItem.getSlot ()); + hr.Inflate (1); + gr.SetSourceColor (Color.Yellow); + gr.SetDash (new double[]{ 5.0, 3.0 },0.0); gr.Rectangle (hr, 1.0); - } #endregion @@ -265,10 +281,10 @@ namespace CrowIDE MouseMoveEventArgs e = new MouseMoveEventArgs (x, y, deltaX, deltaY); e.Mouse = imlVE.Mouse; - if (imlVE.activeWidget != null) { + if (imlVE.ActiveWidget != null) { //TODO, ensure object is still in the graphic tree //send move evt even if mouse move outside bounds - imlVE.activeWidget.onMouseMove (this, e); + imlVE.ActiveWidget.onMouseMove (this, e); return true; } @@ -332,6 +348,12 @@ namespace CrowIDE } imlVE.HoverWidget = null; return false; + + } + + void GTView_SelectedItemChanged (object sender, SelectionChangeEventArgs e) + { + SelectedItem = e.NewValue as GraphicObject; } } } diff --git a/CrowIDE/src/MembersView.cs b/CrowIDE/src/MembersView.cs index 69f182d0..18f1a709 100644 --- a/CrowIDE/src/MembersView.cs +++ b/CrowIDE/src/MembersView.cs @@ -29,7 +29,7 @@ namespace CrowIDE { public class PropertyContainer : IValueChange { - #region IValueChange implementation + #region IValueChange implementation public event EventHandler ValueChanged; public virtual void NotifyValueChanged(string MemberName, object _value) { diff --git a/CrowIDE/ui/GTreeExpITemp.crow b/CrowIDE/ui/GTreeExpITemp.crow index 6ce59f3c..ba014830 100644 --- a/CrowIDE/ui/GTreeExpITemp.crow +++ b/CrowIDE/ui/GTreeExpITemp.crow @@ -2,9 +2,7 @@