]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfunc.C
cosmetic fix
[lyx.git] / src / lyxfunc.C
index 6799685caf4d0baf867b5a07ab1ba018603de3d8..db6362dd76d209d438fb8a6c89e63d14d2d0f12f 100644 (file)
@@ -78,6 +78,8 @@
 #include <utility>
 #include <algorithm>
 
+using namespace lyx::support;
+
 using std::pair;
 using std::make_pair;
 using std::endl;
@@ -333,8 +335,8 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
        case LFUN_COPY:
                if (tli) {
                        UpdatableInset * in = tli;
-                       if (in->lyxCode() != Inset::TABULAR_CODE) {
-                               in = tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE);
+                       if (in->lyxCode() != InsetOld::TABULAR_CODE) {
+                               in = tli->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE);
                        }
                        if (in && static_cast<InsetTabular*>(in)->hasSelection()) {
                                disable = false;
@@ -352,8 +354,8 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
 
        case LFUN_LAYOUT_TABULAR:
                disable = !tli
-                       || (tli->lyxCode() != Inset::TABULAR_CODE
-                           && !tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE));
+                       || (tli->lyxCode() != InsetOld::TABULAR_CODE
+                           && !tli->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE));
                break;
 
        case LFUN_DEPTH_MIN:
@@ -366,7 +368,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
 
        case LFUN_LAYOUT:
        case LFUN_LAYOUT_PARAGRAPH: {
-               Inset * inset = TEXT(false)->cursor.par()->inInset();
+               InsetOld * inset = TEXT(false)->cursor.par()->inInset();
                disable = inset && inset->forceDefaultParagraphs(inset);
                break;
        }
@@ -420,14 +422,14 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
                if (tli) {
                        FuncStatus ret;
                        //ret.disabled(true);
-                       if (tli->lyxCode() == Inset::TABULAR_CODE) {
+                       if (tli->lyxCode() == InsetOld::TABULAR_CODE) {
                                ret = static_cast<InsetTabular *>(tli)
                                        ->getStatus(ev.argument);
                                flag |= ret;
                                disable = false;
-                       } else if (tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE)) {
+                       } else if (tli->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE)) {
                                ret = static_cast<InsetTabular *>
-                                       (tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE))
+                                       (tli->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE))
                                        ->getStatus(ev.argument);
                                flag |= ret;
                                disable = false;
@@ -493,26 +495,29 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
 
                // jump back to owner if an InsetText, so
                // we get back to the InsetTabular or whatever
-               if (inset->lyxCode() == Inset::TEXT_CODE)
+               if (inset->lyxCode() == InsetOld::TEXT_CODE)
                        inset = inset->owner();
 
-               Inset::Code code = inset->lyxCode();
+               InsetOld::Code code = inset->lyxCode();
                switch (code) {
-                       case Inset::TABULAR_CODE:
+                       case InsetOld::TABULAR_CODE:
                                disable = ev.argument != "tabular";
                                break;
-                       case Inset::ERT_CODE:
+                       case InsetOld::ERT_CODE:
                                disable = ev.argument != "ert";
                                break;
-                       case Inset::FLOAT_CODE:
+                       case InsetOld::FLOAT_CODE:
                                disable = ev.argument != "float";
                                break;
-                       case Inset::MINIPAGE_CODE:
+                       case InsetOld::MINIPAGE_CODE:
                                disable = ev.argument != "minipage";
                                break;
-                       case Inset::WRAP_CODE:
+                       case InsetOld::WRAP_CODE:
                                disable = ev.argument != "wrap";
                                break;
+                       case InsetOld::NOTE_CODE:
+                               disable = ev.argument != "note";
+                               break;
                        default:
                                break;
                }
@@ -537,7 +542,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
                disable = !mathcursor;
                break;
 
