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();
}
Exemple #2
0
static void
checked_dir_list_add P2C(str_llist_type *, l,  const_string, dir)
{
  if (dir_p (dir))
    dir_list_add (l, dir);
}