diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2018-02-15 14:58:36 +0100 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2018-02-15 14:58:36 +0100 |
| commit | c1b29a565bdbf37fd88d268588710ce8f4f84d5b (patch) | |
| tree | 37ec254f01bb8d2bad971c137fa787ca76a194d1 /src/Interface.cs | |
| parent | 0efa7446134489edd303b349ae1220f1c4228e9a (diff) | |
CrowIDE WIP, context commands, tooltips, PointIsIn(ref point), configuration no longer static.
also:
- remove default null value for datasource
- dschange sender changed in group and privateContainer
- try closing menuItem, should debug
- Contains search also template in TemplatedContainer
- change in nodeAddress: expresion starting with '/' means current node
- MouseEventArgs CTOR with one source button
- RemoveWidget trigger check HoverWidget
- Orientation binding in Menu template
Diffstat (limited to 'src/Interface.cs')
| -rw-r--r-- | src/Interface.cs | 49 |
1 files changed, 47 insertions, 2 deletions
diff --git a/src/Interface.cs b/src/Interface.cs index 03ea9308..0393fbc8 100644 --- a/src/Interface.cs +++ b/src/Interface.cs @@ -75,6 +75,15 @@ namespace Crow if (!Directory.Exists (CrowConfigRoot)) Directory.CreateDirectory (CrowConfigRoot); + //ensure all assemblies are loaded, because IML could contains classes not instanciated in source +// foreach (string af in Directory.GetFiles (AppDomain.CurrentDomain.BaseDirectory, "*.dll")){ +// try { +// Assembly.LoadFrom (af); +// } catch (Exception ex) { +// Console.WriteLine ("{0} not loaded as assembly.", af); +// } +// } + loadCursors (); findAvailableTemplates (); @@ -89,6 +98,7 @@ namespace Crow CultureInfo.DefaultThreadCurrentCulture = System.Globalization.CultureInfo.InvariantCulture; loadStyling (); initTooltip (); + initContextMenus (); } #endregion @@ -676,6 +686,12 @@ namespace Crow /// <summary>Set visible state of widget to false and remove if from the graphic tree</summary> public void RemoveWidget(GraphicObject g) { + if (g.Contains(HoverWidget)) { + while (HoverWidget != g.LogicalParent) { + HoverWidget.onMouseLeave (HoverWidget, null); + HoverWidget = HoverWidget.LogicalParent as GraphicObject; + } + } lock (UpdateMutex) { RegisterClip (g.ScreenCoordinates (g.LastPaintedSlot)); GraphicTree.Remove (g); @@ -861,7 +877,7 @@ namespace Crow public bool ProcessMouseButtonUp(int button) { Mouse.DisableBit (button); - MouseButtonEventArgs e = new MouseButtonEventArgs () { Mouse = Mouse }; + MouseButtonEventArgs e = new MouseButtonEventArgs ((Crow.MouseButton)button) { Mouse = Mouse }; if (_activeWidget == null) return false; @@ -888,7 +904,7 @@ namespace Crow public bool ProcessMouseButtonDown(int button) { Mouse.EnableBit (button); - MouseButtonEventArgs e = new MouseButtonEventArgs () { Mouse = Mouse }; + MouseButtonEventArgs e = new MouseButtonEventArgs ((Crow.MouseButton)button) { Mouse = Mouse }; if (HoverWidget == null) return false; @@ -1016,6 +1032,31 @@ namespace Crow } #endregion + #region Contextual menu + MenuItem ctxMenuContainer; + void initContextMenus (){ + ctxMenuContainer = Load ("#Crow.ContextMenu.template") as MenuItem; + } + + public void ShowContextMenu (GraphicObject go) { + + if (ctxMenuContainer.Parent == null) + this.AddWidget (ctxMenuContainer); + else + ctxMenuContainer.IsOpened = true; + + ctxMenuContainer.LogicalParent = go; + ctxMenuContainer.DataSource = go; + + PutOnTop (ctxMenuContainer, true); + ctxMenuContainer.Left = Mouse.X - 5; + ctxMenuContainer.Top = Mouse.Y - 5; + + HoverWidget = ctxMenuContainer; + ctxMenuContainer.onMouseEnter (ctxMenuContainer, new MouseMoveEventArgs (Mouse.X, Mouse.Y, 0, 0)); + } + #endregion + #region Device Repeat Events volatile bool mouseRepeatOn, keyboardRepeatOn; volatile int mouseRepeatCount, keyboardRepeatCount; @@ -1044,6 +1085,10 @@ namespace Crow #endregion #region ILayoutable implementation + public virtual bool PointIsIn(ref Point m) + { + return true; + } public void RegisterClip(Rectangle r){ clipping.UnionRectangle (r); } |