summaryrefslogtreecommitdiffstats
path: root/src/GladeFile.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-01-08 19:11:13 +0000
committerDavid Robillard <d@drobilla.net>2011-01-08 19:11:13 +0000
commit9a1cd7003886f89e2228d74d61130dc5d24c06a3 (patch)
tree133972adfb7802750f62d9db69639cd2c18459ba /src/GladeFile.hpp
parentc92301fc4cd5620fe8193e2e6648ea86c580784d (diff)
downloadpatchage-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.hpp51
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);
}
};