One toolbar generic controller is enough

The one from framework is more feature complete, so use that one.

Change-Id: I499f0ae1d20c588cfc04beebc643819559325882
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100726
Tested-by: Jenkins
Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
This commit is contained in:
Maxim Monastirsky
2020-08-13 01:05:59 +03:00
parent c5301f215f
commit 7bb20ab2e8
10 changed files with 55 additions and 315 deletions

View File

@@ -252,8 +252,6 @@ void WriteOnlyVars::run()
return;
if (loplugin::isSamePathname(fn, SRCDIR "/svtools/source/filter/SvFilterOptionsDialog.cxx"))
return;
if (loplugin::isSamePathname(fn, SRCDIR "/svtools/source/uno/generictoolboxcontroller.cxx"))
return;
if (loplugin::isSamePathname(fn, SRCDIR "/svtools/source/java/javainteractionhandler.cxx"))
return;
if (loplugin::isSamePathname(fn, SRCDIR "/basic/source/classes/sbunoobj.cxx"))

View File

@@ -17,7 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <uielement/generictoolbarcontroller.hxx>
#include <framework/generictoolbarcontroller.hxx>
#include <com/sun/star/util/XURLTransformer.hpp>
#include <com/sun/star/frame/XDispatchProvider.hpp>
@@ -28,6 +28,7 @@
#include <vcl/svapp.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/weld.hxx>
#include <tools/urlobj.hxx>
#include <strings.hrc>
#include <classes/fwkresid.hxx>
@@ -92,6 +93,20 @@ GenericToolbarController::GenericToolbarController( const Reference< XComponentC
{
if ( m_bEnumCommand )
addStatusListener( getMasterCommand( aCommand ) );
addStatusListener( aCommand );
// Initialization is done through ctor
m_bInitialized = true;
}
GenericToolbarController::GenericToolbarController( const Reference< XComponentContext >& rxContext,
const Reference< XFrame >& rFrame,
weld::Toolbar& rToolbar,
const OUString& aCommand ) :
GenericToolbarController( rxContext, rFrame, nullptr, 0, aCommand )
{
m_pToolbar = &rToolbar;
}
GenericToolbarController::~GenericToolbarController()
@@ -104,6 +119,7 @@ void SAL_CALL GenericToolbarController::dispose()
svt::ToolboxController::dispose();
m_pToolbar = nullptr;
m_xToolbar.clear();
m_nID = 0;
}
@@ -159,6 +175,30 @@ void GenericToolbarController::statusChanged( const FeatureStateEvent& Event )
if ( m_bDisposed )
return;
if ( m_pToolbar )
{
OString sId = m_aCommandURL.toUtf8();
m_pToolbar->set_item_sensitive(sId, Event.IsEnabled);
bool bValue;
OUString aStrValue;
if ( Event.State >>= bValue )
{
// Boolean, treat it as checked/unchecked
m_pToolbar->set_item_active(sId, bValue);
}
else if ( Event.State >>= aStrValue )
{
m_pToolbar->set_item_label(sId, aStrValue);
}
else
m_pToolbar->set_item_active(sId, false);
return;
}
if ( !m_xToolbar )
return;

View File

@@ -23,7 +23,7 @@
#include <uielement/toolbarmanager.hxx>
#include <uielement/generictoolbarcontroller.hxx>
#include <framework/generictoolbarcontroller.hxx>
#include <uielement/styletoolbarcontroller.hxx>
#include <properties.h>
#include <framework/sfxhelperfunctions.hxx>

View File

@@ -18,7 +18,7 @@
*/
#include <uielement/toolbarmerger.hxx>
#include <uielement/generictoolbarcontroller.hxx>
#include <framework/generictoolbarcontroller.hxx>
#include <uielement/buttontoolbarcontroller.hxx>
#include <uielement/comboboxtoolbarcontroller.hxx>

View File

