[Libreoffice-commits] core.git: framework/inc framework/source

Maxim Monastirsky (via logerrit) logerrit at kemper.freedesktop.org
Fri Aug 14 15:04:22 UTC 2020


 framework/inc/uielement/generictoolbarcontroller.hxx    |   22 ---
 framework/source/uielement/generictoolbarcontroller.cxx |   95 ----------------
 framework/source/uielement/popuptoolbarcontroller.cxx   |   33 ++++-
 framework/source/uielement/resourcemenucontroller.cxx   |    4 
 framework/source/uielement/toolbarmanager.cxx           |    3 
 5 files changed, 33 insertions(+), 124 deletions(-)

New commits:
commit c5301f215fec9016c3a75ff4a6a0c6c22f152718
Author:     Maxim Monastirsky <momonasmon at gmail.com>
AuthorDate: Wed Aug 12 23:36:52 2020 +0300
Commit:     Maxim Monastirsky <momonasmon at gmail.com>
CommitDate: Fri Aug 14 17:03:41 2020 +0200

    Replace MenuToolbarController with the usual approach for menu buttons
    
    i.e. ResourceMenuController + GenericPopupToolbarController.
    (Decl. of both isn't available in a header file, so they are instantiated
    via the service manager for now. This is a bit weird for something from
    the same module, but should not make any difference in practice.)
    
    Change-Id: Ia3fc7ba82b0f6e1a43aa7b5e56e2cff7e039d877
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100725
    Tested-by: Jenkins
    Reviewed-by: Maxim Monastirsky <momonasmon at gmail.com>

diff --git a/framework/inc/uielement/generictoolbarcontroller.hxx b/framework/inc/uielement/generictoolbarcontroller.hxx
index eac6e8276b50..35934818ccb7 100644
--- a/framework/inc/uielement/generictoolbarcontroller.hxx
+++ b/framework/inc/uielement/generictoolbarcontroller.hxx
@@ -21,13 +21,8 @@
 #define INCLUDED_FRAMEWORK_INC_UIELEMENT_GENERICTOOLBARCONTROLLER_HXX
 
 #include <svtools/toolboxcontroller.hxx>
-#include <com/sun/star/container/XIndexAccess.hpp>
-
-#include <tools/link.hxx>
-#include <vcl/menu.hxx>
 #include <vcl/vclptr.hxx>
 
-class PopupMenu;
 class ToolBox;
 
 namespace framework
@@ -69,23 +64,6 @@ class GenericToolbarController final : public svt::ToolboxController
         OUString            m_aEnumCommand;
 };
 
-class MenuToolbarController final : public svt::ToolboxController
-{
-    css::uno::Reference< css::container::XIndexAccess > m_xMenuDesc;
-    VclPtr<PopupMenu>                                   pMenu;
-    css::uno::Reference< css::lang::XComponent >        m_xMenuManager;
-
-public:
-    // XStatusListener
-    virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& ) override {}
-    // XComponent
-    virtual void SAL_CALL dispose() override;
-    // XInitialization
-    virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& rArgs ) override;
-    // XToolbarController
-    virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createPopupWindow() override;
-};
-
 }
 
 #endif // INCLUDED_FRAMEWORK_INC_UIELEMENT_GENERICTOOLBARCONTROLLER_HXX
diff --git a/framework/source/uielement/generictoolbarcontroller.cxx b/framework/source/uielement/generictoolbarcontroller.cxx
index b13739932b32..8bea883d90d6 100644
--- a/framework/source/uielement/generictoolbarcontroller.cxx
+++ b/framework/source/uielement/generictoolbarcontroller.cxx
@@ -21,30 +21,22 @@
 
 #include <com/sun/star/util/XURLTransformer.hpp>
 #include <com/sun/star/frame/XDispatchProvider.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
 #include <com/sun/star/lang/DisposedException.hpp>
 #include <com/sun/star/frame/status/ItemStatus.hpp>
 #include <com/sun/star/frame/status/Visibility.hpp>
-#include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp>
-#include <com/sun/star/ui/theModuleUIConfigurationManagerSupplier.hpp>
 #include <com/sun/star/frame/ControlCommand.hpp>
 
-#include <svtools/toolboxcontroller.hxx>
 #include <vcl/svapp.hxx>
 #include <vcl/toolbox.hxx>
 #include <tools/urlobj.hxx>
 #include <strings.hrc>
 #include <classes/fwkresid.hxx>
-#include <uielement/menubarmanager.hxx>
 
-using namespace ::com::sun::star::awt;
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::beans;
 using namespace ::com::sun::star::lang;
 using namespace ::com::sun::star::frame;
 using namespace ::com::sun::star::frame::status;
