00001
00002
00003
00004
00005
00006
00007
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),
00028 filterspec(QDir::All)
00029 {
00030
00031 if ( !name )
00032 setName( "fileBrowser" );
00033 setCaption(tr( "Browse for file" ) );
00034 filterStr=filter;
00035
00036 buttonOk = new QPushButton( this, "buttonOk" );
00037
00038 buttonOk->setAutoDefault( false );
00039 buttonOk->setText( tr( "/" ) );
00040
00041 buttonShowHidden = new QPushButton( this, "buttonShowHidden" );
00042
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
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
00139 currentDir.setFilter( filterspec );
00140 currentDir.setSorting( QDir::DirsFirst);
00141 currentDir.setMatchAllDirs(TRUE);
00142
00143 currentDir.setNameFilter(filterStr);
00144
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
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 }