aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/Interface.cs
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2018-02-15 14:58:36 +0100
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2018-02-15 14:58:36 +0100
commitc1b29a565bdbf37fd88d268588710ce8f4f84d5b (patch)
tree37ec254f01bb8d2bad971c137fa787ca76a194d1 /src/Interface.cs
parent0efa7446134489edd303b349ae1220f1c4228e9a (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.cs49
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);
}