void DirReaderMenu::onOpen() { clearItems(); if(dir.length()==0) { //empty return; } //read files FileDir fd; //FIXME: make this optional bool ok = fd.read(dir, false, postfix, false); if(!ok) { cout << "read failed:" << dir << endl; return; } vector<string> ret; fd.getFiles(ret); vector<FileDir::TYPE> ret_t; fd.getTypes(ret_t); for(uint i=0;i<ret.size();i++) { if(skip_prefix.size()>0) { size_t pf = ret[i].find_first_of(skip_prefix); if(pf==0) { continue; } } if(ret_t[i]==FileDir::T_FILE) { addFileItem(ret[i]); } else //is dir { DirReaderMenu* sub = new DirReaderMenu(back->getUseSurf(), selback->getUseSurf(), f, maxchar, subback->getUseSurf(), subback_sel->getUseSurf()); //NOTICE: dirnames does not contain a trailing / //FIXME: never? string s_dir = dir+ret[i]; if(s_dir.at(s_dir.size()-1) != '/') { s_dir+="/"; } sub->setDir(s_dir); sub->copyDirAction(dir_action); sub->setOnlyPostfix(postfix); sub->setSkipPrefix(skip_prefix); sub->setDisplayPostfix(getDisplayPostfix()); addSubDirReaderMenu(ret[i], sub); } } }