* ContextMenu.cs : SourceControl, Show method
[mono.git] / mcs / class / System.Windows.Forms / System.Windows.Forms / ContextMenu.cs
index 53a71b6a1d227d85f582a86543547f98f9a59a64..b2fe5bd3af09e142c4eabd666600e1e80b88124f 100644 (file)
@@ -1,66 +1,76 @@
-//\r
-// System.Windows.Forms.ContextMenu.cs\r
-//\r
-// Author:\r
-//   stubbed out by Jaak Simm (jaaksimm@firm.ee)\r
-//   Dennis Hayes (dennish@Raytek.com)\r
-//   Alexandre Pigolkine (pigolkine@gmx.de)\r
-//\r
-// (C) Ximian, Inc., 2002\r
-//\r
-\r
-//using System.ComponentModel;\r
-//using System.Collections;\r
-using System.Drawing;\r
-\r
-namespace System.Windows.Forms {\r
-\r
-       /// <summary>\r
-       /// Represents a Windows combo box control.\r
-       /// ToDo note:\r
-       ///  - nothing is implemented\r
-       /// </summary>\r
-\r
-       [MonoTODO]\r
-       public class ContextMenu : Menu {\r
-\r
-               // private fields\r
-               RightToLeft rightToLeft;\r
-\r
-               // --- Constructor ---\r
-               [MonoTODO]\r
-               public ContextMenu() : base(null)\r
-               {\r
-                       rightToLeft = RightToLeft.Inherit;\r
-               }\r
-\r
-               [MonoTODO]\r
-               public ContextMenu(MenuItem[] menuItems) : base(menuItems)//menu does not have public constructor. Is this a gtk menu?\r
-               {\r
-               }\r
-               \r
-               // --- Properties ---\r
-               public virtual RightToLeft RightToLeft {\r
-                       get { return rightToLeft; }\r
-                       set { rightToLeft=value; }\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public Control SourceControl {\r
-                       get { throw new NotImplementedException (); }\r
-               }\r
-               \r
-               /// --- Methods ---\r
-               /// internal .NET framework supporting methods, not stubbed out:\r
-               /// - protected internal virtual void OnPopup(EventArgs e);\r
-               [MonoTODO]\r
-               public void Show(Control control,Point pos) \r
-               {\r
-                       //FIXME:\r
-               }\r
-               \r
-               /// events\r
-               [MonoTODO]\r
-               public event EventHandler Popup;\r
-       }\r
-}\r
+//
+// System.Windows.Forms.ContextMenu.cs
+//
+// Author:
+//   stubbed out by Jaak Simm (jaaksimm@firm.ee)
+//   Dennis Hayes (dennish@Raytek.com)
+//   Alexandre Pigolkine (pigolkine@gmx.de)
+//
+// (C) Ximian, Inc., 2002
+//
+
+//using System.ComponentModel;
+//using System.Collections;
+using System.Drawing;
+
+namespace System.Windows.Forms {
+
+       /// <summary>
+       /// Represents a shortcut menu
+       /// </summary>
+
+       [MonoTODO]
+       public class ContextMenu : Menu {
+
+               // private fields
+               RightToLeft rightToLeft;
+               Control sourceControl;
+
+               // --- Constructor ---
+               [MonoTODO]
+               public ContextMenu() : base(null)
+               {
+                       rightToLeft = RightToLeft.Inherit;
+                       sourceControl = null;
+               }
+
+               [MonoTODO]
+               public ContextMenu(MenuItem[] menuItems) : base(menuItems)//menu does not have public constructor. Is this a gtk menu?
+               {
+               }
+               
+               // --- Properties ---
+               public virtual RightToLeft RightToLeft {
+                       get { return rightToLeft; }
+                       set { rightToLeft=value; }
+               }
+               
+               public Control SourceControl {
+                       get { return sourceControl; }
+               }
+               
+               /// --- Methods ---
+               /// internal .NET framework supporting methods, not stubbed out:
+               /// - protected internal virtual void OnPopup(EventArgs e);
+               [MonoTODO]
+               public void Show(Control control, Point pos) 
+               {
+                       if ( Handle == IntPtr.Zero )
+                               return;
+
+                       sourceControl = control;
+
+                       POINT pt = new POINT ();
+                       pt.x = pos.X;
+                       pt.y = pos.Y;
+
+                       Win32.ClientToScreen ( control.Handle, ref pt );
+                       Win32.TrackPopupMenu (  Handle, ( uint ) ( TrackPopupMenuFlags.TPM_LEFTALIGN | TrackPopupMenuFlags.TPM_RIGHTBUTTON ),
+                                               pt.x, pt.y, 0, control.Handle , IntPtr.Zero );
+               }
+               
+               /// events
+               [MonoTODO]
+               public event EventHandler Popup;
+       }
+}