From 064f0112bd825f1102a94e109e5329710d59eb82 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 7 Apr 2013 11:45:38 +0200 Subject: Hacky fix for setPath in filebrowser. --- plugingui/filebrowser.cc | 60 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 16 deletions(-) (limited to 'plugingui/filebrowser.cc') diff --git a/plugingui/filebrowser.cc b/plugingui/filebrowser.cc index 46ecf2c..d1b6136 100644 --- a/plugingui/filebrowser.cc +++ b/plugingui/filebrowser.cc @@ -81,7 +81,7 @@ static void changeDir(void *ptr) char *c = getcwd(filename, sizeof(filename)); (void)c; - //printf("CWD: [%s]\n", filename); + DEBUG(cwd, "CWD1: [%s]\n", filename); if(value != "") { #ifdef WIN32 @@ -99,15 +99,15 @@ static void changeDir(void *ptr) struct stat st; if(stat(filename, &st) == 0) { if((st.st_mode & S_IFDIR) != 0) { - //printf("'%s' is present and is a directory\n", filename); + DEBUG(cwd, "'%s' is present and is a directory\n", filename); } if((st.st_mode & S_IFREG) != 0) { - //printf("'%s' is present and is a file\n", filename); + DEBUG(cwd, "'%s' is present and is a file\n", filename); if(prv->filesel_handler) prv->filesel_handler(prv->ptr, filename); return; } } else { - //printf("'%s' is not present or unreadable\n", filename); + DEBUG(cwd, "'%s' is not present or unreadable\n", filename); //perror("!"); return; } @@ -119,6 +119,8 @@ static void changeDir(void *ptr) c = getcwd(filename, sizeof(filename)); le->setText(filename); + DEBUG(cwd, "CWD2: [%s]\n", filename); + DIR *dir = opendir("."); if(!dir) { lb->addItem("[ Could not open dir ]", ""); @@ -135,7 +137,8 @@ static void changeDir(void *ptr) GUI::FileBrowser::FileBrowser(GUI::Widget *parent) : GUI::Widget(parent), - lbl_path(this), lineedit(this), listbox(this), btn_sel(this), btn_esc(this) + lbl_path(this), lineedit(this), listbox(this), btn_sel(this), btn_esc(this), + back(":bg.png") #ifdef WIN32 , drv(this), lbl_drive(this) #endif @@ -189,8 +192,41 @@ GUI::FileBrowser::~FileBrowser() delete prv; } +#include + +static bool isDir(std::string d) +{ + DEBUG(dir, "Is '%s' a dir?\n", d.c_str()); + struct stat st; + if(stat(d.c_str(), &st) == 0) { + if((st.st_mode & S_IFDIR) != 0) { + DEBUG(dir, "Yes\n"); + return true; + } + } + + DEBUG(dir, "No\n"); + return false; +} + void GUI::FileBrowser::setPath(std::string path) { + std::string dir; + if(isDir(path)) { + dir = path; + } else { + char *d = strdup(path.c_str()); + std::string _dirname = dirname(d); + free(d); + if(isDir(_dirname)) dir = _dirname; + else return; + } + + if(chdir(dir.c_str()) == -1) return; + prv->listbox->clear(); + changeDir(prv); + + /* std::string dirname = path; while(dirname != "") { @@ -218,6 +254,7 @@ void GUI::FileBrowser::setPath(std::string path) dirname = dirname.substr(0, dirname.length() - 1); } } + */ } void GUI::FileBrowser::resize(int w, int h) @@ -226,7 +263,7 @@ void GUI::FileBrowser::resize(int w, int h) int offset = 0; int brd = 5; // border - int btn_h = 18; + int btn_h = 30; #ifdef WIN32 offset += brd; @@ -275,14 +312,5 @@ void GUI::FileBrowser::registerFileSelectHandler(void (*handler)(void *, void GUI::FileBrowser::repaintEvent(GUI::RepaintEvent *e) { Painter p(this); - p.setColour(Colour(0, 0.8)); - - p.drawFilledRectangle(0, 0, width(), height()); - - p.setColour(Colour(1, 1)); - - for(int i = 1; i < 10; i++) { - p.drawLine(0,0,width() / i, height() - 1); - p.drawLine(width()-1,0,width() / i, height() - 1); - } + p.drawImageStretched(0,0, &back, width(), height()); } -- cgit v1.2.3