Use UNO registration for font name toolbox control

Should help to eventually get rid of the wrapper in reportdesign.

Change-Id: I9fc94f2ed650561eb47f2f91939b3aa37f031c3b
Reviewed-on: https://gerrit.libreoffice.org/29910
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
This commit is contained in:
Maxim Monastirsky 2016-10-16 01:27:10 +03:00
parent bd041161f3
commit 970a66f8c9
9 changed files with 86 additions and 120 deletions

View File

@ -203,17 +203,6 @@ friend class SfxStyleControllerItem_Impl;
SVX_DLLPRIVATE SfxStyleFamily GetActFamily();
};
class SVX_DLLPUBLIC SvxFontNameToolBoxControl : public SfxToolBoxControl
{
public:
SFX_DECL_TOOLBOX_CONTROL();
SvxFontNameToolBoxControl(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx);
virtual void StateChanged(sal_uInt16 nSID, SfxItemState eState,
const SfxPoolItem* pState) override;
virtual VclPtr<vcl::Window> CreateItemWindow(vcl::Window* pParent) override;
};
class BorderColorStatus
{
Color maColor;

View File

@ -1137,15 +1137,15 @@
<value>com.sun.star.report.ReportToolboxController</value>
</prop>
</node>
<node oor:name="c14" oor:op="replace" install:module="reportbuilder">
<node oor:name="FontNameToolBox" oor:op="replace">
<prop oor:name="Command">
<value>.uno:CharFontName</value>
</prop>
<prop oor:name="Module">
<value>com.sun.star.report.ReportDefinition</value>
<value/>
</prop>
<prop oor:name="Controller">
<value>com.sun.star.report.ReportToolboxController</value>
<value>com.sun.star.comp.svx.FontNameToolBoxControl</value>
</prop>
</node>
<node oor:name="OpenToolbarController" oor:op="replace">

View File

@ -44,7 +44,6 @@ namespace rptui
TCommandState m_aStates;
TToolbarHelper m_pToolbarController;
sal_uInt16 m_nToolBoxId;
sal_uInt16 m_nSlotId;
OToolboxController(const OToolboxController&) = delete;
void operator =(const OToolboxController&) = delete;
public:
@ -78,7 +77,6 @@ namespace rptui
virtual OUString SAL_CALL getSubToolbarName( ) throw (css::uno::RuntimeException, std::exception) override;
virtual void SAL_CALL functionSelected( const OUString& aCommand ) throw (css::uno::RuntimeException, std::exception) override;
virtual void SAL_CALL updateImage( ) throw (css::uno::RuntimeException, std::exception) override;
virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createItemWindow( const css::uno::Reference< css::awt::XWindow >& Parent ) throw (css::uno::RuntimeException, std::exception) override;
};
} // rptui

View File