-       case LFUN_DIALOG_SHOW: {
+       case LFUN_DIALOG_SHOW: {
                string const name = ev.getArg(0);
                if (!buf) {
                        disable = !(name == "aboutlyx" ||
@@ -553,7 +558,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
                                lyxrc.print_command == "none";
                } else if (name == "character") {
                        UpdatableInset * tli = view()->theLockingInset();
-                       disable = tli && tli->lyxCode() == Inset::ERT_CODE;
+                       disable = tli && tli->lyxCode() == InsetOld::ERT_CODE;
                } else if (name == "vclog") {
                        disable = !buf->lyxvc.inUse();
                } else if (name == "latexlog") {
@@ -567,101 +572,101 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
        }
 
        // the functions which insert insets
-       Inset::Code code = Inset::NO_CODE;
+       InsetOld::Code code = InsetOld::NO_CODE;
        switch (ev.action) {
        case LFUN_DIALOG_SHOW_NEW_INSET:
                if (ev.argument == "bibitem")
-                       code = Inset::BIBITEM_CODE;
+                       code = InsetOld::BIBITEM_CODE;
                else if (ev.argument == "bibtex")
-                       code = Inset::BIBTEX_CODE;
+                       code = InsetOld::BIBTEX_CODE;
                else if (ev.argument == "citation")
-                       code = Inset::CITE_CODE;
+                       code = InsetOld::CITE_CODE;
                else if (ev.argument == "ert")
-                       code = Inset::ERT_CODE;
+                       code = InsetOld::ERT_CODE;
                else if (ev.argument == "external")
-                       code = Inset::EXTERNAL_CODE;
+                       code = InsetOld::EXTERNAL_CODE;
                else if (ev.argument == "float")
-                       code = Inset::FLOAT_CODE;
+                       code = InsetOld::FLOAT_CODE;
                else if (ev.argument == "graphics")
-                       code = Inset::GRAPHICS_CODE;
+                       code = InsetOld::GRAPHICS_CODE;
                else if (ev.argument == "include")
-                       code = Inset::INCLUDE_CODE;
+                       code = InsetOld::INCLUDE_CODE;
                else if (ev.argument == "index")
-                       code = Inset::INDEX_CODE;
+                       code = InsetOld::INDEX_CODE;
                else if (ev.argument == "label")
-                       code = Inset::LABEL_CODE;
+                       code = InsetOld::LABEL_CODE;
                else if (ev.argument == "minipage")
-                       code = Inset::MINIPAGE_CODE;
+                       code = InsetOld::MINIPAGE_CODE;
                else if (ev.argument == "ref")
-                       code = Inset::REF_CODE;
+                       code = InsetOld::REF_CODE;
                else if (ev.argument == "toc")
-                       code = Inset::TOC_CODE;
+                       code = InsetOld::TOC_CODE;
                else if (ev.argument == "url")
-                       code = Inset::URL_CODE;
+                       code = InsetOld::URL_CODE;
                else if (ev.argument == "wrap")
-                       code = Inset::WRAP_CODE;
+                       code = InsetOld::WRAP_CODE;
                break;
 
        case LFUN_INSET_ERT:
-               code = Inset::ERT_CODE;
+               code = InsetOld::ERT_CODE;
                break;
        case LFUN_INSET_FOOTNOTE:
-               code = Inset::FOOT_CODE;
+               code = InsetOld::FOOT_CODE;
                break;
        case LFUN_TABULAR_INSERT:
-               code = Inset::TABULAR_CODE;
+               code = InsetOld::TABULAR_CODE;
                break;
        case LFUN_INSET_MARGINAL:
-               code = Inset::MARGIN_CODE;
+               code = InsetOld::MARGIN_CODE;
                break;
        case LFUN_INSET_MINIPAGE:
-               code = Inset::MINIPAGE_CODE;
+               code = InsetOld::MINIPAGE_CODE;
                break;
        case LFUN_INSET_FLOAT:
        case LFUN_INSET_WIDE_FLOAT:
-               code = Inset::FLOAT_CODE;
+               code = InsetOld::FLOAT_CODE;
                break;
        case LFUN_INSET_WRAP:
-               code = Inset::WRAP_CODE;
+               code = InsetOld::WRAP_CODE;
                break;
        case LFUN_FLOAT_LIST:
-               code = Inset::FLOAT_LIST_CODE;
+               code = InsetOld::FLOAT_LIST_CODE;
                break;
 #if 0
        case LFUN_INSET_LIST:
-               code = Inset::LIST_CODE;
+               code = InsetOld::LIST_CODE;
                break;
        case LFUN_INSET_THEOREM:
-               code = Inset::THEOREM_CODE;
+               code = InsetOld::THEOREM_CODE;
                break;
 #endif
        case LFUN_INSET_CAPTION:
-               code = Inset::CAPTION_CODE;
+               code = InsetOld::CAPTION_CODE;
                break;
        case LFUN_INSERT_NOTE:
-               code = Inset::NOTE_CODE;
+               code = InsetOld::NOTE_CODE;
                break;
        case LFUN_INSERT_LABEL:
-               code = Inset::LABEL_CODE;
+               code = InsetOld::LABEL_CODE;
                break;
        case LFUN_INSET_OPTARG:
-               code = Inset::OPTARG_CODE;
+               code = InsetOld::OPTARG_CODE;
                break;
        case LFUN_ENVIRONMENT_INSERT:
-               code = Inset::MINIPAGE_CODE;
+               code = InsetOld::MINIPAGE_CODE;
                break;
        case LFUN_INDEX_INSERT:
-               code = Inset::INDEX_CODE;
+               code = InsetOld::INDEX_CODE;
                break;
        case LFUN_INDEX_PRINT:
-               code = Inset::INDEX_PRINT_CODE;
+               code = InsetOld::INDEX_PRINT_CODE;
                break;
        case LFUN_TOC_INSERT:
-               code = Inset::TOC_CODE;
+               code = InsetOld::TOC_CODE;
                break;
        case LFUN_HTMLURL:
        case LFUN_URL:
-               code = Inset::URL_CODE;
+               code = InsetOld::URL_CODE;
                break;
        case LFUN_QUOTE:
                // always allow this, since we will inset a raw quote
@@ -673,17 +678,17 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const
        case LFUN_MENU_SEPARATOR:
        case LFUN_LDOTS:
        case LFUN_END_OF_SENTENCE:
-               code = Inset::SPECIALCHAR_CODE;
+               code = InsetOld::SPECIALCHAR_CODE;
                break;
        case LFUN_SPACE_INSERT:
                // slight hack: we know this is allowed in math mode
                if (!mathcursor)
-                       code = Inset::SPACE_CODE;
+                       code = InsetOld::SPACE_CODE;
                break;
        default:
                break;
        }
-       if (code != Inset::NO_CODE && tli && !tli->insetAllowed(code))
+       if (code != InsetOld::NO_CODE && tli && !tli->insetAllowed(code))
                disable = true;
 
        if (disable)
@@ -797,6 +802,28 @@ void LyXFunc::dispatch(int ac, bool verbose)
        dispatch(lyxaction.retrieveActionArg(ac), verbose);
 }
 
+namespace {
+       bool ensureBufferClean(BufferView * bv) {
+
+               Buffer & buf = *bv->buffer();
+               if (buf.isClean())
+                       return true;
+
+               string const file = MakeDisplayPath(buf.fileName(), 30);
+               string text = bformat(_("The document %1$s has unsaved "
+                                       "changes.\n\nDo you want to save "
+                                       "the document?"), file);
+               int const ret = Alert::prompt(_("Save changed document?"),
+                                             text, 0, 1, _("&Save"),
+                                             _("&Cancel"));
+
+               if (ret == 0)
+                       bv->owner()->dispatch(FuncRequest(LFUN_MENUWRITE));
+
+               return buf.isClean();
+       }
+
+} //namespace anon
 
 
 void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
@@ -834,7 +861,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
                view()->hideCursor();
 
        if (view()->available() && view()->theLockingInset()) {
-               Inset::RESULT result;
+               InsetOld::RESULT result;
                if ((action > 1) || ((action == LFUN_UNKNOWN_ACTION) &&
                                     (!keyseq.deleted())))
                {
@@ -887,12 +914,13 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
                                owner->clearMessage();
                                goto exit_with_message;
                        } else if (result == FINISHED_UP) {
-                               if (TEXT()->cursor.irow() != TEXT()->rows().begin()) {
+                               RowList::iterator const irow = TEXT()->cursorIRow();
+                               if (irow != TEXT()->rows().begin()) {
 #if 1
                                        TEXT()->setCursorFromCoordinates(
                                                TEXT()->cursor.ix() + inset_x,
                                                TEXT()->cursor.iy() -
-                                               TEXT()->cursor.irow()->baseline() - 1);
+                                               irow->baseline() - 1);
                                        TEXT()->cursor.x_fix(TEXT()->cursor.x());
 #else
                                        TEXT()->cursorUp(view());
@@ -904,13 +932,14 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
                                owner->clearMessage();
                                goto exit_with_message;
                        } else if (result == FINISHED_DOWN) {
-                               if (boost::next(TEXT()->cursor.irow()) != TEXT()->rows().end()) {
+                               RowList::iterator const irow = TEXT()->cursorIRow();
+                               if (boost::next(irow) != TEXT()->rows().end()) {
 #if 1
                                        TEXT()->setCursorFromCoordinates(
                                                TEXT()->cursor.ix() + inset_x,
                                                TEXT()->cursor.iy() -
-                                               TEXT()->cursor.irow()->baseline() +
-                                               TEXT()->cursor.irow()->height() + 1);
+                                               irow->baseline() +
+                                               irow->height() + 1);
                                        TEXT()->cursor.x_fix(TEXT()->cursor.x());
 #else
                                        TEXT()->cursorDown(view());
@@ -948,7 +977,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
                                        }
                                        goto exit_with_message;
                                case LFUN_DOWN:
-                                       if (boost::next(TEXT()->cursor.row()) != TEXT()->rows().end())
+                                       if (boost::next(TEXT()->cursorRow()) != TEXT()->rows().end())
                                                TEXT()->cursorDown(view());
                                        else
                                                TEXT()->cursorRight(view());
@@ -1004,7 +1033,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
                }
                bool fw = (action == LFUN_WORDFINDFORWARD);
                if (!searched_string.empty()) {
-                       lyxfind::LyXFind(view(), searched_string, fw);
+                       lyx::find::find(view(), searched_string, fw);
                }
        }
        break;
@@ -1209,36 +1238,50 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
                // --- version control -------------------------------
        case LFUN_VC_REGISTER:
        {
-               if (!owner->buffer()->lyxvc.inUse())
+               if (!ensureBufferClean(view()))
+                       break;
+               if (!owner->buffer()->lyxvc.inUse()) {
                        owner->buffer()->lyxvc.registrer();
+                       view()->reload();
+               }
        }
        break;
 
        case LFUN_VC_CHECKIN:
        {
+               if (!ensureBufferClean(view()))
+                       break;
                if (owner->buffer()->lyxvc.inUse()
-                   && !owner->buffer()->isReadonly())
+                   && !owner->buffer()->isReadonly()) {
                        owner->buffer()->lyxvc.checkIn();
+                       view()->reload();
+               }
        }
        break;
 
        case LFUN_VC_CHECKOUT:
        {
+               if (!ensureBufferClean(view()))
+                       break;
                if (owner->buffer()->lyxvc.inUse()
-                   && owner->buffer()->isReadonly())
+                   && owner->buffer()->isReadonly()) {
                        owner->buffer()->lyxvc.checkOut();
+                       view()->reload();
+               }
        }
        break;
 
        case LFUN_VC_REVERT:
        {
                owner->buffer()->lyxvc.revert();
+               view()->reload();
        }
        break;
 
        case LFUN_VC_UNDO:
        {
                owner->buffer()->lyxvc.undoLast();
+               view()->reload();
        }
        break;
 
@@ -1249,13 +1292,8 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
                break;
 
        case LFUN_FILE_NEW:
-       {
-               // servercmd: argument must be <file>:<template>
-               Buffer * tmpbuf = NewFile(argument);
-               if (tmpbuf)
-                       view()->buffer(tmpbuf);
-       }
-       break;
+               NewFile(view(), argument);
+               break;
 
        case LFUN_FILE_OPEN:
                open(argument);
@@ -1263,14 +1301,14 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
 
        case LFUN_LAYOUT_TABULAR:
            if (view()->theLockingInset()) {
-               if (view()->theLockingInset()->lyxCode()==Inset::TABULAR_CODE) {
+               if (view()->theLockingInset()->lyxCode()== InsetOld::TABULAR_CODE) {
                    InsetTabular * inset = static_cast<InsetTabular *>
                        (view()->theLockingInset());
                    inset->openLayoutDialog(view());
                } else if (view()->theLockingInset()->
-                          getFirstLockingInsetOfType(Inset::TABULAR_CODE)!=0) {
+                          getFirstLockingInsetOfType(InsetOld::TABULAR_CODE)!=0) {
                    InsetTabular * inset = static_cast<InsetTabular *>(
-                       view()->theLockingInset()->getFirstLockingInsetOfType(Inset::TABULAR_CODE));
+                       view()->theLockingInset()->getFirstLockingInsetOfType(InsetOld::TABULAR_CODE));
                    inset->openLayoutDialog(view());
                }
            }
@@ -1550,7 +1588,8 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose)
 #warning FIXME!! The graphics cache no longer has a changeDisplay method.
 #endif
 #if 0