@@ -17,9 +17,9 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_FRAMEWORK_INC_UIELEMENT_GENERICTOOLBARCONTROLLER_HXX
#define INCLUDED_FRAMEWORK_INC_UIELEMENT_GENERICTOOLBARCONTROLLER_HXX
#pragma once
#include <framework/fwkdllapi.h>
#include <svtools/toolboxcontroller.hxx>
#include <vcl/vclptr.hxx>
@@ -28,7 +28,7 @@ class ToolBox;
namespace framework
{
class GenericToolbarController final : public svt::ToolboxController
class FWK_DLLPUBLIC GenericToolbarController final : public svt::ToolboxController
{
public:
GenericToolbarController( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
@@ -36,6 +36,10 @@ class GenericToolbarController final : public svt::ToolboxController
ToolBox* pToolBar,
sal_uInt16 nID,
const OUString& aCommand );
GenericToolbarController( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
const css::uno::Reference< css::frame::XFrame >& rFrame,
weld::Toolbar& rToolBar,
const OUString& aCommand );
virtual ~GenericToolbarController() override;
// XComponent
@@ -66,6 +70,4 @@ class GenericToolbarController final : public svt::ToolboxController
}
#endif // INCLUDED_FRAMEWORK_INC_UIELEMENT_GENERICTOOLBARCONTROLLER_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -1,74 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#ifndef INCLUDED_SVTOOLS_GENERICTOOLBOXCONTROLLER_HXX
#define INCLUDED_SVTOOLS_GENERICTOOLBOXCONTROLLER_HXX
#include <config_options.h>
#include <svtools/svtdllapi.h>
#include <svtools/toolboxcontroller.hxx>
#include <vcl/toolbox.hxx>
namespace weld
{
class Toolbar;
}
namespace svt
{
class UNLESS_MERGELIBS(SVT_DLLPUBLIC) GenericToolboxController final : public svt::ToolboxController
{
public:
GenericToolboxController( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
const css::uno::Reference< css::frame::XFrame >& rFrame,
ToolBox* pToolBox,
sal_uInt16 nID,
const OUString& aCommand );
GenericToolboxController(const css::uno::Reference< css::uno::XComponentContext >& rxContext,
const css::uno::Reference< css::frame::XFrame >& rFrame,
weld::Toolbar& rToolbar,
const OUString& rCommand);
virtual ~GenericToolboxController() override;
// XComponent
virtual void SAL_CALL dispose() override;
// XToolbarController
virtual void SAL_CALL execute( sal_Int16 KeyModifier ) override;
// XStatusListener
virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& Event ) override;
DECL_STATIC_LINK( GenericToolboxController, ExecuteHdl_Impl, void*, void );
private:
VclPtr<ToolBox> m_xToolbox;
sal_uInt16 m_nID;
weld::Toolbar* m_pToolbox;
};
}
#endif // INCLUDED_SVTOOLS_GENERICTOOLBOXCONTROLLER_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

View File

