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:
@@ -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"))
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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>
|
||||
|
@@ -18,7 +18,7 @@
|
||||
*/
|
||||
|
||||
#include <uielement/toolbarmerger.hxx>
|
||||
#include <uielement/generictoolbarcontroller.hxx>
|
||||
#include <framework/generictoolbarcontroller.hxx>
|
||||
|
||||
#include <uielement/buttontoolbarcontroller.hxx>
|
||||
#include <uielement/comboboxtoolbarcontroller.hxx>
|
||||
|
@@ -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: */
|
@@ -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: */
|
@@ -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,
|
||||
|
@@ -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
|
||||
|
@@ -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 \
|
||||
|
@@ -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: */
|
Reference in New Issue
Block a user