}
#region Events
- public event EventHandler Click;
- public event DrawItemEventHandler DrawItem;
- public event MeasureItemEventHandler MeasureItem;
- public event EventHandler Popup;
- public event EventHandler Select;
+ static object ClickEvent = new object ();
+ static object DrawItemEvent = new object ();
+ static object MeasureItemEvent = new object ();
+ static object PopupEvent = new object ();
+ static object SelectEvent = new object ();
+
+ public event EventHandler Click {
+ add { Events.AddHandler (ClickEvent, value); }
+ remove { Events.RemoveHandler (ClickEvent, value); }
+ }
+
+ public event DrawItemEventHandler DrawItem {
+ add { Events.AddHandler (DrawItemEvent, value); }
+ remove { Events.RemoveHandler (DrawItemEvent, value); }
+ }
+
+ public event MeasureItemEventHandler MeasureItem {
+ add { Events.AddHandler (MeasureItemEvent, value); }
+ remove { Events.RemoveHandler (MeasureItemEvent, value); }
+ }
+
+ public event EventHandler Popup {
+ add { Events.AddHandler (PopupEvent, value); }
+ remove { Events.RemoveHandler (PopupEvent, value); }
+ }
+
+ public event EventHandler Select {
+ add { Events.AddHandler (SelectEvent, value); }
+ remove { Events.RemoveHandler (SelectEvent, value); }
+ }
#endregion // Events
#region Public Properties
[Localizable(true)]
public bool Enabled {
get { return enabled; }
- set { enabled = value; }
+ set {
+ if (enabled == value)
+ return;
+
+ enabled = value;
+ Invalidate ();
+ }
}
[Browsable(false)]
MenuItems.Remove (item);
mdilist_items.Clear ();
mdilist_items = null;
-
}
}
internal bool MeasureEventDefined {
get {
- if (ownerdraw == true && MeasureItem != null) {
+ if (ownerdraw == true && Events [MeasureItemEvent] != null) {
return true;
} else {
return false;
}
}
+ internal bool VisibleItems {
+ get {
+ if (menu_items != null) {
+ foreach (MenuItem mi in menu_items)
+ if (mi.Visible)
+ return true;
+ }
+ return false;
+ }
+ }
+
internal new int Width {
get { return bounds.Width; }
set { bounds.Width = value; }
Visible = menuitem.Visible;
// Events
- Click = menuitem.Click;
- DrawItem = menuitem.DrawItem;
- MeasureItem = menuitem.MeasureItem;
- Popup = menuitem.Popup;
- Select = menuitem.Select;
+ Events[ClickEvent] = menuitem.Events[ClickEvent];
+ Events[DrawItemEvent] = menuitem.Events[DrawItemEvent];
+ Events[MeasureItemEvent] = menuitem.Events[MeasureItemEvent];
+ Events[PopupEvent] = menuitem.Events[PopupEvent];
+ Events[SelectEvent] = menuitem.Events[SelectEvent];
}
protected override void Dispose (bool disposing)
protected virtual void OnClick (EventArgs e)
{
- if (Click != null)
- Click (this, e);
+ EventHandler eh = (EventHandler)(Events [ClickEvent]);
+ if (eh != null)
+ eh (this, e);
}
protected virtual void OnDrawItem (DrawItemEventArgs e)
{
if (OwnerDraw) {
- if (DrawItem != null)
- DrawItem (this, e);
+ DrawItemEventHandler eh = (DrawItemEventHandler)(Events [DrawItemEvent]);
+ if (eh != null)
+ eh (this, e);
return;
}
protected virtual void OnMeasureItem (MeasureItemEventArgs e)
{
- if (OwnerDraw && MeasureItem != null)
- MeasureItem (this, e);
+ if (!OwnerDraw)
+ return;
+
+ MeasureItemEventHandler eh = (MeasureItemEventHandler)(Events [MeasureItemEvent]);
+ if (eh != null)
+ eh (this, e);
}
protected virtual void OnPopup (EventArgs e)
{
- if (Popup != null)
- Popup (this, e);
+ EventHandler eh = (EventHandler)(Events [PopupEvent]);
+ if (eh != null)
+ eh (this, e);
}
protected virtual void OnSelect (EventArgs e)
{
- if (Select != null)
- Select (this, e);
+ EventHandler eh = (EventHandler)(Events [SelectEvent]);
+ if (eh != null)
+ eh (this, e);
}
public void PerformClick ()
internal virtual void Invalidate ()
{
- if ((Parent != null) && (Parent is MainMenu))
+ if ((Parent != null) && (Parent is MainMenu) && Parent.Wnd != null)
XplatUI.RequestNCRecalc (Parent.Wnd.FindForm ().Handle);
}
if (mdicontainer == null)
break;
+
// Remove closed forms
- foreach (MenuItem item in mdilist_items.Keys) {
+ MenuItem[] items = new MenuItem[mdilist_items.Count];
+ mdilist_items.Keys.CopyTo (items, 0);
+ foreach (MenuItem item in items) {
Form mdichild = (Form) mdilist_items [item];
- if (!mdicontainer.original_order.Contains (mdichild)) {
+ if (!mdicontainer.mdi_child_list.Contains(mdichild)) {
mdilist_items.Remove (item);
mdilist_forms.Remove (mdichild);
MenuItems.Remove (item);
}
// Add new forms and update state for existing forms.
- for ( int i = 0; i < mdicontainer.original_order.Count; i++) {
- Form mdichild = (Form) mdicontainer.original_order [i];
+ for (int i = 0; i < mdicontainer.mdi_child_list.Count; i++) {
+ Form mdichild = (Form)mdicontainer.mdi_child_list[i];
MenuItem item;
if (mdilist_forms.Contains (mdichild)) {
item = (MenuItem) mdilist_forms [mdichild];
private void MdiWindowClickHandler (object sender, EventArgs e)
{
- Form mdichild = (Form) mdilist_items [SelectedItem];
+ Form mdichild = (Form) mdilist_items [sender];
// people could add weird items to the Window menu
// so we can't assume its just us