X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=bf551cd8b55ba52548abb52d28b459770eb39c6b;hb=a9713c5563c924f4ab98bde3d9f24a5c1e4dd50e;hp=0e7ffe20eb03d2c608db8eb269613f69d1d03db2;hpb=5cb9c2432581bf439487bc486e1bc8061bded8ae;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 0e7ffe20eb..bf551cd8b5 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -15,6 +15,7 @@ #include "kbmap.h" #include "lyxrow.h" #include "bufferlist.h" +#include "buffer.h" #include "BufferView.h" #include "lyxserver.h" #include "intl.h" @@ -43,6 +44,7 @@ #include "ParagraphParameters.h" #include "insets/insetcommand.h" +#include "insets/insetexternal.h" #include "insets/insettabular.h" #include "mathed/formulamacro.h" @@ -63,11 +65,10 @@ #include "support/FileInfo.h" #include "support/forkedcontr.h" #include "support/lstrings.h" +#include "support/tostr.h" #include "support/path.h" #include "support/lyxfunctional.h" -#include "support/BoostFormat.h" - #include #include #include @@ -125,7 +126,6 @@ void LyXFunc::moveCursorUpdate(bool flag, bool selecting) view()->toggleToggle(); } view()->update(TEXT(flag), BufferView::SELECT); - view()->showCursor(); view()->switchKeyMap(); } @@ -430,13 +430,17 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const if (tli->lyxCode() == Inset::TABULAR_CODE) { ret = static_cast(tli) ->getStatus(ev.argument); + flag |= ret; + disable = false; } else if (tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE)) { ret = static_cast (tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE)) ->getStatus(ev.argument); + flag |= ret; + disable = false; + } else { + disable = true; } - flag |= ret; - disable = false; } else { static InsetTabular inset(*owner->buffer(), 1, 1); FuncStatus ret; @@ -484,6 +488,45 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const && lt->inset_owner->owner()->isOpen())); break; } + + case LFUN_INSET_SETTINGS: { + disable = true; + UpdatableInset * inset = view()->theLockingInset(); + + if (!inset) + break; + + // get the innermost inset + inset = inset->getLockingInset(); + + // jump back to owner if an InsetText, so + // we get back to the InsetTabular or whatever + if (inset->lyxCode() == Inset::TEXT_CODE) + inset = inset->owner(); + + Inset::Code code = inset->lyxCode(); + switch (code) { + case Inset::TABULAR_CODE: + disable = ev.argument != "tabular"; + break; + case Inset::ERT_CODE: + disable = ev.argument != "ert"; + break; + case Inset::FLOAT_CODE: + disable = ev.argument != "float"; + break; + case Inset::MINIPAGE_CODE: + disable = ev.argument != "minipage"; + break; + case Inset::WRAP_CODE: + disable = ev.argument != "wrap"; + break; + default: + break; + } + break; + } + case LFUN_LATEX_LOG: disable = !IsFileReadable(buf->getLogName().second); break; @@ -603,9 +646,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const case LFUN_TOC_INSERT: code = Inset::TOC_CODE; break; - case LFUN_PARENTINSERT: - code = Inset::PARENT_CODE; - break; case LFUN_HTMLURL: case LFUN_URL: code = Inset::URL_CODE; @@ -622,10 +662,10 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const case LFUN_END_OF_SENTENCE: code = Inset::SPECIALCHAR_CODE; break; - case LFUN_PROTECTEDSPACE: + case LFUN_SPACE_INSERT: // slight hack: we know this is allowed in math mode if (!mathcursor) - code = Inset::SPECIALCHAR_CODE; + code = Inset::SPACE_CODE; break; default: break; @@ -731,15 +771,7 @@ void LyXFunc::dispatch(string const & s, bool verbose) int const action = lyxaction.LookupFunc(s); if (action == LFUN_UNKNOWN_ACTION) { -#if USE_BOOST_FORMAT -boost::format fmt(_("Unknown function (%1$s)")); -fmt % s; -owner->message(fmt.str()); -#else - string const msg = string(_("Unknown function (")) - + s + ')'; - owner->message(msg); -#endif + owner->message(bformat(_("Unknown function (%1$s)"), s)); return; } @@ -772,9 +804,6 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) selection_possible = false; - if (view()->available()) - view()->hideCursor(); - string argument = ev.argument; kb_action action = ev.action; @@ -788,6 +817,9 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) goto exit_with_message; } + if (view()->available()) + view()->hideCursor(); + if (view()->available() && view()->theLockingInset()) { Inset::RESULT result; if ((action > 1) || ((action == LFUN_UNKNOWN_ACTION) && @@ -803,6 +835,19 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) && argument.empty()) { argument = encoded_last_key; } + + // the insets can't try to handle this, + // a table cell in the dummy position will + // lock its insettext, the insettext will + // pass it the bufferview, and succeed, + // so it will stay not locked. Not good + // if we've just done LFUN_ESCAPE (which + // injects an LFUN_PARAGRAPH_UPDATE) + if (action == LFUN_PARAGRAPH_UPDATE) { + view()->dispatch(ev); + goto exit_with_message; + } + // Undo/Redo is a bit tricky for insets. if (action == LFUN_UNDO) { view()->undo(); @@ -818,6 +863,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) goto exit_with_message; // If UNDISPATCHED, just soldier on else if (result == FINISHED) { + owner->clearMessage(); goto exit_with_message; // We do not need special RTL handling here: // FINISHED means that the cursor should be @@ -825,7 +871,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) } else if (result == FINISHED_RIGHT) { TEXT()->cursorRight(view()); moveCursorUpdate(true, false); - owner->view_state_changed(); + owner->clearMessage(); goto exit_with_message; } else if (result == FINISHED_UP) { if (TEXT()->cursor.irow() != TEXT()->rows().begin()) { @@ -839,10 +885,10 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) TEXT()->cursorUp(view()); #endif moveCursorUpdate(true, false); - owner->view_state_changed(); } else { view()->update(TEXT(), BufferView::SELECT); } + owner->clearMessage(); goto exit_with_message; } else if (result == FINISHED_DOWN) { if (boost::next(TEXT()->cursor.irow()) != TEXT()->rows().end()) { @@ -860,7 +906,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) TEXT()->cursorRight(view()); } moveCursorUpdate(true, false); - owner->view_state_changed(); + owner->clearMessage(); goto exit_with_message; } #warning I am not sure this is still right, please have a look! (Jug 20020417) @@ -947,7 +993,6 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) if (!searched_string.empty()) { lyxfind::LyXFind(view(), searched_string, fw); } -// view()->showCursor(); } break; @@ -1009,39 +1054,25 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) case LFUN_MENUWRITE: if (!owner->buffer()->isUnnamed()) { - ostringstream s1; -#if USE_BOOST_FORMAT - s1 << boost::format(_("Saving document %1$s...")) - % MakeDisplayPath(owner->buffer()->fileName()); -#else - s1 << _("Saving document ") - << MakeDisplayPath(owner->buffer()->fileName()) - << _("..."); -#endif - owner->message(STRCONV(s1.str())); - MenuWrite(view(), owner->buffer()); - s1 << _(" done."); - owner->message(STRCONV(s1.str())); + string const str = bformat(_("Saving document %1$s..."), + MakeDisplayPath(owner->buffer()->fileName())); + owner->message(str); + MenuWrite(owner->buffer()); + owner->message(str + _(" done.")); } else - WriteAs(view(), owner->buffer()); + WriteAs(owner->buffer()); break; case LFUN_WRITEAS: - WriteAs(view(), owner->buffer(), argument); + WriteAs(owner->buffer(), argument); break; case LFUN_MENURELOAD: { string const file = MakeDisplayPath(view()->buffer()->fileName(), 20); -#if USE_BOOST_FORMAT - boost::format fmt(_("Any changes will be lost. Are you sure you want to revert to the saved version of the document %1$s?")); - fmt % file; - string text = fmt.str(); -#else - string text = _("Any changes will be lost. Are you sure you want to revert to the saved version of the document"); - text += file + _("?"); -#endif + string text = bformat(_("Any changes will be lost. Are you sure " + "you want to revert to the saved version of the document %1$s?"), file); int const ret = Alert::prompt(_("Revert to saved document?"), - text, 1, _("&Revert"), _("&Cancel")); + text, 0, 1, _("&Revert"), _("&Cancel")); if (ret == 0) view()->reload(); @@ -1107,20 +1138,14 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) owner->getDialogs().showSearch(); break; - case LFUN_REMOVEERRORS: - if (view()->removeAutoInsets()) { -#warning repaint() or update() or nothing ? - view()->repaint(); - view()->fitCursor(); - } - break; - case LFUN_DEPTH_MIN: changeDepth(view(), TEXT(false), DEC_DEPTH, false); + owner->view_state_changed(); break; case LFUN_DEPTH_PLUS: changeDepth(view(), TEXT(false), INC_DEPTH, false); + owner->view_state_changed(); break; case LFUN_FREEFONT_APPLY: @@ -1172,15 +1197,8 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) << arg << "'. Bad installation?" << endl; break; } - ostringstream str; -#if USE_BOOST_FORMAT - str << boost::format(_("Opening help file %1$s...")) - % MakeDisplayPath(fname); -#else - str << _("Opening help file ") - << MakeDisplayPath(fname) << _("..."); -#endif - owner->message(STRCONV(str.str())); + owner->message(bformat(_("Opening help file %1$s..."), + MakeDisplayPath(fname))); view()->buffer(bufferlist.loadLyXFile(fname, false)); break; } @@ -1339,8 +1357,8 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) int id; istr >> id; - Paragraph * par = owner->buffer()->getParFromID(id); - if (par == 0) { + ParIterator par = owner->buffer()->getParFromID(id); + if (par == owner->buffer()->par_iterator_end()) { lyxerr[Debug::INFO] << "No matching paragraph found! [" << id << ']' << endl; break; @@ -1352,10 +1370,11 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) if (view()->theLockingInset()) view()->unlockInset(view()->theLockingInset()); if (par->inInset()) { - par->inInset()->edit(view()); + FuncRequest cmd(view(), LFUN_INSET_EDIT, "left"); + par->inInset()->localDispatch(cmd); } // Set the cursor - view()->getLyXText()->setCursor(par, 0); + view()->getLyXText()->setCursor(par.pit(), 0); view()->switchKeyMap(); owner->view_state_changed(); @@ -1365,14 +1384,6 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) } break; - case LFUN_APROPOS: - case LFUN_GETTIP: - { - int const qa = lyxaction.LookupFunc(argument); - setMessage(lyxaction.helpText(static_cast(qa))); - } - break; - // --- insert characters ---------------------------------------- // --- Mathed stuff. If we are here, there is no locked inset yet. @@ -1532,20 +1543,10 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) x11_name != lcolor.getX11Name(LColor::graphicsbg)); if (!lcolor.setColor(lyx_name, x11_name)) { -#if USE_BOOST_FORMAT setErrorMessage( - boost::io::str( - boost::format( - _("Set-color \"%1$s\" failed " + bformat(_("Set-color \"%1$s\" failed " "- color is undefined or " - "may not be redefined")) - % lyx_name)); -#else - setErrorMessage(_("Set-color ") + lyx_name - + _(" failed - color is undefined" - " or may not be redefined")); -#endif - + "may not be redefined"), lyx_name)); break; } @@ -1588,6 +1589,12 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) owner->getDialogs().toggleTooltips(); break; + case LFUN_EXTERNAL_EDIT: { + InsetExternal() + .localDispatch(FuncRequest(view(), action, argument)); + break; + } + default: // Then if it was none of the above // Trying the BufferView::pimpl dispatch: @@ -1785,33 +1792,17 @@ void LyXFunc::open(string const & fname) return; } - ostringstream str; -#if USE_BOOST_FORMAT - str << boost::format(_("Opening document %1$s...")) % disp_fn; -#else - str << _("Opening document ") << disp_fn << _("..."); -#endif - - owner->message(STRCONV(str.str())); + owner->message(bformat(_("Opening document %1$s..."), disp_fn)); Buffer * openbuf = bufferlist.loadLyXFile(filename); - ostringstream str2; + string str2; if (openbuf) { view()->buffer(openbuf); -#if USE_BOOST_FORMAT - str2 << boost::format(_("Document %1$s opened.")) % disp_fn; -#else - str2 << _("Document ") << disp_fn << _(" opened."); -#endif + str2 = bformat(_("Document %1$s opened."), disp_fn); } else { -#if USE_BOOST_FORMAT - str2 << boost::format(_("Could not open document %1$s")) - % disp_fn; -#else - str2 << _("Could not open document ") << disp_fn; -#endif + str2 = bformat(_("Could not open document %1$s"), disp_fn); } - owner->message(STRCONV(str2.str())); + owner->message(str2); } @@ -1834,14 +1825,8 @@ void LyXFunc::doImport(string const & argument) initpath = trypath; } -#if USE_BOOST_FORMAT - boost::format fmt(_("Select %1$s file to import")); - fmt % formats.prettyName(format); - string const text = fmt.str(); -#else - string const text = _("Select ") + formats.prettyName(format) - + _(" file to import");; -#endif + string const text = bformat(_("Select %1$s file to import"), + formats.prettyName(format)); FileDialog fileDlg(text, LFUN_IMPORT, @@ -1877,22 +1862,7 @@ void LyXFunc::doImport(string const & argument) // Check if the document already is open if (lyx_gui::use_gui && bufferlist.exists(lyxfile)) { - string const file = MakeDisplayPath(lyxfile, 30); - - // FIXME: sucky UI ! - -#if USE_BOOST_FORMAT - boost::format fmt(_("The document %1$s is already open.\n\nDo you want to close that document?")); - fmt % file; - string text = fmt.str(); -#else - string text = _("The document "); - text += file + _(" is already open.\n\nDo you want to close that document?"); -#endif - int const ret = Alert::prompt(_("Close open document?"), - text, 1, _("&Close"), _("&Cancel")); - - if (ret == 0 || !bufferlist.close(bufferlist.getBuffer(lyxfile), true)) { + if (!bufferlist.close(bufferlist.getBuffer(lyxfile), true)) { owner->message(_("Canceled.")); return; } @@ -1903,16 +1873,10 @@ void LyXFunc::doImport(string const & argument) if (FileInfo(lyxfile, true).exist() && filename != lyxfile) { string const file = MakeDisplayPath(lyxfile, 30); -#if USE_BOOST_FORMAT - boost::format fmt(_("The document %1$s already exists.\n\nDo you want to over-write that document?")); - fmt % file; - string text = fmt.str(); -#else - string text = _("The document "); - text += file + _(" already exists.\n\nDo you want to over-write that document?"); -#endif + string text = bformat(_("The document %1$s already exists.\n\n" + "Do you want to over-write that document?"), file); int const ret = Alert::prompt(_("Over-write document?"), - text, 1, _("&Over-write"), _("&Cancel")); + text, 0, 1, _("&Over-write"), _("&Cancel")); if (ret == 1) { owner->message(_("Canceled."));