diff options
author | Michael Stahl <mstahl@redhat.com> | 2014-05-26 17:43:14 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2014-05-27 11:13:02 +0200 |
commit | 35029b250318b3a4f02cef5194abdd3f68311c43 (patch) | |
tree | 5026ab2dab620dcdcae84e574483ce3c325e5a78 /sw/source/uibase/smartmenu | |
parent | f8d26c68e48e52265d4f20a1527bf52828c046ad (diff) |
sw: move sw/source/core/uibase to sw/source/uibase
It's too confusing to have UI code inside of core; the important part is
that it's separated from the optional UI code in swui library.
Change-Id: I640a52723d5802faf08f3b8eaa03cd937fd93449
Diffstat (limited to 'sw/source/uibase/smartmenu')
-rw-r--r-- | sw/source/uibase/smartmenu/stmenu.cxx | 168 | ||||
-rw-r--r-- | sw/source/uibase/smartmenu/stmenu.hrc | 33 | ||||
-rw-r--r-- | sw/source/uibase/smartmenu/stmenu.src | 37 |
3 files changed, 238 insertions, 0 deletions
diff --git a/sw/source/uibase/smartmenu/stmenu.cxx b/sw/source/uibase/smartmenu/stmenu.cxx new file mode 100644 index 000000000000..d1611c8f408b --- /dev/null +++ b/sw/source/uibase/smartmenu/stmenu.cxx @@ -0,0 +1,168 @@ +/* -*- 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 <stmenu.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <svl/eitem.hxx> +#include <sfx2/dispatch.hxx> + +#include <SwSmartTagMgr.hxx> + +#include <stmenu.hrc> +#include <view.hxx> +#include <breakit.hxx> + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; + +SwSmartTagPopup::SwSmartTagPopup( SwView* pSwView, + Sequence< OUString >& rSmartTagTypes, + Sequence< Reference< container::XStringKeyMap > >& rStringKeyMaps, + Reference< text::XTextRange > xTextRange ) : + PopupMenu( SW_RES(MN_SMARTTAG_POPUP) ), + mpSwView ( pSwView ), + mxTextRange( xTextRange ) +{ + Reference <frame::XController> xController = mpSwView->GetController(); + const lang::Locale aLocale( SW_BREAKITER()->GetLocale( GetAppLanguageTag() ) ); + + sal_uInt16 nMenuPos = 0; + sal_uInt16 nSubMenuPos = 0; + sal_uInt16 nMenuId = 1; + sal_uInt16 nSubMenuId = MN_ST_INSERT_START; + + const OUString aRangeText = mxTextRange->getString(); + + SmartTagMgr& rSmartTagMgr = SwSmartTagMgr::Get(); + const OUString aApplicationName( rSmartTagMgr.GetApplicationName() ); + + Sequence < Sequence< Reference< smarttags::XSmartTagAction > > > aActionComponentsSequence; + Sequence < Sequence< sal_Int32 > > aActionIndicesSequence; + + rSmartTagMgr.GetActionSequences( rSmartTagTypes, + aActionComponentsSequence, + aActionIndicesSequence ); + + InsertSeparator(OString(), 0); + + for ( sal_uInt16 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 OUString aSmartTagType = xAction->getSmartTagName( nSmartTagIndex ); + const OUString aSmartTagCaption = xAction->getSmartTagCaption( nSmartTagIndex, aLocale ); + + // no sub-menus if there's only one smart tag type listed: + PopupMenu* pSbMenu = this; + if ( 1 < aActionComponentsSequence.getLength() ) + { + InsertItem(nMenuId, aSmartTagCaption, 0, OString(), nMenuPos++); + pSbMenu = new PopupMenu; + SetPopupMenu( nMenuId++, pSbMenu ); + } + + // sub-menu starts with smart tag caption and separator + const OUString aSmartTagCaption2 = aSmartTagCaption + ": " + aRangeText; + nSubMenuPos = 0; + pSbMenu->InsertItem(nMenuId++, aSmartTagCaption2, MIB_NOSELECT, OString(), nSubMenuPos++); + pSbMenu->InsertSeparator(OString(), nSubMenuPos++); + + // Add subitem for every action reference for the current smart tag type: + for ( sal_uInt16 i = 0; i < rActionComponents.getLength(); ++i ) + { + xAction = rActionComponents[i]; + + for ( sal_Int32 k = 0; k < xAction->getActionCount( aSmartTagType, xController, xSmartTagProperties ); ++k ) + { + const sal_uInt32 nActionID = xAction->getActionID( aSmartTagType, k, xController ); + OUString aActionCaption = xAction->getActionCaptionFromID( nActionID, + aApplicationName, + aLocale, + xSmartTagProperties, + aRangeText, + OUString(), + xController, + mxTextRange ); + + pSbMenu->InsertItem(nSubMenuId++, aActionCaption, 0, OString(), 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(), + OUString(), + SW_BREAKITER()->GetLocale( GetAppLanguageTag() ) ); + } + } + + return nId; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/smartmenu/stmenu.hrc b/sw/source/uibase/smartmenu/stmenu.hrc new file mode 100644 index 000000000000..315fb3535af5 --- /dev/null +++ b/sw/source/uibase/smartmenu/stmenu.hrc @@ -0,0 +1,33 @@ +/* -*- 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 _STMENU_HRC +#define _STMENU_HRC + +#include "rcid.hrc" + +#define MN_SMARTTAG_POPUP (RC_SMARTTAG_BEGIN + 1) + +#define MN_SMARTTAG_OPTIONS 105 + +#define MN_ST_INSERT_START 500 + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/smartmenu/stmenu.src b/sw/source/uibase/smartmenu/stmenu.src new file mode 100644 index 000000000000..326c13b8841e --- /dev/null +++ b/sw/source/uibase/smartmenu/stmenu.src @@ -0,0 +1,37 @@ +/* -*- 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 . + */ +/* StarView resource 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..." ; + }; + }; +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |