Kaydet (Commit) 261f84a0 authored tarafından Maxim Monastirsky's avatar Maxim Monastirsky

fdo#85804 Introduce bullets and numbering popups

Change-Id: I39ea402a3ce3296f55ea127b0139e89954e41252
üst 92291709
...@@ -253,6 +253,8 @@ ...@@ -253,6 +253,8 @@
#define RID_SVXSTR_LINECOLOR (RID_SVX_START + 201) #define RID_SVXSTR_LINECOLOR (RID_SVX_START + 201)
#define RID_SVXSTR_MORE_STYLES (RID_SVX_START + 202) #define RID_SVXSTR_MORE_STYLES (RID_SVX_START + 202)
#define RID_SVXSTR_FILLCOLOR (RID_SVX_START + 203) #define RID_SVXSTR_FILLCOLOR (RID_SVX_START + 203)
#define RID_SVXSTR_MORENUMBERING (RID_SVX_START + 204)
#define RID_SVXSTR_MOREBULLETS (RID_SVX_START + 205)
// Strings for insert/overwrite mode // Strings for insert/overwrite mode
#define RID_SVXSTR_INSERT_HELPTEXT (RID_SVX_START + 210) #define RID_SVXSTR_INSERT_HELPTEXT (RID_SVX_START + 210)
......
...@@ -242,6 +242,28 @@ ...@@ -242,6 +242,28 @@
<value>com.sun.star.comp.sd.InsertSlideController</value> <value>com.sun.star.comp.sd.InsertSlideController</value>
</prop> </prop>
</node> </node>
<node oor:name="NumberingToolBox" oor:op="replace">
<prop oor:name="Command">
<value>.uno:DefaultNumbering</value>
</prop>
<prop oor:name="Module">
<value/>
</prop>
<prop oor:name="Controller">
<value>com.sun.star.comp.svx.NumberingToolBoxControl</value>
</prop>
</node>
<node oor:name="BulletsToolBox" oor:op="replace">
<prop oor:name="Command">
<value>.uno:DefaultBullet</value>
</prop>
<prop oor:name="Module">
<value/>
</prop>
<prop oor:name="Controller">
<value>com.sun.star.comp.svx.NumberingToolBoxControl</value>
</prop>
</node>
<node oor:name="ExtrusionDirectionFloater" oor:op="replace"> <node oor:name="ExtrusionDirectionFloater" oor:op="replace">
<prop oor:name="Command"> <prop oor:name="Command">
<value>.uno:ExtrusionDirectionFloater</value> <value>.uno:ExtrusionDirectionFloater</value>
......
...@@ -202,7 +202,7 @@ void FuOutlineBullet::SetCurrentBulletsNumbering(SfxRequest& rReq) ...@@ -202,7 +202,7 @@ void FuOutlineBullet::SetCurrentBulletsNumbering(SfxRequest& rReq)
// get numbering rule corresponding to <nIdx> and apply the needed number formats to <pNumRule> // get numbering rule corresponding to <nIdx> and apply the needed number formats to <pNumRule>
NBOTypeMgrBase* pNumRuleMgr = NBOTypeMgrBase* pNumRuleMgr =
NBOutlineTypeMgrFact::CreateInstance( NBOutlineTypeMgrFact::CreateInstance(
nSId == FN_SVX_SET_BULLET ? eNBOType::MIXBULLETS : eNBOType::NUMBERING ); nSId == FN_SVX_SET_BULLET ? eNBOType::BULLETS : eNBOType::NUMBERING );
if ( pNumRuleMgr ) if ( pNumRuleMgr )
{ {
sal_uInt16 nActNumLvl = (sal_uInt16)0xFFFF; sal_uInt16 nActNumLvl = (sal_uInt16)0xFFFF;
......
...@@ -620,7 +620,7 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet ) ...@@ -620,7 +620,7 @@ void DrawViewShell::GetAttrState( SfxItemSet& rSet )
rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,(sal_uInt16)0xFFFF)); rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX,(sal_uInt16)0xFFFF));
if ( bBullets ) if ( bBullets )
{ {
NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::BULLETS);
if ( pBullets ) if ( pBullets )
{ {
sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(*pNumRule,nActNumLvl); sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(*pNumRule,nActNumLvl);
......
...@@ -219,6 +219,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\ ...@@ -219,6 +219,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\
svx/source/table/tabledesign \ svx/source/table/tabledesign \
svx/source/table/tablertfexporter \ svx/source/table/tablertfexporter \
svx/source/table/tablertfimporter \ svx/source/table/tablertfimporter \
svx/source/tbxctrls/bulletsnumbering \
svx/source/tbxctrls/colrctrl \ svx/source/tbxctrls/colrctrl \
svx/source/tbxctrls/SvxColorChildWindow \ svx/source/tbxctrls/SvxColorChildWindow \
svx/source/tbxctrls/fillctrl \ svx/source/tbxctrls/fillctrl \
......
...@@ -6523,8 +6523,7 @@ SfxVoidItem DefaultNumbering FN_NUM_NUMBERING_ON ...@@ -6523,8 +6523,7 @@ SfxVoidItem DefaultNumbering FN_NUM_NUMBERING_ON
GroupId = GID_ENUMERATION; GroupId = GID_ENUMERATION;
] ]
SfxBoolItem CurrentBulletListType FN_BUL_NUM_RULE_INDEX SfxUInt16Item CurrentBulletListType FN_BUL_NUM_RULE_INDEX
(SfxUInt16Item On FN_PARAM_1)
[ [
/* flags: */ /* flags: */
AutoUpdate = TRUE, AutoUpdate = TRUE,
...@@ -6539,11 +6538,6 @@ SfxBoolItem CurrentBulletListType FN_BUL_NUM_RULE_INDEX ...@@ -6539,11 +6538,6 @@ SfxBoolItem CurrentBulletListType FN_BUL_NUM_RULE_INDEX
RecordPerSet; RecordPerSet;
Synchron; Synchron;
ImageRotation = TRUE;
ImageReflection = TRUE;
/* status: */
SlotType = SfxBoolItem
/* config: */ /* config: */
AccelConfig = FALSE, AccelConfig = FALSE,
MenuConfig = FALSE, MenuConfig = FALSE,
...@@ -6551,8 +6545,7 @@ SfxBoolItem CurrentBulletListType FN_BUL_NUM_RULE_INDEX ...@@ -6551,8 +6545,7 @@ SfxBoolItem CurrentBulletListType FN_BUL_NUM_RULE_INDEX
ToolBoxConfig = FALSE, ToolBoxConfig = FALSE,
GroupId = GID_ENUMERATION; GroupId = GID_ENUMERATION;
] ]
SfxBoolItem CurrentNumListType FN_NUM_NUM_RULE_INDEX SfxUInt16Item CurrentNumListType FN_NUM_NUM_RULE_INDEX
(SfxUInt16Item On FN_PARAM_1)
[ [
/* flags: */ /* flags: */
AutoUpdate = TRUE, AutoUpdate = TRUE,
...@@ -6567,11 +6560,6 @@ SfxBoolItem CurrentNumListType FN_NUM_NUM_RULE_INDEX ...@@ -6567,11 +6560,6 @@ SfxBoolItem CurrentNumListType FN_NUM_NUM_RULE_INDEX
RecordPerSet; RecordPerSet;
Synchron; Synchron;
ImageRotation = TRUE;
ImageReflection = TRUE;
/* status: */
SlotType = SfxBoolItem
/* config: */ /* config: */
AccelConfig = FALSE, AccelConfig = FALSE,
MenuConfig = FALSE, MenuConfig = FALSE,
......
...@@ -185,7 +185,6 @@ void SvxNumValueSet::UserDraw( const UserDrawEvent& rUDEvt ) ...@@ -185,7 +185,6 @@ void SvxNumValueSet::UserDraw( const UserDrawEvent& rUDEvt )
pVDev->SetOutputSize( aRectSize ); pVDev->SetOutputSize( aRectSize );
aOrgRect = aRect; aOrgRect = aRect;
pVDev->SetFillColor( aBackColor ); pVDev->SetFillColor( aBackColor );
pVDev->DrawRect(aOrgRect);
if(aBackColor == aLineColor) if(aBackColor == aLineColor)
aLineColor.Invert(); aLineColor.Invert();
......
/* -*- 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: */
...@@ -81,6 +81,16 @@ String RID_SVXSTR_FILLCOLOR ...@@ -81,6 +81,16 @@ String RID_SVXSTR_FILLCOLOR
Text [ en-US ] = "Fill Color" ; 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 ComboBox RID_SVXTBX_STYLE
{ {
HelpId = HID_STYLE_LISTBOX ; HelpId = HID_STYLE_LISTBOX ;
......
...@@ -80,4 +80,8 @@ ...@@ -80,4 +80,8 @@
constructor="org_apache_openoffice_comp_svx_sidebar_PanelFactory_get_implementation"> constructor="org_apache_openoffice_comp_svx_sidebar_PanelFactory_get_implementation">
<service name="com.sun.star.ui.UIElementFactory"/> <service name="com.sun.star.ui.UIElementFactory"/>
</implementation> </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> </component>
...@@ -1784,7 +1784,7 @@ void SwTextShell::GetState( SfxItemSet &rSet ) ...@@ -1784,7 +1784,7 @@ void SwTextShell::GetState( SfxItemSet &rSet )
{ {
rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX, USHRT_MAX)); rSet.Put(SfxUInt16Item(FN_BUL_NUM_RULE_INDEX, USHRT_MAX));
rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX, USHRT_MAX)); rSet.Put(SfxUInt16Item(FN_NUM_NUM_RULE_INDEX, USHRT_MAX));
NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS); NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::BULLETS);
if ( pBullets ) if ( pBullets )
{ {
const sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(aSvxRule,nActNumLvl); const sal_uInt16 nBulIndex = pBullets->GetNBOIndexForNumRule(aSvxRule,nActNumLvl);
......
...@@ -258,7 +258,7 @@ void SwTextShell::ExecSetNumber(SfxRequest &rReq) ...@@ -258,7 +258,7 @@ void SwTextShell::ExecSetNumber(SfxRequest &rReq)
svx::sidebar::NBOTypeMgrBase* pNBOTypeMgr = svx::sidebar::NBOTypeMgrBase* pNBOTypeMgr =
nSlot == FN_SVX_SET_NUMBER nSlot == FN_SVX_SET_NUMBER
? svx::sidebar::NBOutlineTypeMgrFact::CreateInstance( svx::sidebar::eNBOType::NUMBERING ) ? svx::sidebar::NBOutlineTypeMgrFact::CreateInstance( svx::sidebar::eNBOType::NUMBERING )
: svx::sidebar::NBOutlineTypeMgrFact::CreateInstance( svx::sidebar::eNBOType::MIXBULLETS ); : svx::sidebar::NBOutlineTypeMgrFact::CreateInstance( svx::sidebar::eNBOType::BULLETS );
if ( pNBOTypeMgr != NULL ) if ( pNBOTypeMgr != NULL )
{ {
const SwNumRule* pNumRuleAtCurrentSelection = GetShell().GetNumRuleAtCurrentSelection(); const SwNumRule* pNumRuleAtCurrentSelection = GetShell().GetNumRuleAtCurrentSelection();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment