summaryrefslogtreecommitdiff
path: root/plugingui/filebrowser.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2013-05-06 18:57:36 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2013-05-06 18:57:36 +0200
commite0c56549d404efdee32874c4ea8ee73e9b654a83 (patch)
treec57b82ee20953e82eb7e27b867f25185b535d4dd /plugingui/filebrowser.cc
parent4d86a47b8cf90beaf0fb90196a46d2d23eba43b7 (diff)
Remove drive list from filebrowser in win32. Generally clean up code.
Diffstat (limited to 'plugingui/filebrowser.cc')
-rw-r--r--plugingui/filebrowser.cc222
1 files changed, 16 insertions, 206 deletions
diff --git a/plugingui/filebrowser.cc b/plugingui/filebrowser.cc
index d4acdd6..6eaca8a 100644
--- a/plugingui/filebrowser.cc
+++ b/plugingui/filebrowser.cc
@@ -48,7 +48,6 @@
struct GUI::FileBrowser::private_data {
GUI::LineEdit *lineedit;
GUI::ListBox *listbox;
- GUI::ComboBox *drives;
void (*filesel_handler)(void *, std::string);
void *ptr;
Directory *dir;
@@ -64,7 +63,8 @@ static void cancel(void *ptr)
fp->hide();
}
-static void changeDir(void *ptr) {
+static void changeDir(void *ptr)
+{
struct GUI::FileBrowser::private_data *prv =
(struct GUI::FileBrowser::private_data *) ptr;
@@ -76,12 +76,12 @@ static void changeDir(void *ptr) {
lb->clear();
- INFO(filebrowser, "Changing path to '%s'\n", (dir->path() + "/" + value).c_str());
+ INFO(filebrowser, "Changing path to '%s'\n",
+ (dir->path() + "/" + value).c_str());
#ifdef WIN32
if(prv->above_root && !value.empty()) {
-DEBUG(filebrowser, "AAAA");
- dir->setPath(value+"\\");
+ dir->setPath(value+"\\");
value.clear();
prv->above_root = false;
}
@@ -94,7 +94,6 @@ DEBUG(filebrowser, "AAAA");
return;
}
-
std::vector<GUI::ListBoxBasic::Item> items;
#ifdef WIN32
@@ -110,20 +109,20 @@ DEBUG(filebrowser, "AAAA");
items.push_back(item);
}
prv->above_root = true;
- }
- else {
+ } else {
#endif
- if(!value.empty() && !dir->cd(value)) {
- DEBUG(filebrowser, "Error changing to '%s'\n",
+ if(!value.empty() && !dir->cd(value)) {
+ DEBUG(filebrowser, "Error changing to '%s'\n",
(dir->path() + "/" + value).c_str());
- return;
- }
-
- DEBUG(filebrowser, "Setting path of lineedit to %s\n", dir->path().c_str());
- le->setText(dir->path());
+ return;
+ }
+
+ DEBUG(filebrowser, "Setting path of lineedit to %s\n",
+ dir->path().c_str());
+ le->setText(dir->path());
-Directory::EntryList entries = dir->entryList();
+ Directory::EntryList entries = dir->entryList();
for(Directory::EntryList::iterator it = entries.begin();
it != entries.end(); it++) {
GUI::ListBoxBasic::Item item;
@@ -138,94 +137,10 @@ Directory::EntryList entries = dir->entryList();
lb->addItems(items);
}
-#if 0
-static void changeDir(void *ptr)
-{
- struct GUI::FileBrowser::private_data *prv =
- (struct GUI::FileBrowser::private_data *)ptr;
-
- GUI::ListBox *lb = prv->listbox;
- GUI::LineEdit *le = prv->lineedit;
- std::string value = lb->selectedValue();
-
-#ifdef WIN32
- std::string drive = prv->drives->selectedValue();
- int drvidx = atoi(drive.c_str());
- /*if(prv->drvidx != drvidx)*/ _chdrive(drvidx + 1); // one based... sigh
- //printf("DRV: [%d %s]\n", drvidx, drive.c_str());
-#endif
-
- char filename[1024];
- char *c = getcwd(filename, sizeof(filename));
- (void)c;
-
- DEBUG(cwd, "CWD1: [%s]\n", filename);
-
- if(value != "") {
-#ifdef WIN32
- if(prv->drvidx == drvidx) {
- strcat(filename, "\\");
- strcat(filename, value.c_str());
- }
- prv->drvidx = drvidx;
-#else
- strcat(filename, "/");
- strcat(filename, value.c_str());
-#endif
- }
-
- struct stat st;
- if(stat(filename, &st) == 0) {
- if((st.st_mode & S_IFDIR) != 0) {
- DEBUG(cwd, "'%s' is present and is a directory\n", filename);
- }
- if((st.st_mode & S_IFREG) != 0) {
- DEBUG(cwd, "'%s' is present and is a file\n", filename);
- if(prv->filesel_handler) prv->filesel_handler(prv->ptr, filename);
- return;
- }
- } else {
- DEBUG(cwd, "'%s' is not present or unreadable\n", filename);
- //perror("!");
- return;
- }
-
- lb->clear();
- int i = chdir(value.c_str());
- (void)i;
-
- 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 ]", "");
- return;
- }
-
- std::vector<GUI::ListBoxBasic::Item> items;
- struct dirent *entry;
- while((entry = readdir(dir)) != NULL) {
- GUI::ListBoxBasic::Item item;
- item.name = entry->d_name;
- item.value = entry->d_name;
- items.push_back(item);
- }
- lb->addItems(items);
-
- closedir(dir);
-}
-#endif/*0*/
-
GUI::FileBrowser::FileBrowser(GUI::Widget *parent)
: GUI::Widget(parent),
lbl_path(this), lineedit(this), listbox(this), btn_sel(this), btn_esc(this),
back(":bg.png")
-#ifdef WIN32
- , drv(this), lbl_drive(this)
-#endif
{
prv = new struct GUI::FileBrowser::private_data();
prv->filesel_handler = NULL;
@@ -250,30 +165,6 @@ GUI::FileBrowser::FileBrowser(GUI::Widget *parent)
btn_esc.registerClickHandler(cancel, this);
changeDir(prv);
-/*
-#ifdef WIN32
- lbl_drive.setText("Drive:");
-
- drv.registerValueChangedHandler(changeDir, prv);
-
- unsigned int d = GetLogicalDrives();
- for(int i = 0; i < 32; i++) {
- if(d & (1 << i)) {
-
- char name[] = "X:";
- name[0] = i + 'A';
-
- char num[32];
- sprintf(num, "%d", i);
-
- drv.addItem(name, num);
- }
- }
- prv->drives = &drv;
-#endif
-*/
-
-// changeDir(prv);
resize(200, 190);
}
@@ -284,82 +175,15 @@ GUI::FileBrowser::~FileBrowser()
delete prv;
}
-#if 0
-#include <libgen.h>
-
-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;
-}
-#endif
-
void GUI::FileBrowser::setPath(std::string path)
{
-// WARN(filebrowser, "Not implemented yet!");
- // TODO: Remove this check to directoy.cc
INFO(filebrowser, "Setting path to '%s'\n", path.c_str());
if(path.empty()) path = Directory::cwd();
- // TODO: Strip path to set path to a directory
prv->dir->setPath(Directory::pathDirectory(path));
prv->listbox->clear();
changeDir(prv);
-/*
- std::string dir;
- if(prv->dir->isDir()) {
- dir = path;
- } else {
- char *d = strdup(path.c_str());
- std::string _dirname = dirname(d);
- free(d);
- if(prv->dir->isDir(_dirname)) dir = _dirname;
- else return;
- }
-*/
-// if(chdir(dir.c_str()) == -1) return;
-// prv->listbox->clear();
-// changeDir(prv);
-
- /*
- std::string dirname = path;
-
- while(dirname != "") {
-
- DEBUG(filebrowser, "dirname: %s\n", dirname.c_str());
-
- struct stat st;
- if(stat(dirname.c_str(), &st) == 0) {
- if((st.st_mode & S_IFDIR) != 0) {
- dirname += "/.";
- int i = chdir(dirname.c_str());
- (void)i;
- changeDir(prv);
-
- DEBUG(filebrowser, "chdir to: %s\n", dirname.c_str());
-
- return;
- }
- }
-
- dirname = dirname.substr(0, dirname.length() - 1);
- while(dirname[dirname.length() - 1] != '/' &&
- dirname[dirname.length() - 1] != '\\' &&
- dirname != "") {
- dirname = dirname.substr(0, dirname.length() - 1);
- }
- }
- */
}
void GUI::FileBrowser::resize(int w, int h)
@@ -370,17 +194,6 @@ void GUI::FileBrowser::resize(int w, int h)
int brd = 5; // border
int btn_h = 30;
-#ifdef WIN32
- offset += brd;
-
- lbl_drive.move(0, offset);
- drv.move(60, offset);
-
- offset += btn_h;
-
- lbl_drive.resize(60, btn_h);
- drv.resize(w - 60 - brd, btn_h);
-#endif
offset += brd;
lbl_path.move(0, offset);
@@ -401,13 +214,10 @@ void GUI::FileBrowser::resize(int w, int h)
btn_sel.move(brd + w / 2 - brd / 2, h - btn_h - brd);
btn_sel.resize((w - 1 - 2*brd) / 2, btn_h);
-
-
}
-
void GUI::FileBrowser::registerFileSelectHandler(void (*handler)(void *,
- std::string),
+ std::string),
void *ptr)
{
prv->filesel_handler = handler;