diff -urN ooo_SRC680_m177_src.orig/vcl/aqua/inc/salframe.h ooo_SRC680_m177_src/vcl/aqua/inc/salframe.h --- ooo_SRC680_m177_src.orig/vcl/aqua/inc/salframe.h 2006-07-19 14:58:34.000000000 +0200 +++ ooo_SRC680_m177_src/vcl/aqua/inc/salframe.h 2006-07-19 23:28:08.000000000 +0200 @@ -38,6 +38,8 @@ #include +#include + #ifndef _SV_SV_H #include #endif @@ -184,6 +186,9 @@ typedef std::pair SysWindowEventHandlerData_t; typedef std::vector SysWindowEventHandlerDataContainer_t; SysWindowEventHandlerDataContainer_t mSysWindowEventHandlerDataContainer; + + // Menu associated with this SalFrame + AquaSalMenu *myMenu; }; #endif // _SV_SALFRAME_H diff -urN ooo_SRC680_m177_src.orig/vcl/aqua/inc/salmenu.h ooo_SRC680_m177_src/vcl/aqua/inc/salmenu.h --- ooo_SRC680_m177_src.orig/vcl/aqua/inc/salmenu.h 1970-01-01 01:00:00.000000000 +0100 +++ ooo_SRC680_m177_src/vcl/aqua/inc/salmenu.h 2006-07-19 23:47:19.000000000 +0200 @@ -0,0 +1,95 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: salmenu.h,v $ + * + * $Revision: 1.4 $ + * + * last change: $Author: rt $ $Date: 2005/09/09 12:45:35 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +#ifndef _SV_SALMENU_H +#define _SV_SALMENU_H + +#include +#include +#include + +#ifndef _SV_SV_H +#include +#endif +#ifndef _SV_BITMAP_HXX +#include +#endif + +#ifndef _SV_SALMENU_HXX +#include +#endif + + +class AquaSalMenu : public SalMenu +{ +public: + AquaSalMenu() {} + virtual ~AquaSalMenu(); + + virtual BOOL VisibleMenuBar(); // must return TRUE to actually DISPLAY native menu bars + // otherwise only menu messages are processed (eg, OLE on Windows) + + virtual void InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos ); + virtual void RemoveItem( unsigned nPos ); + virtual void SetSubMenu( SalMenuItem* pSalMenuItem, SalMenu* pSubMenu, unsigned nPos ); + virtual void SetFrame( const SalFrame* pFrame ); + virtual void CheckItem( unsigned nPos, BOOL bCheck ); + virtual void EnableItem( unsigned nPos, BOOL bEnable ); + virtual void SetItemText( unsigned nPos, SalMenuItem* pSalMenuItem, const XubString& rText ); + virtual void SetItemImage( unsigned nPos, SalMenuItem* pSalMenuItem, const Image& rImage); + virtual void SetAccelerator( unsigned nPos, SalMenuItem* pSalMenuItem, const KeyCode& rKeyCode, const XubString& rKeyName ); + virtual void GetSystemMenuData( SystemMenuData* pData ); + + CFStringRef sMenuText; // Title of this menu + MenuRef myMenuRef; // The Carbon reference to this menu + MenuID myMenuID; // The MenuID of this menu + + BOOL bMenuBar; // TRUE - Menubar + // FALSE - Menu +}; + +class AquaSalMenuItem : public SalMenuItem +{ +public: + AquaSalMenuItem() {} + virtual ~AquaSalMenuItem(); + + Menu *myMenu; // Menu into which this MenuItem is inserted + CFStringRef sMenuText; // Title of this menu item + MenuRef parentMenuRef; // The menu in which this menu item is inserted + MenuItemIndex myMenuItemIndex; // The menu index of this menu item in the myMenu menu +}; + +#endif // _SV_SALMENU_H diff -urN ooo_SRC680_m177_src.orig/vcl/aqua/source/app/salinst.cxx ooo_SRC680_m177_src/vcl/aqua/source/app/salinst.cxx --- ooo_SRC680_m177_src.orig/vcl/aqua/source/app/salinst.cxx 2006-07-19 14:58:34.000000000 +0200 +++ ooo_SRC680_m177_src/vcl/aqua/source/app/salinst.cxx 2006-07-19 14:58:36.000000000 +0200 @@ -612,26 +612,6 @@ -SalMenu* AquaSalInstance::CreateMenu( BOOL bMenuBar ) -{ - return NULL; -} - -void AquaSalInstance::DestroyMenu( SalMenu* ) -{ - -} - -SalMenuItem* AquaSalInstance::CreateMenuItem( const SalItemParams* pItemData ) -{ - -} - -void AquaSalInstance::DestroyMenuItem( SalMenuItem* ) -{ - -} - SalSound* AquaSalInstance::CreateSalSound() { return new AquaSalSound(); diff -urN ooo_SRC680_m177_src.orig/vcl/aqua/source/window/makefile.mk ooo_SRC680_m177_src/vcl/aqua/source/window/makefile.mk --- ooo_SRC680_m177_src.orig/vcl/aqua/source/window/makefile.mk 2006-07-19 14:58:34.000000000 +0200 +++ ooo_SRC680_m177_src/vcl/aqua/source/window/makefile.mk 2006-07-19 14:58:36.000000000 +0200 @@ -59,6 +59,7 @@ SLOFILES= \ $(SLO)/salframe.obj \ + $(SLO)/salmenu.obj \ $(SLO)/salobj.obj .ENDIF # "$(GUIBASE)"!="aqua" diff -urN ooo_SRC680_m177_src.orig/vcl/aqua/source/window/salframe.cxx ooo_SRC680_m177_src/vcl/aqua/source/window/salframe.cxx --- ooo_SRC680_m177_src.orig/vcl/aqua/source/window/salframe.cxx 2006-07-19 14:58:34.000000000 +0200 +++ ooo_SRC680_m177_src/vcl/aqua/source/window/salframe.cxx 2006-07-19 23:28:43.000000000 +0200 @@ -47,6 +47,9 @@ #ifndef _SV_SALFRAME_H #include #endif +#ifndef _SV_SALMENU_H +#include +#endif #ifndef _SV_SALTIMER_H #include #endif @@ -276,6 +279,8 @@ ShowWindow(mrWindow); if(!bNoActivate) SelectWindow(mrWindow); //ActivateWindow(mrWindow, true); + if (myMenu) + SetRootMenu(myMenu->myMenuRef); } else HideWindow(mrWindow); @@ -594,7 +599,8 @@ void AquaSalFrame::SetMenu( SalMenu* pSalMenu ) { fprintf(stderr, ">*>_> %s\n",__func__); - //TODO: implement + + myMenu = (AquaSalMenu *) pSalMenu; } void AquaSalFrame::SetExtendedFrameStyle( SalExtStyle nStyle ) diff -urN ooo_SRC680_m177_src.orig/vcl/aqua/source/window/salmenu.cxx ooo_SRC680_m177_src/vcl/aqua/source/window/salmenu.cxx --- ooo_SRC680_m177_src.orig/vcl/aqua/source/window/salmenu.cxx 1970-01-01 01:00:00.000000000 +0100 +++ ooo_SRC680_m177_src/vcl/aqua/source/window/salmenu.cxx 2006-07-19 23:56:00.000000000 +0200 @@ -0,0 +1,204 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: salmenu.cxx,v $ + * + * $Revision: 1.6 $ + * + * last change: $Author: rt $ $Date: 2005/09/09 13:51:47 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + + +#ifndef _SV_SALDATA_HXX +#include +#endif +#ifndef _SV_SALINST_H +#include +#endif +#ifndef _SV_SALMENU_H +#include +#endif + + +// ======================================================================= + +SalMenu* AquaSalInstance::CreateMenu( BOOL bMenuBar ) +{ + fprintf(stderr, "PJ: AquaSalInstance::CreateMenu(%d)\n", bMenuBar); + + AquaSalMenu *pAquaSalMenu = new AquaSalMenu(); + + pAquaSalMenu->bMenuBar = bMenuBar; + + // FIXME: any other solution for MenuIDs for CreateNewMenu? + // Do we need to store it at all? + static MenuID inMenuID=0; + pAquaSalMenu->myMenuID = inMenuID++; + + CreateNewMenu (pAquaSalMenu->myMenuID, 0, &pAquaSalMenu->myMenuRef); + + fprintf(stderr, "PJ: returning %p (MenuRef = %p)\n", pAquaSalMenu, pAquaSalMenu->myMenuRef); + + return pAquaSalMenu; +} + +void AquaSalInstance::DestroyMenu( SalMenu* pSalMenu ) +{ + /* PJ: FIXME: delete myMenuRef */ + delete pSalMenu; +} + +SalMenuItem* AquaSalInstance::CreateMenuItem( const SalItemParams* pItemData ) +{ + fprintf(stderr, "PJ: AquaSalInstance::CreateMenuItem()\n"); + + if( !pItemData ) + return NULL; + + AquaSalMenuItem *pSalMenuItem = new AquaSalMenuItem(); + + pSalMenuItem->sMenuText = CFStringCreateWithFormat(NULL, NULL, CFSTR("%s"), + ByteString(pItemData->aText,RTL_TEXTENCODING_UTF8).GetBuffer()); + fprintf(stderr, "PJ: sMenuText = %s\n", + ByteString(pItemData->aText, RTL_TEXTENCODING_UTF8).GetBuffer()); + + pSalMenuItem->myMenu = pItemData->pMenu; + + fprintf(stderr, "PJ: nId = %d\n", pItemData->nId); + fprintf(stderr, "PJ: returning %p\n", pSalMenuItem); + + return pSalMenuItem; +} + +void AquaSalInstance::DestroyMenuItem( SalMenuItem* pSalMenuItem ) +{ + delete pSalMenuItem; +} + + +// ======================================================================= + + +/* + * AquaSalMenu + */ + + +AquaSalMenu::~AquaSalMenu() +{ +} + +BOOL AquaSalMenu::VisibleMenuBar() +{ + fprintf(stderr, "PJ: VisibleMenuBar called!\n"); + return TRUE; +} + +void AquaSalMenu::SetFrame( const SalFrame *pFrame ) +{ + fprintf(stderr, "PJ: SetFrame called!\n"); +} + +void AquaSalMenu::InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos ) +{ + fprintf(stderr, "PJ: AquaSalMenu::InsertItem called (%p, nPos = %d)\n.", pSalMenuItem, nPos); + + AquaSalMenuItem *pAquaSalMenuItem = (AquaSalMenuItem *) pSalMenuItem; + fprintf(stderr, "PJ: pAquaSalMenuItem = %p\n", pAquaSalMenuItem); + + // save MenuRef of the menu for future reference + pAquaSalMenuItem->parentMenuRef = myMenuRef; + + fprintf(stderr, "PJ: bMenuBar = %d\n", bMenuBar); + + if (bMenuBar) + AppendMenuItemTextWithCFString( myMenuRef, NULL, 0, 0, &pAquaSalMenuItem->myMenuItemIndex); + else + AppendMenuItemTextWithCFString( myMenuRef, pAquaSalMenuItem->sMenuText, 0, 0, &pAquaSalMenuItem->myMenuItemIndex); +} + +void AquaSalMenu::RemoveItem( unsigned nPos ) +{ +} + +void AquaSalMenu::SetSubMenu( SalMenuItem* pSalMenuItem, SalMenu* pSubMenu, unsigned nPos ) +{ + fprintf(stderr, "PJ: SetSubMenu called!\n"); + + AquaSalMenuItem *pAquaSalMenuItem = (AquaSalMenuItem *) pSalMenuItem; + + AquaSalMenu *subAquaSalMenu = (AquaSalMenu *) pSubMenu; + + CFStringRef sMenuText = pAquaSalMenuItem->sMenuText; + + fprintf(stderr, "PJ: pSalMenuItem = %p\n", pSalMenuItem); + fprintf(stderr, "PJ: pSubMenu = %p\n", pSubMenu); + fprintf(stderr, "PJ: nPos = %d\n", nPos); + + SetMenuTitleWithCFString(subAquaSalMenu->myMenuRef, sMenuText); + SetMenuItemHierarchicalMenu (myMenuRef, pAquaSalMenuItem->myMenuItemIndex, subAquaSalMenu->myMenuRef); +} + +void AquaSalMenu::CheckItem( unsigned nPos, BOOL bCheck ) +{ +} + +void AquaSalMenu::EnableItem( unsigned nPos, BOOL bEnable ) +{ +} + +void AquaSalMenu::SetItemImage( unsigned nPos, SalMenuItem* pSalMenuItem, const Image& rImage ) +{ +} + +void AquaSalMenu::SetItemText( unsigned nPos, SalMenuItem* pSalMenuItem, const XubString& rText ) +{ + fprintf(stderr, "PJ: SetItemText (rText = %s).\n", rText.GetBuffer()); +} + +void AquaSalMenu::SetAccelerator( unsigned nPos, SalMenuItem* pSalMenuItem, const KeyCode& rKeyCode, const XubString& rKeyName ) +{ +} + +void AquaSalMenu::GetSystemMenuData( SystemMenuData* pData ) +{ +} + +// ======================================================================= + +/* + * SalMenuItem + */ + + +AquaSalMenuItem::~AquaSalMenuItem() +{ +} + +// ------------------------------------------------------------------- + diff -urN ooo_SRC680_m177_src.orig/vcl/workben/svdem.cxx ooo_SRC680_m177_src/vcl/workben/svdem.cxx --- ooo_SRC680_m177_src.orig/vcl/workben/svdem.cxx 2006-07-19 14:58:36.000000000 +0200 +++ ooo_SRC680_m177_src/vcl/workben/svdem.cxx 2006-07-19 14:58:36.000000000 +0200 @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -87,6 +88,9 @@ void KeyUp( const KeyEvent& rKEvt ); void Paint( const Rectangle& rRect ); void Resize(); + MenuBar aMenuBar; + PopupMenu aFileMenu; + PopupMenu aEditMenu; }; // ----------------------------------------------------------------------- @@ -104,6 +108,42 @@ aMainWin.SetText( XubString( RTL_CONSTASCII_USTRINGPARAM( "VCL - Workbench" ) ) ); aMainWin.Show(); +#define PJ_DEBUG(STRING) fprintf(stderr, "PJ: --- " STRING " ---\n"); + + PJ_DEBUG("1"); + + // fprintf(stderr, "PJ: String: %s\n", ByteString(XubString( RTL_CONSTASCII_USTRINGPARAM( "File" ) ) , RTL_TEXTENCODING_UTF8 ).GetBuffer()); + + aMainWin.aMenuBar.InsertItem( 1, XubString( RTL_CONSTASCII_USTRINGPARAM( "File" ) ) ); + + PJ_DEBUG("2"); + + aMainWin.aMenuBar.InsertItem( 2, XubString( RTL_CONSTASCII_USTRINGPARAM( "Edit" ) ) ); + + PJ_DEBUG("3"); + + aMainWin.aMenuBar.SetPopupMenu( 1, &aMainWin.aFileMenu ); + + PJ_DEBUG("4"); + aMainWin.aMenuBar.SetPopupMenu( 2, &aMainWin.aEditMenu ); + PJ_DEBUG("5"); + aMainWin.aFileMenu.InsertItem( 1, XubString( RTL_CONSTASCII_USTRINGPARAM( "Open" ) )); + PJ_DEBUG("6"); + aMainWin.aFileMenu.InsertItem( 2, XubString( RTL_CONSTASCII_USTRINGPARAM( "Close" ) )); + PJ_DEBUG("7"); + aMainWin.aFileMenu.InsertItem( 3, XubString( RTL_CONSTASCII_USTRINGPARAM( "Exit" ) )); + PJ_DEBUG("8"); + + aMainWin.aEditMenu.InsertItem( 1, XubString( RTL_CONSTASCII_USTRINGPARAM( "Search" ) )); + PJ_DEBUG("9"); + aMainWin.aEditMenu.InsertItem( 2, XubString( RTL_CONSTASCII_USTRINGPARAM( "Replace" ) )); + + PJ_DEBUG("10"); + + aMainWin.SetMenuBar( &aMainWin.aMenuBar ); + + PJ_DEBUG("11"); + /* InfoBox ib(NULL, String((sal_Char*)"Test", sizeof("Test"))); ib.Execute();