-                       grfx::GCache & gc = grfx::GCache::get();
+                       lyx::graphics::GCache & gc =
+                               lyx::graphics::GCache::get();
                        gc.changeDisplay(true);
 #endif
                }
@@ -1721,7 +1760,7 @@ void LyXFunc::menuNew(string const & name, bool fromTemplate)
                templname = fname;
        }
 
-       view()->buffer(newFile(filename, templname, !name.empty()));
+       view()->newFile(filename, templname, !name.empty());
 }
 
 
@@ -1776,8 +1815,7 @@ void LyXFunc::open(string const & fname)
        FileInfo const f(filename, true);
        if (!f.exist()) {
                // the user specifically chose this name. Believe them.
-               Buffer * buffer =  newFile(filename, "", true);
-               view()->buffer(buffer);
+               view()->newFile(filename, "", true);
                return;
        }
 
@@ -1879,8 +1917,8 @@ void LyXFunc::closeBuffer()
 {
        if (bufferlist.close(owner->buffer(), true) && !quitting) {
                if (bufferlist.empty()) {
-                       // need this otherwise SEGV may occur while trying to
-                       // set variables that don't exist
+                       // need this otherwise SEGV may occur while
+                       // trying to set variables that don't exist
                        // since there's no current buffer
                        owner->getDialogs().hideBufferDependent();
                } else {
@@ -1937,6 +1975,6 @@ string const LyXFunc::view_status_message()
 
 BufferView * LyXFunc::view() const
 {
-       lyx::Assert(owner);
+       Assert(owner);
        return owner->view().get();
 }