diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2017-03-21 13:48:50 +0100 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2017-03-21 13:48:50 +0100 |
| commit | 280ee7ff8429342575b47eff4ab88872399047d3 (patch) | |
| tree | 8733c3b9be774be6b8f3a667d626d70832c6134e /src | |
| parent | 6b96a03d1ac087cbd8c0d7c69699770adf143245 (diff) | |
Simplify z ordering of root objects in GraphicTree
modifié : src/GraphicObjects/Group.cs
modifié : src/GraphicObjects/Window.cs
modifié : src/Interface.cs
Diffstat (limited to 'src')
| -rw-r--r-- | src/GraphicObjects/Group.cs | 40 | ||||
| -rw-r--r-- | src/GraphicObjects/Window.cs | 7 | ||||
| -rw-r--r-- | src/Interface.cs | 45 |
3 files changed, 52 insertions, 40 deletions
diff --git a/src/GraphicObjects/Group.cs b/src/GraphicObjects/Group.cs index d00449cb..d4b5b62e 100644 --- a/src/GraphicObjects/Group.cs +++ b/src/GraphicObjects/Group.cs @@ -102,26 +102,26 @@ namespace Crow ChildrenCleared.Raise (this, new EventArgs ()); } - public void putWidgetOnTop(GraphicObject w) - { - if (Children.Contains(w)) - { - lock (children) { - Children.Remove (w); - Children.Add (w); - } - } - } - public void putWidgetOnBottom(GraphicObject w) - { - if (Children.Contains(w)) - { - lock (children) { - Children.Remove (w); - Children.Insert (0, w); - } - } - } +// public void putWidgetOnTop(GraphicObject w) +// { +// if (Children.Contains(w)) +// { +// lock (children) { +// Children.Remove (w); +// Children.Add (w); +// } +// } +// } +// public void putWidgetOnBottom(GraphicObject w) +// { +// if (Children.Contains(w)) +// { +// lock (children) { +// Children.Remove (w); +// Children.Insert (0, w); +// } +// } +// } #region GraphicObject overrides public override void OnDataSourceChanged (object sender, DataSourceChangeEventArgs e) diff --git a/src/GraphicObjects/Window.cs b/src/GraphicObjects/Window.cs index e2820528..8a6903f6 100644 --- a/src/GraphicObjects/Window.cs +++ b/src/GraphicObjects/Window.cs @@ -150,11 +150,10 @@ namespace Crow if (alwaysOnTop == value) return; alwaysOnTop = value; - if (alwaysOnTop) { + + if (alwaysOnTop && Parent != null) CurrentInterface.PutOnTop (this); - CurrentInterface.TopWindows++; - }else - CurrentInterface.TopWindows--; + NotifyValueChanged ("AlwaysOnTop", alwaysOnTop); } } diff --git a/src/Interface.cs b/src/Interface.cs index b3ff2527..62ac6ce3 100644 --- a/src/Interface.cs +++ b/src/Interface.cs @@ -147,7 +147,6 @@ namespace Crow /// </summary> public static Dictionary<String, Instantiator> Instantiators = new Dictionary<string, Instantiator>(); public bool DesignMode = false; - public int TopWindows = 0;//window always on top count public List<CrowThread> CrowThreads = new List<CrowThread>();//used to monitor thread finished #endregion @@ -550,17 +549,25 @@ namespace Crow #region GraphicTree handling /// <summary>Add widget to the Graphic tree of this interface and register it for layouting</summary> - public void AddWidget(GraphicObject g, bool topMost = false) + public void AddWidget(GraphicObject g, bool isOverlay = false) { g.Parent = this; - int ptr = TopWindows; - if (g is Window) { - if ((g as Window).AlwaysOnTop) - ptr = 0; - } else if (topMost) - ptr = 0; + int ptr = 0; + Window newW = g as Window; + if (newW != null) { + while (ptr < GraphicTree.Count) { + Window w = GraphicTree [ptr] as Window; + if (w != null) { + if (newW.AlwaysOnTop || !w.AlwaysOnTop) + break; + } + ptr++; + } + } + lock (UpdateMutex) - GraphicTree.Insert (ptr, g); + GraphicTree.Insert (ptr, g); + g.RegisteredLayoutings = LayoutingType.None; g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren); } @@ -572,14 +579,20 @@ namespace Crow GraphicTree.Remove (g); } /// <summary> Put widget on top of other root widgets</summary> - public void PutOnTop(GraphicObject g, bool topMost = false) + public void PutOnTop(GraphicObject g, bool isOverlay = false) { - int ptr = TopWindows; - if (g is Window) { - if ((g as Window).AlwaysOnTop) - ptr = 0; - } else if (topMost) - ptr = 0; + int ptr = 0; + Window newW = g as Window; + if (newW != null) { + while (ptr < GraphicTree.Count) { + Window w = GraphicTree [ptr] as Window; + if (w != null) { + if (newW.AlwaysOnTop || !w.AlwaysOnTop) + break; + } + ptr++; + } + } if (GraphicTree.IndexOf(g) > ptr) { lock (UpdateMutex) { |