00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#include "kio/job.h"
00020
#include "kio/paste.h"
00021
#include "kio/global.h"
00022
#include "kio/netaccess.h"
00023
#include "kio/observer.h"
00024
#include "kio/renamedlg.h"
00025
#include "kio/kprotocolmanager.h"
00026
00027
#include <qapplication.h>
00028
#include <qclipboard.h>
00029
#include <qdragobject.h>
00030
#include <qtextstream.h>
00031
#include <kurl.h>
00032
#include <kurldrag.h>
00033
#include <kdebug.h>
00034
#include <klocale.h>
00035
#include <kinputdialog.h>
00036
#include <kmessagebox.h>
00037
#include <ktempfile.h>
00038
00039
static KURL getNewFileName(
const KURL &u)
00040 {
00041
bool ok;
00042
QString file =
KInputDialog::getText( QString::null,
00043 i18n(
"Filename for clipboard content:" ), QString::null, &ok );
00044
if ( !ok )
00045
return KURL();
00046
00047
KURL myurl(u);
00048 myurl.
addPath( file );
00049
00050
if (
KIO::NetAccess::exists(myurl,
false, 0))
00051 {
00052
kdDebug(7007) <<
"Paste will overwrite file. Prompting..." <<
endl;
00053 KIO::RenameDlg_Result res = KIO::R_OVERWRITE;
00054
00055
QString newPath;
00056
00057 res =
Observer::self()->
open_RenameDlg(
00058 0L, i18n(
"File Already Exists"),
00059 u.
prettyURL(0, KURL::StripFileProtocol),
00060 myurl.
prettyURL(0, KURL::StripFileProtocol),
00061 (KIO::RenameDlg_Mode) (KIO::M_OVERWRITE | KIO::M_SINGLE), newPath);
00062
00063
if ( res == KIO::R_RENAME )
00064 {
00065 myurl = newPath;
00066 }
00067
else if ( res == KIO::R_CANCEL )
00068 {
00069
return KURL();
00070 }
00071 }
00072
00073
return myurl;
00074 }
00075
00076 bool KIO::isClipboardEmpty()
00077 {
00078
#ifndef QT_NO_MIMECLIPBOARD
00079
QMimeSource *data = QApplication::clipboard()->data();
00080
if ( data->provides(
"text/uri-list" ) && data->encodedData(
"text/uri-list" ).size() > 0 )
00081
return false;
00082
#else
00083
00084
00085
QString data = QApplication::clipboard()->text();
00086
if(data.contains(
"://"))
00087
return false;
00088
#endif
00089
return true;
00090 }
00091
00092 KIO::Job *
KIO::pasteClipboard(
const KURL& dest_url,
bool move )
00093 {
00094
if ( !dest_url.
isValid() ) {
00095 KMessageBox::error( 0L, i18n(
"Malformed URL\n%1" ).arg( dest_url.
url() ) );
00096
return 0;
00097 }
00098
00099
#ifndef QT_NO_MIMECLIPBOARD
00100
QMimeSource *data = QApplication::clipboard()->data();
00101
00102
KURL::List urls;
00103
if ( KURLDrag::canDecode( data ) && KURLDrag::decode( data, urls ) ) {
00104
if ( urls.count() == 0 ) {
00105 KMessageBox::error( 0L, i18n(
"The clipboard is empty"));
00106
return 0;
00107 }
00108
00109
KIO::Job *res = 0;
00110
if (
move )
00111 res =
KIO::move( urls, dest_url );
00112
else
00113 res =
KIO::copy( urls, dest_url );
00114
00115
00116
if (
move )
00117 QApplication::clipboard()->clear();
00118
return res;
00119 }
00120
#else
00121
QStringList data = QStringList::split(
"\n", QApplication::clipboard()->text());
00122
KURL::List urls;
00123 KURLDrag::decode(data, urls);
00124
#endif
00125
00126
QByteArray ba;
00127
00128
#ifndef QT_NO_MIMECLIPBOARD
00129
QString text;
00130
if ( QTextDrag::canDecode( data ) && QTextDrag::decode( data, text ) )
00131 {
00132
QTextStream txtStream( ba, IO_WriteOnly );
00133 txtStream << text;
00134 }
00135
else
00136 ba = data->encodedData( data->format() );
00137
#else
00138
QTextStream txtStream( ba, IO_WriteOnly );
00139
for(QStringList::Iterator it=data.begin(); it!=data.end(); it++)
00140 txtStream << *it;
00141
#endif
00142
00143
if ( ba.size() == 0 )
00144 {
00145 KMessageBox::sorry(0, i18n(
"The clipboard is empty"));
00146
return 0;
00147 }
00148
00149
return pasteDataAsync(dest_url, ba);
00150 }
00151
00152
00153 void KIO::pasteData(
const KURL& u,
const QByteArray& _data )
00154 {
00155
KURL new_url = getNewFileName(u);
00156
00157
00158
00159
if (new_url.
isEmpty())
00160
return;
00161
00162
KTempFile tempFile;
00163 tempFile.
setAutoDelete(
true );
00164 tempFile.
dataStream()->writeRawBytes( _data.data(), _data.size() );
00165 tempFile.
close();
00166
00167 (
void) KIO::NetAccess::upload( tempFile.
name(), new_url );
00168 }
00169
00170 KIO::CopyJob*
KIO::pasteDataAsync(
const KURL& u,
const QByteArray& _data )
00171 {
00172
KURL new_url = getNewFileName(u);
00173
00174
00175
00176
if (new_url.
isEmpty())
00177
return 0;
00178
00179
KTempFile tempFile;
00180 tempFile.
dataStream()->writeRawBytes( _data.data(), _data.size() );
00181 tempFile.
close();
00182
00183
KURL orig_url;
00184 orig_url.
setPath(tempFile.
name());
00185
00186
return KIO::move( orig_url, new_url );
00187 }