summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Mencken <dougmencken@gmail.com>2016-04-14 08:56:01 -0400
committerDouglas Mencken <dougmencken@gmail.com>2017-01-12 06:35:54 -0500
commit854c42adfc500b498c181dd8a7fd9d7148d448d5 (patch)
tree68654faf792e3d8c16984ce3990fb9d76d74eb4e
parent5f8641b11bd5384465cc15fde4a0686c7fb39953 (diff)
playing with menus & separators
Change-Id: I20a51b2a173d81eb51310a04722c1b61dd49630b
-rw-r--r--framework/source/uielement/newmenucontroller.cxx8
-rw-r--r--include/vcl/menu.hxx7
-rw-r--r--vcl/inc/osx/salmenu.h3
-rw-r--r--vcl/osx/salmenu.cxx84
-rw-r--r--vcl/source/window/builder.cxx13
-rw-r--r--vcl/source/window/menu.cxx20
-rw-r--r--vcl/source/window/menubarwindow.cxx4
-rw-r--r--vcl/source/window/menufloatingwindow.cxx2
-rw-r--r--vcl/source/window/menuitemlist.cxx92
-rw-r--r--vcl/source/window/menuitemlist.hxx10
10 files changed, 199 insertions, 44 deletions
diff --git a/framework/source/uielement/newmenucontroller.cxx b/framework/source/uielement/newmenucontroller.cxx
index e8963fd76e88..142efef532e5 100644
--- a/framework/source/uielement/newmenucontroller.cxx
+++ b/framework/source/uielement/newmenucontroller.cxx
@@ -302,6 +302,8 @@ NewMenuController::~NewMenuController()
// private function
void NewMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu >& rPopupMenu )
{
+ SAL_WARN( "framework", "fillPopupMenu()" );
+
VCLXPopupMenu* pPopupMenu = static_cast<VCLXPopupMenu *>(VCLXMenu::GetImplementation( rPopupMenu ));
PopupMenu* pVCLPopupMenu = nullptr;
@@ -348,11 +350,17 @@ void NewMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu >& rPopup
continue;
if ( aURL == "private:separator" )
+ {
+ SAL_WARN( "framework", "separator" );
pVCLPopupMenu->InsertSeparator();
+ }
else
{
+ SAL_WARN( "framework", "item ( aTitle \"" << aTitle << "\", aURL \"" << aURL << "\", nItemId " << OUString::number( nItemId ) << " )" );
+
pVCLPopupMenu->InsertItem( nItemId, aTitle );
pVCLPopupMenu->SetItemCommand( nItemId, aURL );
+ //pVCLPopupMenu->DoSomethingCool();
sal_uIntPtr nAttributePtr = MenuAttributes::CreateAttribute( aTargetFrame, aImageId );
pVCLPopupMenu->SetUserValue( nItemId, nAttributePtr, MenuAttributes::ReleaseAttribute );
diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx
index f2202d1f3f2d..8d746adeb1f6 100644
--- a/include/vcl/menu.hxx
+++ b/include/vcl/menu.hxx
@@ -211,7 +211,12 @@ protected:
virtual void MenuBarKeyInput(const KeyEvent& rEvent);
public:
- SAL_DLLPRIVATE void ImplKillLayoutData() const;
+ OUString& GetText()
+ {
+ return aTitleText;
+ }
+
+ SAL_DLLPRIVATE void ImplBinLayoutData() const;
SAL_DLLPRIVATE vcl::Window* ImplGetWindow() const { return pWindow; }
#if defined(MACOSX)
diff --git a/vcl/inc/osx/salmenu.h b/vcl/inc/osx/salmenu.h
index f21c750bcc01..3981cdbed0ba 100644
--- a/vcl/inc/osx/salmenu.h
+++ b/vcl/inc/osx/salmenu.h
@@ -84,6 +84,9 @@ public:
static void addFallbackMenuItem( NSMenuItem* NewItem );
static void removeFallbackMenuItem( NSMenuItem* pOldItem );
+ bool IsSeparatorAt( unsigned nPos );
+ static bool IsItemSeparator( AquaSalMenuItem * pAquaSalMenuItem );
+
const std::vector< MenuBarButtonEntry >& getButtons() const { return maButtons; }
bool mbMenuBar; // true - Menubar, false - Menu
diff --git a/vcl/osx/salmenu.cxx b/vcl/osx/salmenu.cxx
index e5947a486dbe..712ff12daa64 100644
--- a/vcl/osx/salmenu.cxx
+++ b/vcl/osx/salmenu.cxx
@@ -512,9 +512,36 @@ void AquaSalMenu::SetFrame( const SalFrame *pFrame )
mpFrame = static_cast<const AquaSalFrame*>(pFrame);
}
+bool AquaSalMenu::IsItemSeparator( AquaSalMenuItem * pAquaSalMenuItem )
+{
+ if ( ! pAquaSalMenuItem )
+ return false;
+
+ return ( [ pAquaSalMenuItem->mpMenuItem isSeparatorItem ] ? true : false );
+}
+
+bool AquaSalMenu::IsSeparatorAt( unsigned nPos )
+{
+ if( nPos < maItems.size() )
+ return IsItemSeparator( maItems[ nPos ] );
+
+ return false;
+}
+
void AquaSalMenu::InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos )
{
- AquaSalMenuItem *pAquaSalMenuItem = static_cast<AquaSalMenuItem*>(pSalMenuItem);
+ AquaSalMenuItem *pAquaSalMenuItem = static_cast< AquaSalMenuItem * >( pSalMenuItem );
+ NSMenuItem* nsMenuItem = pAquaSalMenuItem->mpMenuItem;
+ bool isSeparator = IsItemSeparator( pAquaSalMenuItem );
+
+#if OSL_DEBUG_LEVEL > 0
+ if ( isSeparator ) {
+ SAL_WARN( "vcl.osx", "AquaSalMenu::InsertItem separator at position " << nPos );
+ } else {
+ const char* theTitle = [ [ nsMenuItem title ] UTF8String ];
+ SAL_WARN( "vcl.osx", "AquaSalMenu::InsertItem with label \"" << theTitle << "\" at position " << nPos );
+ }
+#endif
pAquaSalMenuItem->mpParentMenu = this;
DBG_ASSERT( pAquaSalMenuItem->mpVCLMenu == nullptr ||
@@ -524,24 +551,37 @@ void AquaSalMenu::InsertItem( SalMenuItem* pSalMenuItem, unsigned nPos )
if( pAquaSalMenuItem->mpVCLMenu )
mpVCLMenu = pAquaSalMenuItem->mpVCLMenu;
- if( nPos == MENU_APPEND || nPos == maItems.size() )
- maItems.push_back( pAquaSalMenuItem );
- else if( nPos < maItems.size() )
- maItems.insert( maItems.begin() + nPos, pAquaSalMenuItem );
- else
+ bool bInsert = true;
+ if ( isSeparator )
{
- OSL_FAIL( "invalid item index in insert" );
- return;
+ bInsert = ( nPos > 0 ) ?
+ ( !IsSeparatorAt( nPos ) && !IsSeparatorAt( nPos - 1 ) ) :
+ !IsSeparatorAt( nPos ) ;
+ if ( !bInsert )
+ SAL_WARN( "vcl.osx", "yet another separator here is redundant" );
}
- if( ! mbMenuBar || pCurrentMenuBar == this )
- [mpMenu insertItem: pAquaSalMenuItem->mpMenuItem atIndex: getItemIndexByPos(nPos)];
+ if ( bInsert )
+ {
+ if( nPos == MENU_APPEND || nPos == maItems.size() )
+ maItems.push_back( pAquaSalMenuItem );
+ else if( nPos < maItems.size() )
+ maItems.insert( maItems.begin() + nPos, pAquaSalMenuItem );
+ else
+ {
+ SAL_WARN( "vcl.osx", "position of item is somewhere out @ AquaSalMenu::InsertItem" );
+ return;
+ }
+
+ if( ! mbMenuBar || pCurrentMenuBar == this )
+ [ mpMenu insertItem: nsMenuItem atIndex: getItemIndexByPos( nPos ) ];
+ }
}
void AquaSalMenu::RemoveItem( unsigned nPos )
{
AquaSalMenuItem* pRemoveItem = nullptr;
- if( nPos == MENU_APPEND || nPos == (maItems.size()-1) )
+ if( nPos == MENU_APPEND || nPos == ( maItems.size() - 1 ) )
{
pRemoveItem = maItems.back();
maItems.pop_back();
@@ -549,18 +589,18 @@ void AquaSalMenu::RemoveItem( unsigned nPos )
else if( nPos < maItems.size() )
{
pRemoveItem = maItems[ nPos ];
- maItems.erase( maItems.begin()+nPos );
+ maItems.erase( maItems.begin() + nPos );
}
else
{
- OSL_FAIL( "invalid item index in remove" );
+ SAL_WARN( "vcl.osx", "RemoveItem: item is somewhere out" );
return;
}
pRemoveItem->mpParentMenu = nullptr;
if( ! mbMenuBar || pCurrentMenuBar == this )
- [mpMenu removeItemAtIndex: getItemIndexByPos(nPos)];
+ [ mpMenu removeItemAtIndex: getItemIndexByPos( nPos ) ];
}
void AquaSalMenu::SetSubMenu( SalMenuItem* pSalMenuItem, SalMenu* pSubMenu, unsigned /*nPos*/ )
@@ -801,7 +841,7 @@ void AquaSalMenu::statusLayout()
if( [pNSView isMemberOfClass: [OOStatusItemView class]] ) // well of course it is
[(OOStatusItemView*)pNSView layout];
else
- OSL_FAIL( "someone stole our status view" );
+ SAL_WARN( "vcl.osx", "¿where is my status view?" );
}
}
@@ -908,6 +948,8 @@ AquaSalMenuItem::AquaSalMenuItem( const SalItemParams* pItemData ) :
// these can go occasionally go in and out of a menu, ensure their lifecycle
// also for the release in AquaSalMenuItem destructor
[mpMenuItem retain];
+
+ SAL_WARN( "vcl.osx", "created AquaSalMenuItem separator" );
}
else
{
@@ -921,8 +963,16 @@ AquaSalMenuItem::AquaSalMenuItem( const SalItemParams* pItemData ) :
[mpMenuItem setTitle: pString];
[pString release];
}
- // anything but a separator should set a menu to dispatch to
- SAL_WARN_IF( !mpVCLMenu, "vcl", "no menu" );
+
+#if OSL_DEBUG_LEVEL > 0
+ const char* item = [ [ mpMenuItem title ] UTF8String ];
+ if ( mpVCLMenu ) {
+ SAL_WARN( "vcl.osx", "created AquaSalMenuItem \"" << item << "\" of menu \"" << mpVCLMenu->GetText() << "\"" );
+ } else {
+ // anything but a separator needs a menu to dispatch to
+ SAL_WARN( "vcl.osx", "created AquaSalMenuItem \"" << item << "\" of *no menu*" );
+ }
+#endif
}
}
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 9e3057ff8ea6..b37dc7f13862 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -2477,6 +2477,8 @@ std::vector<OString> VclBuilder::handleItems(xmlreader::XmlReader &reader, const
void VclBuilder::handleMenu(xmlreader::XmlReader &reader, const OString &rID)
{
+ SAL_WARN( "vcl.window", "handleMenu" );
+
VclPtr<PopupMenu> pCurrentMenu = VclPtr<PopupMenu>::Create();
int nLevel = 1;
@@ -2522,6 +2524,8 @@ void VclBuilder::handleMenu(xmlreader::XmlReader &reader, const OString &rID)
void VclBuilder::handleMenuChild(PopupMenu *pParent, xmlreader::XmlReader &reader)
{
+ SAL_WARN( "vcl.window", "handleMenuChild" );
+
xmlreader::Span name;
int nsId;
@@ -2719,14 +2723,17 @@ void VclBuilder::insertMenuObject(PopupMenu *pParent, const OString &rClass, con
if (rClass == "GtkMenuItem")
{
OUString sLabel(OStringToOUString(convertMnemonicMarkup(extractLabel(rProps)), RTL_TEXTENCODING_UTF8));
+ SAL_WARN( "vcl.window", "going to InsertItem with position " << nNewId << " & label \"" << sLabel << "\" & id \"" << rID << "\" @ insertMenuObject" );
pParent->InsertItem(nNewId, sLabel, MenuItemBits::TEXT, rID);
}
else if (rClass == "GtkSeparatorMenuItem")
{
+ SAL_WARN( "vcl.window", "going to InsertSeparator with id \"" << rID << "\" @ insertMenuObject" );
pParent->InsertSeparator(rID);
}
+ SAL_WARN( "vcl.window", "done insert @ insertMenuObject" );
- SAL_WARN_IF(nOldCount == pParent->GetItemCount(), "vcl.layout", "probably need to implement " << rClass.getStr());
+ SAL_WARN_IF(nOldCount == pParent->GetItemCount(), "vcl", "probably need to implement " << rClass.getStr());
if (nOldCount != pParent->GetItemCount())
{
@@ -2746,7 +2753,7 @@ void VclBuilder::insertMenuObject(PopupMenu *pParent, const OString &rClass, con
else if (rKey == "has-default" && toBool(rValue))
pParent->SetSelectedEntry(nNewId);
else
- SAL_INFO("vcl.layout", "unhandled property: " << rKey.getStr());
+ SAL_INFO( "vcl", "unhandled property \"" << rKey.getStr() << "\"" );
}
for (stringmap::iterator aI = rAccels.begin(), aEnd = rAccels.end(); aI != aEnd; ++aI)
@@ -2757,7 +2764,7 @@ void VclBuilder::insertMenuObject(PopupMenu *pParent, const OString &rClass, con
if (rSignal == "activate")
pParent->SetAccelKey(nNewId, makeKeyCode(rValue));
else
- SAL_INFO("vcl.layout", "unhandled accelerator for: " << rSignal.getStr());
+ SAL_INFO( "vcl", "unhandled accelerator for \"" << rSignal.getStr() << "\"" );
}
}
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 00b931e32ba9..597dc3ccbaaf 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -242,7 +242,7 @@ void Menu::Deactivate()
if ( ImplGetSalMenu() )
ImplGetSalMenu()->RemoveItem( n );
- pItemList->Remove( n );
+ pItemList->RemoveMenuItem( n );
}
}
@@ -371,8 +371,8 @@ MenuItemData* Menu::NbcInsertItem(sal_uInt16 nId, MenuItemBits nBits,
size_t nPos, const OString &rIdent)
{
// put Item in MenuItemList
- MenuItemData* pData = pItemList->Insert(nId, MenuItemType::STRING,
- nBits, rStr, Image(), pMenu, nPos, rIdent);
+ MenuItemData* pData = pItemList->InsertMenuItem( nId, MenuItemType::STRING,
+ nBits, rStr, Image(), pMenu, nPos, rIdent );
// update native menu
if (ImplGetSalMenu() && pData->pSalMenuItem)
@@ -526,6 +526,8 @@ void Menu::InsertItem(const OUString& rCommand, const css::uno::Reference<css::f
void Menu::InsertSeparator(const OString &rIdent, sal_uInt16 nPos)
{
+ SAL_WARN( "vcl", "Menu::InsertSeparator with ident \"" << rIdent << "\" & position " << nPos );
+
// do nothing if it's a menu bar
if (IsMenuBar())
return;
@@ -535,13 +537,13 @@ void Menu::InsertSeparator(const OString &rIdent, sal_uInt16 nPos)
nPos = MENU_APPEND;
// put separator in item list
- pItemList->InsertSeparator(rIdent, nPos);
+ MenuItemData *pData = pItemList->InsertSeparator( rIdent, nPos );
// update native menu
- size_t itemPos = ( nPos != MENU_APPEND ) ? nPos : pItemList->size() - 1;
- MenuItemData *pData = pItemList->GetDataFromPos( itemPos );
if( ImplGetSalMenu() && pData && pData->pSalMenuItem )
+ {
ImplGetSalMenu()->InsertItem( pData->pSalMenuItem, nPos );
+ }
delete mpLayoutData;
mpLayoutData = nullptr;
@@ -559,7 +561,7 @@ void Menu::RemoveItem( sal_uInt16 nPos )
if( ImplGetSalMenu() )
ImplGetSalMenu()->RemoveItem( nPos );
- pItemList->Remove( nPos );
+ pItemList->RemoveMenuItem( nPos );
bRemove = true;
}
@@ -1404,7 +1406,7 @@ bool Menu::ImplGetNativeSubmenuArrowSize(vcl::RenderContext& rRenderContext, Siz
void Menu::ImplAddDel( ImplMenuDelData& rDel )
{
- SAL_WARN_IF( rDel.mpMenu, "vcl", "Menu::ImplAddDel(): cannot add ImplMenuDelData twice !" );
+ SAL_WARN_IF( rDel.mpMenu, "vcl", "Menu::ImplAddDel(): cannot add ImplMenuDelData twice" );
if( !rDel.mpMenu )
{
rDel.mpMenu = this;
@@ -2245,7 +2247,7 @@ void Menu::MenuBarKeyInput(const KeyEvent&)
{
}
-void Menu::ImplKillLayoutData() const
+void Menu::ImplBinLayoutData() const
{
delete mpLayoutData;
mpLayoutData = nullptr;
diff --git a/vcl/source/window/menubarwindow.cxx b/vcl/source/window/menubarwindow.cxx
index f92290104608..a70205dfffe0 100644
--- a/vcl/source/window/menubarwindow.cxx
+++ b/vcl/source/window/menubarwindow.cxx
@@ -984,7 +984,7 @@ void MenuBarWindow::StateChanged( StateChangedType nType )
}
else if(pMenu)
{
- pMenu->ImplKillLayoutData();
+ pMenu->ImplBinLayoutData();
}
}
@@ -1010,7 +1010,7 @@ void MenuBarWindow::LayoutChanged()
Invalidate();
Resize();
- pMenu->ImplKillLayoutData();
+ pMenu->ImplBinLayoutData();
}
void MenuBarWindow::ApplySettings(vcl::RenderContext& rRenderContext)
diff --git a/vcl/source/window/menufloatingwindow.cxx b/vcl/source/window/menufloatingwindow.cxx
index 79586c00c9cc..5b8493b9f633 100644
--- a/vcl/source/window/menufloatingwindow.cxx
+++ b/vcl/source/window/menufloatingwindow.cxx
@@ -599,7 +599,7 @@ void MenuFloatingWindow::ImplScroll( bool bUp )
Invalidate();
- pMenu->ImplKillLayoutData();
+ pMenu->ImplBinLayoutData();
if ( bScrollUp && bUp )
{
diff --git a/vcl/source/window/menuitemlist.cxx b/vcl/source/window/menuitemlist.cxx
index 44757a4778ba..27eb2eb6eb15 100644
--- a/vcl/source/window/menuitemlist.cxx
+++ b/vcl/source/window/menuitemlist.cxx
@@ -50,7 +50,7 @@ MenuItemList::~MenuItemList()
delete i;
}
-MenuItemData* MenuItemList::Insert(
+MenuItemData* MenuItemList::InsertMenuItem(
sal_uInt16 nId,
MenuItemType eType,
MenuItemBits nBits,
@@ -61,6 +61,12 @@ MenuItemData* MenuItemList::Insert(
const OString &rIdent
)
{
+ SAL_WARN( "vcl", "MenuItemList::InsertMenuItem with ident \"" << rIdent << "\" & id " << nId
+ << " & text \"" << rStr << "\" & position " << nPos );
+
+ if ( eType == MenuItemType::SEPARATOR )
+ return InsertSeparator( rIdent, nPos );
+
MenuItemData* pData = new MenuItemData( rStr, rImage );
pData->nId = nId;
pData->sIdent = rIdent;
@@ -90,11 +96,14 @@ MenuItemData* MenuItemList::Insert(
} else {
maItemList.push_back( pData );
}
+
return pData;
}
-void MenuItemList::InsertSeparator(const OString &rIdent, size_t nPos)
+MenuItemData* MenuItemList::InsertSeparator( const OString &rIdent, size_t nPos )
{
+ SAL_WARN( "vcl", "MenuItemList::InsertSeparator with ident \"" << rIdent << "\" & position " << nPos );
+
MenuItemData* pData = new MenuItemData;
pData->nId = 0;
pData->sIdent = rIdent;
@@ -116,23 +125,94 @@ void MenuItemList::InsertSeparator(const OString &rIdent, size_t nPos)
aSalMIData.aText.clear();
aSalMIData.aImage = Image();
- // Native-support: returns NULL if not supported
+ // create native item returns nil if it is not supported
pData->pSalMenuItem = ImplGetSVData()->mpDefInst->CreateMenuItem( &aSalMIData );
if( nPos < maItemList.size() ) {
- maItemList.insert( maItemList.begin() + nPos, pData );
+ if ( maItemList[ nPos ] && maItemList[ nPos ]->eType != MenuItemType::SEPARATOR )
+ {
+ if ( nPos > 0 && maItemList[ nPos - 1 ] && maItemList[ nPos - 1 ]->eType != MenuItemType::SEPARATOR )
+ {
+ maItemList.insert( maItemList.begin() + nPos, pData );
+ }
+ else { SAL_WARN( "vcl", "separator is just above" ); }
+ }
+ else { SAL_WARN( "vcl", "separator is already here" ); }
} else {
- maItemList.push_back( pData );
+ if ( maItemList.back() && maItemList.back()->eType != MenuItemType::SEPARATOR )
+ {
+ maItemList.push_back( pData );
+ }
}
+
+ return pData;
}
-void MenuItemList::Remove( size_t nPos )
+void MenuItemList::RemoveMenuItem( size_t nPos )
{
if( nPos < maItemList.size() )
{
delete maItemList[ nPos ];
maItemList.erase( maItemList.begin() + nPos );
}
+
+ PeelSeparators();
+}
+
+// bin double separators and boundary ones
+bool MenuItemList::PeelSeparators( bool bLastOneToo )
+{
+ SAL_WARN( "vcl", "MenuItemList::PeelSeparators" );
+
+ bool bRet = false;
+
+ for ( size_t i = 1; i < maItemList.size(); ++i )
+ {
+ if ( ( maItemList[ i ] && maItemList[ i ]->eType == MenuItemType::SEPARATOR )
+ && ( maItemList[ i - 1 ] && maItemList[ i - 1 ]->eType == MenuItemType::SEPARATOR ) ) {
+ SAL_WARN( "vcl.window", "double separators @" << OUString::number( i ) << " & @" << OUString::number( i - 1 ) );
+ delete maItemList[ i ];
+ maItemList.erase( maItemList.begin() + i );
+ i--;
+ bRet = true;
+ }
+ }
+
+ while ( maItemList.size() > 0 )
+ {
+ if ( maItemList[ 0 ] && maItemList[ 0 ]->eType == MenuItemType::SEPARATOR )
+ {
+ SAL_WARN( "vcl.window", "first item @" << OUString::number( 0 )
+ << " \"" << maItemList[ 0 ]->aText
+ << "\" id " << OUString::number( maItemList[ 0 ]->nId )
+ << " is separator" );
+ delete maItemList[ 0 ];
+ maItemList.erase( maItemList.begin() );
+ bRet = true;
+ }
+ else { break; }
+ }
+
+ if ( bLastOneToo )
+ {
+ while ( maItemList.size() > 0 )
+ {
+ if ( maItemList[ maItemList.size() - 1 ]->eType == MenuItemType::SEPARATOR )
+ {
+ size_t n = maItemList.size() - 1;
+ SAL_WARN( "vcl.window", "last item @" << OUString::number( n )
+ << " \"" << maItemList[ n ]->aText
+ << "\" id " << OUString::number( maItemList[ n ]->nId )
+ << " is separator" );
+ delete maItemList[ n ];
+ maItemList.erase( maItemList.end() );
+ bRet = true;
+ }
+ else { break; }
+ }
+ }
+
+ return bRet;
}
MenuItemData* MenuItemList::GetData( sal_uInt16 nSVId, size_t& rPos ) const
diff --git a/vcl/source/window/menuitemlist.hxx b/vcl/source/window/menuitemlist.hxx
index 89befc106e28..a2eedb9d7c99 100644
--- a/vcl/source/window/menuitemlist.hxx
+++ b/vcl/source/window/menuitemlist.hxx
@@ -97,14 +97,13 @@ struct MenuItemData
class MenuItemList
{
private:
- typedef ::std::vector< MenuItemData* > MenuItemDataList_impl;
- MenuItemDataList_impl maItemList;
+ ::std::vector< MenuItemData* > maItemList;
public:
MenuItemList() {}
~MenuItemList();
- MenuItemData* Insert(
+ MenuItemData* InsertMenuItem(
sal_uInt16 nId,
MenuItemType eType,
MenuItemBits nBits,
@@ -114,8 +113,9 @@ public:
size_t nPos,
const OString &rIdent
);
- void InsertSeparator(const OString &rIdent, size_t nPos);
- void Remove( size_t nPos );
+ MenuItemData* InsertSeparator(const OString &rIdent, size_t nPos);
+ void RemoveMenuItem( size_t nPos );
+ bool PeelSeparators( bool bLastOneToo = false );
MenuItemData* GetData( sal_uInt16 nSVId, size_t& rPos ) const;
MenuItemData* GetData( sal_uInt16 nSVId ) const