Author: arielch
Date: Sat May 25 22:11:08 2013
New Revision: 1486377

URL: http://svn.apache.org/r1486377
Log:
framework::PopupMenuController clean-up

Changed the name, it is not a PopupMenuController, but a ToolbarController that 
shows a PopupMenu filled at runtime by a PopupMenuController

Make it a base class for other ToolbarController components, there is no sense 
to make it a component by itself

Use this base class for three new pure UNO ToolbarController's

Added:
    openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx
    openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx
Removed:
    openoffice/trunk/main/framework/inc/uielement/popupmenucontroller.hxx
    openoffice/trunk/main/framework/source/uielement/popupmenucontroller.cxx
Modified:
    openoffice/trunk/main/framework/Library_fwk.mk
    openoffice/trunk/main/framework/Library_fwl.mk
    openoffice/trunk/main/framework/source/register/registerservices.cxx
    openoffice/trunk/main/framework/source/register/registertemp.cxx
    openoffice/trunk/main/framework/util/fwk.component
    openoffice/trunk/main/framework/util/fwl.component
    
openoffice/trunk/main/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu

Modified: openoffice/trunk/main/framework/Library_fwk.mk
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/Library_fwk.mk?rev=1486377&r1=1486376&r2=1486377&view=diff
==============================================================================
--- openoffice/trunk/main/framework/Library_fwk.mk (original)
+++ openoffice/trunk/main/framework/Library_fwk.mk Sat May 25 22:11:08 2013
@@ -112,11 +112,11 @@ $(eval $(call gb_Library_add_exception_o
        framework/source/loadenv/loadenv \
        framework/source/loadenv/targethelper \
        framework/source/register/registerservices \
+       framework/source/services/ContextChangeEventMultiplexer \
        framework/source/services/autorecovery \
        framework/source/services/backingcomp \
        framework/source/services/backingwindow \
        framework/source/services/desktop \
-       framework/source/services/ContextChangeEventMultiplexer \
        framework/source/services/frame \
        framework/source/services/modelwinservice \
        framework/source/services/modulemanager \
@@ -154,6 +154,7 @@ $(eval $(call gb_Library_add_exception_o
        framework/source/uielement/menubarmerger \
        framework/source/uielement/menubarwrapper \
        framework/source/uielement/objectmenucontroller \
+       framework/source/uielement/popuptoolbarcontroller \
        framework/source/uielement/panelwindow \
        framework/source/uielement/panelwrapper \
        framework/source/uielement/progressbarwrapper \
@@ -175,8 +176,8 @@ $(eval $(call gb_Library_add_exception_o
        framework/source/uifactory/factoryconfiguration \
        framework/source/uifactory/menubarfactory \
        framework/source/uifactory/statusbarfactory \
-       framework/source/uifactory/uicontrollerfactory \
        framework/source/uifactory/toolboxfactory \
+       framework/source/uifactory/uicontrollerfactory \
        framework/source/uifactory/uielementfactorymanager \
        framework/source/uifactory/windowcontentfactorymanager \
        framework/source/xml/acceleratorconfigurationreader \

Modified: openoffice/trunk/main/framework/Library_fwl.mk
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/Library_fwl.mk?rev=1486377&r1=1486376&r2=1486377&view=diff
==============================================================================
--- openoffice/trunk/main/framework/Library_fwl.mk (original)
+++ openoffice/trunk/main/framework/Library_fwl.mk Sat May 25 22:11:08 2013
@@ -73,7 +73,6 @@ $(eval $(call gb_Library_add_exception_o
        framework/source/uielement/langselectionmenucontroller \
        framework/source/uielement/macrosmenucontroller \
        framework/source/uielement/newmenucontroller \
-       framework/source/uielement/popupmenucontroller \
        framework/source/uielement/toolbarsmenucontroller \
 ))
 

Added: openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx?rev=1486377&view=auto
==============================================================================
--- openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx 
(added)
+++ openoffice/trunk/main/framework/inc/uielement/popuptoolbarcontroller.hxx 
Sat May 25 22:11:08 2013
@@ -0,0 +1,100 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#ifndef __FRAMEWORK_UIELEMENT_POPUPMENU_TOOLBARCONTROLLER_HXX__
+#define __FRAMEWORK_UIELEMENT_POPUPMENU_TOOLBARCONTROLLER_HXX__
+
+#include <com/sun/star/awt/XPopupMenu.hpp>
+#include <com/sun/star/frame/XPopupMenuController.hpp>
+#include <com/sun/star/frame/XUIControllerFactory.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <cppuhelper/implbase1.hxx>
+#include <macros/xserviceinfo.hxx>
+#include <svtools/toolboxcontroller.hxx>
+
+namespace framework
+{
+    class PopupMenuToolbarController : public svt::ToolboxController
+    {
+    public:
+        virtual ~PopupMenuToolbarController();
+
+        // XComponent
+        virtual void SAL_CALL dispose() throw ( 
::com::sun::star::uno::RuntimeException );
+        // XInitialization
+        virtual void SAL_CALL initialize( const 
::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) 
throw (::com::sun::star::uno::Exception, 
::com::sun::star::uno::RuntimeException);
+        // XToolbarController
+        virtual ::com::sun::star::uno::Reference< 
::com::sun::star::awt::XWindow > SAL_CALL createPopupWindow() throw 
(::com::sun::star::uno::RuntimeException);
+        // XStatusListener
+        virtual void SAL_CALL statusChanged( const 
::com::sun::star::frame::FeatureStateEvent& rEvent ) throw ( 
::com::sun::star::uno::RuntimeException );
+
+    protected:
+        PopupMenuToolbarController( const ::com::sun::star::uno::Reference< 
::com::sun::star::uno::XComponentContext >& rxContext,
+                                    const ::rtl::OUString &rPopupCommand = 
rtl::OUString() );
+        virtual void functionExecuted( const rtl::OUString &rCommand );
+        virtual sal_uInt16 getDropDownStyle() const;
+        void createPopupMenuController();
+
+        com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext 
>      m_xContext;
+        sal_Bool                                                               
       m_bHasController;
+        com::sun::star::uno::Reference< com::sun::star::awt::XPopupMenu >      
       m_xPopupMenu;
+
+    private:
+        rtl::OUString                                                          
       m_aPopupCommand;
+        com::sun::star::uno::Reference< 
com::sun::star::frame::XUIControllerFactory > m_xPopupMenuFactory;
+        com::sun::star::uno::Reference< 
com::sun::star::frame::XPopupMenuController > m_xPopupMenuController;
+    };
+
+    class OpenToolbarController : public PopupMenuToolbarController
+    {
+    public:
+        OpenToolbarController( const ::com::sun::star::uno::Reference< 
::com::sun::star::uno::XComponentContext >& rxContext );
+
+        // XServiceInfo
+        DECLARE_XSERVICEINFO
+    };
+
+    class NewToolbarController : public PopupMenuToolbarController
+    {
+    public:
+        NewToolbarController( const ::com::sun::star::uno::Reference< 
::com::sun::star::uno::XComponentContext >& rxContext );
+
+        // XServiceInfo
+        DECLARE_XSERVICEINFO
+    private:
+        void functionExecuted( const rtl::OUString &rCommand );
+        void SAL_CALL statusChanged( const 
::com::sun::star::frame::FeatureStateEvent& rEvent ) throw ( 
::com::sun::star::uno::RuntimeException );
+        void setItemImage( const rtl::OUString &rCommand );
+    };
+
+    class WizardsToolbarController : public PopupMenuToolbarController
+    {
+    public:
+        WizardsToolbarController( const ::com::sun::star::uno::Reference< 
::com::sun::star::uno::XComponentContext >& rxContext );
+
+        // XServiceInfo
+        DECLARE_XSERVICEINFO
+    private:
+        sal_uInt16 getDropDownStyle() const;
+    };
+}
+
+#endif

Modified: openoffice/trunk/main/framework/source/register/registerservices.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/source/register/registerservices.cxx?rev=1486377&r1=1486376&r2=1486377&view=diff
==============================================================================
--- openoffice/trunk/main/framework/source/register/registerservices.cxx 
(original)
+++ openoffice/trunk/main/framework/source/register/registerservices.cxx Sat 
May 25 22:11:08 2013
@@ -85,6 +85,7 @@
 #include <services/substitutepathvars.hxx>
 #include <services/pathsettings.hxx>
 #include <services/ContextChangeEventMultiplexer.hxx>
+#include <uielement/popuptoolbarcontroller.hxx>
 
 COMPONENTGETIMPLEMENTATIONENVIRONMENT
 
@@ -127,6 +128,9 @@ COMPONENTGETFACTORY (       IFFACTORY( ::frame
                         IFFACTORY( ::framework::TabWindowService               
         )   else
                         IFFACTORY( ::framework::SubstitutePathVariables        
                        )       else
                                                IFFACTORY( 
::framework::PathSettings                                            )   else
-                                               IFFACTORY( 
::framework::ContextChangeEventMultiplexer                   )
+                                               IFFACTORY( 
::framework::ContextChangeEventMultiplexer                   )   else
+                        IFFACTORY( ::framework::OpenToolbarController          
         )   else
+                        IFFACTORY( ::framework::NewToolbarController           
         )   else
+                        IFFACTORY( ::framework::WizardsToolbarController       
         )
                        )
 

Modified: openoffice/trunk/main/framework/source/register/registertemp.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/source/register/registertemp.cxx?rev=1486377&r1=1486376&r2=1486377&view=diff
==============================================================================
--- openoffice/trunk/main/framework/source/register/registertemp.cxx (original)
+++ openoffice/trunk/main/framework/source/register/registertemp.cxx Sat May 25 
22:11:08 2013
@@ -66,7 +66,6 @@
 #include <uielement/macrosmenucontroller.hxx>
 #include <uielement/newmenucontroller.hxx>
 #include <uielement/toolbarsmenucontroller.hxx>
-#include <uielement/popupmenucontroller.hxx>
 
 COMPONENTGETIMPLEMENTATIONENVIRONMENT
 
@@ -87,6 +86,5 @@ COMPONENTGETFACTORY   (       IFFACTORY( ::frame
                         IFFACTORY( ::framework::FooterMenuController           
         )   else
                         IFFACTORY( ::framework::HeaderMenuController           
         )   else
                         IFFACTORY( 
::framework::LanguageSelectionMenuController         )   else
-                        IFFACTORY( ::framework::Oxt_Handler                    
         )      else
-                                               IFFACTORY( 
::framework::PopupMenuController                                             )
+                        IFFACTORY( ::framework::Oxt_Handler                    
         )
                                        )

Added: 
openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx?rev=1486377&view=auto
==============================================================================
--- openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx 
(added)
+++ openoffice/trunk/main/framework/source/uielement/popuptoolbarcontroller.cxx 
Sat May 25 22:11:08 2013
@@ -0,0 +1,415 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_framework.hxx"
+
+#include <uielement/popuptoolbarcontroller.hxx>
+#include <comphelper/processfactory.hxx>
+#include <svtools/imagemgr.hxx>
+#include <svtools/miscopt.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
+#include <tools/urlobj.hxx>
+#include <unotools/moduleoptions.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/toolbox.hxx>
+#include <vos/mutex.hxx>
+
+#include <com/sun/star/awt/PopupMenuDirection.hpp>
+#include <com/sun/star/frame/PopupMenuControllerFactory.hpp>
+
+
+#define UNO_COMMAND_RECENT_FILE_LIST    ".uno:RecentFileList"
+
+using rtl::OUString;
+namespace css = ::com::sun::star;
+
+namespace framework
+{
+
+PopupMenuToolbarController::PopupMenuToolbarController(
+    const css::uno::Reference< css::uno::XComponentContext >& xContext,
+    const OUString &rPopupCommand )
+    : svt::ToolboxController()
+    , m_xContext( xContext )
+    , m_bHasController( sal_False )
+    , m_aPopupCommand( rPopupCommand )
+{
+}
+
+PopupMenuToolbarController::~PopupMenuToolbarController()
+{
+}
+
+void SAL_CALL PopupMenuToolbarController::dispose()
+throw ( css::uno::RuntimeException )
+{
+    svt::ToolboxController::dispose();
+
+    osl::MutexGuard aGuard( m_aMutex );
+    if( m_xPopupMenuController.is() )
+    {
+        css::uno::Reference< css::lang::XComponent > xComponent(
+            m_xPopupMenuController, css::uno::UNO_QUERY );
+        if( xComponent.is() )
+        {
+            try
+            {
+                xComponent->dispose();
+            }
+            catch (...)
+            {}
+        }
+        m_xPopupMenuController.clear();
+    }
+
+    m_xContext.clear();
+    m_xPopupMenuFactory.clear();
+    m_xPopupMenu.clear();
+}
+
+void SAL_CALL PopupMenuToolbarController::initialize(
+    const css::uno::Sequence< css::uno::Any >& aArguments )
+throw ( css::uno::Exception, css::uno::RuntimeException )
+{
+    ToolboxController::initialize( aArguments );
+
+    osl::MutexGuard aGuard( m_aMutex );
+    if ( !m_aPopupCommand.getLength() )
+        m_aPopupCommand = m_aCommandURL;
+
+    try
+    {
+        m_xPopupMenuFactory.set(
+            css::frame::PopupMenuControllerFactory::create( m_xContext ) );
+        m_bHasController = m_xPopupMenuFactory->hasController(
+            m_aPopupCommand, getModuleName() );
+    }
+    catch (const css::uno::Exception& e)
+    {
+        OSL_TRACE( "PopupMenuToolbarController - caught an exception! %s",
+                   rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 
).getStr() );
+        (void) e;
+    }
+
+    vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
+    ToolBox* pToolBox = static_cast< ToolBox* >( VCLUnoHelper::GetWindow( 
getParent() ) );
+    if ( pToolBox )
+    {
+        ToolBoxItemBits nCurStyle( pToolBox->GetItemBits( m_nToolBoxId ) );
+        ToolBoxItemBits nSetStyle( getDropDownStyle() );
+        pToolBox->SetItemBits( m_nToolBoxId,
+                               m_bHasController ?
+                                    nCurStyle | nSetStyle :
+                                    nCurStyle & ~nSetStyle );
+    }
+
+}
+
+void SAL_CALL
+PopupMenuToolbarController::statusChanged(
+    const css::frame::FeatureStateEvent& rEvent )
+    throw ( css::uno::RuntimeException )
+{
+    // TODO move to base class
+
+    svt::ToolboxController::statusChanged( rEvent );
+    enable( rEvent.IsEnabled );
+}
+
+css::uno::Reference< css::awt::XWindow > SAL_CALL
+PopupMenuToolbarController::createPopupWindow()
+    throw ( css::uno::RuntimeException )
+{
+    css::uno::Reference< css::awt::XWindow > xRet;
+
+    osl::MutexGuard aGuard( m_aMutex );
+    if ( !m_bHasController )
+        return xRet;
+
+    createPopupMenuController();
+
+    vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
+    ToolBox* pToolBox = static_cast< ToolBox* >( VCLUnoHelper::GetWindow( 
getParent() ) );
+    if ( !pToolBox )
+        return xRet;
+
+    pToolBox->SetItemDown( m_nToolBoxId, sal_True );
+    sal_uInt16 nId = m_xPopupMenu->execute(
+        css::uno::Reference< css::awt::XWindowPeer >( getParent(), 
css::uno::UNO_QUERY ),
+        VCLUnoHelper::ConvertToAWTRect( pToolBox->GetItemRect( m_nToolBoxId ) 
),
+        css::awt::PopupMenuDirection::EXECUTE_DEFAULT );
+    pToolBox->SetItemDown( m_nToolBoxId, sal_False );
+
+    if ( nId )
+        functionExecuted( m_xPopupMenu->getCommand( nId ) );
+
+    return xRet;
+}
+
+void PopupMenuToolbarController::functionExecuted( const OUString 
&/*rCommand*/)
+{
+}
+
+sal_uInt16 PopupMenuToolbarController::getDropDownStyle() const
+{
+    return TIB_DROPDOWN;
+}
+
+void PopupMenuToolbarController::createPopupMenuController()
+{
+    if( !m_bHasController )
+        return;
+
+    if ( !m_xPopupMenuController.is() )
+    {
+        css::uno::Sequence< css::uno::Any > aArgs( 2 );
+        css::beans::PropertyValue aProp;
+
+        aProp.Name = DECLARE_ASCII( "Frame" );
+        aProp.Value <<= m_xFrame;
+        aArgs[0] <<= aProp;
+
+        aProp.Name = DECLARE_ASCII( "ModuleIdentifier" );
+        aProp.Value <<= getModuleName();
+        aArgs[1] <<= aProp;
+        try
+        {
+            m_xPopupMenu.set(
+                m_xContext->getServiceManager()->createInstanceWithContext(
+                    DECLARE_ASCII( "com.sun.star.awt.PopupMenu" ), m_xContext 
),
+                        css::uno::UNO_QUERY_THROW );
+            m_xPopupMenuController.set(
+                m_xPopupMenuFactory->createInstanceWithArgumentsAndContext(
+                    m_aPopupCommand, aArgs, m_xContext), 
css::uno::UNO_QUERY_THROW );
+
+            m_xPopupMenuController->setPopupMenu( m_xPopupMenu );
+        }
+        catch ( const css::uno::Exception &e )
+        {
+            m_xPopupMenu.clear();
+            OSL_TRACE( "PopupMenuToolbarController - caught an exception! %s",
+                       rtl::OUStringToOString( e.Message, 
RTL_TEXTENCODING_UTF8 ).getStr() );
+            (void) e;
+        }
+    }
+}
+
+DEFINE_XSERVICEINFO_MULTISERVICE_2( WizardsToolbarController,
+                                    ::cppu::OWeakObject,
+                                    
DECLARE_ASCII("com.sun.star.frame.ToolbarController"),
+                                    
DECLARE_ASCII("org.apache.openoffice.comp.framework.WizardsToolbarController")
+                                   )
+
+DEFINE_INIT_SERVICE( WizardsToolbarController, {} )
+
+WizardsToolbarController::WizardsToolbarController(
+    const css::uno::Reference< css::uno::XComponentContext >& xContext )
+    : PopupMenuToolbarController( xContext )
+{
+}
+
+sal_uInt16 WizardsToolbarController::getDropDownStyle() const
+{
+    return TIB_DROPDOWNONLY;
+}
+
+DEFINE_XSERVICEINFO_MULTISERVICE_2( OpenToolbarController,
+                                    ::cppu::OWeakObject,
+                                    
DECLARE_ASCII("com.sun.star.frame.ToolbarController"),
+                                    
DECLARE_ASCII("org.apache.openoffice.comp.framework.OpenToolbarController")
+                                   )
+
+DEFINE_INIT_SERVICE( OpenToolbarController, {} )
+
+OpenToolbarController::OpenToolbarController(
+    const css::uno::Reference< css::uno::XComponentContext >& xContext )
+    : PopupMenuToolbarController( xContext, DECLARE_ASCII( 
UNO_COMMAND_RECENT_FILE_LIST ) )
+{
+}
+
+
+DEFINE_XSERVICEINFO_MULTISERVICE_2( NewToolbarController,
+                                    ::cppu::OWeakObject,
+                                    
DECLARE_ASCII("com.sun.star.frame.ToolbarController"),
+                                    
DECLARE_ASCII("org.apache.openoffice.comp.framework.NewToolbarController")
+                                   )
+
+DEFINE_INIT_SERVICE( NewToolbarController, {} )
+
+NewToolbarController::NewToolbarController(
+    const css::uno::Reference< css::uno::XComponentContext >& xContext )
+    : PopupMenuToolbarController( xContext )
+{
+}
+
+void SAL_CALL
+NewToolbarController::statusChanged(
+    const css::frame::FeatureStateEvent& rEvent )
+    throw ( css::uno::RuntimeException )
+{
+    if ( rEvent.IsEnabled )
+    {
+        OUString aState;
+        rEvent.State >>= aState;
+        // set the image even if the state is not a string
+        // this will set the image of the default module
+        setItemImage( aState );
+    }
+
+    enable( rEvent.IsEnabled );
+}
+
+void NewToolbarController::functionExecuted( const OUString &rCommand )
+{
+    setItemImage( rCommand );
+}
+
+/**
+    it return the existing state of the given URL in the popupmenu of this 
toolbox control.
+
+    If the given URL can be located as an action command of one menu item of 
the
+    popup menu of this control, we return sal_True. Otherwhise we return 
sal_False.
+    Further we return a fallback URL, in case we have to return sal_False. 
Because
+    the outside code must select a valid item of the popup menu everytime ...
+    and we define it here. By the way this m ethod was written to handle
+    error situations gracefully. E.g. it can be called during creation time
+    but then we have no valid menu. For this case we know another fallback URL.
+    Then we return the private:factory/ URL of the default factory.
+
+    @param  rPopupMenu
+                pounts to the popup menu, on which item we try to locate the 
given URL
+                Can be NULL! Search will be supressed then.
+
+    @param  sURL
+                the URL for searching
+
+    @param  sFallback
+                contains the fallback URL in case we return FALSE
+                Must point to valid memory!
+
+    @param  aImage
+                contains the image of the menu for the URL.
+
+    @return sal_True - if URL could be located as an item of the popup menu.
+            sal_False - otherwhise.
+*/
+static sal_Bool Impl_ExistURLInMenu(
+    const css::uno::Reference< css::awt::XPopupMenu > &rPopupMenu,
+    OUString &sURL,
+    OUString &sFallback,
+    Image &aImage )
+{
+    sal_Bool bValidFallback( sal_False );
+    sal_uInt16 nCount( 0 );
+    if ( rPopupMenu.is() && ( nCount = rPopupMenu->getItemCount() ) && 
sURL.getLength() )
+    {
+        for ( sal_uInt16 n = 0; n < nCount; ++n )
+        {
+            sal_uInt16 nId = rPopupMenu->getItemId( n );
+            OUString aCmd( rPopupMenu->getCommand( nId ) );
+
+            if ( !bValidFallback && aCmd.getLength() )
+            {
+                sFallback = aCmd;
+                bValidFallback = sal_True;
+            }
+
+            // match even if the menu command is more detailed
+            // (maybe an additional query) #i28667#
+            if ( aCmd.match( sURL ) )
+            {
+                sURL = aCmd;
+                const css::uno::Reference< css::graphic::XGraphic > xGraphic(
+                    rPopupMenu->getItemImage( nId ) );
+                if ( xGraphic.is() )
+                    aImage = Image( xGraphic );
+                return sal_True;
+            }
+        }
+    }
+
+    if ( !bValidFallback )
+    {
+        rtl::OUStringBuffer aBuffer;
+        aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( "private:factory/" ) 
);
+        aBuffer.append( SvtModuleOptions().GetDefaultModuleName() );
+        sFallback = aBuffer.makeStringAndClear();
+    }
+
+    return sal_False;
+}
+
+/** We accept URL's here only, which exist as items of our internal popup menu.
+    All other ones will be ignored and a fallback is used.
+ */
+void NewToolbarController::setItemImage( const OUString &rCommand )
+{
+    vos::OGuard aSolarMutexGuard( Application::GetSolarMutex() );
+    ToolBox* pToolBox = static_cast< ToolBox* >( VCLUnoHelper::GetWindow( 
getParent() ) );
+    if ( !pToolBox )
+        return;
+
+    OUString aURL = rCommand;
+    OUString sFallback;
+    Image aMenuImage;
+
+    sal_Bool bValid( Impl_ExistURLInMenu( m_xPopupMenu, aURL, sFallback, 
aMenuImage ) );
+    // do not change aURL if Impl_ExistURLInMenu returned sal_False
+    // this allows later initialization of the PopupMenuController on 
createPopupWindow()
+    // and works even if SvFileInformationManager does not know the module
+    if ( !aURL.getLength() )
+        aURL = sFallback;
+
+    sal_Bool bBig = SvtMiscOptions().AreCurrentSymbolsLarge();
+    sal_Bool bHC = 
pToolBox->GetSettings().GetStyleSettings().GetHighContrastMode();
+
+    INetURLObject aURLObj( aURL );
+    Image aImage = SvFileInformationManager::GetImageNoDefault( aURLObj, bBig, 
bHC );
+    if ( !aImage )
+    {
+        if ( !!aMenuImage )
+            aImage =  aMenuImage;
+        else if ( !bValid )
+            // If SvFileInformationManager didn't know the module, try with 
the default
+            aImage = SvFileInformationManager::GetImageNoDefault( 
INetURLObject( sFallback ), bBig, bHC );
+
+        if ( !aImage )
+            aImage = SvFileInformationManager::GetImage( aURLObj, bBig, bHC );
+    }
+
+    // if everything failed, just use the image associated with the toolbar 
item command
+    if ( !aImage )
+        return;
+
+    Size aBigSize( pToolBox->GetDefaultImageSize() );
+    if ( bBig && aImage.GetSizePixel() != aBigSize )
+    {
+        BitmapEx aScaleBmpEx( aImage.GetBitmapEx() );
+        aScaleBmpEx.Scale( aBigSize, BMP_SCALE_INTERPOLATE );
+        pToolBox->SetItemImage( m_nToolBoxId, Image( aScaleBmpEx ) );
+    }
+    else
+        pToolBox->SetItemImage( m_nToolBoxId, aImage );
+}
+
+
+}

Modified: openoffice/trunk/main/framework/util/fwk.component
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/util/fwk.component?rev=1486377&r1=1486376&r2=1486377&view=diff
==============================================================================
--- openoffice/trunk/main/framework/util/fwk.component (original)
+++ openoffice/trunk/main/framework/util/fwk.component Sat May 25 22:11:08 2013
@@ -142,4 +142,13 @@
   <implementation name="com.sun.star.comp.framework.TabWindowService">
     <service name="com.sun.star.ui.dialogs.TabContainerWindow"/>
   </implementation>
+  <implementation 
name="org.apache.openoffice.comp.framework.OpenToolbarController">
+    <service name="com.sun.star.frame.ToolbarController"/>
+  </implementation>
+  <implementation 
name="org.apache.openoffice.comp.framework.NewToolbarController">
+    <service name="com.sun.star.frame.ToolbarController"/>
+  </implementation>
+  <implementation 
name="org.apache.openoffice.comp.framework.WizardsToolbarController">
+    <service name="com.sun.star.frame.ToolbarController"/>
+  </implementation>
 </component>

Modified: openoffice/trunk/main/framework/util/fwl.component
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/framework/util/fwl.component?rev=1486377&r1=1486376&r2=1486377&view=diff
==============================================================================
--- openoffice/trunk/main/framework/util/fwl.component (original)
+++ openoffice/trunk/main/framework/util/fwl.component Sat May 25 22:11:08 2013
@@ -63,9 +63,6 @@
   <implementation name="com.sun.star.comp.framework.OXTFileHandler">
     <service name="com.sun.star.frame.ContentHandler"/>
   </implementation>
-  <implementation name="com.sun.star.comp.framework.PopupMenuController">
-    <service name="com.sun.star.frame.ToolbarController"/>
-  </implementation>
   <implementation 
name="com.sun.star.comp.framework.PopupMenuControllerDispatcher">
     <service name="com.sun.star.frame.ProtocolHandler"/>
   </implementation>

Modified: 
openoffice/trunk/main/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
URL: 
http://svn.apache.org/viewvc/openoffice/trunk/main/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu?rev=1486377&r1=1486376&r2=1486377&view=diff
==============================================================================
--- 
openoffice/trunk/main/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
 (original)
+++ 
openoffice/trunk/main/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
 Sat May 25 22:11:08 2013
@@ -412,6 +412,39 @@
           <value>com.sun.star.svx.UpSearchToolboxController</value>
         </prop>
       </node>
+      <node 
oor:name="org.apache.openoffice.comp.framework.OpenToolbarController" 
oor:op="replace">
+        <prop oor:name="Command">
+          <value>.uno:Open</value>
+        </prop>
+        <prop oor:name="Module">
+          <value/>
+        </prop>
+        <prop oor:name="Controller">
+          
<value>org.apache.openoffice.comp.framework.OpenToolbarController</value>
+        </prop>
+      </node>
+      <node 
oor:name="org.apache.openoffice.comp.framework.NewToolbarController" 
oor:op="replace">
+        <prop oor:name="Command">
+          <value>.uno:AddDirect</value>
+        </prop>
+        <prop oor:name="Module">
+          <value/>
+        </prop>
+        <prop oor:name="Controller">
+          
<value>org.apache.openoffice.comp.framework.NewToolbarController</value>
+        </prop>
+      </node>
+      <node 
oor:name="org.apache.openoffice.comp.framework.WizardsToolbarController" 
oor:op="replace">
+        <prop oor:name="Command">
+          <value>.uno:AutoPilotMenu</value>
+        </prop>
+        <prop oor:name="Module">
+          <value/>
+        </prop>
+        <prop oor:name="Controller">
+          
<value>org.apache.openoffice.comp.framework.WizardsToolbarController</value>
+        </prop>
+      </node>
     </node>
     <node oor:name="StatusBar">
       <node oor:name="c1" oor:op="replace">


Reply via email to