summaryrefslogtreecommitdiffstats
path: root/kdeui/tests/kdockwidgetdemo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/tests/kdockwidgetdemo.cpp')
-rw-r--r--kdeui/tests/kdockwidgetdemo.cpp796
1 files changed, 796 insertions, 0 deletions
diff --git a/kdeui/tests/kdockwidgetdemo.cpp b/kdeui/tests/kdockwidgetdemo.cpp
new file mode 100644
index 000000000..e0ff60897
--- /dev/null
+++ b/kdeui/tests/kdockwidgetdemo.cpp
@@ -0,0 +1,796 @@
+#include "kdockwidgetdemo.h"
+
+#include <qheader.h>
+#include <qtoolbutton.h>
+#include <qtooltip.h>
+#include <qtextview.h>
+#include <qfileinfo.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qhbox.h>
+#include <qlabel.h>
+#include <qmultilineedit.h>
+#include <qevent.h>
+#include <qpopupmenu.h>
+#include <qpushbutton.h>
+#include <qpoint.h>
+#include <qmessagebox.h>
+#include <qmime.h>
+#include <qstrlist.h>
+#include <qpainter.h>
+
+#include <kconfig.h>
+#include <kapplication.h>
+//#include <kimgio.h>
+#include <stdlib.h>
+
+static const char *dir_tree_xpm[] = {
+"16 16 8 1",
+" c Gray0",
+". c #000080",
+"X c Cyan",
+"o c #808000",
+"O c Yellow",
+"+ c #808080",
+"@ c None",
+"# c #c1c1c1",
+"@@@@@@@@@@@@@@@@",
+"@@@+++++@@@@@@@@",
+"@@+@O@O@+@@@@@@@",
+"@+@O@O@O@++++++@",
+"@+@@@@@@@@@@@@o ",
+"@+@O@++ +O@O@Oo ",
+"@+@@+@X@ +O@O@o ",
+"@+@+@X@X@ +O@Oo ",
+"@+@+X@X@X o@O@o ",
+"@+@+@X@X@ oO@Oo ",
+"@+@@+@X@ +ooO@o ",
+"@+@O@+ +@..oOo ",
+"@+ooooooo.X..oo ",
+"@@ .X.. @",
+"@@@@@@@@@@@.X.. ",
+"@@@@@@@@@@@@.X. "
+};
+
+static const char *preview_xpm[] = {
+"16 16 6 1",
+" c Gray0",
+". c #000080",
+"X c Yellow",
+"o c #808080",
+"O c None",
+"+ c Gray100",
+"OOOOOOOOOOOOOOOO",
+"OOo oOOOOOOO",
+"Oo oooo OOOOOO",
+"O OOOOoo oOOOOO",
+"O OOOO++oo OOOOO",
+"O OOOO++Oo OOOOO",
+"O O+OOOOOo OOOOO",
+"O OO+OOOOo OOOOO",
+"OooOO+OOo OOOOO",
+"OO oOOOo + OOOO",
+"OOOo .X+ OOO",
+"OOOOOOOOO .X+ OO",
+"OOOOOOOOOO .X+ O",
+"OOOOOOOOOOO .X O",
+"OOOOOOOOOOOO OO",
+"OOOOOOOOOOOOOOOO"
+};
+
+SFileDialog::SFileDialog( QString initially, const QStringList& filter, const char* name )
+:QDialog(0L,name,true)
+{
+ KConfig* config = kapp->config();
+ config->setGroup( QString::fromLatin1("SFileDialogData:") + name );
+ if ( initially.isNull() ){
+ initially = config->readPathEntry( "InitiallyDir", QDir::currentDirPath() );
+ }
+
+ QStringList bookmark;
+ bookmark = config->readListEntry( "Bookmarks" );
+
+ dockManager = new KDockManager(this);
+
+ d_dirView = new KDockWidget( dockManager, "Dock_DirView", QPixmap(dir_tree_xpm) );
+ d_dirView->setCaption("Tree");
+
+ dirView = new DirectoryView( d_dirView, 0 );
+ dirView->addColumn( "" );
+ dirView->header()->hide();
+ d_dirView->setWidget( dirView );
+
+ Directory* root = new Directory( dirView, "/" );
+ root->setOpen(true);
+
+ d_preview = new KDockWidget( dockManager, "Dock_Preview", QPixmap(preview_xpm) );
+ d_preview->setCaption("Preview");
+ preview = new Preview( d_preview );
+ d_preview->setWidget( preview );
+
+ d_fd = new KDockWidget( dockManager, "Dock_QFileDialog", QPixmap(), this );
+ fd = new CustomFileDialog( d_fd );
+ fd->setDir( initially );
+ fd->setFilters( filter );
+ fd->setBookmark( bookmark );
+ fd->reparent(d_fd, QPoint(0,0));
+ d_fd->setWidget( fd );
+
+ connect( dirView, SIGNAL( folderSelected( const QString & ) ), fd, SLOT( setDir2( const QString & ) ) );
+ connect( fd, SIGNAL( dirEntered( const QString & ) ), dirView, SLOT( setDir( const QString & ) ) );
+
+ d_fd->setDockSite( KDockWidget::DockTop|KDockWidget::DockLeft|KDockWidget::DockRight|KDockWidget::DockBottom );
+ d_fd->setEnableDocking(KDockWidget::DockNone);
+
+ d_dirView->setEnableDocking(KDockWidget::DockTop|KDockWidget::DockLeft|KDockWidget::DockRight|KDockWidget::DockBottom|KDockWidget::DockCenter);
+ d_preview->setEnableDocking(KDockWidget::DockTop|KDockWidget::DockLeft|KDockWidget::DockRight|KDockWidget::DockBottom|KDockWidget::DockCenter);
+
+ d_dirView->manualDock( d_fd, KDockWidget::DockLeft, 20 );
+ d_preview->manualDock( d_fd, KDockWidget::DockBottom, 70 );
+
+ connect(fd, SIGNAL(fileHighlighted(const QString&)), preview, SLOT(showPreview(const QString&)));
+ connect(fd, SIGNAL(signalDone(int)), this, SLOT(done(int)));
+
+ connect(fd, SIGNAL(dirEntered(const QString&)), this, SLOT(changeDir(const QString&)));
+ connect(dirView, SIGNAL(folderSelected(const QString&)), this, SLOT(changeDir(const QString&)));
+
+ b_tree = new QToolButton( fd );
+ QToolTip::add( b_tree, "Show/Hide Tree" );
+ b_tree->setPixmap( QPixmap( dir_tree_xpm ) );
+ connect( b_tree, SIGNAL(clicked()), d_dirView, SLOT(changeHideShowState()) );
+ b_tree->setToggleButton(true);
+ b_tree->setOn(true);
+ fd->addToolButton( b_tree, true );
+
+ b_preview = new QToolButton( fd );
+ QToolTip::add( b_preview, "Show/Hide Preview" );
+ b_preview->setPixmap( QPixmap( preview_xpm ) );
+ connect( b_preview, SIGNAL(clicked()), d_preview, SLOT(changeHideShowState()) );
+ b_preview->setToggleButton(true);
+ b_preview->setOn(true);
+ fd->addToolButton( b_preview );
+
+ connect( dockManager, SIGNAL(change()), this, SLOT(dockChange()));
+ connect( dockManager, SIGNAL(setDockDefaultPos(KDockWidget*)), this, SLOT(setDockDefaultPos(KDockWidget*)));
+ setCaption("Open File");
+ resize(550,450);
+ qDebug("read config");
+ dockManager->readConfig( 0L , name );
+}
+
+void SFileDialog::dockChange()
+{
+ b_preview->setOn( d_preview->isVisibleToTLW() );
+ b_tree->setOn( d_dirView->isVisibleToTLW() );
+}
+
+SFileDialog::~SFileDialog()
+{
+ KConfig* config = kapp->config();
+ config->setGroup( QString("SFileDialogData:") + name() );
+ config->writeEntry( "Bookmarks", fd->getBookmark() );
+
+ qDebug("write config");
+ dockManager->writeConfig( 0L , name() );
+}
+
+void SFileDialog::setDockDefaultPos( KDockWidget* d )
+{
+ if ( d == d_dirView ){
+ d_dirView->manualDock( d_fd, KDockWidget::DockLeft, 20 );
+ }
+
+ if ( d == d_preview ){
+ d_preview->manualDock( d_fd, KDockWidget::DockBottom, 70 );
+ }
+}
+
+void SFileDialog::changeDir( const QString& f )
+{
+ if ( !f.isEmpty() ){
+ KConfig* config = kapp->config();
+ config->setGroup( QString("SFileDialogData:") + name() );
+ config->writePathEntry( "InitiallyDir", f );
+ }
+}
+
+QString SFileDialog::getOpenFileName( QString initially,
+ const QStringList& filter,
+ const QString caption, const char* name )
+{
+ SFileDialog* fd = new SFileDialog( initially, filter, name );
+ if ( !caption.isNull() ) fd->setCaption( caption );
+ QString result = ( fd->exec() == QDialog::Accepted ) ? fd->fd->selectedFile():QString::null;
+ delete fd;
+
+ return result;
+}
+
+QStringList SFileDialog::getOpenFileNames( QString initially,
+ const QStringList& filter,
+ const QString caption, const char* name )
+{
+ SFileDialog* fd = new SFileDialog( initially, filter, name );
+ if ( !caption.isNull() ) fd->setCaption( caption );
+
+ fd->fd->setMode( QFileDialog::ExistingFiles );
+ fd->d_preview->undock();
+ fd->b_preview->hide();
+
+ fd->exec();
+ QStringList result = fd->fd->selectedFiles();
+ delete fd;
+
+ return result;
+}
+
+void SFileDialog::showEvent( QShowEvent *e )
+{
+ QDialog::showEvent( e );
+ dirView->setDir( fd->dirPath() );
+}
+
+/******************************************************************************************************/
+PixmapView::PixmapView( QWidget *parent )
+:QScrollView( parent )
+{
+// kimgioRegister();
+ viewport()->setBackgroundMode( PaletteBase );
+}
+
+void PixmapView::setPixmap( const QPixmap &pix )
+{
+ pixmap = pix;
+ resizeContents( pixmap.size().width(), pixmap.size().height() );
+ viewport()->repaint( true );
+}
+
+void PixmapView::drawContents( QPainter *p, int, int, int, int )
+{
+ p->drawPixmap( 0, 0, pixmap );
+}
+
+Preview::Preview( QWidget *parent )
+:QWidgetStack( parent )
+{
+ normalText = new QMultiLineEdit( this );
+ normalText->setReadOnly( true );
+ html = new QTextView( this );
+ pixmap = new PixmapView( this );
+ raiseWidget( normalText );
+}
+
+void Preview::showPreview( const QString &str )
+{
+ QUrl u(str);
+ if ( u.isLocalFile() ){
+ QString path = u.path();
+ QFileInfo fi( path );
+ if ( fi.isFile() && (int)fi.size() > 400 * 1024 ) {
+ normalText->setText( tr( "The File\n%1\nis too large, so I don't show it!" ).arg( path ) );
+ raiseWidget( normalText );
+ return;
+ }
+
+ QPixmap pix( path );
+ if ( pix.isNull() ) {
+ if ( fi.isFile() ) {
+ QFile f( path );
+ if ( f.open( IO_ReadOnly ) ) {
+ QTextStream ts( &f );
+ QString text = ts.read();
+ f.close();
+ if ( fi.extension().lower().contains( "htm" ) ) {
+ QString url = html->mimeSourceFactory()->makeAbsolute( path, html->context() );
+ html->setText( text, url );
+ raiseWidget( html );
+ return;
+ } else {
+ normalText->setText( text );
+ raiseWidget( normalText );
+ return;
+ }
+ }
+ }
+ normalText->setText( QString::null );
+ raiseWidget( normalText );
+ } else {
+ pixmap->setPixmap( pix );
+ raiseWidget( pixmap );
+ }
+ } else {
+ normalText->setText( "I only show local files!" );
+ raiseWidget( normalText );
+ }
+}
+
+// ****************************************************************************************************
+static const char* homepage_xpm[] = {
+"24 24 9 1",
+" c #262660",
+". c #383666",
+"X c #62639c",
+"o c #7e86a5",
+"O c #a6a7dd",
+"+ c #bbbaed",
+"@ c #c4c4f2",
+"# c #f8f9f9",
+"$ c None",
+"$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$o.X$$$$$",
+"$$$$$$$$$$oOOOO$O.X$$$$$",
+"$$$$$$$$$$oXXXX+O.X$$$$$",
+"$$$$$$$$$X#XXXXXO.X$$$$$",
+"$$$$$$$$X #XXXXO.X$$$$$",
+"$$$$$$$X XO #XXXO.X$$$$$",
+"$$$$$$X XOOO #XXX.XX$$$$",
+"$$$$$X XOOOOO #XXXXXX$$$",
+"$$$$X XOOOOOOO #XXXXXX$$",
+"$$$X XOOOOOOOOO #XXXXXX$",
+"$$X XOOOOOOOOOOO #.....$",
+"$$$$$OOOOXXXXOOOOX...$$$",
+"$$$$$OOOOXXXXOOOOX...$$$",
+"$$$$$OOOOXXXXOOOOX..o$$$",
+"$$$$$OOOOXXXXOOOOX.oo$$$",
+"$$$$$OOOOXXXXOOOOXXoo$$$",
+"$$$$$OOOOXXXXOOOOXooo$$$",
+"$$$ooOOOOXXXXOOOOXoooo$$",
+"$ooooXXXXXXXXXXXXXooooo$",
+"$ooooooooooooooooooooooo",
+"$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$"
+};
+
+static const char* folder_trash[] = {
+"16 16 10 1",
+" c Gray0",
+". c #222222",
+"X c #333366",
+"o c #6666cc",
+"O c Magenta",
+"+ c #808080",
+"@ c #9999ff",
+"# c #c0c0c0",
+"$ c Gray100",
+"% c None",
+"%%%%%%oo%%%%%%%%",
+"%%%%%o$$o%%%%%%%",
+"%%%%o$$$$o%%%%%%",
+"%%%o$+$+$$o o%%%",
+"%%oo$$+$+$$o .%%",
+"%%.oo$$+$+$$o.%%",
+"%% Xoo$$+$$o +%%",
+"%%o Xoo$$oo o%%",
+"%%%X.XX +X%%%",
+"%%%o@X+X#X+X+%%%",
+"%%%+.$X#X+X %%%%",
+"%%%%.o$o#X+X%%%%",
+"%%%%.X@$X+ +%%%%",
+"%%%%+Xo.#. %%%%%",
+"%%%%%.Xo. o%%%%%",
+"%%%%%+. %%%%%%"
+};
+
+static const char* globalbookmark_xpm[]={
+"12 16 3 1",
+". c None",
+"a c #000000",
+"# c #008080",
+"............",
+"............",
+"........##..",
+".......#####",
+"......#####a",
+".....#####a.",
+"....#####a..",
+"...#####a...",
+"..#####a....",
+".#####a.....",
+"aaa##a......",
+"...#a.......",
+"...a........",
+"............",
+"............",
+"............"};
+
+CustomFileDialog::CustomFileDialog( QWidget* parent )
+: QFileDialog( parent, 0, false )
+{
+ QToolButton *p = new QToolButton( this );
+
+ p->setPixmap( QPixmap( globalbookmark_xpm ) );
+ QToolTip::add( p, tr( "Bookmarks" ) );
+
+ bookmarkMenu = new QPopupMenu( this );
+ connect( bookmarkMenu, SIGNAL( activated( int ) ), this, SLOT( bookmarkChosen( int ) ) );
+ addId = bookmarkMenu->insertItem( "Add bookmark" );
+ clearId = bookmarkMenu->insertItem( QPixmap(folder_trash), "Clear bookmarks" );
+ bookmarkMenu->insertSeparator();
+
+ p->setPopup( bookmarkMenu );
+ p->setPopupDelay(0);
+ addToolButton( p, true );
+
+ QToolButton *b = new QToolButton( this );
+ QToolTip::add( b, tr( "Go Home!" ) );
+
+ b->setPixmap( QPixmap( homepage_xpm ) );
+ connect( b, SIGNAL( clicked() ), this, SLOT( goHome() ) );
+
+ addToolButton( b );
+}
+
+
+void CustomFileDialog::setBookmark( QStringList &s )
+{
+ QStringList::Iterator it = s.begin();
+ for ( ; it != s.end(); ++it ){
+ bookmarkList << (*it);
+
+ const char* book_pix[]={
+ "12 16 3 1",
+ ". c None",
+ "a c #000000",
+ "# c #008080",
+ "............",
+ "............",
+ "........##..",
+ ".......#####",
+ "......#####a",
+ ".....#####a.",
+ "....#####a..",
+ "...#####a...",
+ "..#####a....",
+ ".#####a.....",
+ "aaa##a......",
+ "...#a.......",
+ "...a........",
+ "............",
+ "............",
+ "............"};
+ bookmarkMenu->insertItem( QIconSet( book_pix ), (*it) );
+ }
+}
+
+CustomFileDialog::~CustomFileDialog()
+{
+}
+
+void CustomFileDialog::setDir2( const QString &s )
+{
+ blockSignals( true );
+ setDir( s );
+ blockSignals( false );
+}
+
+void CustomFileDialog::bookmarkChosen( int i )
+{
+ if ( i == clearId ){
+ bookmarkList.clear();
+ bookmarkMenu->clear();
+ addId = bookmarkMenu->insertItem( "Add bookmark" );
+ clearId = bookmarkMenu->insertItem( "Clear bookmarks" );
+ bookmarkMenu->insertSeparator();
+ return;
+ }
+
+ if ( i == addId ){
+ bookmarkList << dirPath();
+
+ const char* book_pix[]={
+ "12 16 3 1",
+ ". c None",
+ "a c #000000",
+ "# c #008080",
+ "............",
+ "............",
+ "........##..",
+ ".......#####",
+ "......#####a",
+ ".....#####a.",
+ "....#####a..",
+ "...#####a...",
+ "..#####a....",
+ ".#####a.....",
+ "aaa##a......",
+ "...#a.......",
+ "...a........",
+ "............",
+ "............",
+ "............"};
+ bookmarkMenu->insertItem( QIconSet( book_pix ), dirPath() );
+ return;
+ }
+
+ setDir( bookmarkMenu->text( i ) );
+}
+
+void CustomFileDialog::goHome()
+{
+ if ( getenv( "HOME" ) )
+ setDir( getenv( "HOME" ) );
+ else
+ setDir( "/" );
+}
+
+void CustomFileDialog::done( int i )
+{
+ emit signalDone(i);
+}
+/******************************************************************************************************/
+static const char* folder_closed_xpm[] = {
+"16 16 9 1",
+" c Gray0",
+". c #222222",
+"X c #6666cc",
+"o c #9999ff",
+"O c #c0c0c0",
+"+ c #ccccff",
+"@ c #ffffcc",
+"# c Gray100",
+"$ c None",
+"$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$",
+"$$XXXXo$$$$$$$$$",
+"$X#++o@XXXXXX$$$",
+"X#+++++++++++o$$",
+"X#o+o+o+o+o+oX$$",
+"X#+o+o+o+o+o+X $",
+"X#o+o+o+o+o+oX $",
+"X#+o+o+o+o+o+X $",
+"X#o+o+o+o+o+oX $",
+"X#+o+o+o+o+o+X $",
+"X+o+o+o+o+o+oX $",
+"XXXXXXXXXXXXXX $",
+"$ .. $"
+};
+
+static const char* folder_open_xpm[] = {
+"16 16 10 1",
+" c Gray0",
+". c #222222",
+"X c #6666cc",
+"o c Magenta",
+"O c #9999ff",
+"+ c #c0c0c0",
+"@ c #ccccff",
+"# c #ffffcc",
+"$ c Gray100",
+"% c None",
+"%%%%%%%%%%%%%%%%",
+"%%%%%%%%%%%%%%%%",
+"%%%%%%%%%%%%%%%%",
+"%%%%%%%%%%%%%%%%",
+"%%XXXX%%%%%%%%%%",
+"%X$$$XXXXXXXXX%%",
+"%X$O+#######.OX%",
+"%X$+#######.O@X%",
+"%O$#######.O@OX ",
+"XXXXXXXXXX.XO@X ",
+"X$$$$$$$$$+ @OX ",
+"%XO+O+O+O+O+ @X ",
+"%X+O+O+O+O+O. X ",
+"%%X+O+O+O+O+O. ",
+"%%XXXXXXXXXXXXX ",
+"%%% "
+};
+
+static const char* folder_locked_xpm[] = {
+"16 16 8 1",
+" c Gray0",
+". c #333366",
+"X c #6666cc",
+"o c Magenta",
+"O c #9999ff",
+"+ c #c0c0c0",
+"@ c Gray100",
+"# c None",
+"###O.O##########",
+"###...##########",
+"###O.O##########",
+"##.#X#.#OX######",
+"#...X...@@X#####",
+"#.......OOOOOOX#",
+"#.......@@@@@@X#",
+"#@@@@@@@O+O+O+X ",
+"#O@O+O+O+O+O+OX ",
+"#O@+O+O+O+O+O+X ",
+"#O@O+O+O+O+O+OX ",
+"#O@+O+O+O+O+O+X ",
+"#O@O+O+O+O+O+OX ",
+"#OXXXXXXXXXXXXX ",
+"## ",
+"################"
+};
+
+Directory::Directory( Directory * parent, const QString& filename )
+:QListViewItem( parent ), f(filename)
+{
+ p = parent;
+ readable = QDir( fullName() ).isReadable();
+
+ if ( !readable )
+ setPixmap( 0, QPixmap( folder_locked_xpm ) );
+ else
+ setPixmap( 0, QPixmap( folder_closed_xpm ) );
+}
+
+
+Directory::Directory( QListView * parent, const QString& filename )
+:QListViewItem( parent ), f(filename)
+{
+ p = 0;
+ readable = QDir( fullName() ).isReadable();
+}
+
+
+void Directory::setOpen( bool o )
+{
+ if ( o )
+ setPixmap( 0, QPixmap( folder_open_xpm ) );
+ else
+ setPixmap( 0, QPixmap( folder_closed_xpm ) );
+
+ if ( o && !childCount() ){
+ QString s( fullName() );
+ QDir thisDir( s );
+ if ( !thisDir.isReadable() ) {
+ readable = false;
+ setExpandable( false );
+ return;
+ }
+
+ listView()->setUpdatesEnabled( false );
+ const QFileInfoList * files = thisDir.entryInfoList();
+ if ( files ){
+ QFileInfoListIterator it( *files );
+ QFileInfo * f;
+ while( (f=it.current()) != 0 ){
+ ++it;
+ if ( f->fileName() != "." && f->fileName() != ".." && f->isDir() )
+ (void)new Directory( this, f->fileName() );
+ }
+ }
+ listView()->setUpdatesEnabled( true );
+ }
+ QListViewItem::setOpen( o );
+}
+
+
+void Directory::setup()
+{
+ setExpandable( true );
+ QListViewItem::setup();
+}
+
+
+QString Directory::fullName()
+{
+ QString s;
+ if ( p ) {
+ s = p->fullName();
+ s.append( f.name() );
+ s.append( "/" );
+ } else {
+ s = f.name();
+ }
+ return s;
+}
+
+
+QString Directory::text( int column ) const
+{
+ if ( column == 0 )
+ return f.name();
+ else
+ if ( readable )
+ return "Directory";
+ else
+ return "Unreadable Directory";
+}
+
+DirectoryView::DirectoryView( QWidget *parent, const char *name )
+:QListView( parent, name )
+{
+ connect( this, SIGNAL( clicked( QListViewItem * ) ),
+ this, SLOT( slotFolderSelected( QListViewItem * ) ) );
+ connect( this, SIGNAL( doubleClicked( QListViewItem * ) ),
+ this, SLOT( slotFolderSelected( QListViewItem * ) ) );
+ connect( this, SIGNAL( returnPressed( QListViewItem * ) ),
+ this, SLOT( slotFolderSelected( QListViewItem * ) ) );
+
+ setAcceptDrops( true );
+ viewport()->setAcceptDrops( true );
+}
+
+void DirectoryView::setOpen( QListViewItem* i, bool b )
+{
+ QListView::setOpen(i,b);
+ setCurrentItem(i);
+ slotFolderSelected(i);
+}
+
+void DirectoryView::slotFolderSelected( QListViewItem *i )
+{
+ if ( !i ) return;
+
+ Directory *dir = (Directory*)i;
+ emit folderSelected( dir->fullName() );
+}
+
+QString DirectoryView::fullPath(QListViewItem* item)
+{
+ QString fullpath = item->text(0);
+ while ( (item=item->parent()) ) {
+ if ( item->parent() )
+ fullpath = item->text(0) + "/" + fullpath;
+ else
+ fullpath = item->text(0) + fullpath;
+ }
+ return fullpath;
+}
+
+void DirectoryView::setDir( const QString &s )
+{
+ QListViewItemIterator it( this );
+ ++it;
+ for ( ; it.current(); ++it ) {
+ it.current()->setOpen( false );
+ }
+
+ QStringList lst( QStringList::split( "/", s ) );
+ QListViewItem *item = firstChild();
+ QStringList::Iterator it2 = lst.begin();
+ for ( ; it2 != lst.end(); ++it2 ) {
+ while ( item ) {
+ if ( item->text( 0 ) == *it2 ) {
+ item->setOpen( true );
+ break;
+ }
+ item = item->itemBelow();
+ }
+ }
+
+ if ( item ){
+ setSelected( item, true );
+ setCurrentItem( item );
+ }
+}
+
+QString DirectoryView::selectedDir()
+{
+ Directory *dir = (Directory*)currentItem();
+ return dir->fullName();
+}
+/**********************************************************************************************/
+
+int main(int argc, char* argv[]) {
+ KApplication app(argc,argv,"kdockwidgetdemo");
+
+#if 0
+ SFileDialog* openfile = new SFileDialog();
+ openfile->exec();
+ qDebug( openfile->fileName() );
+#endif
+
+#if 0
+ qDebug ( SFileDialog::getOpenFileName( QString::null, QString::fromLatin1("All (*)"),
+ QString::fromLatin1("DockWidget Demo"), "dialog1" ) );
+#endif
+
+#if 1
+ QStringList s = SFileDialog::getOpenFileNames( QString::null, QString::fromLatin1("All (*)"),
+ QString::fromLatin1("DockWidget Demo"), "dialog1" );
+ QStringList::Iterator it = s.begin();
+ for ( ; it != s.end(); ++it ){
+ qDebug( "%s", (*it).local8Bit().data() );
+ }
+#endif
+ return 0;
+}
+
+#include "kdockwidgetdemo.moc"
+