-using namespace ::com::sun::star::util;
-using namespace ::com::sun::star::container;
 
 namespace framework
 {
@@ -281,93 +273,6 @@ IMPL_STATIC_LINK( GenericToolbarController, ExecuteHdl_Impl, void*, p, void )
    delete pExecuteInfo;
 }
 
-void MenuToolbarController::dispose()
-{
-    try
-    {
-        if ( m_xMenuManager.is() )
-            m_xMenuManager->dispose();
-    }
-    catch( const Exception& ) {}
-
-    m_xMenuManager.clear();
-    m_xMenuDesc.clear();
-    pMenu.disposeAndClear();
-}
-
-void MenuToolbarController::initialize( const css::uno::Sequence< css::uno::Any >& rArgs )
-{
-    ToolboxController::initialize( rArgs );
-
-    css::uno::Reference< css::container::XIndexAccess > xMenuContainer;
-    try
-    {
-        css::uno::Reference< css::frame::XController > xController( m_xFrame->getController() );
-        css::uno::Reference< css::ui::XUIConfigurationManagerSupplier > xSupplier( xController->getModel(), css::uno::UNO_QUERY_THROW );
-        css::uno::Reference< css::ui::XUIConfigurationManager > xConfigManager( xSupplier->getUIConfigurationManager() );
-        xMenuContainer.set( xConfigManager->getSettings( m_aCommandURL, false ) );
-    }
-    catch( const css::uno::Exception& )
-    {}
-
-    if ( !xMenuContainer.is() )
-    {
-        try
-        {
-            css::uno::Reference< css::ui::XModuleUIConfigurationManagerSupplier > xSupplier(
-                css::ui::theModuleUIConfigurationManagerSupplier::get( m_xContext ) );
-            css::uno::Reference< css::ui::XUIConfigurationManager > xConfigManager(
-                xSupplier->getUIConfigurationManager( m_sModuleName ) );
-            xMenuContainer.set( xConfigManager->getSettings( m_aCommandURL, false ) );
-        }
-        catch( const css::uno::Exception& )
-        {}
-    }
-
-    if ( !(xMenuContainer.is() && xMenuContainer->getCount()) )
-        return;
-
-    Sequence< PropertyValue > aProps;
-    // drop down menu info is currently the first ( and only ) menu in the menusettings container
-    xMenuContainer->getByIndex(0) >>= aProps;
-    for ( const auto& aProp : std::as_const(aProps) )
-    {
-        if ( aProp.Name == "ItemDescriptorContainer" )
-        {
-            aProp.Value >>= m_xMenuDesc;
-            break;
-        }
-    }
-
-    ToolBox* pToolBox = nullptr;
-    sal_uInt16 nId = 0;
-    if ( getToolboxId( nId, &pToolBox ) )
-        pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWNONLY );
-}
-
-Reference< XWindow > SAL_CALL
-MenuToolbarController::createPopupWindow()
-{
-    if ( !pMenu )
-    {
-        pMenu = VclPtr<PopupMenu>::Create();
-        css::uno::Reference< css::frame::XDispatchProvider > xDispatchProvider( m_xFrame, css::uno::UNO_QUERY );
-        sal_uInt16 m_nMenuId = 1;
-        MenuBarManager::FillMenu( m_nMenuId, pMenu, m_sModuleName, m_xMenuDesc, xDispatchProvider );
-        m_xMenuManager.set( new MenuBarManager( m_xContext, m_xFrame, m_xUrlTransformer, xDispatchProvider, m_sModuleName, pMenu, false, false ) );
-    }
-
-    ToolBox* pToolBox = nullptr;
-    sal_uInt16 nId = 0;
-    if ( !getToolboxId( nId, &pToolBox ) )
-        return nullptr;
-
-    pToolBox->SetItemDown( m_nToolBoxId, true );
-    pMenu->Execute( pToolBox, pToolBox->GetItemRect( nId ), PopupMenuFlags::ExecuteDown );
-    pToolBox->SetItemDown( m_nToolBoxId, false );
-
-    return nullptr;
-}
 } // namespace
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/source/uielement/popuptoolbarcontroller.cxx b/framework/source/uielement/popuptoolbarcontroller.cxx
index dca150045cb6..8c91779a8518 100644
--- a/framework/source/uielement/popuptoolbarcontroller.cxx
+++ b/framework/source/uielement/popuptoolbarcontroller.cxx
@@ -78,6 +78,7 @@ protected:
     void createPopupMenuController();
 
     bool                                                    m_bHasController;
+    bool                                                    m_bResourceURL;
     OUString                                                m_aPopupCommand;
     css::uno::Reference< css::awt::XPopupMenu >             m_xPopupMenu;
 
@@ -91,6 +92,7 @@ PopupMenuToolbarController::PopupMenuToolbarController(
     const OUString &rPopupCommand )
     : ToolBarBase( xContext, css::uno::Reference< css::frame::XFrame >(), /*aCommandURL*/OUString() )
     , m_bHasController( false )
