Hi Carsten,
thank you for your help.
I have changed the source for issue79466, Please, review it.
By the way, the patch regarding issue79466 include the issue33668's patch.
if it is right, May I submit the patch regarding issue79466 ?
or Could you give me some suggestion?
Thanks.
Best Regards,
Shi zhoubo.
--- toolbarmanager_old.cxx 2007-11-26 21:45:28.000000000 +0800
+++ toolbarmanager_new.cxx 2008-04-16 10:21:54.000000000 +0800
@@ -362,6 +362,9 @@
if ( !aCmdOptions.Lookup( SvtCommandOptions::CMDOPTION_DISABLED,
OUString::createFromAscii( "CreateDialog" )))
nMenuType |= TOOLBOX_MENUTYPE_CUSTOMIZE;
m_pToolBar->SetMenuType( nMenuType );
+ //added for issue33668 by shizhoubo
+ m_pToolBar->SetCommandHdl( LINK( this, ToolBarManager, Command ) );
+ //end
m_pToolBar->SetMenuButtonHdl( LINK( this, ToolBarManager, MenuButton ) );
m_pToolBar->GetMenu()->SetSelectHdl( LINK( this, ToolBarManager,
MenuSelect ) );
m_pToolBar->GetMenu()->SetDeactivateHdl( LINK( this, ToolBarManager,
MenuDeactivate ) );
@@ -1697,130 +1700,159 @@
return true;
}
-IMPL_LINK( ToolBarManager, MenuButton, ToolBox*, pToolBar )
+//added for i33668 by shizhoubo : 200804
+PopupMenu * ToolBarManager::GetToolBarCustomMeun(ToolBox* pToolBar)
{
- ResetableGuard aGuard( m_aLock );
-
- if ( m_bDisposed )
- return 1;
-
- PopupMenu *pMenu = pToolBar->GetMenu();
- // remove all entries before inserting new ones
- ImplClearPopupMenu( pToolBar );
-
- // No config menu entries if command ".uno:ConfigureDialog" is not enabled
- Reference< XDispatch > xDisp;
- com::sun::star::util::URL aURL;
- if ( m_xFrame.is() )
- {
- Reference< XDispatchProvider > xProv( m_xFrame, UNO_QUERY );
- Reference< XURLTransformer > xTrans( m_xServiceManager->createInstance(
- OUString(
RTL_CONSTASCII_USTRINGPARAM(
-
"com.sun.star.util.URLTransformer" ))), UNO_QUERY );
- aURL.Complete = OUString( RTL_CONSTASCII_USTRINGPARAM(
".uno:ConfigureDialog" ));
- xTrans->parseStrict( aURL );
- if ( xProv.is() )
- xDisp = xProv->queryDispatch( aURL, ::rtl::OUString(), 0 );
+ PopupMenu *pMenu = pToolBar->GetMenu();
+ // remove all entries before inserting new ones
+ ImplClearPopupMenu( pToolBar );
+ // No config menu entries if command ".uno:ConfigureDialog" is not
enabled
+ Reference< XDispatch > xDisp;
+ com::sun::star::util::URL aURL;
+ if ( m_xFrame.is() )
+ {
+ Reference< XDispatchProvider > xProv( m_xFrame, UNO_QUERY );
+ Reference< XURLTransformer > xTrans(
m_xServiceManager->createInstance(
+ OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.util.URLTransformer" ))), UNO_QUERY );
+ aURL.Complete = OUString( RTL_CONSTASCII_USTRINGPARAM(
".uno:ConfigureDialog" ));
+ xTrans->parseStrict( aURL );
+ if ( xProv.is() )
+ xDisp = xProv->queryDispatch( aURL, ::rtl::OUString(),
0 );
- if ( !xDisp.is() || IsPluginMode() )
- return 1;
- }
+ if ( !xDisp.is() || IsPluginMode() )
+ return 0;
+ }
// popup menu for quick customization
- sal_Bool bHideDisabledEntries = !SvtMenuOptions().IsEntryHidingEnabled();
- PopupMenu aPopupMenu( FwkResId( POPUPMENU_TOOLBAR_QUICKCUSTOMIZATION ));
+ sal_Bool bHideDisabledEntries =
!SvtMenuOptions().IsEntryHidingEnabled();
+ PopupMenu aPopupMenu( FwkResId( POPUPMENU_TOOLBAR_QUICKCUSTOMIZATION ));
if ( m_pToolBar->IsCustomize() )
{
- USHORT nPos( 0 );
- PopupMenu* pItemMenu( aPopupMenu.GetPopupMenu( 1 ));
-
+ USHORT nPos( 0 );
+ PopupMenu* pItemMenu( aPopupMenu.GetPopupMenu( 1 ));
sal_Bool bIsFloating( sal_False );
- DockingManager* pDockMgr = Window::GetDockingManager();
- if ( pDockMgr )
- bIsFloating = pDockMgr->IsFloating( m_pToolBar );
-
- if ( !bIsFloating )
- {
- aPopupMenu.EnableItem( MENUITEM_TOOLBAR_DOCKTOOLBAR, sal_False );
- aPopupMenu.EnableItem( MENUITEM_TOOLBAR_DOCKALLTOOLBAR, sal_False
);
- Reference< XDockableWindow > xDockable(
VCLUnoHelper::GetInterface( m_pToolBar ), UNO_QUERY );
- if( xDockable.is() )
- aPopupMenu.CheckItem( MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION,
xDockable->isLocked() );
- }
- else
- aPopupMenu.EnableItem( MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION,
sal_False );
+ DockingManager* pDockMgr = Window::GetDockingManager();
+ if ( pDockMgr )
+ bIsFloating = pDockMgr->IsFloating( m_pToolBar );
- if ( !m_bCanBeCustomized )
- {
- // Non-configurable toolbars should disable configuration menu
items
- aPopupMenu.EnableItem( MENUITEM_TOOLBAR_VISIBLEBUTTON, sal_False );
- aPopupMenu.EnableItem( MENUITEM_TOOLBAR_CUSTOMIZETOOLBAR,
sal_False );
- }
+ if ( !bIsFloating )
+ {
+ aPopupMenu.EnableItem( MENUITEM_TOOLBAR_DOCKTOOLBAR,
sal_False );
+ //modify for issue79466 by shizhoubo
+ aPopupMenu.EnableItem( MENUITEM_TOOLBAR_DOCKALLTOOLBAR,
sal_True );
+ //end
+ Reference< XDockableWindow > xDockable(
VCLUnoHelper::GetInterface( m_pToolBar ), UNO_QUERY );
+ if( xDockable.is() )
+ aPopupMenu.CheckItem(
MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION, xDockable->isLocked() );
+ }
+ else
+ aPopupMenu.EnableItem(
MENUITEM_TOOLBAR_LOCKTOOLBARPOSITION, sal_False );
- pItemMenu->SetMenuFlags (pItemMenu->GetMenuFlags () |
-
MENU_FLAG_SHOWCHECKIMAGES);
+ if ( !m_bCanBeCustomized )
+ {
+ // Non-configurable toolbars should disable
configuration menu items
+ aPopupMenu.EnableItem( MENUITEM_TOOLBAR_VISIBLEBUTTON,
sal_False );
+ aPopupMenu.EnableItem(
MENUITEM_TOOLBAR_CUSTOMIZETOOLBAR, sal_False );
+ }
+
+ pItemMenu->SetMenuFlags (pItemMenu->GetMenuFlags () |
MENU_FLAG_SHOWCHECKIMAGES);
- for ( nPos = 0; nPos < m_pToolBar->GetItemCount(); ++nPos )
- {
- if ( m_pToolBar->GetItemType(nPos) == TOOLBOXITEM_BUTTON )
- {
- USHORT nId = m_pToolBar->GetItemId(nPos);
- OUString aCommandURL = m_pToolBar->GetItemCommand( nId );
+ for ( nPos = 0; nPos < m_pToolBar->GetItemCount(); ++nPos )
+ {
+ if ( m_pToolBar->GetItemType(nPos) ==
TOOLBOXITEM_BUTTON )
+ {
+ USHORT nId = m_pToolBar->GetItemId(nPos);
+ OUString aCommandURL =
m_pToolBar->GetItemCommand( nId );
pItemMenu->InsertItem(
STARTID_CUSTOMIZE_POPUPMENU+nPos, m_pToolBar->GetItemText( nId ), MIB_CHECKABLE
);
pItemMenu->CheckItem(
STARTID_CUSTOMIZE_POPUPMENU+nPos, m_pToolBar->IsItemVisible( nId ) );
- pItemMenu->SetItemCommand( STARTID_CUSTOMIZE_POPUPMENU+nPos,
aCommandURL );
+ pItemMenu->SetItemCommand(
STARTID_CUSTOMIZE_POPUPMENU+nPos, aCommandURL );
pItemMenu->SetItemImage(
STARTID_CUSTOMIZE_POPUPMENU+nPos,
- GetImageFromURL( m_xFrame,
- aCommandURL,
- sal_False,
- m_bIsHiContrast ));
- }
- else
- {
- pItemMenu->InsertSeparator();
- }
- }
- }
+ GetImageFromURL( m_xFrame,
+ aCommandURL,
+ sal_False,
+ m_bIsHiContrast ));
+ }
+ else
+ {
+ pItemMenu->InsertSeparator();
+ }
+ }
+ }
else
{
USHORT nPos = aPopupMenu.GetItemPos(
MENUITEM_TOOLBAR_CUSTOMIZETOOLBAR );
- if ( nPos != MENU_ITEM_NOTFOUND )
- aPopupMenu.RemoveItem( nPos );
+ if ( nPos != MENU_ITEM_NOTFOUND )
+ aPopupMenu.RemoveItem( nPos );
}
- // copy all menu items to the toolbar menu
- if( pMenu->GetItemCount() )
- pMenu->InsertSeparator();
+ // copy all menu items to the toolbar menu
+ if( pMenu->GetItemCount() )
+ pMenu->InsertSeparator();
- USHORT i;
- for( i=0; i< aPopupMenu.GetItemCount(); i++)
- {
- sal_uInt16 nId = aPopupMenu.GetItemId( i );
- if ( MenuItemAllowed( nId ))
- pMenu->CopyItem( aPopupMenu, i, MENU_APPEND );
- }
+ USHORT i;
+ for( i=0; i< aPopupMenu.GetItemCount(); i++)
+ {
+ sal_uInt16 nId = aPopupMenu.GetItemId( i );
+ if ( MenuItemAllowed( nId ))
+ pMenu->CopyItem( aPopupMenu, i, MENU_APPEND );
+ }
- // set submenu to toolbar menu
- if( aPopupMenu.GetPopupMenu( 1 ) )
- {
- // create an own submenu to avoid auto-delete when resource menu is
deleted
- PopupMenu *pItemMenu = new PopupMenu();
+ // set submenu to toolbar menu
+ if( aPopupMenu.GetPopupMenu( 1 ) )
+ {
+ // create an own submenu to avoid auto-delete when resource
menu is deleted
+ PopupMenu *pItemMenu = new PopupMenu();
- pItemMenu->SetMenuFlags (pItemMenu->GetMenuFlags () |
-
MENU_FLAG_SHOWCHECKIMAGES);
+ pItemMenu->SetMenuFlags (pItemMenu->GetMenuFlags () |
MENU_FLAG_SHOWCHECKIMAGES);
- for( i=0; i< aPopupMenu.GetPopupMenu( 1 )->GetItemCount(); i++)
- pItemMenu->CopyItem( *aPopupMenu.GetPopupMenu( 1 ), i, MENU_APPEND
);
+ for( i=0; i< aPopupMenu.GetPopupMenu( 1 )->GetItemCount(); i++)
+ pItemMenu->CopyItem( *aPopupMenu.GetPopupMenu( 1 ), i,
MENU_APPEND );
- pMenu->SetPopupMenu( 1, pItemMenu );
- }
+ pMenu->SetPopupMenu( 1, pItemMenu );
+ }
- if ( bHideDisabledEntries )
- pMenu->RemoveDisabledEntries();
+ if ( bHideDisabledEntries )
+ pMenu->RemoveDisabledEntries();
+ return pMenu;
+}
+//end
+// addd for 33668 by shizhoubo
+IMPL_LINK( ToolBarManager, Command, CommandEvent*, pCmdEvt )
+{
+ ResetableGuard aGuard( m_aLock );
+
+ if ( m_bDisposed )
+ return 1;
+ if ( pCmdEvt->GetCommand() != COMMAND_CONTEXTMENU )
+ return 0;
+
+ PopupMenu * pMenu = GetToolBarCustomMeun(m_pToolBar);
+ if (pMenu)
+ {
+ // make sure all disabled entries will be shown
+ pMenu->SetMenuFlags( pMenu->GetMenuFlags() |
MENU_FLAG_ALWAYSSHOWDISABLEDENTRIES );
+ ::Point aPoint( pCmdEvt->GetMousePosPixel() );
+ pMenu->Execute( m_pToolBar, aPoint );
+ }
+
+ return 0;
+}
+//end
+
+IMPL_LINK( ToolBarManager, MenuButton, ToolBox*, pToolBar )
+{
+ ResetableGuard aGuard( m_aLock );
+
+ if ( m_bDisposed )
+ return 1;
+ //modify for i33668 by shizhoubo:2008:04
+ GetToolBarCustomMeun(pToolBar);
+ //end
return 0;
}
--- toolbarmanager_old.hxx 2007-11-26 21:44:36.000000000 +0800
+++ toolbarmanager_new.hxx 2008-04-10 14:03:46.000000000 +0800
@@ -202,6 +202,10 @@
typedef std::vector< ControllerParams > ControllerParamsVector;
protected:
+ //added for 33668 by shizhoubo : 2008:04
+ DECL_LINK( Command, CommandEvent * );
+ PopupMenu * GetToolBarCustomMeun(ToolBox* pToolBar);
+ //end
DECL_LINK( Click, ToolBox * );
DECL_LINK( DropdownClick, ToolBox * );
DECL_LINK( DoubleClick, ToolBox * );
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]