// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-// Copyright (c) 2004 Novell, Inc.
+// Copyright (c) 2004-2005 Novell, Inc.
//
// Authors:
// Jordi Mas i Hernandez, jordi@ximian.com
//
//
-// NOT COMPLETE
+// COMPLETE
+
+using System.ComponentModel;
+using System.Drawing;
namespace System.Windows.Forms
{
+ [ToolboxItemFilter("System.Windows.Forms.MainMenu", ToolboxItemFilterType.Allow)]
public class MainMenu : Menu
{
- private RightToLeft right_to_left;
- private Form form;
+ private RightToLeft right_to_left = RightToLeft.Inherit;
+ private Form form = null;
public MainMenu () : base (null)
{
- form = null;
+
}
public MainMenu (MenuItem[] items) : base (items)
{
- form = null;
+
}
- #region Public Properties\r
- \r
+#if NET_2_0
+ public MainMenu (IContainer container) : this ()
+ {
+ container.Add (this);
+ }
+#endif
+
+ #region Public Properties
+ [Localizable(true)]
+#if NET_2_0
+ [AmbientValue (RightToLeft.Inherit)]
+#endif
public virtual RightToLeft RightToLeft {
get { return right_to_left;}
set { right_to_left = value; }
#endregion Public Properties
#region Public Methods
- \r
- public virtual MainMenu CloneMenu()
+
+ public virtual MainMenu CloneMenu ()
{
- throw new NotImplementedException ();
+ MainMenu new_menu = new MainMenu ();
+ new_menu.CloneMenu (this);
+ return new_menu;
}
- \r
+
protected override IntPtr CreateMenuHandle ()
- {
- return MenuAPI.CreateMenu ();
- }\r
+ {
+ return IntPtr.Zero;
+ }
- protected void Dispose (bool disposing)
- {
- throw new NotImplementedException ();
+ protected override void Dispose (bool disposing)
+ {
+ base.Dispose (disposing);
}
public Form GetForm ()
public override string ToString ()
{
- return base.ToString ();
+ return base.ToString () + ", GetForm: " + form;
}
#endregion Public Methods
#region Private Methods
+
+ internal void Draw () {
+ Draw (Rect);
+ }
+
+ internal void Draw (Rectangle clip_rect) {
+ PaintEventArgs pe;
+
+ if (Wnd.IsHandleCreated) {
+ pe = XplatUI.PaintEventStart(Wnd.window.Handle, false);
+ pe.Graphics.Clip = new Region (clip_rect);
+ Draw (pe, Rect);
+ XplatUI.PaintEventEnd(Wnd.window.Handle, false);
+ }
+ }
+
+ internal void Draw (PaintEventArgs pe)
+ {
+ Draw (pe, Rect);
+ }
+
+ internal void Draw (PaintEventArgs pe, Rectangle rect)
+ {
+ if (!Wnd.IsHandleCreated)
+ return;
+
+ X = rect.X;
+ Y = rect.Y;
+ Height = Rect.Height;
+
+ ThemeEngine.Current.DrawMenuBar (pe.Graphics, this, rect);
+
+ PaintEventHandler eh = (PaintEventHandler)(Events [PaintEvent]);
+ if (eh != null)
+ eh (this, pe);
+ }
+
+ internal override void InvalidateItem (MenuItem item)
+ {
+ Draw (item.bounds);
+ }
internal void SetForm (Form form)
{
this.form = form;
- MenuAPI.SetMenuBarWindow (Handle, form);
+ Wnd = form;
+
+ if (tracker == null)
+ tracker = new MenuTracker (this);
}
+ internal override void OnMenuChanged (EventArgs e)
+ {
+ base.OnMenuChanged (EventArgs.Empty);
+ if (form == null)
+ return;
+
+ Rectangle clip = Rect;
+ Height = 0; /* need this so the theme code will re-layout the menu items
+ (why is the theme code doing the layout? argh) */
+ Draw (clip);
+ }
+
/* Mouse events from the form */
- internal void OnMouseDown (Form window, MouseEventArgs e)
+ internal void OnMouseDown (object window, MouseEventArgs args)
{
- MenuAPI.TrackBarMouseEvent (Handle, window, e, MenuAPI.MenuMouseEvent.Down);
+ tracker.OnMouseDown (args);
}
- internal void OnMouseMove (Form window, MouseEventArgs e)
- {
- MenuAPI.TrackBarMouseEvent (Handle, window, e, MenuAPI.MenuMouseEvent.Move);
+ internal void OnMouseMove (object window, MouseEventArgs e)
+ {
+ MouseEventArgs args = new MouseEventArgs (e.Button, e.Clicks, Control.MousePosition.X, Control.MousePosition.Y, e.Delta);
+ tracker.OnMotion (args);
}
-
- #endregion Private Methods\r
+
+ static object PaintEvent = new object ();
+
+ internal event PaintEventHandler Paint {
+ add { Events.AddHandler (PaintEvent, value); }
+ remove { Events.RemoveHandler (PaintEvent, value); }
+ }
+
+ #endregion Private Methods
}
}