From: Abdelrazak Younes Date: Sat, 19 Sep 2009 14:05:52 +0000 (+0000) Subject: * Move Buffer specific LFUNs to Buffer::dispatch() and Buffer::getStatus(). X-Git-Tag: 2.0.0~5492 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=93998bb2394fd10572db8dedf92c8ac1bc192587;p=features.git * 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 --- diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 84055b33ea..361f3d9e68 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1633,27 +1633,73 @@ void Buffer::markDepClean(string const & name) 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) { + case LFUN_BUFFER_TOGGLE_READ_ONLY: flag.setOnOff(isReadonly()); 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: { docstring const arg = cmd.argument(); - bool enable = arg == "custom" || isExportable(to_utf8(arg)); + enable = arg == "custom" || isExportable(to_utf8(arg)); if (!enable) flag.message(bformat( _("Don't know how to export to format: %1$s"), arg)); - flag.setEnabled(enable); 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 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_DEACTIVATE: { BranchList const & branchList = params().branchlist(); docstring const branchName = cmd.argument(); - flag.setEnabled(!branchName.empty() - && branchList.find(branchName)); + enable = !branchName.empty() && branchList.find(branchName); break; } @@ -1661,12 +1707,12 @@ bool Buffer::getStatus(FuncRequest const & cmd, FuncStatus & flag) case LFUN_BRANCHES_RENAME: case LFUN_BUFFER_PRINT: // if no Buffer is present, then of course we won't be called! - flag.setEnabled(true); break; default: return false; } + flag.setEnabled(enable); 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. 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. bool dispatched = true; @@ -1694,7 +1747,12 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr) break; 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); if (!success) dr.setMessage(bformat(_("Error exporting to format: %1$s."), @@ -1702,6 +1760,96 @@ void Buffer::dispatch(FuncRequest const & func, DispatchResult & dr) 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: { BranchList & branchList = params().branchlist(); docstring const branchName = func.argument(); diff --git a/src/LyXFunc.cpp b/src/LyXFunc.cpp index 3455c9bb2d..0c60f39481 100644 --- a/src/LyXFunc.cpp +++ b/src/LyXFunc.cpp @@ -463,14 +463,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const bool enable = true; 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: { FuncRequest fr(LFUN_INSET_INSERT, "citation"); enable = getStatus(fr).enabled(); @@ -562,36 +554,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const 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 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_CANCEL: case LFUN_META_PREFIX: case LFUN_BUFFER_CLOSE: - case LFUN_BUFFER_IMPORT: - case LFUN_BUFFER_AUTO_SAVE: case LFUN_RECONFIGURE: case LFUN_HELP_OPEN: case LFUN_DROP_LAYOUTS_CHOICE: @@ -605,7 +571,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const case LFUN_KEYMAP_SECONDARY: case LFUN_KEYMAP_TOGGLE: case LFUN_REPEAT: - case LFUN_BUFFER_EXPORT_CUSTOM: case LFUN_PREFERENCES_SAVE: case LFUN_INSET_EDIT: case LFUN_BUFFER_LANGUAGE: @@ -637,6 +602,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; BufferView * bv = lv->currentBufferView(); + BufferView * doc_bv = lv->documentBufferView(); // If we do not have a BufferView, then other functions are disabled if (!bv) { enable = false; @@ -654,7 +620,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const decided = bv->getStatus(cmd, flag); if (!decided) // 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) @@ -777,115 +746,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd) updateFlags = Update::None; 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: // argument is any additional parameter to the configure.py command reconfigure(lyx_view_, argument); @@ -1476,6 +1336,16 @@ void LyXFunc::dispatch(FuncRequest const & cmd) updateFlags = dr.update(); 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? Inset * inset = bv->cursor().nextInset(); diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 7518834ce7..c0435da157 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -1191,6 +1191,9 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag) } switch(cmd.action) { + case LFUN_BUFFER_IMPORT: + break; + case LFUN_BUFFER_RELOAD: enable = doc_buffer && !doc_buffer->isUnnamed() && doc_buffer->fileName().exists()