summaryrefslogtreecommitdiff
path: root/svx/source/cui/pastedlg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/cui/pastedlg.cxx')
-rw-r--r--svx/source/cui/pastedlg.cxx314
1 files changed, 314 insertions, 0 deletions
diff --git a/svx/source/cui/pastedlg.cxx b/svx/source/cui/pastedlg.cxx
new file mode 100644
index 000000000000..c9ce336448eb
--- /dev/null
+++ b/svx/source/cui/pastedlg.cxx
@@ -0,0 +1,314 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: pastedlg.cxx,v $
+ * $Revision: 1.11 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svx.hxx"
+
+#ifdef SVX_DLLIMPLEMENTATION
+#undef SVX_DLLIMPLEMENTATION
+#endif
+#include <com/sun/star/embed/Aspects.hpp>
+
+#include <pastedlg.hxx>
+#include <svtools/svmedit.hxx>
+#include <svtools/insdlg.hxx>
+#include <vcl/dialog.hxx>
+#include <vcl/button.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/group.hxx>
+#include <vcl/lstbox.hxx>
+#include <vcl/msgbox.hxx>
+#include "svuidlg.hrc"
+#include <sot/formats.hxx>
+#include <sot/stg.hxx>
+#include <svtools/sores.hxx>
+#include <vcl/svapp.hxx>
+
+#include <svx/dialmgr.hxx>
+
+SvPasteObjectDialog::SvPasteObjectDialog( Window* pParent )
+
+ : ModalDialog( pParent, SVX_RES( MD_PASTE_OBJECT ) ),
+ aFtSource( this, SVX_RES( FT_SOURCE ) ),
+ aFtObjectSource( this, SVX_RES( FT_OBJECT_SOURCE ) ),
+ aRbPaste( this, SVX_RES( RB_PASTE ) ),
+ aRbPasteLink( this, SVX_RES( RB_PASTE_LINK ) ),
+ aLbInsertList( this, SVX_RES( LB_INSERT_LIST ) ),
+ aCbDisplayAsIcon( this, SVX_RES( CB_DISPLAY_AS_ICON ) ),
+ aPbChangeIcon( this, SVX_RES( PB_CHANGE_ICON ) ),
+ aFlChoice( this, SVX_RES( FL_CHOICE ) ),
+ aOKButton1( this, SVX_RES( 1 ) ),
+ aCancelButton1( this, SVX_RES( 1 ) ),
+ aHelpButton1( this, SVX_RES( 1 ) ),
+ aSObject( SVX_RES( S_OBJECT ) )
+{
+ FreeResource();
+ SetHelpId( HID_PASTE_DLG );
+ SetUniqueId( HID_PASTE_DLG );
+
+ Font aFont = aFtObjectSource.GetFont();
+ aFont.SetWeight( WEIGHT_LIGHT );
+ aFtObjectSource.SetFont( aFont );
+ aOKButton1.Disable();
+
+ ObjectLB().SetSelectHdl( LINK( this, SvPasteObjectDialog, SelectHdl ) );
+ ObjectLB().SetDoubleClickHdl( LINK( this, SvPasteObjectDialog, DoubleClickHdl ) );
+ SetDefault();
+}
+
+void SvPasteObjectDialog::SelectObject()
+{
+ if ( aLbInsertList.GetEntryCount() &&
+ !aRbPaste.IsVisible() && !aRbPasteLink.IsVisible() )
+ {
+ aLbInsertList.SelectEntryPos(0);
+ SelectHdl( &aLbInsertList );
+ }
+}
+
+IMPL_LINK( SvPasteObjectDialog, SelectHdl, ListBox *, pListBox )
+{
+ (void)pListBox;
+
+ if ( !aOKButton1.IsEnabled() )
+ aOKButton1.Enable();
+ return 0;
+}
+
+IMPL_LINK_INLINE_START( SvPasteObjectDialog, DoubleClickHdl, ListBox *, pListBox )
+{
+ (void)pListBox;
+
+ EndDialog( RET_OK );
+ return 0;
+}
+IMPL_LINK_INLINE_END( SvPasteObjectDialog, DoubleClickHdl, ListBox *, pListBox )
+
+void SvPasteObjectDialog::SetDefault()
+{
+ bLink = FALSE;
+ nAspect = (USHORT)::com::sun::star::embed::Aspects::MSOLE_CONTENT;
+}
+
+SvPasteObjectDialog::~SvPasteObjectDialog()
+{
+ void * pStr = aSupplementTable.First();
+ while( pStr )
+ {
+ delete (String *)pStr;
+ pStr = aSupplementTable.Next();
+ }
+}
+
+/*************************************************************************
+|* SvPasteObjectDialog::Insert()
+|*
+|* Beschreibung
+|* Ersterstellung MM 14.06.94
+|* Letzte Aenderung KA 16.03.2001
+*************************************************************************/
+void SvPasteObjectDialog::Insert( SotFormatStringId nFormat, const String& rFormatName )
+{
+ String * pStr = new String( rFormatName );
+ if( !aSupplementTable.Insert( nFormat, pStr ) )
+ delete pStr;
+}
+
+ULONG SvPasteObjectDialog::GetFormat( const TransferableDataHelper& rHelper,
+ const DataFlavorExVector* pFormats,
+ const TransferableObjectDescriptor* )
+{
+ //TODO/LATER: why is the Descriptor never used?!
+ TransferableObjectDescriptor aDesc;
+ if( rHelper.HasFormat( SOT_FORMATSTR_ID_OBJECTDESCRIPTOR ) )
+ ((TransferableDataHelper&)rHelper).GetTransferableObjectDescriptor(
+ SOT_FORMATSTR_ID_OBJECTDESCRIPTOR, aDesc );
+ if ( !pFormats )
+ pFormats = &rHelper.GetDataFlavorExVector();
+
+ //Dialogbox erzeugen und fuellen
+ String aSourceName, aTypeName;
+ ULONG nSelFormat = 0;
+ SvGlobalName aEmptyNm;
+
+ ObjectLB().SetUpdateMode( FALSE );
+
+ DataFlavorExVector::iterator aIter( ((DataFlavorExVector&)*pFormats).begin() ),
+ aEnd( ((DataFlavorExVector&)*pFormats).end() );
+ while( aIter != aEnd )
+ {
+ ::com::sun::star::datatransfer::DataFlavor aFlavor( *aIter );
+ SotFormatStringId nFormat = (*aIter++).mnSotId;
+
+ String* pName = (String*) aSupplementTable.Get( nFormat );
+ String aName;
+
+#ifdef WNT
+/*
+ if( !pName &&
+ ( nFormat == SOT_FORMATSTR_ID_EMBED_SOURCE_OLE || nFormat == SOT_FORMATSTR_ID_EMBEDDED_OBJ_OLE ) )
+ {
+ BOOL IsClipboardObject_Impl( SotDataObject * );
+ if( IsClipboardObject_Impl( pDataObj ) )
+ {
+ IDataObject * pDO = NULL;
+ OleGetClipboard( &pDO );
+ if( pDO )
+ {
+ FORMATETC fe;
+ STGMEDIUM stm;
+ (fe).cfFormat=RegisterClipboardFormat( "Object Descriptor" );
+ (fe).dwAspect=DVASPECT_CONTENT;
+ (fe).ptd=NULL;
+ (fe).tymed=TYMED_HGLOBAL;
+ (fe).lindex=-1;
+
+ if (SUCCEEDED(pDO->GetData(&fe, &stm)))
+ {
+ LPOBJECTDESCRIPTOR pOD=(LPOBJECTDESCRIPTOR)GlobalLock(stm.hGlobal);
+ if( pOD->dwFullUserTypeName )
+ {
+ OLECHAR * pN = (OLECHAR *)(((BYTE *)pOD) + pOD->dwFullUserTypeName);
+ aName.Append( pN );
+ pName = &aName;
+ // set format to ole object
+ nFormat = SOT_FORMATSTR_ID_EMBED_SOURCE_OLE;
+ }
+ if( pOD->dwSrcOfCopy )
+ {
+ OLECHAR * pN = (OLECHAR *)(((BYTE *)pOD) + pOD->dwSrcOfCopy);
+ aSourceName.Append( *pN++ );
+ }
+ else
+ aSourceName = String( ResId( STR_UNKNOWN_SOURCE, SOAPP->GetResMgr() ) );
+ GlobalUnlock(stm.hGlobal);
+ ReleaseStgMedium(&stm);
+ }
+ }
+ }
+ }
+*/
+#endif
+
+ // if there is an "Embed Source" or and "Embedded Object" on the
+ // Clipboard we read the Description and the Source of this object
+ // from an accompanied "Object Descriptor" format on the clipboard
+ // Remember: these formats mostly appear together on the clipboard
+ if ( !pName )
+ {
+ SvPasteObjectHelper::GetEmbeddedName(rHelper,aName,aSourceName,nFormat);
+ if ( aName.Len() )
+ pName = &aName;
+ }
+
+
+ if( pName )
+ {
+ aName = *pName;
+
+ if( SOT_FORMATSTR_ID_EMBED_SOURCE == nFormat )
+ {
+ if( aDesc.maClassName != aEmptyNm ) {
+ aSourceName = aDesc.maDisplayName;
+
+ if( aDesc.maClassName == aObjClassName )
+ aName = aObjName;
+ else
+ aName = aTypeName = aDesc.maTypeName;
+ }
+ }
+ else if( SOT_FORMATSTR_ID_LINK_SOURCE == nFormat )
+ {
+ PasteLink().Enable();
+ continue;
+ }
+ else if( !aName.Len() )
+ aName = SvPasteObjectHelper::GetSotFormatUIName( nFormat );
+
+ if( LISTBOX_ENTRY_NOTFOUND == ObjectLB().GetEntryPos( aName ) )
+ ObjectLB().SetEntryData(
+ ObjectLB().InsertEntry( aName ), (void*) nFormat );
+ }
+ }
+
+ if( !aTypeName.Len() && !aSourceName.Len() )
+ {
+ if( aDesc.maClassName != aEmptyNm )
+ {
+ aSourceName = aDesc.maDisplayName;
+ aTypeName = aDesc.maTypeName;
+ }
+
+ if( !aTypeName.Len() && !aSourceName.Len() )
+ {
+ com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
+ ResMgr* pMgr = ResMgr::CreateResMgr( "svt", aLocale );
+ // global resource from svtools (former so3 resource)
+ if( pMgr )
+ aSourceName = String( ResId( STR_UNKNOWN_SOURCE, *pMgr ) );
+ delete pMgr;
+ }
+ }
+
+ ObjectLB().SetUpdateMode( TRUE );
+ SelectObject();
+
+ if( aSourceName.Len() )
+ {
+ if( aTypeName.Len() )
+ aTypeName += '\n';
+
+ aTypeName += aSourceName;
+ aTypeName.ConvertLineEnd();
+ }
+
+ ObjectSource().SetText( aTypeName );
+
+ SetDefault();
+
+ if( Dialog::Execute() == RET_OK )
+ {
+ bLink = PasteLink().IsChecked();
+
+ if( AsIconBox().IsChecked() )
+ nAspect = (USHORT)com::sun::star::embed::Aspects::MSOLE_ICON;
+
+ nSelFormat = (ULONG)ObjectLB().GetEntryData( ObjectLB().GetSelectEntryPos() );
+ }
+
+ return nSelFormat;
+}
+
+void SvPasteObjectDialog::SetObjName( const SvGlobalName & rClass, const String & rObjName )
+{
+ aObjClassName = rClass;
+ aObjName = rObjName;
+}
+