/****************************************************************************
** $Id: qfileiconview.h,v 1.4 1999/06/11 13:36:41 reggie Exp $
**
** Copyright (C) 1992-1999 Troll Tech AS. 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 QTFILEICONVIEW_H
#define QTFILEICONVIEW_H
#include <qiconset.h>
#include <qstring.h>
#include <qfileinfo.h>
#include <qdir.h>
#include <qtimer.h>
#include "../qiconview/qiconview.h"
class QtFileIconView;
class QDragObject;
/*****************************************************************************
*
* Class QtFileIconViewItem
*
*****************************************************************************/
class QtFileIconViewItem : public QtIconViewItem
{
Q_OBJECT
public:
enum ItemType {
File = 0,
Dir,
Link
};
QtFileIconViewItem( QtFileIconView *parent, QFileInfo *fi );
virtual ~QtFileIconViewItem();
ItemType type()
{ return itemType; }
QString filename() { return itemFileName; }
virtual bool acceptDrop( QMimeSource *e );
virtual void setText( const QString &text );
virtual void dragEntered();
virtual void dragLeft();
protected:
virtual void dropped( QMimeSource *mime );
QString itemFileName;
QFileInfo itemFileInfo;
ItemType itemType;
bool checkSetText;
QTimer timer;
protected slots:
void openFolder();
};
/*****************************************************************************
*
* Class QtFileIconView
*
*****************************************************************************/
class QtFileIconView : public QtIconView
{
Q_OBJECT
public:
QtFileIconView( const QString &dir, QWidget *parent = 0, const char *name = 0 );
public slots:
void setDirectory( const QString &dir );
void setDirectory( const QDir &dir );
void newDirectory();
QDir currentDir();
signals:
void directoryChanged( const QString & );
void startReadDir( int dirs );
void readNextDir();
void readDirDone();
protected slots:
void itemDoubleClicked( QtIconViewItem *i );
void slotDropped( QMimeSource *mime );
void viewLarge();
void viewNormal();
void viewSmall();
void alignInGrid();
void slotItemRightClicked( QtIconViewItem *item );
void slotViewportRightClicked();
protected:
void readDir( const QDir &dir );
virtual QDragObject *dragObject();
virtual void keyPressEvent( QKeyEvent *e );
QDir viewDir;
int newFolderNum;
};
#endif
/****************************************************************************
** $Id: qfileiconview.cpp,v 1.5.2.2 1999/09/01 06:19:56 aavit Exp $
**
** Copyright (C) 1992-1999 Troll Tech AS. 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 "qfileiconview.h"
#include <qstringlist.h>
#include <qpixmap.h>
#include <qmime.h>
#include <qstrlist.h>
#include <qdragobject.h>
#include <qmessagebox.h>
#include <qevent.h>
#include <qpopupmenu.h>
#include <qcursor.h>
#include <qapplication.h>
static const char * file_icon[]={
"32 32 17 1",
"# c #000000",
"a c #ffffff",
"j c #808080",
"n c #a0a0a4",
"g c #c0c0c0",
"m c #004000",
"o c #000000",
"l c #004040",
"k c #404000",
"i c #c0c000",
"h c #ffff00",
"b c #ffffc0",
"e c #ff8000",
"f c #c05800",
"c c #ffa858",
"d c #ffdca8",
". c None",
"................................",
"................................",
"................................",
"................................",
".............#....###...........",
"...###......#a##.#aba##.........",
"..#cdb#....#aaaa#aaaaaa##.......",
"..#ecdb#..#aaaa#aaaaaaaba##.....",
"..#fecdb##aaaa#aaaaaaaaaaab##...",
"...#fecdb#aaa#aaaaaaabaabaaaa##.",
"....#fecdb#a#baaaaa#baaaaaabaaa#",
".....#fecdb#aaaaab#a##baaaaaaa#.",
".....##fecdb#bbba#aaaa##baaab#..",
"....#bb#fecdb#ba#aaaaaaa##aa#...",
"...#bbbb#fecdb##aaabaaaaaa##....",
"..#bbbb#b#fecdb#aaaaaaabaaaa##..",
".#bbbb#bbb#fecdg#aaaaaaaaaaaba#.",
"#hhbb#bbbbb#fegg#iiaaaaaaaaaaaa#",
"#jhhhklibbbk#ggj#aaiiaaaaaaaaa#j",
".#mjhhhkmikab####aaabiiaaaaaa#j.",
"...##jhhhmaaibbaaiibaaaiiaab#n..",
".....##j#baaaiiabaaiibaabaa#n...",
"......##baibaabiibaaaiiabb#j....",
"......#bbbbiiaabbiiaaaaabon.....",
".....#bbbbbbbiiabbaiiaab#n......",
".....#jbbbbbbbbiibaabba#n.......",
"......##jbbbbbbbbiiaabmj........",
"........##jbbbbbbbbbb#j.........",
"..........##nbbbbbbbmj..........",
"............##jbbbb#j...........",
"..............#mjj#n............",
"................##n............."};
static const char * folder_icon[]={
"32 32 11 1",
"# c #000000",
"b c #c0c000",
"d c #585858",
"a c #ffff00",
"i c #400000",
"h c #a0a0a4",
"e c #000000",
"c c #ffffff",
"f c #303030",
"g c #c0c0c0",
". c None",
"...###..........................",
"...#aa##........................",
".###baaa##......................",
".#cde#baaa##....................",
".#cccdeebaaa##..##f.............",
".#cccccdeebaaa##aaa##...........",
".#cccccccdeebaaaaaaaa##.........",
".#cccccccccdeebababaaa#.........",
".#cccccgcgghhebbbbbbbaa#........",
".#ccccccgcgggdebbbbbbba#........",
".#cccgcgcgcgghdeebiebbba#.......",
".#ccccgcggggggghdeddeeba#.......",
".#cgcgcgcggggggggghghdebb#......",
".#ccgcggggggggghghghghd#b#......",
".#cgcgcggggggggghghghhd#b#......",
".#gcggggggggghghghhhhhd#b#......",
".#cgcggggggggghghghhhhd#b#......",
".#ggggggggghghghhhhhhhdib#......",
".#gggggggggghghghhhhhhd#b#......",
".#hhggggghghghhhhhhhhhd#b#......",
".#ddhhgggghghghhhhhhhhd#b#......",
"..##ddhhghghhhhhhhhhhhdeb#......",
"....##ddhhhghhhhhhhhhhd#b#......",
"......##ddhhhhhhhhhhhhd#b#......",
"........##ddhhhhhhhhhhd#b#......",
"..........##ddhhhhhhhhd#b#......",
"............##ddhhhhhhd#b###....",
"..............##ddhhhhd#b#####..",
"................##ddhhd#b######.",
"..................##dddeb#####..",
"....................##d#b###....",
"......................####......"};
static const char * link_icon[]={
"32 32 12 1",
"# c #000000",
"h c #a0a0a4",
"b c #c00000",
"d c #585858",
"i c #400000",
"c c #ffffff",
"e c #000000",
"g c #c0c0c0",
"a c #ff0000",
"f c #303030",
"n c white",
". c None",
"...###..........................",
"...#aa##........................",
".###baaa##......................",
".#cde#baaa##....................",
".#cccdeebaaa##..##f.............",
".#cccccdeebaaa##aaa##...........",
".#cccccccdeebaaaaaaaa##.........",
".#cccccccccdeebababaaa#.........",
".#cccccgcgghhebbbbbbbaa#........",
".#ccccccgcgggdebbbbbbba#........",
".#cccgcgcgcgghdeebiebbba#.......",
".#ccccgcggggggghdeddeeba#.......",
".#cgcgcgcggggggggghghdebb#......",
".#ccgcggggggggghghghghd#b#......",
".#cgcgcggggggggghghghhd#b#......",
".#gcggggggggghghghhhhhd#b#......",
".#cgcggggggggghghghhhhd#b#......",
".#ggggggggghghghhhhhhhdib#......",
".#gggggggggghghghhhhhhd#b#......",
".#hhggggghghghhhhhhhhhd#b#......",
".#ddhhgggghghghhhhhhhhd#b#......",
"..##ddhhghghhhhhhhhhhhdeb#......",
"############hhhhhhhhhhd#b#......",
"#nnnnnnnnnn#hhhhhhhhhhd#b#......",
"#nnnnnnnnnn#hhhhhhhhhhd#b#......",
"#nn#nn#nnnn#ddhhhhhhhhd#b#......",
"#nn##n##nnn###ddhhhhhhd#b###....",
"#nnn#####nn#..##ddhhhhd#b#####..",
"#nnnnn##nnn#....##ddhhd#b######.",
"#nnnnn#nnnn#......##dddeb#####..",
"#nnnnnnnnnn#........##d#b###....",
"############..........####......"};
static const char * empty_icon[]={
"1 1 1 1",
". c None",
"."};
static const char * folder_locked_icon[]={
"32 32 12 1",
"# c #000000",
"g c #808080",
"h c #c0c0c0",
"f c #c05800",
"c c #ffffff",
"d c #585858",
"b c #ffa858",
"a c #ffdca8",
"e c #000000",
"i c #a0a0a4",
"j c #c0c0c0",
". c None",
"...###..........................",
"...#aa##........................",
".###baaa##......................",
".#cde#baaa##....................",
".#cccdeeba#######...............",
".#cccccde##fffff##..............",
".#cccccc##fffgggg#..............",
".#ccccccc#ffg####a##............",
".#ccccchc#ffg#eebbaa##..........",
".#ccccccc#ffg#ddeebbba##........",
".#ccchccc#ffg#ihddeebbba##......",
".#cccccaa#ffg#ihhhddeeba##......",
".#chchhbbaafg#ihhhihidebb#......",
".#cchccbbbbaa#ihhihihid#b#......",
".#chchhbb#bbbaaiihihiid#b#......",
".#hchhcbb#fbbbafhiiiiid#b#......",
".#chchhbb#ffgbbfihiiiid#b#......",
".#hhhhhbb#ffg#bfiiiiiid#b#......",
".#hhhhhbbaffg#bfiiiiiid#b#......",
".#iihhhjbbaab#bfiiiiiid#b#......",
".#ddiihhh#bbbabfiiiiiid#b#......",
"..##ddiih#ffbbbfiiiiiid#b#......",
"....##ddi#ffg#biiiiiiid#b#......",
"......##d#ffg#iiiiiiiid#b#......",
"........##ffg#iiiiiiiid#b#......",
".........#ffg#iiiiiiiid#b#......",
".........#ffg#ddiiiiiid#b###....",
".........##fg###ddiiiid#b#####..",
"...........####.##ddiid#b######.",
"..................##dddeb#####..",
"....................##d#b###....",
"......................####......"};
/*****************************************************************************
*
* Class QtFileIconViewItem
*
*****************************************************************************/
QtFileIconViewItem::QtFileIconViewItem( QtFileIconView *parent, QFileInfo *fi )
: QtIconViewItem( parent, fi->fileName(), QIconSet( QPixmap( empty_icon ) ) ), itemFileName( fi->filePath() ),
itemFileInfo( *fi ), checkSetText( FALSE ), timer( this )
{
if ( itemFileInfo.isDir() )
itemType = Dir;
else if ( itemFileInfo.isFile() )
itemType = File;
else if ( itemFileInfo.isSymLink() )
itemType = Link;
setAllowDrop( FALSE );
switch ( itemType )
{
case Dir:
if ( !QDir( itemFileName ).isReadable() )
setIcon( QPixmap( folder_locked_icon ) );
else
setIcon( QPixmap( folder_icon ) );
setAllowDrop( QDir( itemFileName ).isReadable() );
break;
case File:
setIcon( QPixmap( file_icon ) );
break;
case Link:
setIcon( QPixmap( link_icon ) );
break;
}
if ( itemFileInfo.fileName() == "." ||
itemFileInfo.fileName() == ".." )
setAllowRename( FALSE );
checkSetText = TRUE;
calcRect();
connect( &timer, SIGNAL( timeout() ),
this, SLOT( openFolder() ) );
}
QtFileIconViewItem::~QtFileIconViewItem()
{
}
void QtFileIconViewItem::setText( const QString &text )
{
QtIconViewItem::setText( text );
if ( checkSetText ) {
QDir dir( itemFileInfo.dir() );
dir.rename( itemFileInfo.fileName(), text );
itemFileName = itemFileInfo.dirPath( TRUE ) + "/" + text;
itemFileInfo = QFileInfo( itemFileName );
}
}
bool QtFileIconViewItem::acceptDrop( QMimeSource *e )
{
if ( type() == Dir && e->provides( "text/uri-list" ) &&
allowDrop() )
return TRUE;
return FALSE;
}
void QtFileIconViewItem::dropped( QMimeSource *mime )
{
timer.stop();
if ( type() == Dir && mime->provides( "text/uri-list" ) ) {
QStrList lst;
lst.setAutoDelete( FALSE );
QUrlDrag::decode( mime, lst );
QString str;
str = "Copy\n\n";
for ( unsigned int i = 0; i < lst.count(); i++ )
str += QString( " %1\n" ).arg( lst.at( i ) );
str += QString( "\n"
"To\n\n"
" %1" ).arg( filename() );
QMessageBox::information( 0, "Copy", str, "Not Implemented" );
}
}
void QtFileIconViewItem::dragEntered()
{
if ( type() != Dir ||
type() == Dir && !QDir( itemFileName ).isReadable() )
return;
timer.start( 1500 );
}
void QtFileIconViewItem::dragLeft()
{
if ( type() != Dir ||
type() == Dir && !QDir( itemFileName ).isReadable() )
return;
timer.stop();
}
void QtFileIconViewItem::openFolder()
{
if ( type() != Dir ||
type() == Dir && !QDir( itemFileName ).isReadable() )
return;
timer.stop();
((QtFileIconView*)iconView())->setDirectory( itemFileName );
}
/*****************************************************************************
*
* Class QtFileIconView
*
*****************************************************************************/
QtFileIconView::QtFileIconView( const QString &dir, QWidget *parent, const char *name )
: QtIconView( parent, name ), viewDir( dir ), newFolderNum( 0 )
{
setRastX( 100 );
setRastY( 75 );
readDir( viewDir );
connect( this, SIGNAL( doubleClicked( QtIconViewItem * ) ), this, SLOT( itemDoubleClicked( QtIconViewItem * ) ) );
connect( this, SIGNAL( dropped( QMimeSource * ) ), this, SLOT( slotDropped( QMimeSource * ) ) );
connect( this, SIGNAL( itemRightClicked( QtIconViewItem * ) ), this, SLOT( slotItemRightClicked( QtIconViewItem * ) ) );
connect( this, SIGNAL( viewportRightClicked() ), this, SLOT( slotViewportRightClicked() ) );
}
void QtFileIconView::setDirectory( const QString &dir )
{
viewDir = QDir( dir );
readDir( viewDir );
}
void QtFileIconView::setDirectory( const QDir &dir )
{
viewDir = dir;
readDir( viewDir );
}
void QtFileIconView::newDirectory()
{
if ( viewDir.mkdir( QString( "New Folder %1" ).arg( ++newFolderNum ) ) ) {
QFileInfo *fi = new QFileInfo( viewDir, QString( "New Folder %1" ).arg( newFolderNum ) );
QtFileIconViewItem *item = new QtFileIconViewItem( this, fi );
delete fi;
repaintContents( contentsX(), contentsY(), contentsWidth(), contentsHeight() );
ensureItemVisible( item );
item->setSelected( TRUE, TRUE );
setCurrentItem( item );
repaintItem( item );
item->rename();
}
}
QDir QtFileIconView::currentDir()
{
return viewDir;
}
void QtFileIconView::readDir( const QDir &dir )
{
if ( !dir.isReadable() )
return;
clear();
setCaption( dir.absPath() );
emit directoryChanged( dir.absPath() );
const QFileInfoList *filist = dir.entryInfoList( QDir::DefaultFilter, QDir::DirsFirst | QDir::Name );
emit startReadDir( filist->count() );
QFileInfoListIterator it( *filist );
QFileInfo *fi;
bool allowRename = FALSE, allowRenameSet = FALSE;
while ( ( fi = it.current() ) != 0 ) {
emit readNextDir();
++it;
QtFileIconViewItem *item = new QtFileIconViewItem( this, fi );
if ( !allowRenameSet ) {
if ( !QFileInfo( fi->absFilePath() ).isWritable() ||
item->text() == "." || item->text() == ".." )
allowRename = FALSE;
else
allowRename = TRUE;
if ( item->text() == "." || item->text() == ".." )
allowRenameSet = FALSE;
else
allowRenameSet = TRUE;
}
item->setAllowRename( allowRename );
qApp->processEvents();
}
emit readDirDone();
orderItemsInGrid();
viewport()->repaint( TRUE );
}
void QtFileIconView::itemDoubleClicked( QtIconViewItem *i )
{
QtFileIconViewItem *item = ( QtFileIconViewItem* )i;
if ( item->type() == QtFileIconViewItem::Dir ) {
viewDir = QDir( item->filename() );
readDir( viewDir );
} else if ( item->type() == QtFileIconViewItem::Link &&
QFileInfo( QFileInfo( item->filename() ).readLink() ).isDir() ) {
viewDir = QDir( QFileInfo( item->filename() ).readLink() );
readDir( viewDir );
}
}
QDragObject *QtFileIconView::dragObject()
{
if ( !currentItem() )
return 0;
QStrList lst;
lst.setAutoDelete( FALSE );
QtFileIconViewItem *item = ( QtFileIconViewItem* )firstItem();
for ( ; item; item = ( QtFileIconViewItem* )item->nextItem() )
if ( item->isSelected() )
lst.append( QString( "file://" + item->filename() ).latin1() );
QUrlDrag *drag = new QUrlDrag( lst, viewport() );
drag->setPixmap( QPixmap( currentItem()->icon().pixmap( viewMode(), QIconSet::Normal ) ),
QPoint( currentItem()->iconRect().width() / 2, currentItem()->iconRect().height() / 2 ) );
return drag;
}
void QtFileIconView::keyPressEvent( QKeyEvent *e )
{
if ( e->key() == Key_N &&
( e->state() & ControlButton ) )
newDirectory();
else
QtIconView::keyPressEvent( e );
}
void QtFileIconView::slotDropped( QMimeSource *mime )
{
if ( mime->provides( "text/uri-list" ) ) {
QStrList lst;
lst.setAutoDelete( FALSE );
QUrlDrag::decode( mime, lst );
QString str;
str = "Copy\n\n";
for ( unsigned int i = 0; i < lst.count(); i++ )
str += QString( " %1\n" ).arg( lst.at( i ) );
str += QString( "\n"
"To\n\n"
" %1" ).arg( viewDir.absPath() );
QMessageBox::information( this, "Copy", str, "OK" );
}
}
void QtFileIconView::viewLarge()
{
setViewMode( QIconSet::Large );
alignInGrid();
}
void QtFileIconView::viewNormal()
{
setViewMode( QIconSet::Automatic );
alignInGrid();
}
void QtFileIconView::viewSmall()
{
setViewMode( QIconSet::Small );
alignInGrid();
}
void QtFileIconView::alignInGrid()
{
orderItemsInGrid();
repaintContents( contentsX(), contentsY(), viewport()->width(), viewport()->height() );
}
void QtFileIconView::slotItemRightClicked( QtIconViewItem *item )
{
if ( !item )
return;
setCurrentItem( item );
item->setSelected( TRUE, TRUE );
QPopupMenu *menu = new QPopupMenu( this );
int RENAME_ITEM = menu->insertItem( "Rename Item" );
int REMOVE_ITEM = menu->insertItem( "Remove Item" );
menu->setMouseTracking( TRUE );
int id = menu->exec( QCursor::pos() );
if ( id == -1 )
return;
if ( id == RENAME_ITEM && item->allowRename() )
item->rename();
else if ( id == REMOVE_ITEM )
QMessageBox::information( this, "Not implemented!", "Deleting files not implemented yet..." );
}
void QtFileIconView::slotViewportRightClicked()
{
QPopupMenu *menu = new QPopupMenu( this );
menu->insertItem( "&Large View", this, SLOT( viewLarge() ) );
menu->insertItem( "&Normal View", this, SLOT( viewNormal() ) );
menu->insertItem( "&Small View", this, SLOT( viewSmall() ) );
menu->insertSeparator();
menu->insertItem( "Align Items in &Grid", this, SLOT( alignInGrid() ) );
menu->setMouseTracking( TRUE );
menu->exec( QCursor::pos() );
}
/****************************************************************************
** $Id: mainwindow.h,v 1.4 1999/06/11 13:36:39 reggie Exp $
**
** Copyright (C) 1992-1999 Troll Tech AS. 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 MAINWIN_H
#define MAINWIN_H
#include <qmainwindow.h>
class QtFileIconView;
class DirectoryView;
class QProgressBar;
class QLabel;
class QComboBox;
class FileMainWindow : public QMainWindow
{
Q_OBJECT
public:
FileMainWindow();
QtFileIconView *fileView() { return fileview; }
DirectoryView *dirList() { return dirlist; }
void show();
protected:
void setup();
void setPathCombo();
QtFileIconView *fileview;
DirectoryView *dirlist;
QProgressBar *progress;
QLabel *label;
QComboBox *pathCombo;
protected slots:
void directoryChanged( const QString & );
void slotStartReadDir( int dirs );
void slotReadNextDir();
void slotReadDirDone();
void slotNumItemsSelected( int num );
void cdUp();
void newFolder();
void changePath( const QString &path );
};
#endif
/****************************************************************************
** $Id: mainwindow.cpp,v 1.6 1999/06/11 19:57:42 paul Exp $
**
** Copyright (C) 1992-1999 Troll Tech AS. 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 "mainwindow.h"
#include "qfileiconview.h"
#include "../dirview/dirview.h"
#include <qsplitter.h>
#include <qprogressbar.h>
#include <qlabel.h>
#include <qstatusbar.h>
#include <qtoolbar.h>
#include <qcombobox.h>
#include <qpixmap.h>
#include <qtoolbutton.h>
#include <qdir.h>
#include <qfileinfo.h>
static const char* cdtoparent_xpm[]={
"15 13 3 1",
". c None",
"* c #000000",
"a c #ffff99",
"..*****........",
".*aaaaa*.......",
"***************",
"*aaaaaaaaaaaaa*",
"*aaaa*aaaaaaaa*",
"*aaa***aaaaaaa*",
"*aa*****aaaaaa*",
"*aaaa*aaaaaaaa*",
"*aaaa*aaaaaaaa*",
"*aaaa******aaa*",
"*aaaaaaaaaaaaa*",
"*aaaaaaaaaaaaa*",
"***************"};
static const char* newfolder_xpm[] = {
"15 14 4 1",
" c None",
". c #000000",
"+ c #FFFF00",
"@ c #FFFFFF",
" . ",
" ",
" . ",
" . . ",
" .... . . . ",
" .+@+@. . . ",
".......... . .",
".@+@+@+@+@.. ",
".+@+@+@+@+. . ",
".@+@+@+@+@. . ",
".+@+@+@+@+. ",
".@+@+@+@+@. ",
".+@+@+@+@+. ",
"........... "};
FileMainWindow::FileMainWindow()
: QMainWindow()
{
resize( 640, 480 );
setup();
}
void FileMainWindow::show()
{
QMainWindow::show();
fileview->setDirectory( "/" );
}
void FileMainWindow::setup()
{
QSplitter *splitter = new QSplitter( this );
dirlist = new DirectoryView( splitter, "dirlist", TRUE );
dirlist->addColumn( "Name" );
dirlist->addColumn( "Type" );
Directory *root = new Directory( dirlist, "/" );
root->setOpen( TRUE );
splitter->setResizeMode( dirlist, QSplitter::KeepSize );
fileview = new QtFileIconView( "/", splitter );
fileview->setSelectionMode( QtIconView::StrictMulti );
fileview->setViewMode( QIconSet::Large );
setCentralWidget( splitter );
QToolBar *toolbar = new QToolBar( this, "toolbar" );
setRightJustification( TRUE );
(void)new QLabel( tr( " Path: " ), toolbar );
pathCombo = new QComboBox( TRUE, toolbar );
toolbar->setStretchableWidget( pathCombo );
connect( pathCombo, SIGNAL( activated( const QString & ) ),
this, SLOT ( changePath( const QString & ) ) );
toolbar->addSeparator();
QPixmap pix;
pix = QPixmap( cdtoparent_xpm );
(void)new QToolButton( pix, "One directory up", QString::null,
this, SLOT( cdUp() ), toolbar, "cd up" );
pix = QPixmap( newfolder_xpm );
(void)new QToolButton( pix, "New Folder", QString::null,
this, SLOT( newFolder() ), toolbar, "new folder" );
connect( dirlist, SIGNAL( folderSelected( const QString & ) ),
fileview, SLOT ( setDirectory( const QString & ) ) );
connect( fileview, SIGNAL( directoryChanged( const QString & ) ),
this, SLOT( directoryChanged( const QString & ) ) );
connect( fileview, SIGNAL( startReadDir( int ) ),
this, SLOT( slotStartReadDir( int ) ) );
connect( fileview, SIGNAL( readNextDir() ),
this, SLOT( slotReadNextDir() ) );
connect( fileview, SIGNAL( readDirDone() ),
this, SLOT( slotReadDirDone() ) );
connect( fileview, SIGNAL( selectionChanged( int ) ),
this, SLOT( slotNumItemsSelected( int ) ) );
progress = new QProgressBar( statusBar() );
statusBar()->addWidget( progress, TRUE );
label = new QLabel( statusBar() );
statusBar()->addWidget( label, TRUE );
}
void FileMainWindow::setPathCombo()
{
QString dir = caption();
int i = 0;
bool found = FALSE;
for ( i = 0; i < pathCombo->count(); ++i ) {
if ( pathCombo->text( i ) == dir) {
found = TRUE;
break;
}
}
if ( found )
pathCombo->setCurrentItem( i );
else {
pathCombo->insertItem( dir );
pathCombo->setCurrentItem( pathCombo->count() - 1 );
}
}
void FileMainWindow::directoryChanged( const QString &dir )
{
setCaption( dir );
setPathCombo();
}
void FileMainWindow::slotStartReadDir( int dirs )
{
label->setText( tr( " Reading Directory..." ) );
progress->reset();
progress->setTotalSteps( dirs );
}
void FileMainWindow::slotReadNextDir()
{
int p = progress->progress();
progress->setProgress( ++p );
}
void FileMainWindow::slotReadDirDone()
{
label->setText( tr( " Reading Directory Done." ) );
progress->setProgress( progress->totalSteps() );
}
void FileMainWindow::slotNumItemsSelected( int num )
{
if ( num == 1 )
label->setText( tr( " %1 Item Selected" ).arg( num ) );
else
label->setText( tr( " %1 Items Selected" ).arg( num ) );
}
void FileMainWindow::cdUp()
{
QDir dir = fileview->currentDir();
dir.cd( ".." );
fileview->setDirectory( dir );
}
void FileMainWindow::newFolder()
{
fileview->newDirectory();
}
void FileMainWindow::changePath( const QString &path )
{
if ( QFileInfo( path ).exists() )
fileview->setDirectory( path );
else
setPathCombo();
}
/****************************************************************************
** $Id: main.cpp,v 1.2 1999/06/11 13:36:37 reggie Exp $
**
** Copyright (C) 1992-1999 Troll Tech AS. 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 "mainwindow.h"
#include "qfileiconview.h"
#include <qapplication.h>
int main( int argc, char **argv )
{
QApplication a( argc, argv );
FileMainWindow mw;
mw.resize( 680, 480 );
mw.fileView()->setDirectory( "/" );
a.setMainWidget( &mw );
mw.show();
return a.exec();
}
| Copyright © 1999 Troll Tech | Trademarks | Qt version 2.0.2
|