+    , m_bResourceURL( false )
     , m_aPopupCommand( rPopupCommand )
 {
 }
@@ -142,6 +144,12 @@ void SAL_CALL PopupMenuToolbarController::initialize(
         TOOLS_INFO_EXCEPTION( "fwk.uielement", "" );
     }
 
+    if ( !m_bHasController && m_aPopupCommand.startsWith( "private:resource/" ) )
+    {
+        m_bResourceURL = true;
+        m_bHasController = true;
+    }
+
     SolarMutexGuard aSolarLock;
     VclPtr< ToolBox > pToolBox = static_cast< ToolBox* >( VCLUnoHelper::GetWindow( getParent() ).get() );
     if ( pToolBox )
@@ -158,6 +166,9 @@ void SAL_CALL PopupMenuToolbarController::initialize(
 
 void SAL_CALL PopupMenuToolbarController::statusChanged( const css::frame::FeatureStateEvent& rEvent )
 {
+    if ( m_bResourceURL )
+        return;
+
     ToolBox* pToolBox = nullptr;
     sal_uInt16 nItemId = 0;
     if ( getToolboxId( nItemId, &pToolBox ) )
@@ -228,10 +239,12 @@ void PopupMenuToolbarController::createPopupMenuController()
     }
     else
     {
-        css::uno::Sequence< css::uno::Any > aArgs( 3 );
-        aArgs[0] <<= comphelper::makePropertyValue( "Frame", m_xFrame );
-        aArgs[1] <<= comphelper::makePropertyValue( "ModuleIdentifier", getModuleName() );
-        aArgs[2] <<= comphelper::makePropertyValue( "InToolbar", true );
+        css::uno::Sequence<css::uno::Any> aArgs {
+            css::uno::makeAny(comphelper::makePropertyValue("Frame", m_xFrame)),
+            css::uno::makeAny(comphelper::makePropertyValue("ModuleIdentifier", m_sModuleName)),
+            css::uno::makeAny(comphelper::makePropertyValue("InToolbar", true)),
+            css::uno::makeAny(comphelper::makePropertyValue("ResourceURL", m_aPopupCommand))
+        };
 
         try
         {
@@ -239,9 +252,17 @@ void PopupMenuToolbarController::createPopupMenuController()
                 m_xContext->getServiceManager()->createInstanceWithContext(
                     "com.sun.star.awt.PopupMenu", m_xContext ),
                         css::uno::UNO_QUERY_THROW );
-            m_xPopupMenuController.set(
-                m_xPopupMenuFactory->createInstanceWithArgumentsAndContext(
+
+            if (m_bResourceURL)
+            {
+                m_xPopupMenuController.set( m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
+                    "com.sun.star.comp.framework.ResourceMenuController", aArgs, m_xContext), css::uno::UNO_QUERY_THROW );
+            }
+            else
+            {
+                m_xPopupMenuController.set( m_xPopupMenuFactory->createInstanceWithArgumentsAndContext(
                     m_aPopupCommand, aArgs, m_xContext), css::uno::UNO_QUERY_THROW );
+            }
 
             m_xPopupMenuController->setPopupMenu( m_xPopupMenu );
         }
diff --git a/framework/source/uielement/resourcemenucontroller.cxx b/framework/source/uielement/resourcemenucontroller.cxx
index 0594bfea8ddf..f1f7dace3289 100644
--- a/framework/source/uielement/resourcemenucontroller.cxx
+++ b/framework/source/uielement/resourcemenucontroller.cxx
@@ -93,6 +93,10 @@ ResourceMenuController::ResourceMenuController( const css::uno::Reference< css::
                 else
                     m_aMenuURL = "private:resource/popupmenu/" + aMenuName;
             }
+            else if ( aPropValue.Name == "ResourceURL" )
+            {
+                aPropValue.Value >>= m_aMenuURL;
+            }
             else if ( aPropValue.Name == "Frame" )
                 aPropValue.Value >>= m_xFrame;
             else if ( aPropValue.Name == "ModuleIdentifier" )
diff --git a/framework/source/uielement/toolbarmanager.cxx b/framework/source/uielement/toolbarmanager.cxx
index 5aae377c4066..e3d8a20f8b4b 100644
--- a/framework/source/uielement/toolbarmanager.cxx
+++ b/framework/source/uielement/toolbarmanager.cxx
@@ -759,7 +759,8 @@ void ToolBarManager::CreateControllers()
                 }
                 else if ( aCommandURL.startsWith( "private:resource/menubar/" ) )
                 {
-                    xController.set( new MenuToolbarController );
+                    xController.set( m_xContext->getServiceManager()->createInstanceWithContext(
+                        "com.sun.star.comp.framework.GenericPopupToolbarController", m_xContext ), UNO_QUERY );
                 }
                 else
                 {


More information about the Libreoffice-commits mailing list