better path handling

metadata
Wenzel Jakob 2010-09-05 21:51:30 +02:00
parent 211f17aa98
commit 92a627986f
5 changed files with 17 additions and 10 deletions

View File

@ -89,16 +89,16 @@ public:
/// Set the current directory by stripping away the last component /// Set the current directory by stripping away the last component
inline void setCurrentDirectoryFromFile(const std::string &cwd) { inline void setCurrentDirectoryFromFile(const std::string &cwd) {
m_currentDirectory = pathFromFile(cwd); m_currentDirectory = getParentDirectory(cwd);
} }
/// Adds a path while stripping away the last component /// Adds a path while stripping away the last component
inline void addPathFromFile(const std::string &path) { inline void addPathFromFile(const std::string &path) {
addPath(pathFromFile(path)); addPath(getParentDirectory(path));
} }
/// Strip the last component from a path /// Strip the last component from a path
inline std::string pathFromFile(const std::string &path) const { inline std::string getParentDirectory(const std::string &path) const {
std::vector<std::string> components = tokenize(path, "/\\"); std::vector<std::string> components = tokenize(path, "/\\");
if (components.size() == 1) if (components.size() == 1)
return "."; return ".";
@ -112,6 +112,11 @@ public:
return newPath; return newPath;
} }
/// Return the last component of a path
inline std::string getChild(const std::string &path) const {
std::vector<std::string> components = tokenize(path, "/\\");
return components[components.size()-1];
}
/// Try to resolve a path to an existing file /// Try to resolve a path to an existing file
inline std::string resolve(const std::string &path) const { inline std::string resolve(const std::string &path) const {

View File

@ -287,7 +287,7 @@ int ubi_main(int argc, char **argv) {
int jobIdx = 0; int jobIdx = 0;
for (int i=optind; i<argc; ++i) { for (int i=optind; i<argc; ++i) {
std::string inputFile = argv[i], filePath = resolver->pathFromFile(inputFile); std::string inputFile = argv[i], filePath = resolver->getParentDirectory(inputFile);
if (!resolver->contains(filePath)) if (!resolver->contains(filePath))
resolver->addPath(filePath); resolver->addPath(filePath);

View File

@ -126,7 +126,7 @@ void ImportDialog::accept() {
dialog->show(); dialog->show();
progressBar->show(); progressBar->show();
std::string filePath = m_resolver->pathFromFile(sourceFile.toStdString()); std::string filePath = m_resolver->getParentDirectory(sourceFile.toStdString());
if (!m_resolver->contains(filePath)) if (!m_resolver->contains(filePath))
m_resolver->addPath(filePath); m_resolver->addPath(filePath);

View File

@ -578,7 +578,7 @@ void MainWindow::onClearRecent() {
SceneContext *MainWindow::loadScene(const QString &qFileName) { SceneContext *MainWindow::loadScene(const QString &qFileName) {
ref<FileResolver> resolver = FileResolver::getInstance(); ref<FileResolver> resolver = FileResolver::getInstance();
std::string filename = resolver->resolveAbsolute(qFileName.toStdString()); std::string filename = resolver->resolveAbsolute(qFileName.toStdString());
std::string filePath = resolver->pathFromFile(filename); std::string filePath = resolver->getParentDirectory(filename);
ref<FileResolver> newResolver = resolver->clone(); ref<FileResolver> newResolver = resolver->clone();
if (!newResolver->contains(filePath)) if (!newResolver->contains(filePath))
newResolver->addPath(filePath); newResolver->addPath(filePath);

View File

@ -35,13 +35,15 @@ public:
}; };
WavefrontOBJ(const Properties &props) : Shape(props) { WavefrontOBJ(const Properties &props) : Shape(props) {
m_name = FileResolver::getInstance()->resolve(props.getString("filename")); ref<FileResolver> fresolver = FileResolver::getInstance();
std::string path = fresolver->resolve(props.getString("filename"));
m_name = fresolver->getChild(path);
/* Load the geometry */ /* Load the geometry */
Log(EInfo, "Loading geometry from \"%s\" ..", m_name.c_str()); Log(EInfo, "Loading geometry from \"%s\" ..", path.c_str());
std::ifstream is(m_name.c_str()); std::ifstream is(path.c_str());
if (is.bad() || is.fail()) if (is.bad() || is.fail())
Log(EError, "Geometry file '%s' not found!", m_name.c_str()); Log(EError, "Geometry file '%s' not found!", path.c_str());
std::string buf; std::string buf;
std::vector<Point> vertices; std::vector<Point> vertices;