@ -34,9 +34,6 @@
#include <svtools/menuoptions.hxx>
#include <osl/mutex.hxx>
#include <svx/svxids.hrc>
#define ITEMID_FONT 3
#include <editeng/fontitem.hxx>
#include <editeng/fhgtitem.hxx>
#include <svx/tbcontrl.hxx>
#include <cppuhelper/supportsservice.hxx>
@ -87,7 +84,6 @@ Reference< XInterface > OToolboxController::create(Reference< XComponentContext
OToolboxController::OToolboxController(const Reference< XComponentContext >& _rxORB)
: m_pToolbarController(nullptr)
,m_nToolBoxId(1)
,m_nSlotId(0)
{
osl_atomic_increment(&m_refCount);
m_xContext = _rxORB;
@ -137,21 +133,16 @@ void SAL_CALL OToolboxController::initialize( const Sequence< Any >& _rArguments
break;
}
}
if ( m_aCommandURL == ".uno:CharFontName" )
{
m_aStates.insert(TCommandState::value_type(OUString(".uno:CharFontName"),true));
m_pToolbarController = new SvxFontNameToolBoxControl/*SvxStyleToolBoxControl*/(m_nSlotId = SID_ATTR_CHAR_FONT,m_nToolBoxId,*pToolBox);
}
else if ( m_aCommandURL == ".uno:FontColor" || m_aCommandURL == ".uno:Color" )
if ( m_aCommandURL == ".uno:FontColor" || m_aCommandURL == ".uno:Color" )
{
m_aStates.insert(TCommandState::value_type(OUString(".uno:FontColor"),true));
m_aStates.insert(TCommandState::value_type(OUString(".uno:Color"),true));
m_pToolbarController = new SvxColorToolBoxControl(m_nSlotId = SID_ATTR_CHAR_COLOR2,m_nToolBoxId,*pToolBox);
m_pToolbarController = new SvxColorToolBoxControl(SID_ATTR_CHAR_COLOR2,m_nToolBoxId,*pToolBox);
}
else
{
m_aStates.insert(TCommandState::value_type(OUString(".uno:BackgroundColor"),true));
m_pToolbarController = new SvxColorToolBoxControl(m_nSlotId = SID_BACKGROUND_COLOR,m_nToolBoxId,*pToolBox);
m_pToolbarController = new SvxColorToolBoxControl(SID_BACKGROUND_COLOR,m_nToolBoxId,*pToolBox);
}
TCommandState::const_iterator aIter = m_aStates.begin();
@ -169,43 +160,8 @@ void SAL_CALL OToolboxController::statusChanged( const FeatureStateEvent& Event
{
::osl::MutexGuard aGuard(m_aMutex);
TCommandState::iterator aFind = m_aStates.find( Event.FeatureURL.Complete );
if ( aFind != m_aStates.end() )
{
aFind->second = Event.IsEnabled;
if ( m_pToolbarController.is() )
{
// All other status events will be processed here
ToolBox& rTb = m_pToolbarController->GetToolBox();
for ( sal_uInt16 i = 0; i < rTb.GetItemCount(); i++ )
{
sal_uInt16 nId = rTb.GetItemId( i );
if ( nId == 0 )
continue;
OUString aCmd = rTb.GetItemCommand( nId );
if ( aCmd == Event.FeatureURL.Complete )
{
// Enable/disable item
rTb.EnableItem( nId, Event.IsEnabled );
}
}
switch(m_nSlotId)
{
case SID_ATTR_CHAR_COLOR2:
case SID_BACKGROUND_COLOR:
m_pToolbarController->statusChanged( Event );
break;
case SID_ATTR_CHAR_FONT:
{
SvxFontItem aItem(ITEMID_FONT);
aItem.PutValue(Event.State, 0);
static_cast<SvxFontNameToolBoxControl*>(m_pToolbarController.get())->StateChanged(m_nSlotId,Event.IsEnabled ? SfxItemState::DEFAULT : SfxItemState::DISABLED,&aItem);
}
break;
}
}
}
if ( aFind != m_aStates.end() && m_pToolbarController.is() )
m_pToolbarController->statusChanged( Event );
}
Reference< awt::XWindow > SAL_CALL OToolboxController::createPopupWindow() throw (RuntimeException, std::exception)
@ -229,7 +185,7 @@ void SAL_CALL OToolboxController::execute( sal_Int16 KeyModifier ) throw (uno::R
sal_Bool SAL_CALL OToolboxController::opensSubToolbar() throw (uno::RuntimeException, std::exception)
{
return ( m_nSlotId != SID_ATTR_CHAR_FONT );
return true;
}
OUString SAL_CALL OToolboxController::getSubToolbarName() throw (uno::RuntimeException, std::exception)
@ -249,25 +205,6 @@ void SAL_CALL OToolboxController::updateImage( ) throw (uno::RuntimeException,
m_pToolbarController->updateImage();
}
uno::Reference< awt::XWindow > SAL_CALL OToolboxController::createItemWindow( const uno::Reference< awt::XWindow >& _xParent)
throw (uno::RuntimeException, std::exception)
{
uno::Reference< awt::XWindow > xWindow;
if ( m_pToolbarController.is() )
{
switch(m_nSlotId)
{
case SID_ATTR_CHAR_FONT:
xWindow = VCLUnoHelper::GetInterface(static_cast<SvxFontNameToolBoxControl*>(m_pToolbarController.get())->CreateItemWindow(VCLUnoHelper::GetWindow(_xParent)));
break;
default:
;
}
}
return xWindow;
}
} // rptui

View File

@ -163,7 +163,6 @@ void ScDLL::Init()
SvxColorToolBoxControl ::RegisterControl(SID_ATTR_FILL_COLOR, pMod);
SvxLineEndToolBoxControl ::RegisterControl(SID_ATTR_LINEEND_STYLE, pMod);
SvxStyleToolBoxControl ::RegisterControl(SID_STYLE_APPLY, pMod);
SvxFontNameToolBoxControl ::RegisterControl(SID_ATTR_CHAR_FONT, pMod);
SvxColorToolBoxControl ::RegisterControl(SID_ATTR_CHAR_COLOR, pMod);
SvxColorToolBoxControl ::RegisterControl(SID_BACKGROUND_COLOR, pMod);
SvxColorToolBoxControl ::RegisterControl(SID_ATTR_CHAR_BACK_COLOR, pMod);

View File

@ -189,7 +189,6 @@ void SdDLL::RegisterControllers(SdModule* pMod)
SvxLineEndToolBoxControl::RegisterControl( SID_ATTR_LINEEND_STYLE, pMod );
SvxStyleToolBoxControl::RegisterControl(0, pMod);
SvxFontNameToolBoxControl::RegisterControl(0, pMod);
SvxColorToolBoxControl::RegisterControl( SID_ATTR_CHAR_COLOR, pMod );
SvxColorToolBoxControl::RegisterControl( SID_ATTR_CHAR_BACK_COLOR, pMod );

View File

@ -46,6 +46,7 @@
#include <svl/isethint.hxx>
#include <sfx2/querystatus.hxx>
#include <sfx2/sfxstatuslistener.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <tools/urlobj.hxx>
#include <sfx2/childwin.hxx>
#include <sfx2/viewfrm.hxx>
@ -116,7 +117,6 @@ using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::lang;
SFX_IMPL_TOOLBOX_CONTROL( SvxStyleToolBoxControl, SfxTemplateItem );
SFX_IMPL_TOOLBOX_CONTROL( SvxFontNameToolBoxControl, SvxFontItem );
SFX_IMPL_TOOLBOX_CONTROL( SvxSimpleUndoRedoController, SfxStringItem );
SFX_IMPL_TOOLBOX_CONTROL( SvxCurrencyToolBoxControl, SfxBoolItem );
@ -216,7 +216,7 @@ public:
virtual void dispose() override;
void FillList();
void Update( const SvxFontItem* pFontItem );
void Update( const css::awt::FontDescriptor* pFontDesc );
sal_uInt16 GetListCount() { return nFtCount; }
void Clear() { FontNameBox::Clear(); nFtCount = 0; }
void Fill( const FontList* pList )
@ -1021,15 +1021,15 @@ IMPL_LINK( SvxFontNameBox_Impl, CheckAndMarkUnknownFont, VclWindowEvent&, event,
}
}
void SvxFontNameBox_Impl::Update( const SvxFontItem* pFontItem )
void SvxFontNameBox_Impl::Update( const css::awt::FontDescriptor* pFontDesc )
{
if ( pFontItem )
if ( pFontDesc )
{
aCurFont.SetFamilyName ( pFontItem->GetFamilyName() );
aCurFont.SetFamily ( pFontItem->GetFamily() );
aCurFont.SetStyleName ( pFontItem->GetStyleName() );
aCurFont.SetPitch ( pFontItem->GetPitch() );
aCurFont.SetCharSet ( pFontItem->GetCharSet() );
aCurFont.SetFamilyName ( pFontDesc->Name );
aCurFont.SetFamily ( FontFamily( pFontDesc->Family ) );
aCurFont.SetStyleName ( pFontDesc->StyleName );
aCurFont.SetPitch ( FontPitch( pFontDesc->Pitch ) );
aCurFont.SetCharSet ( rtl_TextEncoding( pFontDesc->CharSet ) );
}
OUString aCurName = aCurFont.GetFamilyName();
if ( GetText() != aCurName )
@ -2554,24 +2554,42 @@ VclPtr<vcl::Window> SvxStyleToolBoxControl::CreateItemWindow( vcl::Window *pPare
return pBox.get();
}
SvxFontNameToolBoxControl::SvxFontNameToolBoxControl(
sal_uInt16 nSlotId,
sal_uInt16 nId,
ToolBox& rTbx )
: SfxToolBoxControl( nSlotId, nId, rTbx )
class SvxFontNameToolBoxControl : public cppu::ImplInheritanceHelper< svt::ToolboxController,
css::lang::XServiceInfo >
{
public:
SvxFontNameToolBoxControl();
// XStatusListener
virtual void SAL_CALL statusChanged( const css::frame::FeatureStateEvent& rEvent ) throw ( css::uno::RuntimeException, std::exception ) override;
// XToolbarController
virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createItemWindow( const css::uno::Reference< css::awt::XWindow >& rParent ) throw ( css::uno::RuntimeException, std::exception ) override;
// XServiceInfo
virtual OUString SAL_CALL getImplementationName() throw ( css::uno::RuntimeException, std::exception ) override;
virtual sal_Bool SAL_CALL supportsService( const OUString& rServiceName ) throw ( css::uno::RuntimeException, std::exception ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw ( css::uno::RuntimeException, std::exception ) override;
};
SvxFontNameToolBoxControl::SvxFontNameToolBoxControl()
{
}
void SvxFontNameToolBoxControl::StateChanged(
sal_uInt16 , SfxItemState eState, const SfxPoolItem* pState )
void SvxFontNameToolBoxControl::statusChanged( const css::frame::FeatureStateEvent& rEvent )
throw ( css::uno::RuntimeException, std::exception )
{
sal_uInt16 nId = GetId();
ToolBox& rTbx = GetToolBox();
SvxFontNameBox_Impl* pBox = static_cast<SvxFontNameBox_Impl*>(rTbx.GetItemWindow( nId ));
SolarMutexGuard aGuard;
ToolBox* pToolBox = nullptr;
sal_uInt16 nId = 0;
if ( !getToolboxId( nId, &pToolBox ) )
return;
SvxFontNameBox_Impl* pBox = static_cast<SvxFontNameBox_Impl*>(pToolBox->GetItemWindow( nId ));
DBG_ASSERT( pBox, "Control not found!" );
if ( SfxItemState::DISABLED == eState )
if ( !rEvent.IsEnabled )
{
pBox->Disable();
pBox->Update( nullptr );
@ -2580,28 +2598,51 @@ void SvxFontNameToolBoxControl::StateChanged(
{
pBox->Enable();
if ( SfxItemState::DEFAULT == eState )
{
const SvxFontItem* pFontItem = dynamic_cast< const SvxFontItem* >( pState );
DBG_ASSERT( pFontItem, "svx::SvxFontNameToolBoxControl::StateChanged(), wrong item type!" );
if( pFontItem )
pBox->Update( pFontItem );
}
css::awt::FontDescriptor aFontDesc;
if ( rEvent.State >>= aFontDesc )
pBox->Update( &aFontDesc );
else
pBox->SetText( "" );
pBox->SaveValue();
}
rTbx.EnableItem( nId, SfxItemState::DISABLED != eState );
pToolBox->EnableItem( nId, rEvent.IsEnabled );
}
VclPtr<vcl::Window> SvxFontNameToolBoxControl::CreateItemWindow( vcl::Window *pParent )
css::uno::Reference< css::awt::XWindow > SvxFontNameToolBoxControl::createItemWindow( const css::uno::Reference< css::awt::XWindow >& rParent )
throw ( css::uno::RuntimeException, std::exception )
{
VclPtrInstance<SvxFontNameBox_Impl> pBox( pParent,
SolarMutexGuard aGuard;
VclPtrInstance<SvxFontNameBox_Impl> pBox( VCLUnoHelper::GetWindow( rParent ),
Reference< XDispatchProvider >( m_xFrame->getController(), UNO_QUERY ),
m_xFrame,0);
return pBox.get();
return VCLUnoHelper::GetInterface( pBox );
}
OUString SvxFontNameToolBoxControl::getImplementationName()
throw ( css::uno::RuntimeException, std::exception )
{
return OUString( "com.sun.star.comp.svx.FontNameToolBoxControl" );
}
sal_Bool SvxFontNameToolBoxControl::supportsService( const OUString& rServiceName )
throw ( css::uno::RuntimeException, std::exception )
{
return cppu::supportsService( this, rServiceName );
}
css::uno::Sequence< OUString > SvxFontNameToolBoxControl::getSupportedServiceNames()
throw ( css::uno::RuntimeException, std::exception )
{
return { "com.sun.star.frame.ToolbarController" };
}
extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
com_sun_star_comp_svx_FontNameToolBoxControl_get_implementation(
css::uno::XComponentContext*,
css::uno::Sequence<css::uno::Any> const & )
{
return cppu::acquire( new SvxFontNameToolBoxControl() );
}
SvxColorToolBoxControl::SvxColorToolBoxControl(

View File

@ -44,6 +44,10 @@
constructor="com_sun_star_comp_svx_FrameToolBoxControl_get_implementation">
<service name="com.sun.star.frame.ToolbarController"/>
</implementation>
<implementation name="com.sun.star.comp.svx.FontNameToolBoxControl"
constructor="com_sun_star_comp_svx_FontNameToolBoxControl_get_implementation">
<service name="com.sun.star.frame.ToolbarController"/>
</implementation>
<implementation name="com.sun.star.comp.Svx.GraphicExportHelper"
constructor="com_sun_star_comp_Svx_GraphicExportHelper_get_implementation">
<service name="com.sun.star.document.BinaryStreamResolver"/>

View File

@ -314,7 +314,6 @@ void SwDLL::RegisterControls()
SvxColorToolBoxControl::RegisterControl(SID_ATTR_FILL_COLOR, pMod);
SvxColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_BACK_COLOR, pMod);
SvxFontNameToolBoxControl::RegisterControl(SID_ATTR_CHAR_FONT, pMod );
SvxColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR, pMod );
SvxColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR2, pMod );
SvxColorToolBoxControl::RegisterControl(SID_ATTR_CHAR_COLOR_BACKGROUND, pMod );