From a35e512e902cc511e0b0afb0aa5f4122a18fb295 Mon Sep 17 00:00:00 2001 From: Vincent van Ravesteijn Date: Mon, 5 Dec 2011 13:12:57 +0000 Subject: [PATCH] Fix bug #7916: Undo warning message when inserting plaintext file LFUN_INSERT_PLAINTEXT is handled in GuiView because it might need to ask for a filename. But if the filename is given as a paramater we can handle it in BufferView immediately. Also, when we've asked for the filename in GuiView we should dispatch the LFUN to BufferView in order to properly use the Undo mechanism. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40377 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/BufferView.cpp | 23 +++++++++- src/frontends/qt4/GuiView.cpp | 86 ++++++++++++++++------------------- 2 files changed, 59 insertions(+), 50 deletions(-) diff --git a/src/BufferView.cpp b/src/BufferView.cpp index a06b6fec45..af167d4821 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1034,9 +1034,18 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag) // buffer clean/dirty status by itself. flag.setEnabled(!buffer_.isReadonly() && buffer_.undo().hasRedoStack()); break; - case LFUN_FILE_INSERT: case LFUN_FILE_INSERT_PLAINTEXT_PARA: - case LFUN_FILE_INSERT_PLAINTEXT: + case LFUN_FILE_INSERT_PLAINTEXT: { + bool enabled = true; + docstring const fname = cmd.argument(); + if (!FileName::isAbsolute(to_utf8(fname))) { + flag.message(_("Absolute filename expected.")); + return false; + } + flag.setEnabled(enabled && cur.inTexted()); + break; + } + case LFUN_FILE_INSERT: case LFUN_BOOKMARK_SAVE: // FIXME: Actually, these LFUNS should be moved to Text flag.setEnabled(cur.inTexted()); @@ -1937,6 +1946,16 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) cur.setCurrentFont(); dr.forceBufferUpdate(); } + } + + case LFUN_FILE_INSERT_PLAINTEXT_PARA: + case LFUN_FILE_INSERT_PLAINTEXT: { + bool const as_paragraph = (act == LFUN_FILE_INSERT_PLAINTEXT_PARA); + string const fname = to_utf8(cmd.argument()); + if (!FileName::isAbsolute(fname)) + dr.setMessage(_("Absolute filename expected.")); + else + insertPlaintextFile(FileName(fname), as_paragraph); break; } diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 48bbc056b6..a23bbddf45 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -1867,6 +1867,15 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag) enable = !(lyxrc.forward_search_dvi.empty() && lyxrc.forward_search_pdf.empty()); break; + case LFUN_FILE_INSERT_PLAINTEXT: + case LFUN_FILE_INSERT_PLAINTEXT_PARA: { + if (BufferView const * bv = documentBufferView()) + enable = bv->cursor().inTexted(); + else + enable = false; + break; + } + default: return false; } @@ -2228,49 +2237,6 @@ void GuiView::insertLyXFile(docstring const & fname) } -void GuiView::insertPlaintextFile(docstring const & fname, - bool asParagraph) -{ - BufferView * bv = documentBufferView(); - if (!bv) - return; - - if (!fname.empty() && !FileName::isAbsolute(to_utf8(fname))) { - message(_("Absolute filename expected.")); - return; - } - - // FIXME UNICODE - FileName filename(to_utf8(fname)); - - if (!filename.empty()) { - bv->insertPlaintextFile(filename, asParagraph); - return; - } - - FileDialog dlg(qt_("Select file to insert"), (asParagraph ? - LFUN_FILE_INSERT_PLAINTEXT_PARA : LFUN_FILE_INSERT_PLAINTEXT)); - - FileDialog::Result result = dlg.open(toqstr(bv->buffer().filePath()), - QStringList(qt_("All Files (*)"))); - - if (result.first == FileDialog::Later) - return; - - // FIXME UNICODE - filename.set(fromqstr(result.second)); - - // check selected filename - if (filename.empty()) { - // emit message signal. - message(_("Canceled.")); - return; - } - - bv->insertPlaintextFile(filename, asParagraph); -} - - bool GuiView::renameBuffer(Buffer & b, docstring const & newname) { FileName fname = b.fileName(); @@ -3355,13 +3321,37 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr) insertLyXFile(cmd.argument()); break; - case LFUN_FILE_INSERT_PLAINTEXT_PARA: - insertPlaintextFile(cmd.argument(), true); - break; - case LFUN_FILE_INSERT_PLAINTEXT: - insertPlaintextFile(cmd.argument(), false); + case LFUN_FILE_INSERT_PLAINTEXT_PARA: { + bool const as_paragraph = (cmd.action() == LFUN_FILE_INSERT_PLAINTEXT_PARA); + string const fname = to_utf8(cmd.argument()); + if (!fname.empty() && !FileName::isAbsolute(fname)) { + dr.setMessage(_("Absolute filename expected.")); + break; + } + + FileName filename(fname); + if (fname.empty()) { + FileDialog dlg(qt_("Select file to insert"), (as_paragraph ? + LFUN_FILE_INSERT_PLAINTEXT_PARA : LFUN_FILE_INSERT_PLAINTEXT)); + + FileDialog::Result result = dlg.open(toqstr(bv->buffer().filePath()), + QStringList(qt_("All Files (*)"))); + + if (result.first == FileDialog::Later || result.second.isEmpty()) { + dr.setMessage(_("Canceled.")); + break; + } + + filename.set(fromqstr(result.second)); + } + + if (bv) { + FuncRequest const new_cmd(cmd, filename.absoluteFilePath()); + bv->dispatch(new_cmd, dr); + } break; + } case LFUN_BUFFER_RELOAD: { LASSERT(doc_buffer, break); -- 2.39.2