Source Code (Use browser search to find items of interest.)
Class Index
qt'QUriDrag (./qt-2.1.0/src/kernel/qdragobject.h:130)
class Q_EXPORT QUriDrag: public QStoredDrag {
Q_OBJECT
public:
QUriDrag( QStrList uris,
QWidget * dragSource = 0, const char * name = 0 );
QUriDrag( QWidget * dragSource = 0, const char * name = 0 );
~QUriDrag();
void setFilenames( QStringList fnames );
void setUnicodeUris( QStringList uuris );
virtual void setUris( QStrList uris );
static QString uriToLocalFile(const char*);
static QCString localFileToUri(const QString&);
static QString uriToUnicodeUri(const char*);
static QCString unicodeUriToUri(const QString&);
static bool canDecode( const QMimeSource* e );
static bool decode( const QMimeSource* e, QStrList& i );
static bool decodeToUnicodeUris( const QMimeSource* e, QStringList& i );
static bool decodeLocalFiles( const QMimeSource* e, QStringList& i );
};
qt'QUriDrag::QUriDrag() (./qt-2.1.0/src/kernel/qdragobject.cpp:1000)
QUriDrag::QUriDrag( QStrList uris,
QWidget * dragSource, const char * name ) :
QStoredDrag( "text/uri-list", dragSource, name )
{
setUris(uris);
}
/*!
Constructs a object to drag. You will need to call
setUris() before you start the drag().
*/
qt'QUriDrag::QUriDrag() (./qt-2.1.0/src/kernel/qdragobject.cpp:1011)
QUriDrag::QUriDrag( QWidget * dragSource, const char * name ) :
QStoredDrag( "text/uri-list", dragSource, name )
{
}
/*!
Destroys the object.
*/
qt'QUriDrag::~QUriDrag() (./qt-2.1.0/src/kernel/qdragobject.cpp:1019)
QUriDrag::~QUriDrag()
{
}
/*!
Changes the list of \a uris to be dragged.
*/
qt'QUriDrag::setUris() (./qt-2.1.0/src/kernel/qdragobject.cpp:1026)
void QUriDrag::setUris( QStrList uris )
{
QByteArray a;
int c=0;
for ( const char* s = uris.first(); s; s = uris.next() ) {
int l = strlen(s);
a.resize(c+l+2);
memcpy(a.data()+c,s,l);
memcpy(a.data()+c+l,"\r\n",2);
c+=l+2;
}
setEncodedData(a);
}
/*!
Returns TRUE if decode() would be able to decode \a e.
*/
qt'QUriDrag::canDecode() (./qt-2.1.0/src/kernel/qdragobject.cpp:1044)
bool QUriDrag::canDecode( const QMimeSource* e )
{
return e->provides( "text/uri-list" );
}
/*!
Decodes URIs from \a e, placing the result in \a l (which is first cleared).
Returns TRUE if the event contained a valid list of URIs.
*/
qt'QUriDrag::decode() (./qt-2.1.0/src/kernel/qdragobject.cpp:1054)
bool QUriDrag::decode( const QMimeSource* e, QStrList& l )
{
QByteArray payload = e->encodedData( "text/uri-list" );
if ( payload.size() ) {
l.clear();
l.setAutoDelete(TRUE);
uint c=0;
char* d = payload.data();
while (c < payload.size() && d[c]) {
uint f = c;
// Find line end
while (c < payload.size() && d[c] && d[c]!='\r'
&& d[c] != '\n')
c++;
QCString s(d+f,c-f+1);
if ( s[0] != '#' ) // non-comment?
l.append( s );
// Skip junk
while (c < payload.size() && d[c] &&
(d[c]=='\n' || d[c]=='\r'))
c++;
}
return TRUE;
}
return FALSE;
}
static
qt'QUriDrag::setFilenames() (./qt-2.1.0/src/kernel/qdragobject.cpp:1093)
void QUriDrag::setFilenames( QStringList fnames )
{
QStrList uris;
for (QStringList::Iterator i = fnames.begin();
i != fnames.end(); ++i )
uris.append(localFileToUri(*i));
setUris(uris);
}
/*!
Sets the URIs to be the
Unicode URIs (only useful for
displaying to humans) \a uuris.
\sa localFileToUri(), setUris()
*/
qt'QUriDrag::setUnicodeUris() (./qt-2.1.0/src/kernel/qdragobject.cpp:1109)
void QUriDrag::setUnicodeUris( QStringList uuris )
{
QStrList uris;
for (QStringList::Iterator i = uuris.begin();
i != uuris.end(); ++i )
uris.append(unicodeUriToUri(*i));
setUris(uris);
}
/*!
Returns the URI equivalent to the Unicode URI (only useful for
displaying to humans).
\a uuri.
\sa uriToLocalFile()
*/
qt'QUriDrag::unicodeUriToUri() (./qt-2.1.0/src/kernel/qdragobject.cpp:1125)
QCString QUriDrag::unicodeUriToUri(const QString& uuri)
{
QCString utf8 = uuri.utf8();
QCString escutf8;
int n = utf8.length();
for (int i=0; i<n; i++) {
if ( utf8[i] >= 'a' && utf8[i] <= 'z'
|| utf8[i] == '/'
|| utf8[i] >= '0' && utf8[i] <= '9'
|| utf8[i] >= 'A' && utf8[i] <= 'Z'
|| utf8[i] == '-' || utf8[i] == '_'
|| utf8[i] == '.' || utf8[i] == '!'
|| utf8[i] == '~' || utf8[i] == '*'
|| utf8[i] == '(' || utf8[i] == ')'
|| utf8[i] == '\''
// Allow this through, so that all URI-references work.
|| utf8[i] == '#'
|| utf8[i] == ';'
|| utf8[i] == '?' || utf8[i] == ':'
|| utf8[i] == '@' || utf8[i] == '&'
|| utf8[i] == '=' || utf8[i] == '+'
|| utf8[i] == '$' || utf8[i] == ',' )
{
escutf8 += utf8[i];
} else {
// Everything else is escaped as %HH
QCString s(4);
s.sprintf("%%%02x",(uchar)utf8[i]);
escutf8 += s;
}
}
return escutf8;
}
/*!
Returns the URI equivalent to the absolute
local file \a filename.
\sa uriToLocalFile()
*/
qt'QUriDrag::localFileToUri() (./qt-2.1.0/src/kernel/qdragobject.cpp:1168)
QCString QUriDrag::localFileToUri(const QString& filename)
{
QString r = filename;
#ifdef _WS_WIN_
// Slosh -> Slash
int slosh;
while ( (slosh=r.find('\\')) >= 0 ) {
r[slosh] = '/';
}
// Drive
if ( r[0] != '/' ) {
int colon = r.find(':');
if ( colon >= 0 ) {
r[colon] = '|';
if ( r[colon+1] != '/' )
r.insert(colon+1,'/');
}
r.insert(0,'/');
}
#endif
return unicodeUriToUri(QString("file://" + r));
}
/*!
Returns the Unicode URI (only useful for
displaying to humans) equivalent to \a uri.
\sa localFileToUri()
*/
qt'QUriDrag::uriToUnicodeUri() (./qt-2.1.0/src/kernel/qdragobject.cpp:1197)
QString QUriDrag::uriToUnicodeUri(const char* uri)
{
QCString utf8;
while (*uri) {
switch (*uri) {
case '%': {
uint ch = uri[1];
if ( ch && uri[2] ) {
ch = htod(ch)*16 + htod(uri[2]);
utf8 += char(ch);
uri += 2;
}
}
break;
default:
utf8 += *uri;
}
++uri;
}
return QString::fromUtf8(utf8);
}
/*!
Returns the name of a local file equivalent to \a uri,
or a null string if \a uri is not a local file.
\sa localFileToUri()
*/
qt'QUriDrag::uriToLocalFile() (./qt-2.1.0/src/kernel/qdragobject.cpp:1227)
QString QUriDrag::uriToLocalFile(const char* uri)
{
QString file;
if ( uri && 0==qstrnicmp(uri,"file:/",6) ) {
uri += 6;
if ( uri[0] != '/' || uri[1] == '/' ) {
// It is local.
file = uriToUnicodeUri(uri);
if ( uri[1] == '/' ) {
file.remove(0,1);
} else {
file.insert(0,'/');
}
#ifdef _WS_WIN_
if ( file.length() > 2 && file[0] == '/' && file[2] == '|' ) {
file[2] = ':';
file.remove(0,1);
}
// Leave slash as slashes.
#endif
}
}
return file;
}
/*!
Decodes URIs from \a e, converts them to local files if they refer to
local files, and places them in \a l (which is first cleared).
Returns TRUE if the event contained a valid list of URIs.
The list will be empty if no URIs were local files.
*/
qt'QUriDrag::decodeLocalFiles() (./qt-2.1.0/src/kernel/qdragobject.cpp:1261)
bool QUriDrag::decodeLocalFiles( const QMimeSource* e, QStringList& l )
{
QStrList u;
if ( !decode( e, u ) )
return FALSE;
l.clear();
for (const char* s=u.first(); s; s=u.next()) {
QString lf = uriToLocalFile(s);
if ( !lf.isNull() )
l.append( lf );
}
return TRUE;
}
/*!
Decodes URIs from \a e, converts them to Unicode URIs (only useful for
displaying to humans),
placing them in \a l (which is first cleared).
Returns TRUE if the event contained a valid list of URIs.
*/
qt'QUriDrag::decodeToUnicodeUris() (./qt-2.1.0/src/kernel/qdragobject.cpp:1283)
bool QUriDrag::decodeToUnicodeUris( const QMimeSource* e, QStringList& l )
{
QStrList u;
if ( !decode( e, u ) )
return FALSE;
l.clear();
for (const char* s=u.first(); s; s=u.next())
l.append( uriToUnicodeUri(s) );
return TRUE;
}
/*!
If the source of the drag operation is a widget in this application,
this function returns that source, otherwise 0. The source of the
operation is the first parameter to to drag object subclass.
This is useful if your widget needs special behavior when dragging
to itelf, etc.
See QDragObject::QDragObject() and subclasses.
*/