diff options
author | Malte Timmermann <mt@openoffice.org> | 2001-08-20 10:44:50 +0000 |
---|---|---|
committer | Malte Timmermann <mt@openoffice.org> | 2001-08-20 10:44:50 +0000 |
commit | c14510b46f92ba073cc711af73a0acdf2ce45aab (patch) | |
tree | 7fe3d91046a8de09b48e5ac25d38093fc42241b7 /svtools/source/edit/textview.cxx | |
parent | 917392ec3694fd6b29b6e60fc74be708b02e1480 (diff) |
#81916# Copy/Paste in/from Selection
Diffstat (limited to 'svtools/source/edit/textview.cxx')
-rw-r--r-- | svtools/source/edit/textview.cxx | 54 |
1 files changed, 30 insertions, 24 deletions
diff --git a/svtools/source/edit/textview.cxx b/svtools/source/edit/textview.cxx index e8b230b3464d..1b194832fe8e 100644 --- a/svtools/source/edit/textview.cxx +++ b/svtools/source/edit/textview.cxx @@ -2,9 +2,9 @@ * * $RCSfile: textview.cxx,v $ * - * $Revision: 1.17 $ + * $Revision: 1.18 $ * - * last change: $Author: mt $ $Date: 2001-07-31 13:15:45 $ + * last change: $Author: mt $ $Date: 2001-08-20 11:44:50 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -241,19 +241,6 @@ sal_Bool TETextDataObject::isDataFlavorSupported( const datatransfer::DataFlavor return ( nT == SOT_FORMAT_STRING ); } -static uno::Reference< datatransfer::clipboard::XClipboard > ImplGetClipboard() -{ - static uno::Reference< datatransfer::clipboard::XClipboard > xClipboard; - if ( !xClipboard.is() ) - { - uno::Reference< lang::XMultiServiceFactory > xMSF = vcl::unohelper::GetMultiServiceFactory(); - if ( xMSF.is() ) - xClipboard = uno::Reference< datatransfer::clipboard::XClipboard >( xMSF->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.datatransfer.clipboard.SystemClipboard" ) ), uno::UNO_QUERY ); - } - return xClipboard; -} - - // ------------------------------------------------------------------------- // (+) class TextView // ------------------------------------------------------------------------- @@ -696,6 +683,8 @@ BOOL TextView::KeyInput( const KeyEvent& rKeyEvent ) if ( !rKeyEvent.GetKeyCode().IsMod2() ) { aCurSel = ImpMoveCursor( rKeyEvent ); + if ( aCurSel.HasRange() ) + Copy( GetWindow()->GetSelection() ); bMoved = TRUE; if ( nCode == KEY_END ) bEndKey = TRUE; @@ -821,6 +810,15 @@ void TextView::MouseButtonUp( const MouseEvent& rMouseEvent ) { mnTravelXPos = TRAVEL_X_DONTKNOW; mpSelEngine->SelMouseButtonUp( rMouseEvent ); + if ( rMouseEvent.IsMiddle() && !IsReadOnly() && + ( GetWindow()->GetSettings().GetMouseSettings().GetMiddleButtonAction() == MOUSE_MIDDLE_PASTESELECTION ) ) + { + Paste( GetWindow()->GetSelection() ); + } + else if ( rMouseEvent.IsLeft() && GetSelection().HasRange() ) + { + Copy( GetWindow()->GetSelection() ); + } } void TextView::MouseButtonDown( const MouseEvent& rMouseEvent ) @@ -1086,10 +1084,9 @@ void TextView::Cut() mpTextEngine->UndoActionEnd( TEXTUNDO_CUT ); } -void TextView::Copy() +void TextView::Copy( uno::Reference< datatransfer::clipboard::XClipboard >& rxClipboard ) { - uno::Reference< datatransfer::clipboard::XClipboard > xClipboard = ImplGetClipboard(); - if ( xClipboard.is() ) + if ( rxClipboard.is() ) { TETextDataObject* pDataObj = new TETextDataObject( GetSelected() ); @@ -1097,9 +1094,9 @@ void TextView::Copy() mpTextEngine->Write( pDataObj->GetHTMLStream(), &maSelection, TRUE ); const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - xClipboard->setContents( pDataObj, NULL ); + rxClipboard->setContents( pDataObj, NULL ); - uno::Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( xClipboard, uno::UNO_QUERY ); + uno::Reference< datatransfer::clipboard::XFlushableClipboard > xFlushableClipboard( rxClipboard, uno::UNO_QUERY ); if( xFlushableClipboard.is() ) xFlushableClipboard->flushClipboard(); @@ -1107,13 +1104,17 @@ void TextView::Copy() } } -void TextView::Paste() +void TextView::Copy() +{ + Copy( GetWindow()->GetClipboard() ); +} + +void TextView::Paste( uno::Reference< datatransfer::clipboard::XClipboard >& rxClipboard ) { - uno::Reference< datatransfer::clipboard::XClipboard > xClipboard = ImplGetClipboard(); - if ( xClipboard.is() ) + if ( rxClipboard.is() ) { const sal_uInt32 nRef = Application::ReleaseSolarMutex(); - uno::Reference< datatransfer::XTransferable > xDataObj = xClipboard->getContents(); + uno::Reference< datatransfer::XTransferable > xDataObj = rxClipboard->getContents(); Application::AcquireSolarMutex( nRef ); if ( xDataObj.is() ) { @@ -1135,6 +1136,11 @@ void TextView::Paste() } } +void TextView::Paste() +{ + Paste( GetWindow()->GetClipboard() ); +} + String TextView::GetSelected() { return mpTextEngine->GetText( maSelection, GetSystemLineEnd() ); |