Index: source/ui/browser/dbexchange.cxx =================================================================== RCS file: /cvs/dba/dbaccess/source/ui/browser/dbexchange.cxx,v retrieving revision 1.23 diff -u -r1.23 dbexchange.cxx --- source/ui/browser/dbexchange.cxx 2 Aug 2004 15:32:27 -0000 1.23 +++ source/ui/browser/dbexchange.cxx 26 Aug 2005 13:32:37 -0000 @@ -62,6 +62,9 @@ #ifndef DBAUI_DBEXCHANGE_HXX #include "dbexchange.hxx" #endif +#ifndef DBAUI_TOOLS_HXX +#include "UITools.hxx" +#endif #ifndef _SOT_FORMATS_HXX #include #endif @@ -169,7 +172,8 @@ // ----------------------------------------------------------------------------- ODataClipboard::ODataClipboard( const Reference< XPropertySet >& _rxLivingForm, const Sequence< Any >& _rSelectedRows, - const Reference< XResultSet>& _rxResultSet) + const Reference< XResultSet>& _rxResultSet, + const Reference< XMultiServiceFactory >& _rxORB) :ODataAccessObjectTransferable( _rxLivingForm ) ,m_pHtml(NULL) ,m_pRtf(NULL) @@ -186,7 +190,20 @@ getDescriptor()[daCursor] <<= _rxResultSet; addCompatibleSelectionDescription( _rSelectedRows ); - osl_decrementInterlockedCount( &m_refCount ); + if ( xConnection.is() && _rxORB.is() ) + { + Reference< XNumberFormatter > xFormatter( getNumberFormatter( xConnection, _rxORB ) ); + if ( xFormatter.is() ) + { + m_pHtml = new OHTMLImportExport( getDescriptor(),_rxORB, xFormatter ); + m_aEventListeners.push_back( m_pHtml ); + + m_pRtf = new ORTFImportExport( getDescriptor(),_rxORB, xFormatter ); + m_aEventListeners.push_back( m_pRtf ); + } + } + + osl_decrementInterlockedCount( &m_refCount ); } // ----------------------------------------------------------------------------- Index: source/ui/browser/dsEntriesNoExp.cxx =================================================================== RCS file: /cvs/dba/dbaccess/source/ui/browser/dsEntriesNoExp.cxx,v retrieving revision 1.13 diff -u -r1.13 dsEntriesNoExp.cxx --- source/ui/browser/dsEntriesNoExp.cxx 8 Jul 2005 10:38:20 -0000 1.13 +++ source/ui/browser/dsEntriesNoExp.cxx 26 Aug 2005 13:32:37 -0000 @@ -187,6 +187,8 @@ InvalidateFeature(ID_BROWSER_INSERTCONTENT); InvalidateFeature(ID_BROWSER_FORMLETTER); } + InvalidateFeature(ID_BROWSER_COPY); + InvalidateFeature(ID_BROWSER_CUT); } //------------------------------------------------------------------------------ void SbaTableQueryBrowser::describeSupportedFeatures() Index: source/ui/browser/sbagrid.cxx =================================================================== RCS file: /cvs/dba/dbaccess/source/ui/browser/sbagrid.cxx,v retrieving revision 1.71 diff -u -r1.71 sbagrid.cxx --- source/ui/browser/sbagrid.cxx 18 Mar 2005 10:08:25 -0000 1.71 +++ source/ui/browser/sbagrid.cxx 26 Aug 2005 13:32:38 -0000 @@ -1118,9 +1118,17 @@ rMenu.InsertItem(ID_BROWSER_ROWHEIGHT, aNewItems.GetItemText(ID_BROWSER_ROWHEIGHT), 0, nPos++); rMenu.SetHelpId(ID_BROWSER_ROWHEIGHT, aNewItems.GetHelpId(ID_BROWSER_ROWHEIGHT)); + + rMenu.InsertSeparator(nPos++); } - if (nPos) - rMenu.InsertSeparator(nPos); + + if ( GetSelectRowCount() > 0 ) + { + rMenu.InsertItem(ID_BROWSER_COPY, aNewItems.GetItemText(SID_COPY), 0, nPos++); + rMenu.SetHelpId(ID_BROWSER_COPY, aNewItems.GetHelpId(SID_COPY)); + + rMenu.InsertSeparator(nPos++); + } } //------------------------------------------------------------------------------ @@ -1561,10 +1569,23 @@ } // ----------------------------------------------------------------------- -void SbaGridControl::DoRowDrag(sal_Int16 nRowPos) +void SbaGridControl::CopySelectedRowsToClipboard() +{ + DBG_ASSERT( GetSelectRowCount() > 0, "SbaGridControl::CopySelectedRowsToClipboard: invalid call!" ); + implTransferSelectedRows( FirstSelectedRow(), true ); +} + +// ----------------------------------------------------------------------- +void SbaGridControl::DoRowDrag( sal_Int16 nRowPos ) +{ + implTransferSelectedRows( nRowPos, false ); +} + +// ----------------------------------------------------------------------- +void SbaGridControl::implTransferSelectedRows( sal_Int16 nRowPos, bool _bTrueIfClipboardFalseIfDrag ) { Reference< XPropertySet > xDataSource(getDataSource(), UNO_QUERY); - DBG_ASSERT(xDataSource.is(), "SbaGridControl::DoRowDrag : invalid data source !"); + DBG_ASSERT( xDataSource.is(), "SbaGridControl::implTransferSelectedRows: invalid data source!" ); // build the sequence of numbers of selected rows Sequence< Any > aSelectedRows; @@ -1595,10 +1616,13 @@ if ( xResultSetAccess.is() ) xRowSetClone = xResultSetAccess->createResultSet(); - ODataClipboard* pTransfer = new ODataClipboard(xDataSource, aSelectedRows,xRowSetClone); + ODataClipboard* pTransfer = new ODataClipboard(xDataSource, aSelectedRows,xRowSetClone, getServiceManager()); Reference< XTransferable > xEnsureDelete = pTransfer; - pTransfer->StartDrag(this, DND_ACTION_COPY | DND_ACTION_LINK); + if ( _bTrueIfClipboardFalseIfDrag ) + pTransfer->CopyToClipboard( this ); + else + pTransfer->StartDrag(this, DND_ACTION_COPY | DND_ACTION_LINK); } catch(Exception&) { Index: source/ui/browser/sbagrid.src =================================================================== RCS file: /cvs/dba/dbaccess/source/ui/browser/sbagrid.src,v retrieving revision 1.53 diff -u -r1.53 sbagrid.src --- source/ui/browser/sbagrid.src 26 Jun 2004 17:27:22 -0000 1.53 +++ source/ui/browser/sbagrid.src 26 Aug 2005 13:32:38 -0000 @@ -119,6 +119,10 @@ Text [ de ] = "Zeilenhöhe..." ; Text [ en-US ] = "Row Height..." ; }; + MenuItem + { + ITEM_EDIT_COPY + }; }; }; Index: source/ui/browser/unodatbr.cxx =================================================================== RCS file: /cvs/dba/dbaccess/source/ui/browser/unodatbr.cxx,v retrieving revision 1.170 diff -u -r1.170 unodatbr.cxx --- source/ui/browser/unodatbr.cxx 11 Apr 2005 10:05:01 -0000 1.170 +++ source/ui/browser/unodatbr.cxx 26 Aug 2005 13:32:39 -0000 @@ -1792,13 +1792,27 @@ // aReturn.bEnabled &= getDefinition() && !getDefinition()->GetDatabase()->IsReadOnly(); break; + case ID_BROWSER_CUT: + if ( m_pTreeView->HasChildPathFocus() ) + { + aReturn.bEnabled = isEntryCutAllowed( m_pTreeView->getListBox()->GetCurEntry() ); + } + else + { + aReturn.bEnabled = sal_False; + } + break; + case ID_BROWSER_COPY: if(m_pTreeView->HasChildPathFocus()) aReturn.bEnabled = isEntryCopyAllowed(m_pTreeView->getListBox()->GetCurEntry()); else if (getBrowserView() && getBrowserView()->getVclControl() && !getBrowserView()->getVclControl()->IsEditing()) { SbaGridControl* pControl = getBrowserView()->getVclControl(); - aReturn.bEnabled = pControl->canCopyCellText(pControl->GetCurRow(), pControl->GetCurColumnId()); + if ( pControl->GetSelectRowCount() > 0 ) + aReturn.bEnabled = sal_True; + else + aReturn.bEnabled = pControl->canCopyCellText(pControl->GetCurRow(), pControl->GetCurColumnId()); } else return SbaXDataBrowserController::GetState(nId); @@ -1987,12 +2001,16 @@ else if (getBrowserView() && getBrowserView()->getVclControl() && !getBrowserView()->getVclControl()->IsEditing()) { SbaGridControl* pControl = getBrowserView()->getVclControl(); - pControl->copyCellText(pControl->GetCurRow(), pControl->GetCurColumnId()); + if ( pControl->GetSelectRowCount() > 0 ) + pControl->CopySelectedRowsToClipboard(); + else + pControl->copyCellText(pControl->GetCurRow(), pControl->GetCurColumnId()); } else SbaXDataBrowserController::Execute(nId,aArgs); break; - default: + + default: SbaXDataBrowserController::Execute(nId,aArgs); break; } Index: source/ui/inc/dbexchange.hxx =================================================================== RCS file: /cvs/dba/dbaccess/source/ui/inc/dbexchange.hxx,v retrieving revision 1.10 diff -u -r1.10 dbexchange.hxx --- source/ui/inc/dbexchange.hxx 2 Mar 2004 12:45:07 -0000 1.10 +++ source/ui/inc/dbexchange.hxx 26 Aug 2005 13:32:39 -0000 @@ -125,7 +125,8 @@ ODataClipboard( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxLivingForm, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rSelectedRows, - const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet>& _rxResultSet + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet>& _rxResultSet, + const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB ); DECLARE_XINTERFACE( ) Index: source/ui/inc/sbagrid.hxx =================================================================== RCS file: /cvs/dba/dbaccess/source/ui/inc/sbagrid.hxx,v retrieving revision 1.23 diff -u -r1.23 sbagrid.hxx --- source/ui/inc/sbagrid.hxx 2 Aug 2004 16:02:32 -0000 1.23 +++ source/ui/inc/sbagrid.hxx 26 Aug 2005 13:32:39 -0000 @@ -328,6 +328,12 @@ */ virtual ::rtl::OUString GetAccessibleDescription( ::svt::AccessibleBrowseBoxObjType eObjType,sal_Int32 _nPosition = -1) const; + /** copies the currently selected rows to the clipboard + @precond + at least one row is selected + */ + void CopySelectedRowsToClipboard(); + protected: // DragSourceHelper overridables virtual void StartDrag( sal_Int8 _nAction, const Point& _rPosPixel ); @@ -376,6 +382,9 @@ private: sal_Bool IsReadOnlyDB() const; + + /// does a data transfer with the currently selected rows, by either DnD or copy-to-clipboard + void implTransferSelectedRows( sal_Int16 nRowPos, bool _bTrueIfClipboardFalseIfDrag ); }; } #endif // _SBA_GRID_HXX