mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
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
This commit is contained in:
parent
a0d8157891
commit
a35e512e90
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user