diff options
author | Maxim Monastirsky <momonasmon@gmail.com> | 2014-11-08 23:56:59 +0200 |
---|---|---|
committer | Maxim Monastirsky <momonasmon@gmail.com> | 2014-11-09 07:42:25 +0200 |
commit | 261f84a08d8631d70c62d849cd11b21bc9d1f106 (patch) | |
tree | ec8263401e8ce89f14dfc2806723faf2cc3082d9 /svx | |
parent | 9229170920ab770624415c4330da57af5b1b5398 (diff) |
fdo#85804 Introduce bullets and numbering popups
Change-Id: I39ea402a3ce3296f55ea127b0139e89954e41252
Diffstat (limited to 'svx')
-rw-r--r-- | svx/Library_svx.mk | 1 | ||||
-rw-r--r-- | svx/sdi/svx.sdi | 16 | ||||
-rw-r--r-- | svx/source/dialog/svxbmpnumvalueset.cxx | 1 | ||||
-rw-r--r-- | svx/source/tbxctrls/bulletsnumbering.cxx | 236 | ||||
-rw-r--r-- | svx/source/tbxctrls/tbcontrl.src | 10 | ||||
-rw-r--r-- | svx/util/svx.component | 4 |
6 files changed, 253 insertions, 15 deletions
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk index 1fc78a2cf0d7..b037c26bec25 100644 --- a/svx/Library_svx.mk +++ b/svx/Library_svx.mk @@ -219,6 +219,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\ svx/source/table/tabledesign \ svx/source/table/tablertfexporter \ svx/source/table/tablertfimporter \ + svx/source/tbxctrls/bulletsnumbering \ svx/source/tbxctrls/colrctrl \ svx/source/tbxctrls/SvxColorChildWindow \ svx/source/tbxctrls/fillctrl \ diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi index 47d5c14620d8..9691ba578622 100644 --- a/svx/sdi/svx.sdi +++ b/svx/sdi/svx.sdi @@ -6523,8 +6523,7 @@ SfxVoidItem DefaultNumbering FN_NUM_NUMBERING_ON GroupId = GID_ENUMERATION; ] -SfxBoolItem CurrentBulletListType FN_BUL_NUM_RULE_INDEX -(SfxUInt16Item On FN_PARAM_1) +SfxUInt16Item CurrentBulletListType FN_BUL_NUM_RULE_INDEX [ /* flags: */ AutoUpdate = TRUE, @@ -6539,11 +6538,6 @@ SfxBoolItem CurrentBulletListType FN_BUL_NUM_RULE_INDEX RecordPerSet; Synchron; - ImageRotation = TRUE; - ImageReflection = TRUE; - /* status: */ - SlotType = SfxBoolItem - /* config: */ AccelConfig = FALSE, MenuConfig = FALSE, @@ -6551,8 +6545,7 @@ SfxBoolItem CurrentBulletListType FN_BUL_NUM_RULE_INDEX ToolBoxConfig = FALSE, GroupId = GID_ENUMERATION; ] -SfxBoolItem CurrentNumListType FN_NUM_NUM_RULE_INDEX -(SfxUInt16Item On FN_PARAM_1) +SfxUInt16Item CurrentNumListType FN_NUM_NUM_RULE_INDEX [ /* flags: */ AutoUpdate = TRUE, @@ -6567,11 +6560,6 @@ SfxBoolItem CurrentNumListType FN_NUM_NUM_RULE_INDEX RecordPerSet; Synchron; - ImageRotation = TRUE; - ImageReflection = TRUE; - /* status: */ - SlotType = SfxBoolItem - /* config: */ AccelConfig = FALSE, MenuConfig = FALSE, diff --git a/svx/source/dialog/svxbmpnumvalueset.cxx b/svx/source/dialog/svxbmpnumvalueset.cxx index f0e961aaebf9..0963e6d635df 100644 --- a/svx/source/dialog/svxbmpnumvalueset.cxx +++ b/svx/source/dialog/svxbmpnumvalueset.cxx @@ -185,7 +185,6 @@ void SvxNumValueSet::UserDraw( const UserDrawEvent& rUDEvt ) pVDev->SetOutputSize( aRectSize ); aOrgRect = aRect; pVDev->SetFillColor( aBackColor ); - pVDev->DrawRect(aOrgRect); if(aBackColor == aLineColor) aLineColor.Invert(); diff --git a/svx/source/tbxctrls/bulletsnumbering.cxx b/svx/source/tbxctrls/bulletsnumbering.cxx new file mode 100644 index 000000000000..3b72ad9feafc --- /dev/null +++ b/svx/source/tbxctrls/bulletsnumbering.cxx @@ -0,0 +1,236 @@ +/* -*- 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 <com/sun/star/text/DefaultNumberingProvider.hpp> +#include <com/sun/star/text/XNumberingFormatter.hpp> + +#include <comphelper/processfactory.hxx> +#include <i18nlangtag/mslangid.hxx> +#include <sfx2/imagemgr.hxx> +#include <svtools/popupwindowcontroller.hxx> +#include <svtools/toolbarmenu.hxx> +#include <svx/dialogs.hrc> +#include <svx/dialmgr.hxx> +#include <svx/numvset.hxx> +#include <vcl/toolbox.hxx> +#include <vcl/settings.hxx> + +#define NUM_PAGETYPE_BULLET 0 +#define NUM_PAGETYPE_SINGLENUM 1 + +class NumberingPopup : public svtools::ToolbarMenu +{ + bool mbBulletItem; + svt::ToolboxController& mrController; + SvxNumValueSet* mpValueSet; + DECL_LINK( VSSelectHdl, void * ); + +public: + NumberingPopup( svt::ToolboxController& rController, + const css::uno::Reference< css::frame::XFrame >& rFrame, + vcl::Window* pParent, bool bBulletItem ); + + virtual void statusChanged( const css::frame::FeatureStateEvent& rEvent ) + throw ( css::uno::RuntimeException ) SAL_OVERRIDE; +}; + +class NumberingToolBoxControl : public svt::PopupWindowController +{ + bool mbBulletItem; + +public: + NumberingToolBoxControl( const css::uno::Reference< css::uno::XComponentContext >& rxContext ); + virtual vcl::Window* createPopupWindow( vcl::Window* pParent ) SAL_OVERRIDE; + + // XStatusListener + virtual void statusChanged( const css::frame::FeatureStateEvent& rEvent ) + throw ( css::uno::RuntimeException ) SAL_OVERRIDE; + + // XInitialization + virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) + throw ( css::uno::Exception, css::uno::RuntimeException, std::exception ) SAL_OVERRIDE; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() + throw ( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() + throw ( css::uno::RuntimeException, std::exception ) SAL_OVERRIDE; + + using svt::ToolboxController::createPopupWindow; +}; + +//class NumberingPopup +NumberingPopup::NumberingPopup( svt::ToolboxController& rController, + const css::uno::Reference< css::frame::XFrame >& rFrame, + vcl::Window* pParent, bool bBulletItem ) : + ToolbarMenu( rFrame, pParent, WB_STDPOPUP ), + mbBulletItem( bBulletItem ), + mrController( rController ) +{ + WinBits nBits = WB_TABSTOP | WB_MENUSTYLEVALUESET | WB_FLATVALUESET | WB_NO_DIRECTSELECT; + mpValueSet = new SvxNumValueSet( this, nBits ); + mpValueSet->init( mbBulletItem ? NUM_PAGETYPE_BULLET : NUM_PAGETYPE_SINGLENUM ); + + if ( !mbBulletItem ) + { + css::uno::Reference< css::text::XDefaultNumberingProvider > xDefNum = css::text::DefaultNumberingProvider::create( comphelper::getProcessComponentContext() ); + if ( xDefNum.is() ) + { + css::uno::Sequence< css::uno::Sequence< css::beans::PropertyValue > > aNumberings; + css::lang::Locale aLocale = GetSettings().GetLanguageTag().getLocale(); + try + { + aNumberings = xDefNum->getDefaultContinuousNumberingLevels( aLocale ); + } + catch( css::uno::Exception& ) + {} + + css::uno::Reference< css::text::XNumberingFormatter > xFormat( xDefNum, css::uno::UNO_QUERY ); + mpValueSet->SetNumberingSettings( aNumberings, xFormat, aLocale ); + } + } + + Size aItemSize( LogicToPixel( Size( 30, 42 ), MAP_APPFONT ) ); + mpValueSet->SetExtraSpacing( 2 ); + mpValueSet->SetOutputSizePixel( mpValueSet->CalcWindowSizePixel( aItemSize ) ); + mpValueSet->SetColor( GetSettings().GetStyleSettings().GetFieldColor() ); + + appendEntry( 0, mpValueSet ); + appendSeparator(); + + if ( mbBulletItem ) + appendEntry( 1, SVX_RESSTR( RID_SVXSTR_MOREBULLETS ), ::GetImage( rFrame, ".uno:OutlineBullet", false ) ); + else + appendEntry( 1, SVX_RESSTR( RID_SVXSTR_MORENUMBERING ), ::GetImage( rFrame, ".uno:OutlineBullet", false ) ); + + SetOutputSizePixel( getMenuSize() ); + Link aLink = LINK( this, NumberingPopup, VSSelectHdl ); + mpValueSet->SetSelectHdl( aLink ); + SetSelectHdl( aLink ); + + if ( mbBulletItem ) + AddStatusListener( ".uno:CurrentBulletListType" ); + else + AddStatusListener( ".uno:CurrentNumListType" ); +} + +void NumberingPopup::statusChanged( const css::frame::FeatureStateEvent& rEvent ) + throw ( css::uno::RuntimeException ) +{ + mpValueSet->SetNoSelection(); + + sal_Int32 nSelItem; + if ( rEvent.State >>= nSelItem ) + mpValueSet->SelectItem( nSelItem ); +} + +IMPL_LINK( NumberingPopup, VSSelectHdl, void *, pControl ) +{ + if ( IsInPopupMode() ) + EndPopupMode(); + + if ( pControl == mpValueSet ) + { + sal_uInt16 nSelItem = mpValueSet->GetSelectItemId(); + css::uno::Sequence< css::beans::PropertyValue > aArgs( 1 ); + if ( mbBulletItem ) + { + aArgs[0].Name = "SetBullet"; + aArgs[0].Value <<= sal_uInt16( nSelItem ); + mrController.dispatchCommand( ".uno:SetBullet", aArgs ); + } + else + { + aArgs[0].Name = "SetNumber"; + aArgs[0].Value <<= sal_uInt16( nSelItem ); + mrController.dispatchCommand( ".uno:SetNumber", aArgs ); + } + } + else if ( getSelectedEntryId() == 1 ) + { + css::uno::Sequence< css::beans::PropertyValue > aArgs( 0 ); + mrController.dispatchCommand( ".uno:OutlineBullet", aArgs ); + } + + return 0; +} + + +//class NumberingToolBoxControl +NumberingToolBoxControl::NumberingToolBoxControl( const css::uno::Reference< css::uno::XComponentContext >& rxContext ): + svt::PopupWindowController( rxContext, css::uno::Reference< css::frame::XFrame >(), OUString() ), + mbBulletItem( false ) +{ +} + +vcl::Window* NumberingToolBoxControl::createPopupWindow( vcl::Window* pParent ) +{ + return new NumberingPopup( *this, m_xFrame, pParent, mbBulletItem ); +} + +void NumberingToolBoxControl::statusChanged( const css::frame::FeatureStateEvent& rEvent ) + throw ( css::uno::RuntimeException ) +{ + ToolBox* pToolBox = 0; + sal_uInt16 nId = 0; + if ( getToolboxId( nId, &pToolBox ) ) + { + pToolBox->EnableItem( nId, rEvent.IsEnabled ); + bool bChecked; + if ( rEvent.State >>= bChecked ) + pToolBox->CheckItem( nId, bChecked ); + } +} + +void SAL_CALL NumberingToolBoxControl::initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) + throw ( css::uno::Exception, css::uno::RuntimeException, std::exception ) +{ + svt::PopupWindowController::initialize( aArguments ); + + ToolBox* pToolBox = 0; + sal_uInt16 nId = 0; + if ( getToolboxId( nId, &pToolBox ) ) + pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWN ); + + mbBulletItem = m_aCommandURL == ".uno:DefaultBullet"; +} + +OUString SAL_CALL NumberingToolBoxControl::getImplementationName() + throw ( css::uno::RuntimeException, std::exception ) +{ + return OUString( "com.sun.star.comp.svx.NumberingToolBoxControl" ); +} + +css::uno::Sequence< OUString > SAL_CALL NumberingToolBoxControl::getSupportedServiceNames() + throw ( css::uno::RuntimeException, std::exception ) +{ + css::uno::Sequence< OUString > aRet( 1 ); + aRet[0] = "com.sun.star.frame.ToolbarController"; + return aRet; +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL +com_sun_star_comp_svx_NumberingToolBoxControl_get_implementation( + css::uno::XComponentContext *rxContext, + css::uno::Sequence<css::uno::Any> const & ) +{ + return cppu::acquire( new NumberingToolBoxControl( rxContext ) ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/tbxctrls/tbcontrl.src b/svx/source/tbxctrls/tbcontrl.src index b13cf629d6dd..0e250c3ad8f7 100644 --- a/svx/source/tbxctrls/tbcontrl.src +++ b/svx/source/tbxctrls/tbcontrl.src @@ -81,6 +81,16 @@ String RID_SVXSTR_FILLCOLOR Text [ en-US ] = "Fill Color" ; }; +String RID_SVXSTR_MORENUMBERING +{ + Text [ en-US ] = "More Numbering..." ; +}; + +String RID_SVXSTR_MOREBULLETS +{ + Text [ en-US ] = "More Bullets..." ; +}; + ComboBox RID_SVXTBX_STYLE { HelpId = HID_STYLE_LISTBOX ; diff --git a/svx/util/svx.component b/svx/util/svx.component index 5529d276dbfd..967677befed0 100644 --- a/svx/util/svx.component +++ b/svx/util/svx.component @@ -80,4 +80,8 @@ constructor="org_apache_openoffice_comp_svx_sidebar_PanelFactory_get_implementation"> <service name="com.sun.star.ui.UIElementFactory"/> </implementation> + <implementation name="com.sun.star.comp.svx.NumberingToolBoxControl" + constructor="com_sun_star_comp_svx_NumberingToolBoxControl_get_implementation"> + <service name="com.sun.star.frame.ToolbarController"/> + </implementation> </component> |