void FileChooserImpl::accept_browser() { int i = int(fbrowser_->selected()); if (i == -1) { accept_editor(editor_); return; } i = filter_map_[i]; const String& path = *dir_->path(); const String& name = *dir_->name(i); int length = path.length() + name.length(); char* tmp = new char[length + 1]; sprintf( tmp, "%.*s%.*s", path.length(), path.string(), name.length(), name.string() ); editor_->field(tmp); selected_ = editor_->text(); if (dir_->is_directory(i)) { if (chdir(String(tmp, length))) { editor_->field(*dir_->path()); fchooser_->focus(editor_); } else { /* should generate an error message */ } } else { fchooser_->dismiss(true); } delete tmp; }
void FileChooserImpl::accept_editor(FieldEditor* e) { String* path = Directory::canonical(*e->text()); e->field(*path); if (chdir(*path)) { /* chdir has copied the string */ delete path; } else { selected_ = path; fchooser_->dismiss(true); e->select(path->rindex('/') + 1, path->length()); } }
void FileChooserImpl::cancel_editor(FieldEditor*) { fchooser_->dismiss(false); }
void FileChooserImpl::cancel_browser() { selected_ = nil; fchooser_->dismiss(false); }