<!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 TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#ifndef DIRVIEW_H
#define DIRVIEW_H
#include < < a href = "qlistview-h.html" > ntqlistview.h< / a > >
#include < < a href = "qstring-h.html" > ntqstring.h< / a > >
#include < < a href = "qfile-h.html" > ntqfile.h< / a > >
#include < < a href = "qfileinfo-h.html" > ntqfileinfo.h< / a > >
#include < < a href = "qtimer-h.html" > ntqtimer.h< / a > >
class TQWidget;
class TQDragEnterEvent;
class TQDragMoveEvent;
class TQDragLeaveEvent;
class TQDropEvent;
class FileItem : public < a href = "qlistviewitem.html" > TQListViewItem< / a >
{
public:
FileItem( < a href = "qlistviewitem.html" > TQListViewItem< / a > *parent, const < a href = "ntqstring.html" > TQString< / a > & s1, const < a href = "ntqstring.html" > TQString< / a > & s2 )
: < a href = "qlistviewitem.html" > TQListViewItem< / a > ( parent, s1, s2 ), pix( 0 ) {}
const < a href = "ntqpixmap.html" > TQPixmap< / a > *pixmap( int i ) const;
#if !defined(Q_NO_USING_KEYWORD)
using TQListViewItem::setPixmap;
#endif
void setPixmap( < a href = "ntqpixmap.html" > TQPixmap< / a > *p );
private:
< a href = "ntqpixmap.html" > TQPixmap< / a > *pix;
};
class Directory : public < a href = "qlistviewitem.html" > TQListViewItem< / a >
{
public:
Directory( < a href = "ntqlistview.html" > TQListView< / a > * parent, const < a href = "ntqstring.html" > TQString< / a > & filename );
Directory( Directory * parent, const < a href = "ntqstring.html" > TQString< / a > & filename, const < a href = "ntqstring.html" > TQString< / a > & col2 )
: < a href = "qlistviewitem.html" > TQListViewItem< / a > ( parent, filename, col2 ), pix( 0 ) {}
Directory( Directory * parent, const < a href = "ntqstring.html" > TQString< / a > & filename );
< a href = "ntqstring.html" > TQString< / a > text( int column ) const;
< a href = "ntqstring.html" > TQString< / a > fullName();
void setOpen( bool );
void setup();
const < a href = "ntqpixmap.html" > TQPixmap< / a > *pixmap( int i ) const;
#if !defined(Q_NO_USING_KEYWORD)
using TQListViewItem::setPixmap;
#endif
void setPixmap( < a href = "ntqpixmap.html" > TQPixmap< / a > *p );
private:
< a href = "ntqfile.html" > TQFile< / a > f;
Directory * p;
bool readable;
bool showDirsOnly;
< a href = "ntqpixmap.html" > TQPixmap< / a > *pix;
};
class DirectoryView : public < a href = "ntqlistview.html" > TQListView< / a >
{
< a href = "metaobjects.html#TQ_OBJECT" > TQ_OBJECT< / a >
public:
DirectoryView( < a href = "ntqwidget.html" > TQWidget< / a > *parent = 0, const char *name = 0, bool sdo = FALSE );
bool showDirsOnly() { return dirsOnly; }
public slots:
void setDir( const < a href = "ntqstring.html" > TQString< / a > & );
signals:
void folderSelected( const < a href = "ntqstring.html" > TQString< / a > & );
protected slots:
void slotFolderSelected( < a href = "qlistviewitem.html" > TQListViewItem< / a > * );
void openFolder();
protected:
void contentsDragEnterEvent( < a href = "qdragenterevent.html" > TQDragEnterEvent< / a > *e );
void contentsDragMoveEvent( < a href = "qdragmoveevent.html" > TQDragMoveEvent< / a > *e );
void contentsDragLeaveEvent( < a href = "qdragleaveevent.html" > TQDragLeaveEvent< / a > *e );
void contentsDropEvent( < a href = "qdropevent.html" > TQDropEvent< / a > *e );
void contentsMouseMoveEvent( < a href = "qmouseevent.html" > TQMouseEvent< / a > *e );
void contentsMousePressEvent( < a href = "qmouseevent.html" > TQMouseEvent< / a > *e );
void contentsMouseReleaseEvent( < a href = "qmouseevent.html" > TQMouseEvent< / a > *e );
private:
< a href = "ntqstring.html" > TQString< / a > fullPath(TQListViewItem* item);
bool dirsOnly;
< a href = "qlistviewitem.html" > TQListViewItem< / a > *oldCurrent;
< a href = "qlistviewitem.html" > TQListViewItem< / a > *dropItem;
< a href = "ntqtimer.html" > TQTimer< / a > * autoopen_timer;
< a href = "ntqpoint.html" > TQPoint< / 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 TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "dirview.h"
#include < < a href = "qdir-h.html" > ntqdir.h< / a > >
#include < < a href = "qfile-h.html" > ntqfile.h< / a > >
#include < < a href = "qfileinfo-h.html" > ntqfileinfo.h< / a > >
#include < < a href = "qpixmap-h.html" > ntqpixmap.h< / a > >
#include < < a href = "qevent-h.html" > ntqevent.h< / a > >
#include < < a href = "qpoint-h.html" > ntqpoint.h< / a > >
#include < < a href = "qmessagebox-h.html" > ntqmessagebox.h< / a > >
#include < < a href = "qdragobject-h.html" > ntqdragobject.h< / a > >
#include < < a href = "qmime-h.html" > ntqmime.h< / a > >
#include < < a href = "qstrlist-h.html" > ntqstrlist.h< / a > >
#include < < a href = "qstringlist-h.html" > ntqstringlist.h< / a > >
#include < < a href = "qapplication-h.html" > ntqapplication.h< / a > >
#include < < a href = "qheader-h.html" > ntqheader.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#......",
".......##......."};
TQPixmap *folderLocked = 0;
TQPixmap *folderClosed = 0;
TQPixmap *folderOpen = 0;
TQPixmap *fileNormal = 0;
/*****************************************************************************
*
* Class Directory
*
*****************************************************************************/
< a name = "f476" > < / a > Directory::Directory( Directory * parent, const < a href = "ntqstring.html" > TQString< / a > & filename )
: < a href = "qlistviewitem.html" > TQListViewItem< / a > ( parent ), f(filename),
showDirsOnly( parent-> showDirsOnly ),
pix( 0 )
{
p = parent;
readable = TQDir( 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 = "ntqlistview.html" > TQListView< / a > * parent, const < a href = "ntqstring.html" > TQString< / a > & filename )
: < a href = "qlistviewitem.html" > TQListViewItem< / a > ( parent ), f(filename),
showDirsOnly( ( (DirectoryView*)parent )-> showDirsOnly() ),
pix( 0 )
{
p = 0;
readable = TQDir( fullName() ).isReadable();
}
< a name = "x1691" > < / a > void Directory::< a href = "qlistviewitem.html#setPixmap" > setPixmap< / a > ( < a href = "ntqpixmap.html" > TQPixmap< / 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 TQPixmap *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 = "ntqstring.html" > TQString< / a > s( fullName() );
< a href = "ntqdir.html" > TQDir< / a > thisDir( s );
< a name = "x1667" > < / a > if ( !thisDir.< a href = "ntqdir.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 TQFileInfoList * files = thisDir.< a href = "ntqdir.html#entryInfoList" > entryInfoList< / a > ();
if ( files ) {
TQFileInfoListIterator it( *files );
< a href = "ntqfileinfo.html" > TQFileInfo< / 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 = "ntqfileinfo.html#fileName" > fileName< / a > () == "." || fi-> < a href = "ntqfileinfo.html#fileName" > fileName< / a > () == ".." )
; // nothing
< a name = "x1678" > < / a > else if ( fi-> < a href = "ntqfileinfo.html#isSymLink" > isSymLink< / a > () & & !showDirsOnly ) {
FileItem *item = new FileItem( this, fi-> < a href = "ntqfileinfo.html#fileName" > fileName< / a > (),
"Symbolic Link" );
item-> < a href = "qlistviewitem.html#setPixmap" > setPixmap< / a > ( fileNormal );
}
< a name = "x1676" > < / a > else if ( fi-> < a href = "ntqfileinfo.html#isDir" > isDir< / a > () )
(void)new Directory( this, fi-> < a href = "ntqfileinfo.html#fileName" > fileName< / a > () );
else if ( !showDirsOnly ) {
FileItem *item
= new FileItem( this, fi-> < a href = "ntqfileinfo.html#fileName" > fileName< / a > (),
< a name = "x1677" > < / a > fi-> < a href = "ntqfileinfo.html#isFile" > isFile< / a > ()?"File":"Special" );
item-> < a href = "qlistviewitem.html#setPixmap" > setPixmap< / a > ( fileNormal );
}
}
}
listView()-> setUpdatesEnabled( TRUE );
}
TQListViewItem::< a href = "qlistviewitem.html#setOpen" > setOpen< / a > ( o );
}
< a name = "x1692" > < / a > void Directory::< a href = "qlistviewitem.html#setup" > setup< / a > ()
{
setExpandable( TRUE );
TQListViewItem::< a href = "qlistviewitem.html#setup" > setup< / a > ();
}
TQString < a name = "f477" > < / a > Directory::fullName()
{
< a href = "ntqstring.html" > TQString< / a > s;
if ( p ) {
s = p-> fullName();
< a name = "x1701" > < / a > s.< a href = "ntqstring.html#append" > append< / a > ( f.name() );
s.< a href = "ntqstring.html#append" > append< / a > ( "/" );
} else {
s = f.name();
}
return s;
}
< a name = "x1693" > < / a > TQString 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 = "ntqwidget.html" > TQWidget< / a > *parent, const char *name, bool sdo )
: < a href = "ntqlistview.html" > TQListView< / a > ( parent, name ), dirsOnly( sdo ), oldCurrent( 0 ),
dropItem( 0 ), mousePressed( FALSE )
{
autoopen_timer = new < a href = "ntqtimer.html" > TQTimer< / a > ( this );
if ( !folderLocked ) {
folderLocked = new < a href = "ntqpixmap.html" > TQPixmap< / a > ( folder_locked );
folderClosed = new < a href = "ntqpixmap.html" > TQPixmap< / a > ( folder_closed_xpm );
folderOpen = new < a href = "ntqpixmap.html" > TQPixmap< / a > ( folder_open_xpm );
fileNormal = new < a href = "ntqpixmap.html" > TQPixmap< / a > ( pix_file );
}
< a href = "ntqobject.html#connect" > connect< / a > ( this, SIGNAL( < a href = "ntqlistview.html#doubleClicked" > doubleClicked< / a > ( < a href = "qlistviewitem.html" > TQListViewItem< / a > * ) ),
this, SLOT( slotFolderSelected( < a href = "qlistviewitem.html" > TQListViewItem< / a > * ) ) );
< a href = "ntqobject.html#connect" > connect< / a > ( this, SIGNAL( < a href = "ntqlistview.html#returnPressed" > returnPressed< / a > ( < a href = "qlistviewitem.html" > TQListViewItem< / a > * ) ),
this, SLOT( slotFolderSelected( < a href = "qlistviewitem.html" > TQListViewItem< / a > * ) ) );
< a href = "ntqwidget.html#setAcceptDrops" > setAcceptDrops< / a > ( TRUE );
< a href = "ntqscrollview.html#viewport" > viewport< / a > ()-> setAcceptDrops( TRUE );
< a name = "x1706" > < / a > < a href = "ntqobject.html#connect" > connect< / a > ( autoopen_timer, SIGNAL( < a href = "ntqtimer.html#timeout" > timeout< / a > () ),
this, SLOT( openFolder() ) );
}
void < a name = "f479" > < / a > DirectoryView::slotFolderSelected( < a href = "qlistviewitem.html" > TQListViewItem< / 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 = "ntqtimer.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 = "ntqscrollview.html#contentsDragEnterEvent" > contentsDragEnterEvent< / a > ( < a href = "qdragenterevent.html" > TQDragEnterEvent< / a > *e )
{
if ( !TQUriDrag::canDecode(e) ) {
< a name = "x1669" > < / a > e-> < a href = "qdragmoveevent.html#ignore" > ignore< / a > ();
return;
}
oldCurrent = < a href = "ntqlistview.html#currentItem" > currentItem< / a > ();
< a name = "x1673" > < / a > < a href = "qlistviewitem.html" > TQListViewItem< / a > *i = < a href = "ntqlistview.html#itemAt" > itemAt< / a > ( < a href = "ntqscrollview.html#contentsToViewport" > contentsToViewport< / a > (e-> < a href = "qdropevent.html#pos" > pos< / a > ()) );
if ( i ) {
dropItem = i;
< a name = "x1704" > < / a > autoopen_timer-> < a href = "ntqtimer.html#start" > start< / a > ( autoopenTime );
}
}
< a name = "x1681" > < / a > void DirectoryView::< a href = "ntqscrollview.html#contentsDragMoveEvent" > contentsDragMoveEvent< / a > ( < a href = "qdragmoveevent.html" > TQDragMoveEvent< / a > *e )
{
if ( !TQUriDrag::canDecode(e) ) {
e-> < a href = "qdragmoveevent.html#ignore" > ignore< / a > ();
return;
}
< a href = "ntqpoint.html" > TQPoint< / a > vp = < a href = "ntqscrollview.html#contentsToViewport" > contentsToViewport< / a > ( ( (TQDragMoveEvent*)e )-> pos() );
< a href = "qlistviewitem.html" > TQListViewItem< / a > *i = < a href = "ntqlistview.html#itemAt" > itemAt< / a > ( vp );
if ( i ) {
< a href = "ntqlistview.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 = "ntqtimer.html#stop" > stop< / a > ();
dropItem = i;
autoopen_timer-> < a href = "ntqtimer.html#start" > start< / a > ( autoopenTime );
}
< a name = "x1672" > < / a > switch ( e-> < a href = "qdropevent.html#action" > action< / a > () ) {
case TQDropEvent::Copy:
break;
case TQDropEvent::Move:
< a name = "x1671" > < / a > e-> < a href = "qdropevent.html#acceptAction" > acceptAction< / a > ();
break;
case TQDropEvent::Link:
e-> < a href = "qdropevent.html#acceptAction" > acceptAction< / a > ();
break;
default:
;
}
} else {
e-> < a href = "qdragmoveevent.html#ignore" > ignore< / a > ();
autoopen_timer-> < a href = "ntqtimer.html#stop" > stop< / a > ();
dropItem = 0;
}
}
< a name = "x1680" > < / a > void DirectoryView::< a href = "ntqscrollview.html#contentsDragLeaveEvent" > contentsDragLeaveEvent< / a > ( < a href = "qdragleaveevent.html" > TQDragLeaveEvent< / a > * )
{
autoopen_timer-> < a href = "ntqtimer.html#stop" > stop< / a > ();
dropItem = 0;
< a href = "ntqlistview.html#setCurrentItem" > setCurrentItem< / a > ( oldCurrent );
< a href = "ntqlistview.html#setSelected" > setSelected< / a > ( oldCurrent, TRUE );
}
< a name = "x1682" > < / a > void DirectoryView::< a href = "ntqscrollview.html#contentsDropEvent" > contentsDropEvent< / a > ( < a href = "qdropevent.html" > TQDropEvent< / a > *e )
{
autoopen_timer-> < a href = "ntqtimer.html#stop" > stop< / a > ();
if ( !TQUriDrag::canDecode(e) ) {
e-> < a href = "qdragmoveevent.html#ignore" > ignore< / a > ();
return;
}
< a href = "qlistviewitem.html" > TQListViewItem< / a > *item = < a href = "ntqlistview.html#itemAt" > itemAt< / a > ( < a href = "ntqscrollview.html#contentsToViewport" > contentsToViewport< / a > (e-> < a href = "qdropevent.html#pos" > pos< / a > ()) );
if ( item ) {
< a href = "ntqstrlist.html" > TQStrList< / a > lst;
< a name = "x1707" > < / a > TQUriDrag::< a href = "quridrag.html#decode" > decode< / a > ( e, lst );
< a href = "ntqstring.html" > TQString< / a > str;
switch ( e-> < a href = "qdropevent.html#action" > action< / a > () ) {
case TQDropEvent::Copy:
str = "Copy";
break;
case TQDropEvent::Move:
str = "Move";
e-> < a href = "qdropevent.html#acceptAction" > acceptAction< / a > ();
break;
case TQDropEvent::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 = "ntqptrlist.html#count" > count< / a > (); ++i ) {
< a name = "x1709" > < / a > < a name = "x1697" > < / a > < a name = "x1664" > < / a > < a href = "ntqstring.html" > TQString< / a > filename = TQDir::< a href = "ntqdir.html#convertSeparators" > convertSeparators< / a > (TQUriDrag::< a href = "quridrag.html#uriToLocalFile" > uriToLocalFile< / a > (lst.< a href = "ntqptrlist.html#at" > at< / a > (i)));
str += filename + "\n";
}
str += TQString( "\nTo\n\n %1" )
.arg( TQDir::< a href = "ntqdir.html#convertSeparators" > convertSeparators< / a > (fullPath(item)) );
< a name = "x1695" > < / a > TQMessageBox::< a href = "ntqmessagebox.html#information" > information< / a > ( this, "Drop target", str, "Not implemented" );
} else
e-> < a href = "qdragmoveevent.html#ignore" > ignore< / a > ();
}
TQString < a name = "f481" > < / a > DirectoryView::fullPath(TQListViewItem* item)
{
< a href = "ntqstring.html" > TQString< / 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 = "ntqstring.html#length" > length< / a > () > 2 & & fullpath[1] != ':') {
< a href = "ntqdir.html" > TQDir< / a > dir(fullpath);
< a name = "x1665" > < / a > fullpath = dir.< a href = "ntqdir.html#currentDirPath" > currentDirPath< / a > ().left(2) + fullpath;
}
#endif
return fullpath;
}
< a name = "x1684" > < / a > void DirectoryView::< a href = "ntqlistview.html#contentsMousePressEvent" > contentsMousePressEvent< / a > ( < a href = "qmouseevent.html" > TQMouseEvent< / a > * e )
{
TQListView::< a href = "ntqlistview.html#contentsMousePressEvent" > contentsMousePressEvent< / a > (e);
< a href = "ntqpoint.html" > TQPoint< / a > p( contentsToViewport( e-> < a href = "qdropevent.html#pos" > pos< / a > () ) );
< a href = "qlistviewitem.html" > TQListViewItem< / 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 = "ntqpoint.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 = "ntqpoint.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 = "ntqlistview.html#contentsMouseMoveEvent" > contentsMouseMoveEvent< / a > ( < a href = "qmouseevent.html" > TQMouseEvent< / a > * e )
{
if ( mousePressed & & ( presspos - e-> < a href = "qdropevent.html#pos" > pos< / a > () ).manhattanLength() > TQApplication::< a href = "ntqapplication.html#startDragDistance" > startDragDistance< / a > () ) {
mousePressed = FALSE;
< a href = "qlistviewitem.html" > TQListViewItem< / a > *item = itemAt( contentsToViewport(presspos) );
if ( item ) {
< a href = "ntqstring.html" > TQString< / a > source = fullPath(item);
< a name = "x1674" > < / a > if ( TQFile::< a href = "ntqfile.html#exists" > exists< / a > (source) ) {
< a href = "quridrag.html" > TQUriDrag< / a > * ud = new < a href = "quridrag.html" > TQUriDrag< / a > (viewport());
< a name = "x1708" > < / a > ud-> < a href = "quridrag.html#setFileNames" > setFileNames< / a > ( source );
< a name = "x1670" > < / a > if ( ud-> < a href = "ntqdragobject.html#drag" > drag< / a > () )
TQMessageBox::< a href = "ntqmessagebox.html#information" > information< / a > ( this, "Drag source",
TQString("Delete ") + TQDir::convertSeparators(source), "Not implemented" );
}
}
}
}
< a name = "x1685" > < / a > void DirectoryView::< a href = "ntqlistview.html#contentsMouseReleaseEvent" > contentsMouseReleaseEvent< / a > ( < a href = "qmouseevent.html" > TQMouseEvent< / a > * )
{
mousePressed = FALSE;
}
void < a name = "f482" > < / a > DirectoryView::setDir( const < a href = "ntqstring.html" > TQString< / a > & s )
{
< a href = "qlistviewitemiterator.html" > TQListViewItemIterator< / 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 = "ntqstringlist.html" > TQStringList< / a > lst( TQStringList::< a href = "ntqstringlist.html#split" > split< / a > ( "/", s ) );
< a href = "qlistviewitem.html" > TQListViewItem< / a > *item = < a href = "qlistviewitem.html#firstChild" > firstChild< / a > ();
< a name = "x1698" > < / a > TQStringList::Iterator it2 = lst.< a href = "ntqvaluelist.html#begin" > begin< / a > ();
< a name = "x1700" > < / a > for ( ; it2 != lst.< a href = "ntqvaluelist.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 = "ntqpixmap.html" > TQPixmap< / 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 TQPixmap *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 TQt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include < < a href = "qapplication-h.html" > ntqapplication.h< / a > >
#include < < a href = "qfileinfo-h.html" > ntqfileinfo.h< / a > >
#include < < a href = "qdir-h.html" > ntqdir.h< / a > >
#include "dirview.h"
int main( int argc, char ** argv )
{
< a href = "ntqapplication.html" > TQApplication< / a > a( argc, argv );
DirectoryView mw;
< a name = "x1714" > < / a > mw.< a href = "ntqlistview.html#addColumn" > addColumn< / a > ( "Name" );
mw.< a href = "ntqlistview.html#addColumn" > addColumn< / a > ( "Type" );
< a name = "x1716" > < / a > mw.< a href = "ntqlistview.html#setTreeStepSize" > setTreeStepSize< / a > ( 20 );
< a name = "x1712" > < / a > const TQFileInfoList* roots = TQDir::< a href = "ntqdir.html#drives" > drives< / a > ();
< a href = "qptrlistiterator.html" > TQPtrListIterator< / a > < TQFileInfo> i(*roots);
< a href = "ntqfileinfo.html" > TQFileInfo< / a > * fi;
while ( (fi = *i) ) {
++i;
< a name = "x1713" > < / a > Directory * root = new Directory( & mw, fi-> < a href = "ntqfileinfo.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 = "ntqwidget.html#resize" > resize< / a > ( 400, 400 );
mw.< a href = "ntqwidget.html#setCaption" > setCaption< / a > ( "TQt Example - Directory Browser" );
< a name = "x1715" > < / a > mw.< a href = "ntqlistview.html#setAllColumnsShowFocus" > setAllColumnsShowFocus< / a > ( TRUE );
a.< a href = "ntqapplication.html#setMainWidget" > setMainWidget< / a > ( & mw );
< a name = "x1717" > < / a > mw.< a href = "ntqwidget.html#show" > show< / a > ();
return a.< a href = "ntqapplication.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 > TQt 3.3.8< / div >
< / table > < / div > < / address > < / body >
< / html >