]> git.lyx.org Git - features.git/commitdiff
* Move Buffer specific LFUNs to Buffer::dispatch() and Buffer::getStatus().
authorAbdelrazak Younes <younes@lyx.org>
Sat, 19 Sep 2009 14:05:52 +0000 (14:05 +0000)
committerAbdelrazak Younes <younes@lyx.org>
Sat, 19 Sep 2009 14:05:52 +0000 (14:05 +0000)
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

src/Buffer.cpp
src/LyXFunc.cpp
src/frontends/qt4/GuiView.cpp

index 84055b33ea56a259bb476858c2bd4032819092e5..361f3d9e68c3547500a1aa81960e53ec51a1d6a6 100644 (file)
@@ -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<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_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();
index 3455c9bb2d874d3ec4a2537245abc774e2752ad0..0c60f3948169e1e1d5c56a6a71a144a1de952fe6 100644 (file)
@@ -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<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_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();
index 7518834ce78db04a6f750bac66b9e3041ade05a0..c0435da157624004322abdc9dcd99d4b4880c5cb 100644 (file)
@@ -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()