summaryrefslogtreecommitdiff
path: root/svx/source/mnuctrls
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2007-06-27 12:41:12 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2007-06-27 12:41:12 +0000
commit05a089f0f52e22928301ed74b909e2452a21e86f (patch)
tree1d5f5a0304142e19be6be815b8e6bec2bf2018b6 /svx/source/mnuctrls
parentdf96a12d28413736bb09d1362755f95b8fcde68d (diff)
INTEGRATION: CWS smarttags3 (1.1.2); FILE ADDED
2007/06/05 07:54:44 fme 1.1.2.4: #i76130# New Smart Tag API - Controller parameter added to a couple of functions 2007/05/23 13:49:04 fme 1.1.2.3: #i75130# New smart tag API - resync 2007/05/14 12:23:28 fme 1.1.2.2: #i75130# New smart tag API 2007/05/11 14:58:12 fme 1.1.2.1: #i75130# New smart tag API
Diffstat (limited to 'svx/source/mnuctrls')
-rw-r--r--svx/source/mnuctrls/SmartTagCtl.cxx242
1 files changed, 242 insertions, 0 deletions
diff --git a/svx/source/mnuctrls/SmartTagCtl.cxx b/svx/source/mnuctrls/SmartTagCtl.cxx
new file mode 100644
index 000000000000..988799e20543
--- /dev/null
+++ b/svx/source/mnuctrls/SmartTagCtl.cxx
@@ -0,0 +1,242 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: SmartTagCtl.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: hr $ $Date: 2007-06-27 13:41:12 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svx.hxx"
+
+#include "SmartTagCtl.hxx"
+
+#ifndef _COM_SUN_STAR_SMARTTAGS_XSMARTTAGACTION_HPP_
+#include <com/sun/star/smarttags/XSmartTagAction.hpp>
+#endif
+#ifndef _COM_SUN_STAR_SMARTTAGS_XSTRINGKEYMAP_HPP_
+#include <com/sun/star/container/XStringKeyMap.hpp>
+#endif
+#ifndef _STDMENU_HXX //autogen
+#include <svtools/stdmenu.hxx>
+#endif
+#ifndef _SFXENUMITEM_HXX //autogen
+#include <svtools/eitem.hxx>
+#endif
+#ifndef _SFXDISPATCH_HXX //autogen
+#include <sfx2/dispatch.hxx>
+#endif
+#ifndef _SVX_SVXIDS_HRC
+#include "svxids.hrc"
+#endif
+
+#include "SmartTagItem.hxx"
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+
+#define C2U(cChar) rtl::OUString::createFromAscii(cChar)
+
+// STATIC DATA -----------------------------------------------------------
+
+SFX_IMPL_MENU_CONTROL(SvxSmartTagsControl, SvxSmartTagItem);
+
+//--------------------------------------------------------------------
+
+SvxSmartTagsControl::SvxSmartTagsControl
+(
+ USHORT _nId,
+ Menu& rMenu,
+ SfxBindings& /*rBindings*/
+) :
+ mpMenu ( new PopupMenu ),
+ mrParent ( rMenu ),
+ mpSmartTagItem( 0 )
+{
+ rMenu.SetPopupMenu( _nId, mpMenu );
+}
+
+//--------------------------------------------------------------------
+
+const USHORT MN_ST_INSERT_START = 500;
+
+void SvxSmartTagsControl::FillMenu()
+{
+ if ( !mpSmartTagItem )
+ return;
+
+ USHORT nMenuPos = 0;
+ USHORT nSubMenuPos = 0;
+ USHORT nMenuId = 1;
+ USHORT nSubMenuId = MN_ST_INSERT_START;
+
+ const Sequence < Sequence< Reference< smarttags::XSmartTagAction > > >& rActionComponentsSequence = mpSmartTagItem->GetActionComponentsSequence();
+ const Sequence < Sequence< sal_Int32 > >& rActionIndicesSequence = mpSmartTagItem->GetActionIndicesSequence();
+ const Sequence< Reference< container::XStringKeyMap > >& rStringKeyMaps = mpSmartTagItem->GetStringKeyMaps();
+ const lang::Locale& rLocale = mpSmartTagItem->GetLocale();
+ const rtl::OUString aApplicationName = mpSmartTagItem->GetApplicationName();
+ const rtl::OUString aRangeText = mpSmartTagItem->GetRangeText();
+ const Reference<text::XTextRange>& xTextRange = mpSmartTagItem->GetTextRange();
+ const Reference<frame::XController>& xController = mpSmartTagItem->GetController();
+
+ for ( USHORT j = 0; j < rActionComponentsSequence.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 = rActionComponentsSequence[j];
+ const Sequence< sal_Int32 >& rActionIndices = rActionIndicesSequence[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, rLocale );
+
+ // no sub-menues if there's only one smart tag type listed:
+ PopupMenu* pSbMenu = mpMenu;
+ if ( 1 < rActionComponentsSequence.getLength() )
+ {
+ mpMenu->InsertItem( nMenuId, aSmartTagCaption, 0, nMenuPos++);
+ pSbMenu = new PopupMenu;
+ mpMenu->SetPopupMenu( nMenuId++, pSbMenu );
+ }
+ pSbMenu->SetSelectHdl( LINK( this, SvxSmartTagsControl, MenuSelect ) );
+
+ // 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,
+ rLocale,
+ xSmartTagProperties,
+ aRangeText,
+ rtl::OUString(),
+ xController,
+ xTextRange );
+
+ pSbMenu->InsertItem( nSubMenuId++, aActionCaption, 0, nSubMenuPos++ );
+ InvokeAction aEntry( xAction, xSmartTagProperties, nActionID );
+ maInvokeActions.push_back( aEntry );
+ }
+ }
+ }
+}
+
+//--------------------------------------------------------------------
+
+void SvxSmartTagsControl::StateChanged( USHORT, SfxItemState eState, const SfxPoolItem* pState )
+
+{
+ mrParent.EnableItem( GetId(), SFX_ITEM_DISABLED != eState );
+
+ if ( SFX_ITEM_AVAILABLE == eState )
+ {
+ const SvxSmartTagItem* pSmartTagItem = PTR_CAST( SvxSmartTagItem, pState );
+ if ( 0 != pSmartTagItem )
+ {
+ delete mpSmartTagItem;
+ mpSmartTagItem = new SvxSmartTagItem( *pSmartTagItem );
+ FillMenu();
+ }
+ }
+}
+
+//--------------------------------------------------------------------
+
+IMPL_LINK_INLINE_START( SvxSmartTagsControl, MenuSelect, PopupMenu *, pMen )
+{
+ if ( !mpSmartTagItem )
+ return 0;
+
+ sal_uInt16 nMyId = pMen->GetCurItemId();
+
+ if ( nMyId < MN_ST_INSERT_START) return 0;
+ nMyId -= MN_ST_INSERT_START;
+
+ // compute smarttag lib index and action index
+ Reference< smarttags::XSmartTagAction > xSmartTagAction = maInvokeActions[ nMyId ].mxAction;
+
+ // execute action
+ if ( xSmartTagAction.is() )
+ {
+ xSmartTagAction->invokeAction( maInvokeActions[ nMyId ].mnActionID,
+ mpSmartTagItem->GetApplicationName(),
+ mpSmartTagItem->GetController(),
+ mpSmartTagItem->GetTextRange(),
+ maInvokeActions[ nMyId ].mxSmartTagProperties,
+ mpSmartTagItem->GetRangeText(),
+ rtl::OUString(),
+ mpSmartTagItem->GetLocale() );
+ }
+
+ // ohne dispatcher!!!
+ // GetBindings().Execute( GetId(), SFX_CALLMODE_RECORD,meine beiden items, 0L );*/
+ //SfxBoolItem aBool(SID_OPEN_SMARTTAGOPTIONS, TRUE);
+ //GetBindings().GetDispatcher()->Execute( SID_AUTO_CORRECT_DLG, SFX_CALLMODE_ASYNCHRON, &aBool, 0L );
+
+ return 0;
+}
+IMPL_LINK_INLINE_END( SvxSmartTagsControl, MenuSelect, PopupMenu *, pMen )
+
+//--------------------------------------------------------------------
+
+SvxSmartTagsControl::~SvxSmartTagsControl()
+{
+ delete mpSmartTagItem;
+ delete mpMenu;
+}
+
+//--------------------------------------------------------------------
+
+PopupMenu* SvxSmartTagsControl::GetPopup() const
+{
+ return mpMenu;
+}
+
+