diff options
author | David Robillard <d@drobilla.net> | 2011-01-08 19:11:13 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-01-08 19:11:13 +0000 |
commit | 9a1cd7003886f89e2228d74d61130dc5d24c06a3 (patch) | |
tree | 133972adfb7802750f62d9db69639cd2c18459ba /src/GladeFile.hpp | |
parent | c92301fc4cd5620fe8193e2e6648ea86c580784d (diff) | |
download | patchage-9a1cd7003886f89e2228d74d61130dc5d24c06a3.tar.gz patchage-9a1cd7003886f89e2228d74d61130dc5d24c06a3.tar.bz2 patchage-9a1cd7003886f89e2228d74d61130dc5d24c06a3.zip |
Support via waf for running from the build directory.
git-svn-id: http://svn.drobilla.net/lad/trunk/patchage@2799 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/GladeFile.hpp')
-rw-r--r-- | src/GladeFile.hpp | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/src/GladeFile.hpp b/src/GladeFile.hpp index 2f6ad4b..da9ea3b 100644 --- a/src/GladeFile.hpp +++ b/src/GladeFile.hpp @@ -25,35 +25,50 @@ #include <libglademm/xml.h> -#include "patchage-config.h" +#include "raul/log.hpp" -#ifdef BUNDLE +#include "patchage-config.h" +#ifdef PATCHAGE_BINLOC #include "binary_location.h" #endif class GladeFile { public: + inline static bool is_readable(const std::string& filename) { + std::ifstream fs(filename.c_str()); + const bool fail = fs.fail(); + fs.close(); + return !fail; + } + static Glib::RefPtr<Gnome::Glade::Xml> open(const std::string& base_name) { std::string glade_filename; -#ifdef BUNDLE - char* loc = binary_location(); - std::string bundle = loc; - bundle = bundle.substr(0, bundle.find_last_of("/")); - glade_filename = bundle + "/" + PATCHAGE_DATA_DIR + "/" + base_name + ".glade"; - free(loc); -#else - glade_filename = std::string(PATCHAGE_DATA_DIR) + "/" + base_name + ".glade"; + char* loc = NULL; +#ifdef PATCHAGE_BINLOC + loc = binary_location(); + if (loc) { + std::string bundle = loc; + bundle = bundle.substr(0, bundle.find_last_of("/")); + glade_filename = bundle + "/" + base_name + ".glade"; + free(loc); + if (is_readable(glade_filename)) { + Raul::info << "Loading glade file " << glade_filename << std::endl; + return Gnome::Glade::Xml::create(glade_filename); + } + } #endif - std::ifstream fs(glade_filename.c_str()); - if (fs.fail()) { - std::ostringstream ss; - ss << "Unable to find " << base_name << ".glade in " << PATCHAGE_DATA_DIR << std::endl; - throw std::runtime_error(ss.str()); + glade_filename = std::string(PATCHAGE_DATA_DIR) + "/" + base_name + ".glade"; + if (is_readable(glade_filename)) { + Raul::info << "Loading glade file " << glade_filename << std::endl; + return Gnome::Glade::Xml::create(glade_filename); } - fs.close(); - - return Gnome::Glade::Xml::create(glade_filename); + std::stringstream ss; + ss << "Unable to find " << base_name << ".glade in " << loc + << " or " << PATCHAGE_DATA_DIR << std::endl; + throw std::runtime_error(ss.str()); + return Glib::RefPtr<Gnome::Glade::Xml>(); + //return Gnome::Glade::Xml::create(glade_filename); } }; |