@@ -26,9 +26,10 @@
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <framework/sfxhelperfunctions.hxx>
#include <framework/generictoolbarcontroller.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/commandinfoprovider.hxx>
#include <vcl/weldutils.hxx>
#include <svtools/generictoolboxcontroller.hxx>
#include <comphelper/processfactory.hxx>
#include <toolkit/helper/vclunohelper.hxx>
@@ -69,7 +70,7 @@ Reference<frame::XToolbarController> ControllerFactory::CreateToolBoxController(
if ( ! xController.is())
{
xController.set(
static_cast<XWeak*>(new svt::GenericToolboxController(
static_cast<XWeak*>(new framework::GenericToolbarController(
::comphelper::getProcessComponentContext(),
rxFrame,
pToolBox,
@@ -155,7 +156,7 @@ Reference<frame::XToolbarController> ControllerFactory::CreateToolBoxController(
if (!xController.is())
{
xController.set(
static_cast<XWeak*>(new svt::GenericToolboxController(
static_cast<XWeak*>(new framework::GenericToolbarController(
::comphelper::getProcessComponentContext(),
rxFrame,
rToolbar,

View File

@@ -4922,7 +4922,6 @@ framework/inc/uielement/fontmenucontroller.hxx
framework/inc/uielement/fontsizemenucontroller.hxx
framework/inc/uielement/footermenucontroller.hxx
framework/inc/uielement/genericstatusbarcontroller.hxx
framework/inc/uielement/generictoolbarcontroller.hxx
framework/inc/uielement/headermenucontroller.hxx
framework/inc/uielement/imagebuttontoolbarcontroller.hxx
framework/inc/uielement/itemcontainer.hxx
@@ -6046,6 +6045,7 @@ include/framework/documentundoguard.hxx
include/framework/framecontainer.hxx
include/framework/framelistanalyzer.hxx
include/framework/gate.hxx
include/framework/generictoolbarcontroller.hxx
include/framework/imutex.hxx
include/framework/interaction.hxx
include/framework/sfxhelperfunctions.hxx
@@ -6571,7 +6571,6 @@ include/svtools/extcolorcfg.hxx
include/svtools/filechangedchecker.hxx
include/svtools/fontsubstconfig.hxx
include/svtools/framestatuslistener.hxx
include/svtools/generictoolboxcontroller.hxx
include/svtools/genericunodialog.hxx
include/svtools/helpids.h
include/svtools/helpopt.hxx
@@ -13087,7 +13086,6 @@ svtools/source/uno/addrtempuno.cxx
svtools/source/uno/fpicker.cxx
svtools/source/uno/fpicker.hxx
svtools/source/uno/framestatuslistener.cxx
svtools/source/uno/generictoolboxcontroller.cxx
svtools/source/uno/genericunodialog.cxx
svtools/source/uno/miscservices.cxx
svtools/source/uno/popupmenucontrollerbase.cxx

View File

@@ -166,7 +166,6 @@ $(eval $(call gb_Library_add_exception_objects,svt,\
svtools/source/uno/addrtempuno \
svtools/source/uno/fpicker \
svtools/source/uno/framestatuslistener \
svtools/source/uno/generictoolboxcontroller \
svtools/source/uno/genericunodialog \
svtools/source/uno/miscservices \
svtools/source/uno/popupmenucontrollerbase \

View File

@@ -1,224 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#include <svtools/generictoolboxcontroller.hxx>
#include <com/sun/star/util/XURLTransformer.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/XDispatch.hpp>
#include <vcl/svapp.hxx>
#include <vcl/weld.hxx>
using namespace css::awt;
using namespace css::uno;
using namespace css::beans;
using namespace css::lang;
using namespace css::frame;
using namespace css::frame::status;
using namespace css::util;
namespace svt
{
namespace {
struct ExecuteInfo
{
css::uno::Reference< css::frame::XDispatch > xDispatch;
css::util::URL aTargetURL;
css::uno::Sequence< css::beans::PropertyValue > aArgs;
};
}
GenericToolboxController::GenericToolboxController( const Reference< XComponentContext >& rxContext,
const Reference< XFrame >& rFrame,
ToolBox* pToolbox,
sal_uInt16 nID,
const OUString& aCommand )
: svt::ToolboxController( rxContext, rFrame, aCommand )
, m_xToolbox( pToolbox )
, m_nID( nID )
, m_pToolbox(nullptr)
{
// Initialization is done through ctor
m_bInitialized = true;
// insert main command to our listener map
if ( !m_aCommandURL.isEmpty() )
m_aListenerMap.emplace( aCommand, Reference< XDispatch >() );
}
GenericToolboxController::GenericToolboxController( const Reference< XComponentContext >& rxContext,
const Reference< XFrame >& rFrame,
weld::Toolbar& rToolbar,
const OUString& aCommand )
: svt::ToolboxController( rxContext, rFrame, aCommand )
, m_xToolbox( nullptr )
, m_nID( 0 )
, m_pToolbox(&rToolbar)
{
// Initialization is done through ctor
m_bInitialized = true;
// insert main command to our listener map
if ( !m_aCommandURL.isEmpty() )
m_aListenerMap.emplace( aCommand, Reference< XDispatch >() );
}
GenericToolboxController::~GenericToolboxController()
{
}
void SAL_CALL GenericToolboxController::dispose()
{
SolarMutexGuard aSolarMutexGuard;
m_xToolbox.clear();
m_nID = 0;
m_pToolbox = nullptr;
svt::ToolboxController::dispose();
}
void SAL_CALL GenericToolboxController::execute( sal_Int16 /*KeyModifier*/ )
{
Reference< XDispatch > xDispatch;
OUString aCommandURL;
{
SolarMutexGuard aSolarMutexGuard;
if ( m_bDisposed )
throw DisposedException();
if ( m_bInitialized &&
m_xFrame.is() &&
!m_aCommandURL.isEmpty() )
{
aCommandURL = m_aCommandURL;
URLToDispatchMap::iterator pIter = m_aListenerMap.find( m_aCommandURL );
if ( pIter != m_aListenerMap.end() )
xDispatch = pIter->second;
}
}
if ( !xDispatch.is() )
return;
css::util::URL aTargetURL;
Sequence<PropertyValue> aArgs;
aTargetURL.Complete = aCommandURL;
if ( m_xUrlTransformer.is() )
m_xUrlTransformer->parseStrict( aTargetURL );
// Execute dispatch asynchronously
ExecuteInfo* pExecuteInfo = new ExecuteInfo;
pExecuteInfo->xDispatch = xDispatch;
pExecuteInfo->aTargetURL = aTargetURL;
pExecuteInfo->aArgs = aArgs;
Application::PostUserEvent( LINK(nullptr, GenericToolboxController , ExecuteHdl_Impl), pExecuteInfo );
}
void GenericToolboxController::statusChanged( const FeatureStateEvent& Event )
{
SolarMutexGuard aSolarMutexGuard;
if ( m_bDisposed )
return;
if (m_xToolbox)
{
m_xToolbox->EnableItem( m_nID, Event.IsEnabled );
ToolBoxItemBits nItemBits = m_xToolbox->GetItemBits( m_nID );
nItemBits &= ~ToolBoxItemBits::CHECKABLE;
TriState eTri = TRISTATE_FALSE;
bool bValue;
OUString aStrValue;
ItemStatus aItemState;
if ( Event.State >>= bValue )
{
// Boolean, treat it as checked/unchecked
m_xToolbox->SetItemBits( m_nID, nItemBits );
m_xToolbox->CheckItem( m_nID, bValue );
if ( bValue )
eTri = TRISTATE_TRUE;
nItemBits |= ToolBoxItemBits::CHECKABLE;
}
else if ( Event.State >>= aStrValue )
{
m_xToolbox->SetItemText( m_nID, aStrValue );
}
else if ( Event.State >>= aItemState )
{
eTri = TRISTATE_INDET;
nItemBits |= ToolBoxItemBits::CHECKABLE;
}
m_xToolbox->SetItemState( m_nID, eTri );
m_xToolbox->SetItemBits( m_nID, nItemBits );
}
if (!m_pToolbox)
return;
OString sId = m_aCommandURL.toUtf8();
m_pToolbox->set_item_sensitive(sId, Event.IsEnabled);
bool bValue;
OUString aStrValue;
if ( Event.State >>= bValue )
{
// Boolean, treat it as checked/unchecked
m_pToolbox->set_item_active(sId, bValue);
}
else if ( Event.State >>= aStrValue )
{
m_pToolbox->set_item_label(sId, aStrValue);
}
else
m_pToolbox->set_item_active(sId, false);
}
IMPL_STATIC_LINK( GenericToolboxController, ExecuteHdl_Impl, void*, p, void )
{
ExecuteInfo* pExecuteInfo = static_cast<ExecuteInfo*>(p);
try
{
// Asynchronous execution as this can lead to our own destruction!
// Framework can recycle our current frame and the layout manager disposes all user interface
// elements if a component gets detached from its frame!
pExecuteInfo->xDispatch->dispatch( pExecuteInfo->aTargetURL, pExecuteInfo->aArgs );
}
catch ( Exception& )
{
}
delete pExecuteInfo;
}
} // namespace
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */