Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

fileBrowser.cpp

Go to the documentation of this file.
00001 /****************************************************************************
00002 
00003 Derived from a file browser which was
00004 
00005 ** copyright 2001 ljp ljp@llornkcor.com
00006 
00007 Extensive modification by Tim Wentford to allow it to work in rotated mode
00008 
00009 ****************************************************************************/
00010 #include "fileBrowser.h"
00011 
00012 #include "QtrListView.h"
00013 #include <qlineedit.h>
00014 #include <qpushbutton.h>
00015 #include <qfile.h>
00016 #include <qmessagebox.h>
00017 #ifndef _WINDOWS
00018 #include <unistd.h>
00019 #endif
00020 #include <qlayout.h>
00021 #ifdef _WINDOWS
00022 #include <direct.h>
00023 #endif
00024 
00025 fileBrowser::fileBrowser( bool allownew, QWidget* parent,  const char* name, bool modal, WFlags fl , const QString filter, const QString iPath )
00026     : QDialog( parent, name, true,
00027                fl/* | WStyle_Customize | WStyle_Tool*/),
00028       filterspec(QDir::All)
00029 {
00030 //    showMaximized();
00031     if ( !name )
00032         setName( "fileBrowser" );
00033     setCaption(tr( "Browse for file" ) );
00034     filterStr=filter;
00035 
00036     buttonOk = new QPushButton( this, "buttonOk" );
00037     //    buttonOk->setFixedSize( 25, 25 );
00038     buttonOk->setAutoDefault( false );
00039     buttonOk->setText( tr( "/" ) );
00040 
00041     buttonShowHidden = new QPushButton( this, "buttonShowHidden" );
00042 //    buttonShowHidden->setFixedSize( 50, 25 );
00043     buttonShowHidden->setText( tr( "Hidden" ) );
00044     buttonShowHidden->setAutoDefault( false );
00045     buttonShowHidden->setToggleButton( true );
00046     buttonShowHidden->setOn( false );
00047 
00048     dirLabel = new QLabel(this, "DirLabel");
00049     dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak);
00050     dirLabel->setText(currentDir.canonicalPath());
00051 
00052     ListView = new QtrListView( this, "ListView" );
00053     ListView->addColumn( tr( "Name" ) );
00054     ListView->setSorting( 2, FALSE);
00055     ListView->addColumn( tr( "Size" ) );
00056     ListView->setSelectionMode(QListView::Single);
00057     ListView->setAllColumnsShowFocus( TRUE );
00058     ListView->setColumnWidthMode(0, ((modal) ? QListView::Manual : QListView::Maximum));
00059     ListView->setColumnWidthMode(1, QListView::Manual);
00060 
00061     // signals and slots connections
00062     connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) );
00063     connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) );
00064     connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) );
00065     connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
00066     connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
00067     connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
00068     connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) );
00069 
00070     QVBoxLayout* grid = new QVBoxLayout(this);
00071     grid->addWidget(dirLabel);
00072     QHBoxLayout* hgrid = new QHBoxLayout(grid);
00073     
00074     QPushButton* bt = new QPushButton( this );
00075     bt->setText( tr( "SD" ) );
00076     connect( bt, SIGNAL( clicked() ), this, SLOT( onSD() ) );
00077     hgrid->addWidget(bt);
00078 
00079     bt = new QPushButton( this );
00080     bt->setText( tr( "CF" ) );
00081     connect( bt, SIGNAL( clicked() ), this, SLOT( onCF() ) );
00082     hgrid->addWidget(bt);
00083 
00084     bt = new QPushButton( this );
00085     bt->setText( tr( "Home" ) );
00086     connect( bt, SIGNAL( clicked() ), this, SLOT( onHome() ) );
00087     hgrid->addWidget(bt);
00088 
00089     hgrid->addWidget(buttonOk);
00090     hgrid->addWidget(buttonShowHidden);
00091     grid->addWidget(ListView,1);
00092     if (allownew)
00093     {
00094         m_filename = new QLineEdit(this);
00095         grid->addWidget(m_filename);
00096         connect( m_filename, SIGNAL( returnPressed() ), this, SLOT( onReturn() ));
00097     }
00098     else
00099     {
00100         m_filename = NULL;
00101     }
00102 
00103     if (QFileInfo(iPath).exists())
00104     {
00105         currentDir.setPath(iPath);
00106 #ifdef _WINDOWS
00107         _chdir(iPath.latin1());
00108 #else
00109         chdir(iPath.latin1());
00110 #endif
00111     }
00112     else
00113     {
00114         currentDir.setPath(QDir::currentDirPath());
00115         chdir(QDir::currentDirPath().latin1());
00116     }
00117 
00118     populateList();
00119 
00120     if (modal) showMaximized();
00121 }
00122 
00123 void fileBrowser::resizeEvent(QResizeEvent* e)
00124 {
00125     ListView->setColumnWidth(1,(ListView->width())/4);
00126     ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1));    
00127 }
00128 
00129 fileBrowser::~fileBrowser()
00130 {
00131 }
00132 
00133 
00134 void fileBrowser::populateList()
00135 {
00136     ListView->clear();
00138 //    currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks );
00139     currentDir.setFilter( filterspec );
00140     currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst);
00141     currentDir.setMatchAllDirs(TRUE);
00142 
00143     currentDir.setNameFilter(filterStr);
00144 //    currentDir.setNameFilter("*.txt;*.etx");
00145     QString fileL, fileS;
00146     const QFileInfoList *list = currentDir.entryInfoList();
00147     QFileInfoListIterator it(*list);
00148     QFileInfo *fi;
00149     while ( (fi=it.current()) )
00150     {
00151         if (fi->fileName() != ".")
00152         {
00153             fileS.sprintf( "%10li", fi->size() );
00154             fileL.sprintf( "%s",fi->fileName().data() );
00155             if( fi->isDir() )
00156             {
00157                 fileL+="/";
00158             } 
00159             else 
00160             {
00162             }
00163             new QListViewItem( ListView,fileL,fileS );
00164         }
00165         ++it;
00166     }
00167     ListView->setSorting( 2, FALSE);
00168     dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath());
00169     ListView->setFocus();
00170 }
00171 
00172 void fileBrowser::upDir()
00173 {
00175 }
00176 
00177 void fileBrowser::listClicked(QListViewItem *selectedItem)
00178 {
00179     if (selectedItem == NULL) return;
00180     QString strItem=selectedItem->text(0);
00181 
00183     
00184 
00185     QString strSize=selectedItem->text(1);
00186 
00187     strSize.stripWhiteSpace();
00188 
00189     bool ok;
00190 
00191     QFileInfo fi(strItem);
00192     while (fi.isSymLink()) fi.setFile(fi.readLink());
00193     if (fi.isDir())
00194     {
00195         strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem);
00196 
00197         if(QDir(strItem).exists())
00198         {
00199             currentDir.cd(strItem, TRUE);
00200             populateList();
00201         }
00202     } else
00203     {
00204         QListViewItem *selectedItem = ListView->selectedItem();
00205         if (selectedItem == NULL)
00206         {
00207             filename = "";
00208         }
00209         else
00210         {
00211             filename = QDir::cleanDirPath(currentDir.canonicalPath()+"/"+selectedItem->text(0));
00212         }
00213         OnOK();
00214     }
00215     chdir(strItem.latin1());
00216 //
00217 
00218 }
00219 
00220 // you may want to switch these 2 functions. I like single clicks
00221 void fileBrowser::listDoubleClicked(QListViewItem *selectedItem)
00222 {
00223 }
00224 
00225 QString fileBrowser::getCurrentFile()
00226 {
00227     return filename;
00228 }
00229 
00230 void fileBrowser::OnOK()
00231 {
00232     accept();
00233 }
00234 
00235 void fileBrowser::OnRoot()
00236 {
00237   setdir("/");
00238 }
00239 
00240 void fileBrowser::OnCancel()
00241 {
00242     reject();
00243 }
00244 
00245 void fileBrowser::setHidden(bool _hidden)
00246 {
00247     if (_hidden)
00248         filterspec = QDir::All | QDir::Hidden;
00249     else
00250         filterspec = QDir::All;
00251     populateList();
00252 }
00253 
00254 void fileBrowser::onReturn()
00255 {
00256     QListViewItem *selectedItem = ListView->selectedItem();
00257     if (selectedItem == NULL)
00258     {
00259         filename = m_filename->text();
00260     }
00261     else
00262     {
00263         filename = QDir::cleanDirPath(currentDir.canonicalPath()+"/"+m_filename->text());
00264     }
00265     OnOK();
00266 }
00267 
00268 void fileBrowser::onCF()
00269 {
00270   setdir("/mnt/cf");
00271 }
00272 
00273 void fileBrowser::onSD()
00274 {
00275   setdir("/mnt/card");
00276 }
00277 
00278 void fileBrowser::onHome()
00279 {
00280   setdir(QDir::homeDirPath());
00281 }
00282 
00283 void fileBrowser::setdir(const QString& s)
00284 {
00285     currentDir.cd(s, TRUE);
00286     populateList();
00287     chdir(s);
00288 }

Generated on Sat Nov 5 16:16:54 2005 for OPIE by  doxygen 1.4.2