void FileList::change_dir(const char *dir_path) { std::string dir_p(dir_path); dir_p += QDir::separator().toAscii(); DIR *d=opendir((dir_p).c_str() ); if (!d) return; //int ret = QMessageBox::warning(this, "change_dir(const char *dir_path)", dir_path, QMessageBox::Save); clear(); dirent *d_ent; while((d_ent=readdir(d)) ) { if ( (strcmp(d_ent->d_name, ".")==0) || (strcmp(d_ent->d_name, "..")==0) ) continue; struct stat statbuf; QString fn=QString(dir_path) + QDir::separator() + QString(d_ent->d_name); int stat_err=0; if(stat(fn.toStdString().c_str(), &statbuf)==-1) { //printf("Get stat on %s Error:%s\n", filename,strerror(errno)); //return; stat_err=1; } FileListWidgetItem *fi = new FileListWidgetItem (this); QString qfn = QString(d_ent->d_name); // encoding the qfn QTextCodec *tc; tc = QTextCodec::codecForName(encoding_name[cur_enc_]); QString e_fn(tc->toUnicode(d_ent->d_name ) ); if (stat_err==0) { if(S_ISDIR(statbuf.st_mode)) { e_fn += QDir::separator(); fi->set_dir(true); } else { fi->set_dir(false); } } else { QMessageBox::information(this, "stat err", d_ent->d_name); } fi->setText(0, e_fn); fi->set_real_str(d_ent->d_name); } closedir(d); // reset cur_dir_ QString cd_dir_str(dir_path); if (cur_dir_=="") /* win , remove c:\'s \ */ { cur_dir_ = cd_dir_str.left(cd_dir_str.length()-1); } else { cur_dir_ = cd_dir_str; } // cur_dir_ += QDir::separator(); change_title_to_cur_path(); }
static void checked_dir_list_add P2C(str_llist_type *, l, const_string, dir) { if (dir_p (dir)) dir_list_add (l, dir); }