diff --git a/widget/public/nsIMenu.h b/widget/public/nsIMenu.h index 8778b313c713..7e6ae721db49 100644 --- a/widget/public/nsIMenu.h +++ b/widget/public/nsIMenu.h @@ -79,7 +79,7 @@ class nsIMenu : public nsISupports { * Adds a Menu Item * */ - NS_IMETHOD AddItem(nsIMenuItem * aMenuItem) = 0; + NS_IMETHOD AddMenuItem(nsIMenuItem * aMenuItem) = 0; /** * Adds a Cascading Menu diff --git a/widget/src/gtk/nsMenu.cpp b/widget/src/gtk/nsMenu.cpp index cf7b15c4bafd..345ee4d55b90 100644 --- a/widget/src/gtk/nsMenu.cpp +++ b/widget/src/gtk/nsMenu.cpp @@ -143,7 +143,7 @@ NS_METHOD nsMenu::AddItem(const nsString &aText) } //------------------------------------------------------------------------- -NS_METHOD nsMenu::AddItem(nsIMenuItem * aMenuItem) +NS_METHOD nsMenu::AddMenuItem(nsIMenuItem * aMenuItem) { GtkWidget *widget; void *voidData; diff --git a/widget/src/gtk/nsMenu.h b/widget/src/gtk/nsMenu.h index 2274c56ce8b2..58de8cf78f12 100644 --- a/widget/src/gtk/nsMenu.h +++ b/widget/src/gtk/nsMenu.h @@ -20,6 +20,7 @@ #define nsMenu_h__ #include "nsIMenu.h" +#include "nsVoidArray.h" class nsIMenuBar; @@ -44,7 +45,7 @@ public: NS_IMETHOD GetLabel(nsString &aText); NS_IMETHOD SetLabel(nsString &aText); NS_IMETHOD AddItem(const nsString &aText); - NS_IMETHOD AddItem(nsIMenuItem * aMenuItem); + NS_IMETHOD AddMenuItem(nsIMenuItem * aMenuItem); NS_IMETHOD AddMenu(nsIMenu * aMenu); NS_IMETHOD AddSeparator(); NS_IMETHOD GetItemCount(PRUint32 &aCount); diff --git a/widget/src/mac/nsMenu.cpp b/widget/src/mac/nsMenu.cpp index 1f157aece34d..3da9a8048496 100644 --- a/widget/src/mac/nsMenu.cpp +++ b/widget/src/mac/nsMenu.cpp @@ -19,6 +19,7 @@ #include "nsMenu.h" #include "nsIMenu.h" #include "nsIMenuBar.h" +#include "nsIMenuItem.h" #include "nsString.h" #include "nsStringUtil.h" @@ -34,6 +35,8 @@ static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); static NS_DEFINE_IID(kMenuIID, NS_IMENU_IID); NS_IMPL_ISUPPORTS(nsMenu, kMenuIID) +PRUint32 nsMenu::mMacMenuID = 256; + //------------------------------------------------------------------------- // // nsMenu constructor @@ -127,7 +130,7 @@ NS_METHOD nsMenu::Create(nsIMenuBar *aParent, const nsString &aLabel) //Create(GetNativeParent(), aLabel); - aParent->AddMenu(this); + //aParent->AddMenu(this); return NS_OK; } @@ -139,7 +142,7 @@ NS_METHOD nsMenu::Create(nsIMenu *aParent, const nsString &aLabel) NS_ADDREF(mMenuParent); //Create(GetNativeParent(), aLabel); - aParent->AddMenu(this); + //aParent->AddMenu(this); return NS_OK; } @@ -170,12 +173,15 @@ NS_METHOD nsMenu::SetLabel(nsString &aText) { mLabel = aText; - // Mac Menu id may be 1-255 - //mMacMenuHandle = ::NewMenu(1, (unsigned char *)mName.ToNewCString() ); + mMacMenuHandle = nsnull; + mMacMenuHandle = ::NewMenu(mMacMenuID, c2pstr(mLabel.ToNewCString()) ); + mMacMenuID++; + /* Str255 test; strcpy((char*)&test, "test"); c2pstr((char*)test); mMacMenuHandle = ::NewMenu(500, test); + */ return NS_OK; } @@ -187,10 +193,15 @@ NS_METHOD nsMenu::AddItem(const nsString &aText) } //------------------------------------------------------------------------- -NS_METHOD nsMenu::AddItem(nsIMenuItem * aMenuItem) +NS_METHOD nsMenu::AddMenuItem(nsIMenuItem * aMenuItem) { // XXX add aMenuItem to internal data structor list - + mMenuItemVoidArrary.AppendElement(aMenuItem); + + nsString label; + aMenuItem->GetLabel(label); + ::InsertMenuItem(mMacMenuHandle, c2pstr(label.ToNewCString()), mNumMenuItems ); + mNumMenuItems++; return NS_OK; } @@ -258,7 +269,7 @@ NS_METHOD nsMenu::RemoveAll() //------------------------------------------------------------------------- NS_METHOD nsMenu::GetNativeData(void *& aData) { - //aData = (void *)mMenu; + aData = (void *)mMacMenuHandle; return NS_OK; } diff --git a/widget/src/mac/nsMenu.h b/widget/src/mac/nsMenu.h index cce948477951..b21aae9d0932 100644 --- a/widget/src/mac/nsMenu.h +++ b/widget/src/mac/nsMenu.h @@ -20,6 +20,8 @@ #define nsMenu_h__ #include "nsIMenu.h" +#include "nsVoidArray.h" + #include class nsIMenuBar; @@ -45,7 +47,7 @@ public: NS_IMETHOD GetLabel(nsString &aText); NS_IMETHOD SetLabel(nsString &aText); NS_IMETHOD AddItem(const nsString &aText); - NS_IMETHOD AddItem(nsIMenuItem * aMenuItem); + NS_IMETHOD AddMenuItem(nsIMenuItem * aMenuItem); NS_IMETHOD AddMenu(nsIMenu * aMenu); NS_IMETHOD AddSeparator(); NS_IMETHOD GetItemCount(PRUint32 &aCount); @@ -63,12 +65,15 @@ protected: nsString mLabel; PRUint32 mNumMenuItems; + nsVoidArray mMenuItemVoidArrary; nsIMenu * mMenuParent; nsIMenuBar * mMenuBarParent; // MacSpecific - MenuHandle mMacMenuHandle; + static PRUint32 mMacMenuID; + MenuHandle mMacMenuHandle; }; + #endif // nsMenu_h__ diff --git a/widget/src/motif/nsMenu.cpp b/widget/src/motif/nsMenu.cpp index 1792648e7822..2abea7511efb 100644 --- a/widget/src/motif/nsMenu.cpp +++ b/widget/src/motif/nsMenu.cpp @@ -167,7 +167,7 @@ NS_METHOD nsMenu::AddItem(const nsString &aText) } //------------------------------------------------------------------------- -NS_METHOD nsMenu::AddItem(nsIMenuItem * aMenuItem) +NS_METHOD nsMenu::AddMenuItem(nsIMenuItem * aMenuItem) { // XXX add aMenuItem to internal data structor list return NS_OK; diff --git a/widget/src/motif/nsMenu.h b/widget/src/motif/nsMenu.h index c2f5d75ea33a..1b4a18a94be3 100644 --- a/widget/src/motif/nsMenu.h +++ b/widget/src/motif/nsMenu.h @@ -20,6 +20,7 @@ #define nsMenu_h__ #include "nsIMenu.h" +#include "nsVoidArray.h" #include "Xm/Xm.h" #include "nsXtManageWidget.h" @@ -46,7 +47,7 @@ public: NS_IMETHOD GetLabel(nsString &aText); NS_IMETHOD SetLabel(nsString &aText); NS_IMETHOD AddItem(const nsString &aText); - NS_IMETHOD AddItem(nsIMenuItem * aMenuItem); + NS_IMETHOD AddMenuItem(nsIMenuItem * aMenuItem); NS_IMETHOD AddMenu(nsIMenu * aMenu); NS_IMETHOD AddSeparator(); NS_IMETHOD GetItemCount(PRUint32 &aCount); diff --git a/widget/src/windows/nsMenu.cpp b/widget/src/windows/nsMenu.cpp index 3abcfcde8448..984982793c14 100644 --- a/widget/src/windows/nsMenu.cpp +++ b/widget/src/windows/nsMenu.cpp @@ -129,7 +129,7 @@ NS_METHOD nsMenu::AddItem(const nsString &aText) } //------------------------------------------------------------------------- -NS_METHOD nsMenu::AddItem(nsIMenuItem * aMenuItem) +NS_METHOD nsMenu::AddMenuItem(nsIMenuItem * aMenuItem) { PRUint32 command; nsString name; diff --git a/widget/src/windows/nsMenu.h b/widget/src/windows/nsMenu.h index 43b17612b31c..b9c950eb658d 100644 --- a/widget/src/windows/nsMenu.h +++ b/widget/src/windows/nsMenu.h @@ -24,6 +24,7 @@ #include "nsSwitchToUIThread.h" #include "nsIMenu.h" +#include "nsVoidArray.h" /** * Native Win32 button wrapper @@ -46,7 +47,7 @@ public: NS_IMETHOD GetLabel(nsString &aText); NS_IMETHOD SetLabel(nsString &aText); NS_IMETHOD AddItem(const nsString &aText); - NS_IMETHOD AddItem(nsIMenuItem * aMenuItem); + NS_IMETHOD AddMenuItem(nsIMenuItem * aMenuItem); NS_IMETHOD AddMenu(nsIMenu * aMenu); NS_IMETHOD AddSeparator(); NS_IMETHOD GetItemCount(PRUint32 &aCount);