]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
cosmetics; compile fix
[lyx.git] / src / BufferView.cpp
index 1957c9777fae0158f1c3c89c54310f41eb82338c..4d0a1caad2ccb1d910f9872b0756676786cbf765 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "BufferView.h"
 
+#include "BranchList.h"
 #include "Buffer.h"
 #include "buffer_funcs.h"
 #include "BufferList.h"
@@ -24,7 +25,6 @@
 #include "Cursor.h"
 #include "CutAndPaste.h"
 #include "DispatchResult.h"
-#include "EmbeddedFiles.h"
 #include "ErrorList.h"
 #include "factory.h"
 #include "FloatList.h"
@@ -837,23 +837,22 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
        switch (cmd.action) {
 
        case LFUN_UNDO:
-               flag.enabled(buffer_.undo().hasUndoStack());
+               flag.setEnabled(buffer_.undo().hasUndoStack());
                break;
        case LFUN_REDO:
-               flag.enabled(buffer_.undo().hasRedoStack());
+               flag.setEnabled(buffer_.undo().hasRedoStack());
                break;
        case LFUN_FILE_INSERT:
        case LFUN_FILE_INSERT_PLAINTEXT_PARA:
        case LFUN_FILE_INSERT_PLAINTEXT:
        case LFUN_BOOKMARK_SAVE:
                // FIXME: Actually, these LFUNS should be moved to Text
-               flag.enabled(cur.inTexted());
+               flag.setEnabled(cur.inTexted());
                break;
        case LFUN_FONT_STATE:
        case LFUN_LABEL_INSERT:
        case LFUN_INFO_INSERT:
-       case LFUN_EXTERNAL_EDIT:
-       case LFUN_GRAPHICS_EDIT:
+       case LFUN_INSET_EDIT:
        case LFUN_PARAGRAPH_GOTO:
        case LFUN_NOTE_NEXT:
        case LFUN_REFERENCE_NEXT:
@@ -866,64 +865,36 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
        case LFUN_BIBTEX_DATABASE_ADD:
        case LFUN_BIBTEX_DATABASE_DEL:
        case LFUN_STATISTICS:
-               flag.enabled(true);
+               flag.setEnabled(true);
                break;
 
-       case LFUN_NEXT_INSET_TOGGLE: {
-               // this is the real function we want to invoke
-               FuncRequest tmpcmd = FuncRequest(LFUN_INSET_TOGGLE, cmd.argument());
-               // if there is an inset at cursor, see whether it
-               // can be modified.
-               Inset * inset = cur.nextInset();
-               if (inset) {
-                       inset->getStatus(cur, tmpcmd, flag);
-                       return flag;
-                       break;
-               }
-               // if it did not work, try the underlying inset.
-               if (!inset || !cur.result().dispatched())
-                       getStatus(tmpcmd);
-
-               if (!cur.result().dispatched())
-                       // else disable
-                       flag.enabled(false);
-               break;
-       }
-
+       case LFUN_NEXT_INSET_TOGGLE: 
        case LFUN_NEXT_INSET_MODIFY: {
                // this is the real function we want to invoke
-               FuncRequest tmpcmd = FuncRequest(LFUN_INSET_MODIFY, cmd.argument());
+               FuncRequest tmpcmd = cmd;
+               tmpcmd.action = (cmd.action == LFUN_NEXT_INSET_TOGGLE) 
+                       ? LFUN_INSET_TOGGLE : LFUN_INSET_MODIFY;
                // if there is an inset at cursor, see whether it
-               // can be modified.
+               // handles the lfun, other start from scratch
                Inset * inset = cur.nextInset();
-               if (inset) {
-                       inset->getStatus(cur, tmpcmd, flag);
-                       return flag;
-                       break;
-               }
-               // if it did not work, try the underlying inset.
-               if (!inset || !cur.result().dispatched())
-                       getStatus(tmpcmd);
-
-               if (!cur.result().dispatched())
-                       // else disable
-                       flag.enabled(false);
+               if (!inset || !inset->getStatus(cur, tmpcmd, flag))
+                       flag = lyx::getStatus(tmpcmd);
                break;
        }
 
        case LFUN_LABEL_GOTO: {
-               flag.enabled(!cmd.argument().empty()
+               flag.setEnabled(!cmd.argument().empty()
                    || getInsetByCode<InsetRef>(cur, REF_CODE));
                break;
        }
 
        case LFUN_CHANGES_TRACK:
-               flag.enabled(true);
+               flag.setEnabled(true);
                flag.setOnOff(buffer_.params().trackChanges);
                break;
 
        case LFUN_CHANGES_OUTPUT:
-               flag.enabled(true);
+               flag.setEnabled(true);
                flag.setOnOff(buffer_.params().outputChanges);
                break;
 
@@ -935,7 +906,7 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
                // In principle, these command should only be enabled if there
                // is a change in the document. However, without proper
                // optimizations, this will inevitably result in poor performance.
-               flag.enabled(true);
+               flag.setEnabled(true);
                break;
 
        case LFUN_BUFFER_TOGGLE_COMPRESSION: {
@@ -943,37 +914,37 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
                break;
        }
        
-       case LFUN_BUFFER_TOGGLE_EMBEDDING: {
-               flag.setOnOff(buffer_.params().embedded);
-               break;
-       }
-
        case LFUN_SCREEN_UP:
        case LFUN_SCREEN_DOWN:
        case LFUN_SCROLL:
        case LFUN_SCREEN_UP_SELECT:
        case LFUN_SCREEN_DOWN_SELECT:
-               flag.enabled(true);
+               flag.setEnabled(true);
                break;
 
        case LFUN_LAYOUT_TABULAR:
-               flag.enabled(cur.innerInsetOfType(TABULAR_CODE));
+               flag.setEnabled(cur.innerInsetOfType(TABULAR_CODE));
                break;
 
        case LFUN_LAYOUT:
-               flag.enabled(!cur.inset().forceEmptyLayout(cur.idx()));
+               flag.setEnabled(!cur.inset().forceEmptyLayout(cur.idx()));
                break;
 
        case LFUN_LAYOUT_PARAGRAPH:
-               flag.enabled(cur.inset().allowParagraphCustomization(cur.idx()));
+               flag.setEnabled(cur.inset().allowParagraphCustomization(cur.idx()));
                break;
 
        case LFUN_INSET_SETTINGS: {
                InsetCode code = cur.inset().lyxCode();
-               if (cur.nextInset())
-                       code = cur.nextInset()->lyxCode();
+               if (cmd.getArg(0) == insetName(code)) {
+                       flag.setEnabled(true);
+                       break;
+               }
                bool enable = false;
-               switch (code) {
+               InsetCode next_code = cur.nextInset()
+                       ? cur.nextInset()->lyxCode() : NO_CODE;
+               //FIXME: remove these special cases:
+               switch (next_code) {
                        case TABULAR_CODE:
                        case ERT_CODE:
                        case FLOAT_CODE:
@@ -983,17 +954,17 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
                        case BOX_CODE:
                        case LISTINGS_CODE:
                                enable = (cmd.argument().empty() ||
-                                         cmd.getArg(0) == insetName(code));
+                                         cmd.getArg(0) == insetName(next_code));
                                break;
                        default:
                                break;
                }
-               flag.enabled(enable);
+               flag.setEnabled(enable);
                break;
        }
 
        case LFUN_DIALOG_SHOW_NEW_INSET:
-               flag.enabled(cur.inset().lyxCode() != ERT_CODE &&
+               flag.setEnabled(cur.inset().lyxCode() != ERT_CODE &&
                        cur.inset().lyxCode() != LISTINGS_CODE);
                if (cur.inset().lyxCode() == CAPTION_CODE) {
                        FuncStatus flag;
@@ -1002,8 +973,18 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
                }
                break;
 
+       case LFUN_BRANCH_ACTIVATE: 
+       case LFUN_BRANCH_DEACTIVATE: {
+               bool enable = false;
+               docstring const branchName = cmd.argument();
+               if (!branchName.empty())
+                       enable = buffer_.params().branchlist().find(branchName);
+               flag.setEnabled(enable);
+               break;
+       }
+
        default:
-               flag.enabled(false);
+               flag.setEnabled(false);
        }
 
        return flag;
@@ -1069,27 +1050,25 @@ bool BufferView::dispatch(FuncRequest const & cmd)
                break;
        }
        
-       case LFUN_EXTERNAL_EDIT: {
+       case LFUN_INSET_EDIT: {
                FuncRequest fr(cmd);
-               InsetExternal * inset = getInsetByCode<InsetExternal>(d->cursor_,
-                       EXTERNAL_CODE);
+               // if there is an inset at cursor, see whether it
+               // can be modified.
+               Inset * inset = cur.nextInset();
                if (inset)
-                       inset->dispatch(d->cursor_, fr);
-               break;
-       }
-
+                       inset->dispatch(cur, fr);
+               // if it did not work, try the underlying inset.
+               if (!inset || !cur.result().dispatched())
+                       cur.dispatch(cmd);
 
-       case LFUN_GRAPHICS_EDIT: {
-               FuncRequest fr(cmd);
-               InsetGraphics * inset = getInsetByCode<InsetGraphics>(d->cursor_,
-                       GRAPHICS_CODE);
-               if (inset)
-                       inset->dispatch(d->cursor_, fr);
-               break;
+               if (!cur.result().dispatched())
+                       // It did not work too; no action needed.
+                       break;
        }
 
        case LFUN_PARAGRAPH_GOTO: {
-               int const id = convert<int>(to_utf8(cmd.argument()));
+               int const id = convert<int>(cmd.getArg(0));
+               int const pos = convert<int>(cmd.getArg(1));
                int i = 0;
                for (Buffer * b = &buffer_; i == 0 || b != &buffer_;
                        b = theBufferList().next(b)) {
@@ -1106,6 +1085,7 @@ bool BufferView::dispatch(FuncRequest const & cmd)
 
                        if (b == &buffer_) {
                                // Set the cursor
+                               dit.pos() = pos;
                                setCursor(dit);
                                processUpdateFlags(Update::Force | Update::FitCursor);
                        } else {
@@ -1311,19 +1291,10 @@ bool BufferView::dispatch(FuncRequest const & cmd)
                buffer_.params().compressed = !buffer_.params().compressed;
                break;
        
-       case LFUN_BUFFER_TOGGLE_EMBEDDING: {
-               // turn embedding on/off
-               try {
-                       buffer_.embeddedFiles().enable(!buffer_.params().embedded, buffer_, true);
-               } catch (ExceptionMessage const & message) {
-                       Alert::error(message.title_, message.details_);
-               }
-               break;
-       }
-
        case LFUN_NEXT_INSET_TOGGLE: {
-               // this is the real function we want to invoke
-               FuncRequest tmpcmd = FuncRequest(LFUN_INSET_TOGGLE, cmd.origin);
+               // create the the real function we want to invoke
+               FuncRequest tmpcmd = cmd;
+               tmpcmd.action = LFUN_INSET_TOGGLE;
                // if there is an inset at cursor, see whether it
                // wants to toggle.
                Inset * inset = cur.nextInset();
@@ -1332,12 +1303,10 @@ bool BufferView::dispatch(FuncRequest const & cmd)
                                Cursor tmpcur = cur;
                                tmpcur.pushBackward(*inset);
                                inset->dispatch(tmpcur, tmpcmd);
-                               if (tmpcur.result().dispatched()) {
+                               if (tmpcur.result().dispatched())
                                        cur.dispatched();
-                               }
-                       } else if (inset->editable() == Inset::IS_EDITABLE) {
-                               inset->edit(cur, true);
-                       }
+                       } else 
+                               inset->dispatch(cur, tmpcmd);
                }
                // if it did not work, try the underlying inset.
                if (!inset || !cur.result().dispatched())
@@ -1352,8 +1321,9 @@ bool BufferView::dispatch(FuncRequest const & cmd)
        }
 
        case LFUN_NEXT_INSET_MODIFY: {
-               // this is the real function we want to invoke
-               FuncRequest tmpcmd = FuncRequest(LFUN_INSET_MODIFY, cmd.argument());
+               // create the the real function we want to invoke
+               FuncRequest tmpcmd = cmd;
+               tmpcmd.action = LFUN_INSET_MODIFY;
                // if there is an inset at cursor, see whether it
                // can be modified.
                Inset * inset = cur.nextInset();
@@ -1425,6 +1395,12 @@ bool BufferView::dispatch(FuncRequest const & cmd)
                break;
        }
 
+       case LFUN_BRANCH_ACTIVATE:
+       case LFUN_BRANCH_DEACTIVATE:
+               buffer_.dispatch(cmd);
+               processUpdateFlags(Update::Force);
+               break;
+
        default:
                return false;
        }