You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
752 lines
29 KiB
752 lines
29 KiB
14 years ago
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||
|
<!-- /home/espenr/tmp/qt-3.3.8-espenr-2499/qt-x11-free-3.3.8/examples/dirview/dirview.doc:5 -->
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||
|
<title>A Directory Browser</title>
|
||
|
<style type="text/css"><!--
|
||
|
fn { margin-left: 1cm; text-indent: -1cm; }
|
||
|
a:link { color: #004faf; text-decoration: none }
|
||
|
a:visited { color: #672967; text-decoration: none }
|
||
|
body { background: #ffffff; color: black; }
|
||
|
--></style>
|
||
|
</head>
|
||
|
<body>
|
||
|
|
||
|
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||
|
<tr bgcolor="#E5E5E5">
|
||
|
<td valign=center>
|
||
|
<a href="index.html">
|
||
|
<font color="#004faf">Home</font></a>
|
||
|
| <a href="classes.html">
|
||
|
<font color="#004faf">All Classes</font></a>
|
||
|
| <a href="mainclasses.html">
|
||
|
<font color="#004faf">Main Classes</font></a>
|
||
|
| <a href="annotated.html">
|
||
|
<font color="#004faf">Annotated</font></a>
|
||
|
| <a href="groups.html">
|
||
|
<font color="#004faf">Grouped Classes</font></a>
|
||
|
| <a href="functions.html">
|
||
|
<font color="#004faf">Functions</font></a>
|
||
|
</td>
|
||
|
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table><h1 align=center>A Directory Browser</h1>
|
||
|
|
||
|
|
||
|
<p>
|
||
|
This example program demonstrates how to use a listview and
|
||
|
listview items to build a multi-column hierarchical, memory- and
|
||
|
CPU-efficient directory browser. It also demonstrates how to use
|
||
|
Drag&Drop in a listview.
|
||
|
<p> <hr>
|
||
|
<p> Header file:
|
||
|
<p> <pre>/****************************************************************************
|
||
|
** $Id: qt/dirview.h 3.3.8 edited Jan 11 14:37 $
|
||
|
**
|
||
|
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
|
||
|
**
|
||
|
** This file is part of an example program for Qt. This example
|
||
|
** program may be used, distributed and modified without limitation.
|
||
|
**
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#ifndef DIRVIEW_H
|
||
|
#define DIRVIEW_H
|
||
|
|
||
|
#include <<a href="qlistview-h.html">qlistview.h</a>>
|
||
|
#include <<a href="qstring-h.html">qstring.h</a>>
|
||
|
#include <<a href="qfile-h.html">qfile.h</a>>
|
||
|
#include <<a href="qfileinfo-h.html">qfileinfo.h</a>>
|
||
|
#include <<a href="qtimer-h.html">qtimer.h</a>>
|
||
|
|
||
|
class QWidget;
|
||
|
class QDragEnterEvent;
|
||
|
class QDragMoveEvent;
|
||
|
class QDragLeaveEvent;
|
||
|
class QDropEvent;
|
||
|
|
||
|
class FileItem : public <a href="qlistviewitem.html">QListViewItem</a>
|
||
|
{
|
||
|
public:
|
||
|
FileItem( <a href="qlistviewitem.html">QListViewItem</a> *parent, const <a href="qstring.html">QString</a> &s1, const <a href="qstring.html">QString</a> &s2 )
|
||
|
: <a href="qlistviewitem.html">QListViewItem</a>( parent, s1, s2 ), pix( 0 ) {}
|
||
|
|
||
|
const <a href="qpixmap.html">QPixmap</a> *pixmap( int i ) const;
|
||
|
#if !defined(Q_NO_USING_KEYWORD)
|
||
|
using QListViewItem::setPixmap;
|
||
|
#endif
|
||
|
void setPixmap( <a href="qpixmap.html">QPixmap</a> *p );
|
||
|
|
||
|
private:
|
||
|
<a href="qpixmap.html">QPixmap</a> *pix;
|
||
|
|
||
|
};
|
||
|
|
||
|
class Directory : public <a href="qlistviewitem.html">QListViewItem</a>
|
||
|
{
|
||
|
public:
|
||
|
Directory( <a href="qlistview.html">QListView</a> * parent, const <a href="qstring.html">QString</a>& filename );
|
||
|
Directory( Directory * parent, const <a href="qstring.html">QString</a>& filename, const <a href="qstring.html">QString</a> &col2 )
|
||
|
: <a href="qlistviewitem.html">QListViewItem</a>( parent, filename, col2 ), pix( 0 ) {}
|
||
|
Directory( Directory * parent, const <a href="qstring.html">QString</a>& filename );
|
||
|
|
||
|
<a href="qstring.html">QString</a> text( int column ) const;
|
||
|
|
||
|
<a href="qstring.html">QString</a> fullName();
|
||
|
|
||
|
void setOpen( bool );
|
||
|
void setup();
|
||
|
|
||
|
const <a href="qpixmap.html">QPixmap</a> *pixmap( int i ) const;
|
||
|
#if !defined(Q_NO_USING_KEYWORD)
|
||
|
using QListViewItem::setPixmap;
|
||
|
#endif
|
||
|
void setPixmap( <a href="qpixmap.html">QPixmap</a> *p );
|
||
|
|
||
|
private:
|
||
|
<a href="qfile.html">QFile</a> f;
|
||
|
Directory * p;
|
||
|
bool readable;
|
||
|
bool showDirsOnly;
|
||
|
<a href="qpixmap.html">QPixmap</a> *pix;
|
||
|
|
||
|
};
|
||
|
|
||
|
class DirectoryView : public <a href="qlistview.html">QListView</a>
|
||
|
{
|
||
|
<a href="metaobjects.html#Q_OBJECT">Q_OBJECT</a>
|
||
|
|
||
|
public:
|
||
|
DirectoryView( <a href="qwidget.html">QWidget</a> *parent = 0, const char *name = 0, bool sdo = FALSE );
|
||
|
bool showDirsOnly() { return dirsOnly; }
|
||
|
|
||
|
public slots:
|
||
|
void setDir( const <a href="qstring.html">QString</a> & );
|
||
|
|
||
|
signals:
|
||
|
void folderSelected( const <a href="qstring.html">QString</a> & );
|
||
|
|
||
|
protected slots:
|
||
|
void slotFolderSelected( <a href="qlistviewitem.html">QListViewItem</a> * );
|
||
|
void openFolder();
|
||
|
|
||
|
protected:
|
||
|
void contentsDragEnterEvent( <a href="qdragenterevent.html">QDragEnterEvent</a> *e );
|
||
|
void contentsDragMoveEvent( <a href="qdragmoveevent.html">QDragMoveEvent</a> *e );
|
||
|
void contentsDragLeaveEvent( <a href="qdragleaveevent.html">QDragLeaveEvent</a> *e );
|
||
|
void contentsDropEvent( <a href="qdropevent.html">QDropEvent</a> *e );
|
||
|
void contentsMouseMoveEvent( <a href="qmouseevent.html">QMouseEvent</a> *e );
|
||
|
void contentsMousePressEvent( <a href="qmouseevent.html">QMouseEvent</a> *e );
|
||
|
void contentsMouseReleaseEvent( <a href="qmouseevent.html">QMouseEvent</a> *e );
|
||
|
|
||
|
private:
|
||
|
<a href="qstring.html">QString</a> fullPath(QListViewItem* item);
|
||
|
bool dirsOnly;
|
||
|
<a href="qlistviewitem.html">QListViewItem</a> *oldCurrent;
|
||
|
<a href="qlistviewitem.html">QListViewItem</a> *dropItem;
|
||
|
<a href="qtimer.html">QTimer</a>* autoopen_timer;
|
||
|
<a href="qpoint.html">QPoint</a> presspos;
|
||
|
bool mousePressed;
|
||
|
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
</pre>
|
||
|
|
||
|
<p> <hr>
|
||
|
<p> And here is the main implementation file. Note the way the program
|
||
|
scans subdirectories only when it has to. This allows the program
|
||
|
to handle very large file systems efficiently. The same technique
|
||
|
can be used in any other trees.
|
||
|
<p> <pre>/****************************************************************************
|
||
|
** $Id: qt/dirview.cpp 3.3.8 edited Jan 11 14:37 $
|
||
|
**
|
||
|
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
|
||
|
**
|
||
|
** This file is part of an example program for Qt. This example
|
||
|
** program may be used, distributed and modified without limitation.
|
||
|
**
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#include "dirview.h"
|
||
|
|
||
|
#include <<a href="qdir-h.html">qdir.h</a>>
|
||
|
#include <<a href="qfile-h.html">qfile.h</a>>
|
||
|
#include <<a href="qfileinfo-h.html">qfileinfo.h</a>>
|
||
|
#include <<a href="qpixmap-h.html">qpixmap.h</a>>
|
||
|
#include <<a href="qevent-h.html">qevent.h</a>>
|
||
|
#include <<a href="qpoint-h.html">qpoint.h</a>>
|
||
|
#include <<a href="qmessagebox-h.html">qmessagebox.h</a>>
|
||
|
#include <<a href="qdragobject-h.html">qdragobject.h</a>>
|
||
|
#include <<a href="qmime-h.html">qmime.h</a>>
|
||
|
#include <<a href="qstrlist-h.html">qstrlist.h</a>>
|
||
|
#include <<a href="qstringlist-h.html">qstringlist.h</a>>
|
||
|
#include <<a href="qapplication-h.html">qapplication.h</a>>
|
||
|
#include <<a href="qheader-h.html">qheader.h</a>>
|
||
|
|
||
|
static const char* folder_closed_xpm[]={
|
||
|
"16 16 9 1",
|
||
|
"g c #808080",
|
||
|
"b c #c0c000",
|
||
|
"e c #c0c0c0",
|
||
|
"# c #000000",
|
||
|
"c c #ffff00",
|
||
|
". c None",
|
||
|
"a c #585858",
|
||
|
"f c #a0a0a4",
|
||
|
"d c #ffffff",
|
||
|
"..###...........",
|
||
|
".#abc##.........",
|
||
|
".#daabc#####....",
|
||
|
".#ddeaabbccc#...",
|
||
|
".#dedeeabbbba...",
|
||
|
".#edeeeeaaaab#..",
|
||
|
".#deeeeeeefe#ba.",
|
||
|
".#eeeeeeefef#ba.",
|
||
|
".#eeeeeefeff#ba.",
|
||
|
".#eeeeefefff#ba.",
|
||
|
".##geefeffff#ba.",
|
||
|
"...##gefffff#ba.",
|
||
|
".....##fffff#ba.",
|
||
|
".......##fff#b##",
|
||
|
".........##f#b##",
|
||
|
"...........####."};
|
||
|
|
||
|
static const char* folder_open_xpm[]={
|
||
|
"16 16 11 1",
|
||
|
"# c #000000",
|
||
|
"g c #c0c0c0",
|
||
|
"e c #303030",
|
||
|
"a c #ffa858",
|
||
|
"b c #808080",
|
||
|
"d c #a0a0a4",
|
||
|
"f c #585858",
|
||
|
"c c #ffdca8",
|
||
|
"h c #dcdcdc",
|
||
|
"i c #ffffff",
|
||
|
". c None",
|
||
|
"....###.........",
|
||
|
"....#ab##.......",
|
||
|
"....#acab####...",
|
||
|
"###.#acccccca#..",
|
||
|
"#ddefaaaccccca#.",
|
||
|
"#bdddbaaaacccab#",
|
||
|
".eddddbbaaaacab#",
|
||
|
".#bddggdbbaaaab#",
|
||
|
"..edgdggggbbaab#",
|
||
|
"..#bgggghghdaab#",
|
||
|
"...ebhggghicfab#",
|
||
|
"....#edhhiiidab#",
|
||
|
"......#egiiicfb#",
|
||
|
"........#egiibb#",
|
||
|
"..........#egib#",
|
||
|
"............#ee#"};
|
||
|
|
||
|
static const char * folder_locked[]={
|
||
|
"16 16 10 1",
|
||
|
"h c #808080",
|
||
|
"b c #ffa858",
|
||
|
"f c #c0c0c0",
|
||
|
"e c #c05800",
|
||
|
"# c #000000",
|
||
|
"c c #ffdca8",
|
||
|
". c None",
|
||
|
"a c #585858",
|
||
|
"g c #a0a0a4",
|
||
|
"d c #ffffff",
|
||
|
"..#a#...........",
|
||
|
".#abc####.......",
|
||
|
".#daa#eee#......",
|
||
|
".#ddf#e##b#.....",
|
||
|
".#dfd#e#bcb##...",
|
||
|
".#fdccc#daaab#..",
|
||
|
".#dfbbbccgfg#ba.",
|
||
|
".#ffb#ebbfgg#ba.",
|
||
|
".#ffbbe#bggg#ba.",
|
||
|
".#fffbbebggg#ba.",
|
||
|
".##hf#ebbggg#ba.",
|
||
|
"...###e#gggg#ba.",
|
||
|
".....#e#gggg#ba.",
|
||
|
"......###ggg#b##",
|
||
|
".........##g#b##",
|
||
|
"...........####."};
|
||
|
|
||
|
static const char * pix_file []={
|
||
|
"16 16 7 1",
|
||
|
"# c #000000",
|
||
|
"b c #ffffff",
|
||
|
"e c #000000",
|
||
|
"d c #404000",
|
||
|
"c c #c0c000",
|
||
|
"a c #ffffc0",
|
||
|
". c None",
|
||
|
"................",
|
||
|
".........#......",
|
||
|
"......#.#a##....",
|
||
|
".....#b#bbba##..",
|
||
|
"....#b#bbbabbb#.",
|
||
|
"...#b#bba##bb#..",
|
||
|
"..#b#abb#bb##...",
|
||
|
".#a#aab#bbbab##.",
|
||
|
"#a#aaa#bcbbbbbb#",
|
||
|
"#ccdc#bcbbcbbb#.",
|
||
|
".##c#bcbbcabb#..",
|
||
|
"...#acbacbbbe...",
|
||
|
"..#aaaacaba#....",
|
||
|
"...##aaaaa#.....",
|
||
|
".....##aa#......",
|
||
|
".......##......."};
|
||
|
|
||
|
QPixmap *folderLocked = 0;
|
||
|
QPixmap *folderClosed = 0;
|
||
|
QPixmap *folderOpen = 0;
|
||
|
QPixmap *fileNormal = 0;
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Class Directory
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
<a name="f476"></a>Directory::Directory( Directory * parent, const <a href="qstring.html">QString</a>& filename )
|
||
|
: <a href="qlistviewitem.html">QListViewItem</a>( parent ), f(filename),
|
||
|
showDirsOnly( parent->showDirsOnly ),
|
||
|
pix( 0 )
|
||
|
{
|
||
|
p = parent;
|
||
|
readable = QDir( fullName() ).isReadable();
|
||
|
|
||
|
if ( !readable )
|
||
|
<a href="qlistviewitem.html#setPixmap">setPixmap</a>( folderLocked );
|
||
|
else
|
||
|
<a href="qlistviewitem.html#setPixmap">setPixmap</a>( folderClosed );
|
||
|
}
|
||
|
|
||
|
|
||
|
Directory::Directory( <a href="qlistview.html">QListView</a> * parent, const <a href="qstring.html">QString</a>& filename )
|
||
|
: <a href="qlistviewitem.html">QListViewItem</a>( parent ), f(filename),
|
||
|
showDirsOnly( ( (DirectoryView*)parent )->showDirsOnly() ),
|
||
|
pix( 0 )
|
||
|
{
|
||
|
p = 0;
|
||
|
readable = QDir( fullName() ).isReadable();
|
||
|
}
|
||
|
|
||
|
|
||
|
<a name="x1691"></a>void Directory::<a href="qlistviewitem.html#setPixmap">setPixmap</a>( <a href="qpixmap.html">QPixmap</a> *px )
|
||
|
{
|
||
|
pix = px;
|
||
|
<a href="qlistviewitem.html#setup">setup</a>();
|
||
|
<a href="qlistviewitem.html#widthChanged">widthChanged</a>( 0 );
|
||
|
<a href="qlistviewitem.html#invalidateHeight">invalidateHeight</a>();
|
||
|
<a href="qlistviewitem.html#repaint">repaint</a>();
|
||
|
}
|
||
|
|
||
|
|
||
|
<a name="x1689"></a>const QPixmap *Directory::<a href="qlistviewitem.html#pixmap">pixmap</a>( int i ) const
|
||
|
{
|
||
|
if ( i )
|
||
|
return 0;
|
||
|
return pix;
|
||
|
}
|
||
|
|
||
|
<a name="x1690"></a>void Directory::<a href="qlistviewitem.html#setOpen">setOpen</a>( bool o )
|
||
|
{
|
||
|
if ( o )
|
||
|
<a href="qlistviewitem.html#setPixmap">setPixmap</a>( folderOpen );
|
||
|
else
|
||
|
<a href="qlistviewitem.html#setPixmap">setPixmap</a>( folderClosed );
|
||
|
|
||
|
if ( o && !childCount() ) {
|
||
|
<a href="qstring.html">QString</a> s( fullName() );
|
||
|
<a href="qdir.html">QDir</a> thisDir( s );
|
||
|
<a name="x1667"></a> if ( !thisDir.<a href="qdir.html#isReadable">isReadable</a>() ) {
|
||
|
readable = FALSE;
|
||
|
<a href="qlistviewitem.html#setExpandable">setExpandable</a>( FALSE );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
<a href="qlistviewitem.html#listView">listView</a>()->setUpdatesEnabled( FALSE );
|
||
|
<a name="x1666"></a> const QFileInfoList * files = thisDir.<a href="qdir.html#entryInfoList">entryInfoList</a>();
|
||
|
if ( files ) {
|
||
|
QFileInfoListIterator it( *files );
|
||
|
<a href="qfileinfo.html">QFileInfo</a> * fi;
|
||
|
<a name="x1694"></a> while( (fi=it.<a href="qlistviewitemiterator.html#current">current</a>()) != 0 ) {
|
||
|
++it;
|
||
|
<a name="x1675"></a> if ( fi-><a href="qfileinfo.html#fileName">fileName</a>() == "." || fi-><a href="qfileinfo.html#fileName">fileName</a>() == ".." )
|
||
|
; // nothing
|
||
|
<a name="x1678"></a> else if ( fi-><a href="qfileinfo.html#isSymLink">isSymLink</a>() && !showDirsOnly ) {
|
||
|
FileItem *item = new FileItem( this, fi-><a href="qfileinfo.html#fileName">fileName</a>(),
|
||
|
"Symbolic Link" );
|
||
|
item-><a href="qlistviewitem.html#setPixmap">setPixmap</a>( fileNormal );
|
||
|
}
|
||
|
<a name="x1676"></a> else if ( fi-><a href="qfileinfo.html#isDir">isDir</a>() )
|
||
|
(void)new Directory( this, fi-><a href="qfileinfo.html#fileName">fileName</a>() );
|
||
|
else if ( !showDirsOnly ) {
|
||
|
FileItem *item
|
||
|
= new FileItem( this, fi-><a href="qfileinfo.html#fileName">fileName</a>(),
|
||
|
<a name="x1677"></a> fi-><a href="qfileinfo.html#isFile">isFile</a>()?"File":"Special" );
|
||
|
item-><a href="qlistviewitem.html#setPixmap">setPixmap</a>( fileNormal );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
listView()->setUpdatesEnabled( TRUE );
|
||
|
}
|
||
|
QListViewItem::<a href="qlistviewitem.html#setOpen">setOpen</a>( o );
|
||
|
}
|
||
|
|
||
|
|
||
|
<a name="x1692"></a>void Directory::<a href="qlistviewitem.html#setup">setup</a>()
|
||
|
{
|
||
|
setExpandable( TRUE );
|
||
|
QListViewItem::<a href="qlistviewitem.html#setup">setup</a>();
|
||
|
}
|
||
|
|
||
|
|
||
|
QString <a name="f477"></a>Directory::fullName()
|
||
|
{
|
||
|
<a href="qstring.html">QString</a> s;
|
||
|
if ( p ) {
|
||
|
s = p->fullName();
|
||
|
<a name="x1701"></a> s.<a href="qstring.html#append">append</a>( f.name() );
|
||
|
s.<a href="qstring.html#append">append</a>( "/" );
|
||
|
} else {
|
||
|
s = f.name();
|
||
|
}
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
|
||
|
<a name="x1693"></a>QString Directory::<a href="qlistviewitem.html#text">text</a>( int column ) const
|
||
|
{
|
||
|
if ( column == 0 )
|
||
|
return f.name();
|
||
|
else if ( readable )
|
||
|
return "Directory";
|
||
|
else
|
||
|
return "Unreadable Directory";
|
||
|
}
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* Class DirectoryView
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
<a name="f478"></a>DirectoryView::DirectoryView( <a href="qwidget.html">QWidget</a> *parent, const char *name, bool sdo )
|
||
|
: <a href="qlistview.html">QListView</a>( parent, name ), dirsOnly( sdo ), oldCurrent( 0 ),
|
||
|
dropItem( 0 ), mousePressed( FALSE )
|
||
|
{
|
||
|
autoopen_timer = new <a href="qtimer.html">QTimer</a>( this );
|
||
|
if ( !folderLocked ) {
|
||
|
folderLocked = new <a href="qpixmap.html">QPixmap</a>( folder_locked );
|
||
|
folderClosed = new <a href="qpixmap.html">QPixmap</a>( folder_closed_xpm );
|
||
|
folderOpen = new <a href="qpixmap.html">QPixmap</a>( folder_open_xpm );
|
||
|
fileNormal = new <a href="qpixmap.html">QPixmap</a>( pix_file );
|
||
|
}
|
||
|
|
||
|
<a href="qobject.html#connect">connect</a>( this, SIGNAL( <a href="qlistview.html#doubleClicked">doubleClicked</a>( <a href="qlistviewitem.html">QListViewItem</a> * ) ),
|
||
|
this, SLOT( slotFolderSelected( <a href="qlistviewitem.html">QListViewItem</a> * ) ) );
|
||
|
<a href="qobject.html#connect">connect</a>( this, SIGNAL( <a href="qlistview.html#returnPressed">returnPressed</a>( <a href="qlistviewitem.html">QListViewItem</a> * ) ),
|
||
|
this, SLOT( slotFolderSelected( <a href="qlistviewitem.html">QListViewItem</a> * ) ) );
|
||
|
|
||
|
<a href="qwidget.html#setAcceptDrops">setAcceptDrops</a>( TRUE );
|
||
|
<a href="qscrollview.html#viewport">viewport</a>()->setAcceptDrops( TRUE );
|
||
|
|
||
|
<a name="x1706"></a> <a href="qobject.html#connect">connect</a>( autoopen_timer, SIGNAL( <a href="qtimer.html#timeout">timeout</a>() ),
|
||
|
this, SLOT( openFolder() ) );
|
||
|
}
|
||
|
|
||
|
void <a name="f479"></a>DirectoryView::slotFolderSelected( <a href="qlistviewitem.html">QListViewItem</a> *i )
|
||
|
{
|
||
|
if ( !i || !showDirsOnly() )
|
||
|
return;
|
||
|
|
||
|
Directory *dir = (Directory*)i;
|
||
|
emit folderSelected( dir->fullName() );
|
||
|
}
|
||
|
|
||
|
void <a name="f480"></a>DirectoryView::openFolder()
|
||
|
{
|
||
|
<a name="x1705"></a> autoopen_timer-><a href="qtimer.html#stop">stop</a>();
|
||
|
if ( dropItem && !dropItem->isOpen() ) {
|
||
|
dropItem->setOpen( TRUE );
|
||
|
dropItem->repaint();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static const int autoopenTime = 750;
|
||
|
|
||
|
|
||
|
<a name="x1679"></a>void DirectoryView::<a href="qscrollview.html#contentsDragEnterEvent">contentsDragEnterEvent</a>( <a href="qdragenterevent.html">QDragEnterEvent</a> *e )
|
||
|
{
|
||
|
if ( !QUriDrag::canDecode(e) ) {
|
||
|
<a name="x1669"></a> e-><a href="qdragmoveevent.html#ignore">ignore</a>();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
oldCurrent = <a href="qlistview.html#currentItem">currentItem</a>();
|
||
|
|
||
|
<a name="x1673"></a> <a href="qlistviewitem.html">QListViewItem</a> *i = <a href="qlistview.html#itemAt">itemAt</a>( <a href="qscrollview.html#contentsToViewport">contentsToViewport</a>(e-><a href="qdropevent.html#pos">pos</a>()) );
|
||
|
if ( i ) {
|
||
|
dropItem = i;
|
||
|
<a name="x1704"></a> autoopen_timer-><a href="qtimer.html#start">start</a>( autoopenTime );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
<a name="x1681"></a>void DirectoryView::<a href="qscrollview.html#contentsDragMoveEvent">contentsDragMoveEvent</a>( <a href="qdragmoveevent.html">QDragMoveEvent</a> *e )
|
||
|
{
|
||
|
if ( !QUriDrag::canDecode(e) ) {
|
||
|
e-><a href="qdragmoveevent.html#ignore">ignore</a>();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
<a href="qpoint.html">QPoint</a> vp = <a href="qscrollview.html#contentsToViewport">contentsToViewport</a>( ( (QDragMoveEvent*)e )->pos() );
|
||
|
<a href="qlistviewitem.html">QListViewItem</a> *i = <a href="qlistview.html#itemAt">itemAt</a>( vp );
|
||
|
if ( i ) {
|
||
|
<a href="qlistview.html#setSelected">setSelected</a>( i, TRUE );
|
||
|
<a name="x1668"></a> e-><a href="qdragmoveevent.html#accept">accept</a>();
|
||
|
if ( i != dropItem ) {
|
||
|
autoopen_timer-><a href="qtimer.html#stop">stop</a>();
|
||
|
dropItem = i;
|
||
|
autoopen_timer-><a href="qtimer.html#start">start</a>( autoopenTime );
|
||
|
}
|
||
|
<a name="x1672"></a> switch ( e-><a href="qdropevent.html#action">action</a>() ) {
|
||
|
case QDropEvent::Copy:
|
||
|
break;
|
||
|
case QDropEvent::Move:
|
||
|
<a name="x1671"></a> e-><a href="qdropevent.html#acceptAction">acceptAction</a>();
|
||
|
break;
|
||
|
case QDropEvent::Link:
|
||
|
e-><a href="qdropevent.html#acceptAction">acceptAction</a>();
|
||
|
break;
|
||
|
default:
|
||
|
;
|
||
|
}
|
||
|
} else {
|
||
|
e-><a href="qdragmoveevent.html#ignore">ignore</a>();
|
||
|
autoopen_timer-><a href="qtimer.html#stop">stop</a>();
|
||
|
dropItem = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
<a name="x1680"></a>void DirectoryView::<a href="qscrollview.html#contentsDragLeaveEvent">contentsDragLeaveEvent</a>( <a href="qdragleaveevent.html">QDragLeaveEvent</a> * )
|
||
|
{
|
||
|
autoopen_timer-><a href="qtimer.html#stop">stop</a>();
|
||
|
dropItem = 0;
|
||
|
|
||
|
<a href="qlistview.html#setCurrentItem">setCurrentItem</a>( oldCurrent );
|
||
|
<a href="qlistview.html#setSelected">setSelected</a>( oldCurrent, TRUE );
|
||
|
}
|
||
|
|
||
|
<a name="x1682"></a>void DirectoryView::<a href="qscrollview.html#contentsDropEvent">contentsDropEvent</a>( <a href="qdropevent.html">QDropEvent</a> *e )
|
||
|
{
|
||
|
autoopen_timer-><a href="qtimer.html#stop">stop</a>();
|
||
|
|
||
|
if ( !QUriDrag::canDecode(e) ) {
|
||
|
e-><a href="qdragmoveevent.html#ignore">ignore</a>();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
<a href="qlistviewitem.html">QListViewItem</a> *item = <a href="qlistview.html#itemAt">itemAt</a>( <a href="qscrollview.html#contentsToViewport">contentsToViewport</a>(e-><a href="qdropevent.html#pos">pos</a>()) );
|
||
|
if ( item ) {
|
||
|
|
||
|
<a href="qstrlist.html">QStrList</a> lst;
|
||
|
|
||
|
<a name="x1707"></a> QUriDrag::<a href="quridrag.html#decode">decode</a>( e, lst );
|
||
|
|
||
|
<a href="qstring.html">QString</a> str;
|
||
|
|
||
|
switch ( e-><a href="qdropevent.html#action">action</a>() ) {
|
||
|
case QDropEvent::Copy:
|
||
|
str = "Copy";
|
||
|
break;
|
||
|
case QDropEvent::Move:
|
||
|
str = "Move";
|
||
|
e-><a href="qdropevent.html#acceptAction">acceptAction</a>();
|
||
|
break;
|
||
|
case QDropEvent::Link:
|
||
|
str = "Link";
|
||
|
e-><a href="qdropevent.html#acceptAction">acceptAction</a>();
|
||
|
break;
|
||
|
default:
|
||
|
str = "Unknown";
|
||
|
}
|
||
|
|
||
|
str += "\n\n";
|
||
|
|
||
|
e-><a href="qdragmoveevent.html#accept">accept</a>();
|
||
|
|
||
|
<a name="x1699"></a> for ( uint i = 0; i < lst.<a href="qptrlist.html#count">count</a>(); ++i ) {
|
||
|
<a name="x1709"></a><a name="x1697"></a><a name="x1664"></a> <a href="qstring.html">QString</a> filename = QDir::<a href="qdir.html#convertSeparators">convertSeparators</a>(QUriDrag::<a href="quridrag.html#uriToLocalFile">uriToLocalFile</a>(lst.<a href="qptrlist.html#at">at</a>(i)));
|
||
|
str += filename + "\n";
|
||
|
}
|
||
|
str += QString( "\nTo\n\n %1" )
|
||
|
.arg( QDir::<a href="qdir.html#convertSeparators">convertSeparators</a>(fullPath(item)) );
|
||
|
|
||
|
<a name="x1695"></a> QMessageBox::<a href="qmessagebox.html#information">information</a>( this, "Drop target", str, "Not implemented" );
|
||
|
} else
|
||
|
e-><a href="qdragmoveevent.html#ignore">ignore</a>();
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
QString <a name="f481"></a>DirectoryView::fullPath(QListViewItem* item)
|
||
|
{
|
||
|
<a href="qstring.html">QString</a> fullpath = item-><a href="qlistviewitem.html#text">text</a>(0);
|
||
|
<a name="x1688"></a> while ( (item=item-><a href="qlistviewitem.html#parent">parent</a>()) ) {
|
||
|
if ( item-><a href="qlistviewitem.html#parent">parent</a>() )
|
||
|
fullpath = item-><a href="qlistviewitem.html#text">text</a>(0) + "/" + fullpath;
|
||
|
else
|
||
|
fullpath = item-><a href="qlistviewitem.html#text">text</a>(0) + fullpath;
|
||
|
}
|
||
|
#ifdef Q_WS_WIN
|
||
|
<a name="x1702"></a> if (fullpath.<a href="qstring.html#length">length</a>() > 2 && fullpath[1] != ':') {
|
||
|
<a href="qdir.html">QDir</a> dir(fullpath);
|
||
|
<a name="x1665"></a> fullpath = dir.<a href="qdir.html#currentDirPath">currentDirPath</a>().left(2) + fullpath;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
return fullpath;
|
||
|
}
|
||
|
|
||
|
<a name="x1684"></a>void DirectoryView::<a href="qlistview.html#contentsMousePressEvent">contentsMousePressEvent</a>( <a href="qmouseevent.html">QMouseEvent</a>* e )
|
||
|
{
|
||
|
QListView::<a href="qlistview.html#contentsMousePressEvent">contentsMousePressEvent</a>(e);
|
||
|
<a href="qpoint.html">QPoint</a> p( contentsToViewport( e-><a href="qdropevent.html#pos">pos</a>() ) );
|
||
|
<a href="qlistviewitem.html">QListViewItem</a> *i = itemAt( p );
|
||
|
if ( i ) {
|
||
|
// if the user clicked into the root decoration of the item, don't try to start a drag!
|
||
|
<a name="x1696"></a> if ( p.<a href="qpoint.html#x">x</a>() > header()->cellPos( header()->mapToActual( 0 ) ) +
|
||
|
<a name="x1686"></a> treeStepSize() * ( i-><a href="qlistviewitem.html#depth">depth</a>() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() ||
|
||
|
p.<a href="qpoint.html#x">x</a>() < header()->cellPos( header()->mapToActual( 0 ) ) ) {
|
||
|
presspos = e-><a href="qdropevent.html#pos">pos</a>();
|
||
|
mousePressed = TRUE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
<a name="x1683"></a>void DirectoryView::<a href="qlistview.html#contentsMouseMoveEvent">contentsMouseMoveEvent</a>( <a href="qmouseevent.html">QMouseEvent</a>* e )
|
||
|
{
|
||
|
if ( mousePressed && ( presspos - e-><a href="qdropevent.html#pos">pos</a>() ).manhattanLength() > QApplication::<a href="qapplication.html#startDragDistance">startDragDistance</a>() ) {
|
||
|
mousePressed = FALSE;
|
||
|
<a href="qlistviewitem.html">QListViewItem</a> *item = itemAt( contentsToViewport(presspos) );
|
||
|
if ( item ) {
|
||
|
<a href="qstring.html">QString</a> source = fullPath(item);
|
||
|
<a name="x1674"></a> if ( QFile::<a href="qfile.html#exists">exists</a>(source) ) {
|
||
|
<a href="quridrag.html">QUriDrag</a>* ud = new <a href="quridrag.html">QUriDrag</a>(viewport());
|
||
|
<a name="x1708"></a> ud-><a href="quridrag.html#setFileNames">setFileNames</a>( source );
|
||
|
<a name="x1670"></a> if ( ud-><a href="qdragobject.html#drag">drag</a>() )
|
||
|
QMessageBox::<a href="qmessagebox.html#information">information</a>( this, "Drag source",
|
||
|
QString("Delete ") + QDir::convertSeparators(source), "Not implemented" );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
<a name="x1685"></a>void DirectoryView::<a href="qlistview.html#contentsMouseReleaseEvent">contentsMouseReleaseEvent</a>( <a href="qmouseevent.html">QMouseEvent</a> * )
|
||
|
{
|
||
|
mousePressed = FALSE;
|
||
|
}
|
||
|
|
||
|
void <a name="f482"></a>DirectoryView::setDir( const <a href="qstring.html">QString</a> &s )
|
||
|
{
|
||
|
<a href="qlistviewitemiterator.html">QListViewItemIterator</a> it( this );
|
||
|
++it;
|
||
|
for ( ; it.<a href="qlistviewitemiterator.html#current">current</a>(); ++it ) {
|
||
|
it.<a href="qlistviewitemiterator.html#current">current</a>()->setOpen( FALSE );
|
||
|
}
|
||
|
|
||
|
<a name="x1703"></a> <a href="qstringlist.html">QStringList</a> lst( QStringList::<a href="qstringlist.html#split">split</a>( "/", s ) );
|
||
|
<a href="qlistviewitem.html">QListViewItem</a> *item = <a href="qlistviewitem.html#firstChild">firstChild</a>();
|
||
|
<a name="x1698"></a> QStringList::Iterator it2 = lst.<a href="qvaluelist.html#begin">begin</a>();
|
||
|
<a name="x1700"></a> for ( ; it2 != lst.<a href="qvaluelist.html#end">end</a>(); ++it2 ) {
|
||
|
while ( item ) {
|
||
|
if ( item-><a href="qlistviewitem.html#text">text</a>( 0 ) == *it2 ) {
|
||
|
item-><a href="qlistviewitem.html#setOpen">setOpen</a>( TRUE );
|
||
|
break;
|
||
|
}
|
||
|
<a name="x1687"></a> item = item-><a href="qlistviewitem.html#itemBelow">itemBelow</a>();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( item )
|
||
|
setCurrentItem( item );
|
||
|
}
|
||
|
|
||
|
void FileItem::<a href="qlistviewitem.html#setPixmap">setPixmap</a>( <a href="qpixmap.html">QPixmap</a> *p )
|
||
|
{
|
||
|
pix = p;
|
||
|
<a href="qlistviewitem.html#setup">setup</a>();
|
||
|
<a href="qlistviewitem.html#widthChanged">widthChanged</a>( 0 );
|
||
|
<a href="qlistviewitem.html#invalidateHeight">invalidateHeight</a>();
|
||
|
<a href="qlistviewitem.html#repaint">repaint</a>();
|
||
|
}
|
||
|
|
||
|
|
||
|
const QPixmap *FileItem::<a href="qlistviewitem.html#pixmap">pixmap</a>( int i ) const
|
||
|
{
|
||
|
if ( i )
|
||
|
return 0;
|
||
|
return pix;
|
||
|
}
|
||
|
</pre>
|
||
|
|
||
|
<p> <hr>
|
||
|
<p> Main:
|
||
|
<p> <pre>/****************************************************************************
|
||
|
** $Id: qt/main.cpp 3.3.8 edited Jan 11 14:37 $
|
||
|
**
|
||
|
** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
|
||
|
**
|
||
|
** This file is part of an example program for Qt. This example
|
||
|
** program may be used, distributed and modified without limitation.
|
||
|
**
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#include <<a href="qapplication-h.html">qapplication.h</a>>
|
||
|
#include <<a href="qfileinfo-h.html">qfileinfo.h</a>>
|
||
|
#include <<a href="qdir-h.html">qdir.h</a>>
|
||
|
#include "dirview.h"
|
||
|
|
||
|
int main( int argc, char ** argv )
|
||
|
{
|
||
|
<a href="qapplication.html">QApplication</a> a( argc, argv );
|
||
|
|
||
|
DirectoryView mw;
|
||
|
|
||
|
<a name="x1714"></a> mw.<a href="qlistview.html#addColumn">addColumn</a>( "Name" );
|
||
|
mw.<a href="qlistview.html#addColumn">addColumn</a>( "Type" );
|
||
|
<a name="x1716"></a> mw.<a href="qlistview.html#setTreeStepSize">setTreeStepSize</a>( 20 );
|
||
|
|
||
|
<a name="x1712"></a> const QFileInfoList* roots = QDir::<a href="qdir.html#drives">drives</a>();
|
||
|
<a href="qptrlistiterator.html">QPtrListIterator</a><QFileInfo> i(*roots);
|
||
|
<a href="qfileinfo.html">QFileInfo</a>* fi;
|
||
|
while ( (fi = *i) ) {
|
||
|
++i;
|
||
|
<a name="x1713"></a> Directory * root = new Directory( &mw, fi-><a href="qfileinfo.html#filePath">filePath</a>() );
|
||
|
if ( roots->count() <= 1 )
|
||
|
<a name="x1718"></a> root-><a href="qlistviewitem.html#setOpen">setOpen</a>( TRUE ); // be interesting
|
||
|
}
|
||
|
|
||
|
<a name="x1719"></a> mw.<a href="qwidget.html#resize">resize</a>( 400, 400 );
|
||
|
mw.<a href="qwidget.html#setCaption">setCaption</a>( "Qt Example - Directory Browser" );
|
||
|
<a name="x1715"></a> mw.<a href="qlistview.html#setAllColumnsShowFocus">setAllColumnsShowFocus</a>( TRUE );
|
||
|
a.<a href="qapplication.html#setMainWidget">setMainWidget</a>( &mw );
|
||
|
<a name="x1717"></a> mw.<a href="qwidget.html#show">show</a>();
|
||
|
|
||
|
return a.<a href="qapplication.html#exec">exec</a>();
|
||
|
}
|
||
|
</pre>
|
||
|
|
||
|
<p>See also <a href="examples.html">Examples</a>.
|
||
|
|
||
|
<!-- eof -->
|
||
|
<p><address><hr><div align=center>
|
||
|
<table width=100% cellspacing=0 border=0><tr>
|
||
|
<td>Copyright © 2007
|
||
|
<a href="troll.html">Trolltech</a><td align=center><a href="trademarks.html">Trademarks</a>
|
||
|
<td align=right><div align=right>Qt 3.3.8</div>
|
||
|
</table></div></address></body>
|
||
|
</html>
|