From 976ce209938be1bfc088d5f6cdd523a4089e1dd0 Mon Sep 17 00:00:00 2001 From: Jonas Suhr Christensen Date: Wed, 15 May 2013 18:14:01 +0200 Subject: Make it possible to type a path and have browser switch accordingly. --- plugingui/directory.cc | 2 +- plugingui/filebrowser.cc | 23 +++++++++++++++++++++-- plugingui/listbox.cc | 5 +++++ plugingui/listbox.h | 1 + plugingui/listboxbasic.cc | 5 +++++ plugingui/listboxbasic.h | 2 ++ 6 files changed, 35 insertions(+), 3 deletions(-) (limited to 'plugingui') diff --git a/plugingui/directory.cc b/plugingui/directory.cc index 1069856..9053f8d 100644 --- a/plugingui/directory.cc +++ b/plugingui/directory.cc @@ -61,7 +61,7 @@ Directory::~Directory() void Directory::setPath(std::string path) { DEBUG(directory, "Setting path to '%s'\n", path.c_str()); - this->_path = path; + this->_path = cleanPath(path); refresh(); } diff --git a/plugingui/filebrowser.cc b/plugingui/filebrowser.cc index 6eaca8a..3c8b89d 100644 --- a/plugingui/filebrowser.cc +++ b/plugingui/filebrowser.cc @@ -68,7 +68,6 @@ 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(); @@ -87,6 +86,12 @@ static void changeDir(void *ptr) } #endif + if(value.empty() && !dir->isDir()) { + DEBUG(filebrowser, "Selecting file '%s'\n", dir->path().c_str()); + if(prv->filesel_handler) prv->filesel_handler(prv->ptr, dir->path().c_str()); + return; + } + if(!value.empty() && dir->fileExists(value)) { std::string file = dir->path() + "/" + value; DEBUG(filebrowser, "Selecting file '%s'\n", file.c_str()); @@ -137,6 +142,19 @@ static void changeDir(void *ptr) lb->addItems(items); } +static void handleKeyEvent(void *ptr) { + struct GUI::FileBrowser::private_data *prv = + (struct GUI::FileBrowser::private_data *) ptr; + + GUI::ListBox *lb = prv->listbox; + lb->clearSelectedValue(); + GUI::LineEdit *le = prv->lineedit; + + printf("AAA: %s\n", le->text().c_str()); + prv->dir->setPath(le->text()); + changeDir(ptr); +} + GUI::FileBrowser::FileBrowser(GUI::Widget *parent) : GUI::Widget(parent), lbl_path(this), lineedit(this), listbox(this), btn_sel(this), btn_esc(this), @@ -152,8 +170,9 @@ GUI::FileBrowser::FileBrowser(GUI::Widget *parent) lbl_path.setText("Path:"); - lineedit.setReadOnly(true); +// lineedit.setReadOnly(true); prv->lineedit = &lineedit; + prv->lineedit->registerEnterPressedHandler(handleKeyEvent, prv); prv->listbox = &listbox; listbox.registerSelectHandler(changeDir, prv); diff --git a/plugingui/listbox.cc b/plugingui/listbox.cc index 3647753..ed873b2 100644 --- a/plugingui/listbox.cc +++ b/plugingui/listbox.cc @@ -82,6 +82,11 @@ std::string GUI::ListBox::selectedValue() return basic->selectedValue(); } +void GUI::ListBox::clearSelectedValue() +{ + basic->clearSelectedValue(); +} + void GUI::ListBox::registerClickHandler(void (*handler)(void *), void *ptr) { basic->registerClickHandler(handler, ptr); diff --git a/plugingui/listbox.h b/plugingui/listbox.h index 4a7af20..c8677e7 100644 --- a/plugingui/listbox.h +++ b/plugingui/listbox.h @@ -48,6 +48,7 @@ public: bool selectItem(int index); std::string selectedName(); std::string selectedValue(); + void clearSelectedValue(); void registerSelectHandler(void (*handler)(void *), void *ptr); void registerClickHandler(void (*handler)(void *), void *ptr); diff --git a/plugingui/listboxbasic.cc b/plugingui/listboxbasic.cc index f0699c7..df7877d 100644 --- a/plugingui/listboxbasic.cc +++ b/plugingui/listboxbasic.cc @@ -144,6 +144,11 @@ std::string GUI::ListBoxBasic::selectedValue() return items[selected].value; } +void GUI::ListBoxBasic::clearSelectedValue() +{ + setSelection(-1); +} + void GUI::ListBoxBasic::registerClickHandler(void (*handler)(void *), void *ptr) { this->clk_handler = handler; diff --git a/plugingui/listboxbasic.h b/plugingui/listboxbasic.h index ebb46b0..deb4a67 100644 --- a/plugingui/listboxbasic.h +++ b/plugingui/listboxbasic.h @@ -59,6 +59,8 @@ public: std::string selectedName(); std::string selectedValue(); + void clearSelectedValue(); + void registerSelectHandler(void (*handler)(void *), void *ptr); void registerClickHandler(void (*handler)(void *), void *ptr); void registerValueChangeHandler(void (*handler)(void *), void *ptr); -- cgit v1.2.3