summaryrefslogtreecommitdiff
path: root/svtools/source/edit/textview.cxx
diff options
context:
space:
mode:
authorMalte Timmermann <mt@openoffice.org>2001-08-20 10:44:50 +0000
committerMalte Timmermann <mt@openoffice.org>2001-08-20 10:44:50 +0000
commitc14510b46f92ba073cc711af73a0acdf2ce45aab (patch)
tree7fe3d91046a8de09b48e5ac25d38093fc42241b7 /svtools/source/edit/textview.cxx
parent917392ec3694fd6b29b6e60fc74be708b02e1480 (diff)
#81916# Copy/Paste in/from Selection
Diffstat (limited to 'svtools/source/edit/textview.cxx')
-rw-r--r--svtools/source/edit/textview.cxx54
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() );