* Move Buffer specific LFUNs to Buffer::dispatch() and Buffer::getStatus().

There is a FIXME in there that says that if some LFUN need to be dispatched even if the Buffer is internal then we should add some code. But I couldn't find any for now.
* Move LFUN_BUFFER_IMPORT status to GuiView where it belongs.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@31398 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Abdelrazak Younes 2009-09-19 14:05:52 +00:00
parent 226ebea2bf
commit 93998bb239
3 changed files with 172 additions and 151 deletions

View File

@ -1633,27 +1633,73 @@ void Buffer::markDepClean(string const & name)
bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag) bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag)
{ {
if (isInternal()) {
// FIXME? if there is an Buffer LFUN that can be dispatched even
// if internal, put a switch '(cmd.action)' here.
return false;
}
bool enable = true;
switch (cmd.action) { switch (cmd.action) {
case LFUN_BUFFER_TOGGLE_READ_ONLY: case LFUN_BUFFER_TOGGLE_READ_ONLY:
flag.setOnOff(isReadonly()); flag.setOnOff(isReadonly());
break; break;
// FIXME: There is need for a command-line import.
//case LFUN_BUFFER_IMPORT:
case LFUN_BUFFER_AUTO_SAVE:
break;
case LFUN_BUFFER_EXPORT_CUSTOM:
// FIXME: Nothing to check here?
break;
case LFUN_BUFFER_EXPORT: { case LFUN_BUFFER_EXPORT: {
docstring const arg = cmd.argument(); docstring const arg = cmd.argument();
bool enable = arg == "custom" || isExportable(to_utf8(arg)); enable = arg == "custom" || isExportable(to_utf8(arg));
if (!enable) if (!enable)
flag.message(bformat( flag.message(bformat(
_("Don't know how to export to format: %1$s"), arg)); _("Don't know how to export to format: %1$s"), arg));
flag.setEnabled(enable);
break; break;
} }
case LFUN_MASTER_BUFFER_UPDATE:
case LFUN_MASTER_BUFFER_VIEW:
enable = parent() != 0;
break;
case LFUN_BUFFER_UPDATE:
case LFUN_BUFFER_VIEW: {
string format = to_utf8(cmd.argument());
if (cmd.argument().empty())
format = getDefaultOutputFormat();
typedef vector<Format const *> Formats;
Formats formats;
formats = exportableFormats(true);
Formats::const_iterator fit = formats.begin();
Formats::const_iterator end = formats.end();
enable = false;
for (; fit != end ; ++fit) {
if ((*fit)->name() == format)
enable = true;
}
break;
}
case LFUN_BUFFER_CHKTEX:
enable = isLatex() && !lyxrc.chktex_command.empty();
break;
case LFUN_BUILD_PROGRAM:
enable = isExportable("program");
break;
case LFUN_BRANCH_ACTIVATE: case LFUN_BRANCH_ACTIVATE:
case LFUN_BRANCH_DEACTIVATE: { case LFUN_BRANCH_DEACTIVATE: {
BranchList const & branchList = params().branchlist(); BranchList const & branchList = params().branchlist();
docstring const branchName = cmd.argument(); docstring const branchName = cmd.argument();
flag.setEnabled(!branchName.empty() enable = !branchName.empty() && branchList.find(branchName);
&& branchList.find(branchName));
break; break;
} }
@ -1661,12 +1707,12 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag)
case LFUN_BRANCHES_RENAME: case LFUN_BRANCHES_RENAME:
case LFUN_BUFFER_PRINT: case LFUN_BUFFER_PRINT:
// if no Buffer is present, then of course we won't be called! // if no Buffer is present, then of course we won't be called!
flag.setEnabled(true);
break; break;
default: default:
return false; return false;
} }
flag.setEnabled(enable);
return true; return true;
} }
@ -1682,6 +1728,13 @@ void Buffer::dispatch(string const & command, DispatchResult & result)
// whether we have a GUI or not. The boolean use_gui holds this information. // whether we have a GUI or not. The boolean use_gui holds this information.
void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr) void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
{ {
if (isInternal()) {
// FIXME? if there is an Buffer LFUN that can be dispatched even
// if internal, put a switch '(cmd.action)' here.
dr.dispatched(false);
return;
}
string const argument = to_utf8(func.argument());
// We'll set this back to false if need be. // We'll set this back to false if need be.
bool dispatched = true; bool dispatched = true;
@ -1694,7 +1747,12 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
break; break;
case LFUN_BUFFER_EXPORT: { case LFUN_BUFFER_EXPORT: {
bool success = doExport(to_utf8(func.argument()), false); if (argument == "custom") {
lyx::dispatch(FuncRequest(LFUN_DIALOG_SHOW, "sendto"));
break;
}
doExport(argument, false);
bool success = doExport(argument, false);
dr.setError(success); dr.setError(success);
if (!success) if (!success)
dr.setMessage(bformat(_("Error exporting to format: %1$s."), dr.setMessage(bformat(_("Error exporting to format: %1$s."),
@ -1702,6 +1760,96 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr)
break; break;
} }
case LFUN_BUFFER_UPDATE: {
string format = argument;
if (argument.empty())
format = getDefaultOutputFormat();
doExport(format, true);
break;
}
case LFUN_BUFFER_VIEW: {
string format = argument;
if (argument.empty())
format = getDefaultOutputFormat();
preview(format);
break;
}
case LFUN_MASTER_BUFFER_UPDATE: {
string format = argument;
if (argument.empty())
format = masterBuffer()->getDefaultOutputFormat();
masterBuffer()->doExport(format, true);
break;
}
case LFUN_MASTER_BUFFER_VIEW: {
string format = argument;
if (argument.empty())
format = masterBuffer()->getDefaultOutputFormat();
masterBuffer()->preview(format);
break;
}
case LFUN_BUILD_PROGRAM:
doExport("program", true);
break;
case LFUN_BUFFER_CHKTEX:
runChktex();
break;
case LFUN_BUFFER_EXPORT_CUSTOM: {
string format_name;
string command = split(argument, format_name, ' ');
Format const * format = formats.getFormat(format_name);
if (!format) {
lyxerr << "Format \"" << format_name
<< "\" not recognized!"
<< endl;
break;
}
// The name of the file created by the conversion process
string filename;
// Output to filename
if (format->name() == "lyx") {
string const latexname = latexName(false);
filename = changeExtension(latexname,
format->extension());
filename = addName(temppath(), filename);
if (!writeFile(FileName(filename)))
break;
} else {
doExport(format_name, true, filename);
}
// Substitute $$FName for filename
if (!contains(command, "$$FName"))
command = "( " + command + " ) < $$FName";
command = subst(command, "$$FName", filename);
// Execute the command in the background
Systemcall call;
call.startscript(Systemcall::DontWait, command);
break;
}
// FIXME: There is need for a command-line import.
/*
case LFUN_BUFFER_IMPORT:
doImport(argument);
break;
*/
case LFUN_BUFFER_AUTO_SAVE:
autoSave();
break;
case LFUN_BRANCH_ADD: { case LFUN_BRANCH_ADD: {
BranchList & branchList = params().branchlist(); BranchList & branchList = params().branchlist();
docstring const branchName = func.argument(); docstring const branchName = func.argument();

View File

@ -463,14 +463,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
bool enable = true; bool enable = true;
switch (cmd.action) { switch (cmd.action) {
case LFUN_BUFFER_CHKTEX:
enable = buf->isLatex() && !lyxrc.chktex_command.empty();
break;
case LFUN_BUILD_PROGRAM:
enable = buf->isExportable("program");
break;
case LFUN_CITATION_INSERT: { case LFUN_CITATION_INSERT: {
FuncRequest fr(LFUN_INSET_INSERT, "citation"); FuncRequest fr(LFUN_INSET_INSERT, "citation");
enable = getStatus(fr).enabled(); enable = getStatus(fr).enabled();
@ -562,36 +554,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
break; break;
} }
case LFUN_MASTER_BUFFER_UPDATE:
case LFUN_MASTER_BUFFER_VIEW:
if (!buf->parent()) {
enable = false;
break;
}
case LFUN_BUFFER_UPDATE:
case LFUN_BUFFER_VIEW: {
string format = to_utf8(cmd.argument());
if (cmd.argument().empty())
format = buf->getDefaultOutputFormat();
typedef vector<Format const *> Formats;
Formats formats;
formats = buf->exportableFormats(true);
Formats::const_iterator fit = formats.begin();
Formats::const_iterator end = formats.end();
enable = false;
for (; fit != end ; ++fit) {
if ((*fit)->name() == format)
enable = true;
}
break;
}
case LFUN_COMMAND_PREFIX: case LFUN_COMMAND_PREFIX:
case LFUN_CANCEL: case LFUN_CANCEL:
case LFUN_META_PREFIX: case LFUN_META_PREFIX:
case LFUN_BUFFER_CLOSE: case LFUN_BUFFER_CLOSE:
case LFUN_BUFFER_IMPORT:
case LFUN_BUFFER_AUTO_SAVE:
case LFUN_RECONFIGURE: case LFUN_RECONFIGURE:
case LFUN_HELP_OPEN: case LFUN_HELP_OPEN:
case LFUN_DROP_LAYOUTS_CHOICE: case LFUN_DROP_LAYOUTS_CHOICE:
@ -605,7 +571,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
case LFUN_KEYMAP_SECONDARY: case LFUN_KEYMAP_SECONDARY:
case LFUN_KEYMAP_TOGGLE: case LFUN_KEYMAP_TOGGLE:
case LFUN_REPEAT: case LFUN_REPEAT:
case LFUN_BUFFER_EXPORT_CUSTOM:
case LFUN_PREFERENCES_SAVE: case LFUN_PREFERENCES_SAVE:
case LFUN_INSET_EDIT: case LFUN_INSET_EDIT:
case LFUN_BUFFER_LANGUAGE: case LFUN_BUFFER_LANGUAGE:
@ -637,6 +602,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
break; break;
BufferView * bv = lv->currentBufferView(); BufferView * bv = lv->currentBufferView();
BufferView * doc_bv = lv->documentBufferView();
// If we do not have a BufferView, then other functions are disabled // If we do not have a BufferView, then other functions are disabled
if (!bv) { if (!bv) {
enable = false; enable = false;
@ -654,7 +620,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const
decided = bv->getStatus(cmd, flag); decided = bv->getStatus(cmd, flag);
if (!decided) if (!decided)
// try the Buffer // try the Buffer
bv->buffer().getStatus(cmd, flag); decided = bv->buffer().getStatus(cmd, flag);
if (!decided && doc_bv)
// try the Document Buffer
decided = doc_bv->buffer().getStatus(cmd, flag);
} }
if (!enable) if (!enable)
@ -777,115 +746,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
updateFlags = Update::None; updateFlags = Update::None;
break; break;
case LFUN_BUFFER_UPDATE: {
LASSERT(lyx_view_ && lyx_view_->documentBufferView(), /**/);
Buffer & doc_buffer = lyx_view_->documentBufferView()->buffer();
string format = argument;
if (argument.empty())
format = doc_buffer.getDefaultOutputFormat();
doc_buffer.doExport(format, true);
break;
}
case LFUN_BUFFER_VIEW: {
LASSERT(lyx_view_ && lyx_view_->documentBufferView(), /**/);
Buffer & doc_buffer = lyx_view_->documentBufferView()->buffer();
string format = argument;
if (argument.empty())
format = doc_buffer.getDefaultOutputFormat();
doc_buffer.preview(format);
break;
}
case LFUN_MASTER_BUFFER_UPDATE: {
LASSERT(lyx_view_ && lyx_view_->documentBufferView(), /**/);
Buffer & doc_buffer = lyx_view_->documentBufferView()->buffer();
string format = argument;
if (argument.empty())
format = doc_buffer.masterBuffer()->getDefaultOutputFormat();
doc_buffer.masterBuffer()->doExport(format, true);
break;
}
case LFUN_MASTER_BUFFER_VIEW: {
LASSERT(lyx_view_ && lyx_view_->documentBufferView(), /**/);
Buffer & doc_buffer = lyx_view_->documentBufferView()->buffer();
string format = argument;
if (argument.empty())
format = doc_buffer.masterBuffer()->getDefaultOutputFormat();
doc_buffer.masterBuffer()->preview(format);
break;
}
case LFUN_BUILD_PROGRAM:
LASSERT(lyx_view_ && buffer, /**/);
buffer->doExport("program", true);
break;
case LFUN_BUFFER_CHKTEX:
LASSERT(lyx_view_ && buffer, /**/);
buffer->runChktex();
break;
case LFUN_BUFFER_EXPORT:
LASSERT(lyx_view_ && buffer, /**/);
if (argument == "custom")
dispatch(FuncRequest(LFUN_DIALOG_SHOW, "sendto"));
else
buffer->doExport(argument, false);
break;
case LFUN_BUFFER_EXPORT_CUSTOM: {
LASSERT(lyx_view_ && buffer, /**/);
string format_name;
string command = split(argument, format_name, ' ');
Format const * format = formats.getFormat(format_name);
if (!format) {
lyxerr << "Format \"" << format_name
<< "\" not recognized!"
<< endl;
break;
}
// The name of the file created by the conversion process
string filename;
// Output to filename
if (format->name() == "lyx") {
string const latexname = buffer->latexName(false);
filename = changeExtension(latexname,
format->extension());
filename = addName(buffer->temppath(), filename);
if (!buffer->writeFile(FileName(filename)))
break;
} else {
buffer->doExport(format_name, true, filename);
}
// Substitute $$FName for filename
if (!contains(command, "$$FName"))
command = "( " + command + " ) < $$FName";
command = subst(command, "$$FName", filename);
// Execute the command in the background
Systemcall call;
call.startscript(Systemcall::DontWait, command);
break;
}
// FIXME: There is need for a command-line import.
/*
case LFUN_BUFFER_IMPORT:
doImport(argument);
break;
*/
case LFUN_BUFFER_AUTO_SAVE:
buffer->autoSave();
break;
case LFUN_RECONFIGURE: case LFUN_RECONFIGURE:
// argument is any additional parameter to the configure.py command // argument is any additional parameter to the configure.py command
reconfigure(lyx_view_, argument); reconfigure(lyx_view_, argument);
@ -1476,6 +1336,16 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
updateFlags = dr.update(); updateFlags = dr.update();
break; break;
} }
// OK, so try with the document Buffer.
BufferView * doc_bv = lyx_view_->documentBufferView();
if (doc_bv) {
buffer = &(doc_bv->buffer());
buffer->dispatch(cmd, dr);
if (dr.dispatched()) {
updateFlags = dr.update();
break;
}
}
// Is this a function that acts on inset at point? // Is this a function that acts on inset at point?
Inset * inset = bv->cursor().nextInset(); Inset * inset = bv->cursor().nextInset();

View File

@ -1191,6 +1191,9 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
} }
switch(cmd.action) { switch(cmd.action) {
case LFUN_BUFFER_IMPORT:
break;
case LFUN_BUFFER_RELOAD: case LFUN_BUFFER_RELOAD:
enable = doc_buffer && !doc_buffer->isUnnamed() enable = doc_buffer && !doc_buffer->isUnnamed()
&& doc_buffer->fileName().exists() && doc_buffer->fileName().exists()