diff options
Diffstat (limited to 'sw/source/ui/smartmenu')
-rw-r--r-- | sw/source/ui/smartmenu/makefile.mk | 53 | ||||
-rw-r--r-- | sw/source/ui/smartmenu/stmenu.cxx | 186 | ||||
-rw-r--r-- | sw/source/ui/smartmenu/stmenu.hrc | 41 | ||||
-rw-r--r-- | sw/source/ui/smartmenu/stmenu.src | 44 |
4 files changed, 324 insertions, 0 deletions
diff --git a/sw/source/ui/smartmenu/makefile.mk b/sw/source/ui/smartmenu/makefile.mk new file mode 100644 index 000000000000..1950430cf378 --- /dev/null +++ b/sw/source/ui/smartmenu/makefile.mk @@ -0,0 +1,53 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* +PRJ=..$/..$/.. + +PRJNAME=sw +TARGET=smartmenu + +# --- Settings ----------------------------------------------------- + +.INCLUDE : $(PRJ)$/inc$/swpre.mk +.INCLUDE : settings.mk +.INCLUDE : $(PRJ)$/inc$/sw.mk + +# --- Files -------------------------------------------------------- + +EXCEPTIONSFILES = \ + $(SLO)$/stmenu.obj + +SLOFILES = \ + $(SLO)$/stmenu.obj + +SRS1NAME=$(TARGET) +SRC1FILES = \ + stmenu.src + +# --- Targets ------------------------------------------------------- + +.INCLUDE : target.mk + diff --git a/sw/source/ui/smartmenu/stmenu.cxx b/sw/source/ui/smartmenu/stmenu.cxx new file mode 100644 index 000000000000..4c7b473dfc50 --- /dev/null +++ b/sw/source/ui/smartmenu/stmenu.cxx @@ -0,0 +1,186 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// SMARTTAGS + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sw.hxx" +#include <stmenu.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <svl/eitem.hxx> +#include <sfx2/dispatch.hxx> + +#include <SwSmartTagMgr.hxx> + +#ifndef _STMENU_HRC +#include <stmenu.hrc> +#endif +#ifndef _VIEW_HXX +#include <view.hxx> +#endif +#include <breakit.hxx> + +#define C2U(cChar) rtl::OUString::createFromAscii(cChar) + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + +SwSmartTagPopup::SwSmartTagPopup( SwView* pSwView, + Sequence< rtl::OUString >& rSmartTagTypes, + Sequence< Reference< container::XStringKeyMap > >& rStringKeyMaps, + Reference< text::XTextRange > xTextRange ) : + PopupMenu( SW_RES(MN_SMARTTAG_POPUP) ), + mpSwView ( pSwView ), + mxTextRange( xTextRange ) +{ + //CreateAutoMnemonics(); + + Reference <frame::XController> xController = mpSwView->GetController(); + const lang::Locale aLocale( SW_BREAKITER()->GetLocale( (LanguageType)GetAppLanguage() ) ); + + USHORT nMenuPos = 0; + USHORT nSubMenuPos = 0; + USHORT nMenuId = 1; + USHORT nSubMenuId = MN_ST_INSERT_START; + + const rtl::OUString aRangeText = mxTextRange->getString(); + + SmartTagMgr& rSmartTagMgr = SwSmartTagMgr::Get(); + const rtl::OUString aApplicationName( rSmartTagMgr.GetApplicationName() ); + + Sequence < Sequence< Reference< smarttags::XSmartTagAction > > > aActionComponentsSequence; + Sequence < Sequence< sal_Int32 > > aActionIndicesSequence; + + rSmartTagMgr.GetActionSequences( rSmartTagTypes, + aActionComponentsSequence, + aActionIndicesSequence ); + + InsertSeparator(0); + + for ( USHORT j = 0; j < aActionComponentsSequence.getLength(); ++j ) + { + Reference< container::XStringKeyMap > xSmartTagProperties = rStringKeyMaps[j]; + + // Get all actions references associated with the current smart tag type: + const Sequence< Reference< smarttags::XSmartTagAction > >& rActionComponents = aActionComponentsSequence[j]; + const Sequence< sal_Int32 >& rActionIndices = aActionIndicesSequence[j]; + + if ( 0 == rActionComponents.getLength() || 0 == rActionIndices.getLength() ) + continue; + + // Ask first entry for the smart tag type caption: + Reference< smarttags::XSmartTagAction > xAction = rActionComponents[0]; + + if ( !xAction.is() ) + continue; + + const sal_Int32 nSmartTagIndex = rActionIndices[0]; + const rtl::OUString aSmartTagType = xAction->getSmartTagName( nSmartTagIndex ); + const rtl::OUString aSmartTagCaption = xAction->getSmartTagCaption( nSmartTagIndex, aLocale ); + + // no sub-menues if there's only one smart tag type listed: + PopupMenu* pSbMenu = this; + if ( 1 < aActionComponentsSequence.getLength() ) + { + InsertItem( nMenuId, aSmartTagCaption, 0, nMenuPos++); + pSbMenu = new PopupMenu; + SetPopupMenu( nMenuId++, pSbMenu ); + } + + // sub-menu starts with smart tag caption and separator + const rtl::OUString aSmartTagCaption2 = aSmartTagCaption + C2U(": ") + aRangeText; + nSubMenuPos = 0; + pSbMenu->InsertItem( nMenuId++, aSmartTagCaption2, MIB_NOSELECT, nSubMenuPos++ ); + pSbMenu->InsertSeparator( nSubMenuPos++ ); + + // Add subitem for every action reference for the current smart tag type: + for ( USHORT i = 0; i < rActionComponents.getLength(); ++i ) + { + xAction = rActionComponents[i]; + + for ( sal_Int32 k = 0; k < xAction->getActionCount( aSmartTagType, xController ); ++k ) + { + const sal_uInt32 nActionID = xAction->getActionID( aSmartTagType, k, xController ); + rtl::OUString aActionCaption = xAction->getActionCaptionFromID( nActionID, + aApplicationName, + aLocale, + xSmartTagProperties, + aRangeText, + rtl::OUString(), + xController, + mxTextRange ); + + pSbMenu->InsertItem( nSubMenuId++, aActionCaption, 0, nSubMenuPos++ ); + InvokeAction aEntry( xAction, xSmartTagProperties, nActionID ); + maInvokeActions.push_back( aEntry ); + } + } + } +} + +/** Function: Execute + + executes actions by calling the invoke function of the appropriate + smarttag library. + +*/ +sal_uInt16 SwSmartTagPopup::Execute( const Rectangle& rWordPos, Window* pWin ) +{ + sal_uInt16 nId = PopupMenu::Execute(pWin, pWin->LogicToPixel(rWordPos)); + + if ( nId == MN_SMARTTAG_OPTIONS ) + { + SfxBoolItem aBool(SID_OPEN_SMARTTAGOPTIONS, TRUE); + mpSwView->GetViewFrame()->GetDispatcher()->Execute( SID_AUTO_CORRECT_DLG, SFX_CALLMODE_ASYNCHRON, &aBool, 0L ); + } + + if ( nId < MN_ST_INSERT_START) return nId; + nId -= MN_ST_INSERT_START; + + // compute smarttag lib index and action index + if ( nId < maInvokeActions.size() ) + { + Reference< smarttags::XSmartTagAction > xSmartTagAction = maInvokeActions[ nId ].mxAction; + + // execute action + if ( xSmartTagAction.is() ) + { + SmartTagMgr& rSmartTagMgr = SwSmartTagMgr::Get(); + + xSmartTagAction->invokeAction( maInvokeActions[ nId ].mnActionID, + rSmartTagMgr.GetApplicationName(), + mpSwView->GetController(), + mxTextRange, + maInvokeActions[ nId ].mxSmartTagProperties, + mxTextRange->getString(), + rtl::OUString(), + SW_BREAKITER()->GetLocale( (LanguageType)GetAppLanguage() ) ); + } + } + + return nId; +} diff --git a/sw/source/ui/smartmenu/stmenu.hrc b/sw/source/ui/smartmenu/stmenu.hrc new file mode 100644 index 000000000000..56afc5752f79 --- /dev/null +++ b/sw/source/ui/smartmenu/stmenu.hrc @@ -0,0 +1,41 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _STMENU_HRC +#define _STMENU_HRC + +#include "rcid.hrc" + +#define MN_SMARTTAG_POPUP (RC_SMARTTAG_BEGIN + 1) + +#define MN_SMARTTAG 104 +#define MN_SMARTTAG_OPTIONS 105 + +#define MN_ST_INSERT_START 500 + +#endif + diff --git a/sw/source/ui/smartmenu/stmenu.src b/sw/source/ui/smartmenu/stmenu.src new file mode 100644 index 000000000000..9775b829e7a0 --- /dev/null +++ b/sw/source/ui/smartmenu/stmenu.src @@ -0,0 +1,44 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +/* StarView ressource file */ + +#include "stmenu.hrc" +#include "helpid.h" + +Menu MN_SMARTTAG_POPUP +{ + ItemList = + { + MenuItem + { + Identifier = MN_SMARTTAG_OPTIONS ; + HelpID = HID_SMARTTAG_MAIN ; + Text [ en-US ] = "Smart Tag Options..." ; + }; + }; +}; + |