From f8422ebb00f44b1d50b724d66cca369075d2cd91 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Sun, 2 Sep 2007 05:36:39 +0000 Subject: [PATCH] Embedding: fix a file selection and a file copy bug git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19986 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/EmbeddedFiles.cpp | 5 +++++ src/frontends/qt4/GuiEmbeddedFiles.cpp | 27 ++++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/EmbeddedFiles.cpp b/src/EmbeddedFiles.cpp index ec3c4159b5..f1e388bc99 100644 --- a/src/EmbeddedFiles.cpp +++ b/src/EmbeddedFiles.cpp @@ -64,6 +64,7 @@ using support::bformat; using support::zipFiles; using support::prefixIs; using support::sum; +using support::makedir; EmbeddedFile::EmbeddedFile(string const & file, string const & inzip_name, @@ -134,6 +135,10 @@ bool EmbeddedFile::extract(Buffer const * buf) const // copy file in the previous case, and a new case if (copyFile || (!fs::exists(ext_file) && fs::exists(emb_file))) { try { + // need to make directory? + string path = onlyPath(ext_file); + if (!fs::is_directory(path)) + makedir(const_cast(path.c_str()), 0755); fs::copy_file(emb_file, ext_file, false); return true; } catch (fs::filesystem_error const & fe) { diff --git a/src/frontends/qt4/GuiEmbeddedFiles.cpp b/src/frontends/qt4/GuiEmbeddedFiles.cpp index 8e50c89bf1..c9afffdea2 100644 --- a/src/frontends/qt4/GuiEmbeddedFiles.cpp +++ b/src/frontends/qt4/GuiEmbeddedFiles.cpp @@ -64,19 +64,28 @@ void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged() EmbeddedFiles & files = form_->embeddedFiles(); QList selection = filesLW->selectedItems(); + fullpathLE->setEnabled(selection.size() == 1); - - EmbeddedFile::STATUS mode = EmbeddedFile::NONE; + // try to find a common mode, otherwise return NONE. - for (QList::iterator it = selection.begin(); - it != selection.end(); ++it) { - if (selection.size() == 1) - fullpathLE->setText(toqstr(files[filesLW->row(*it)].absFilename())); + QList::iterator it = selection.begin(); + QList::iterator it_end = selection.end(); + // if the selection is not empty + if (it != it_end) { + int idx = filesLW->row(*it); + fullpathLE->setText(toqstr(files[idx].absFilename())); + // go to the first selected item + form_->goTo(files[idx]); + } + + EmbeddedFile::STATUS mode = EmbeddedFile::NONE; + for (; it != it_end; ++it) { + int idx = filesLW->row(*it); if (mode == EmbeddedFile::NONE) { - mode = files[filesLW->row(*it)].status(); + mode = files[idx].status(); continue; } - if (mode != files[filesLW->row(*it)].status()) { + if (mode != files[idx].status()) { mode = EmbeddedFile::NONE; break; } @@ -85,8 +94,6 @@ void GuiEmbeddedFilesDialog::on_filesLW_itemSelectionChanged() autoRB->setChecked(mode == EmbeddedFile::AUTO); embeddedRB->setChecked(mode == EmbeddedFile::EMBEDDED); externalRB->setChecked(mode == EmbeddedFile::EXTERNAL); - // go to the first selected item - form_->goTo(files[filesLW->row(*selection.begin())]); } -- 2.39.2