X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=bf551cd8b55ba52548abb52d28b459770eb39c6b;hb=a9713c5563c924f4ab98bde3d9f24a5c1e4dd50e;hp=b6e957f01ab69f3cdec7f7ec6bc0394631cf495e;hpb=61419611a05f407f2e81467cd3b0043af992d71e;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index b6e957f01a..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,8 +44,7 @@ #include "ParagraphParameters.h" #include "insets/insetcommand.h" -#include "insets/inseterror.h" -#include "insets/insetert.h" +#include "insets/insetexternal.h" #include "insets/insettabular.h" #include "mathed/formulamacro.h" @@ -65,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 "BoostFormat.h" - #include #include #include @@ -85,6 +84,7 @@ using std::find_if; using std::vector; using std::transform; using std::back_inserter; +using namespace bv_funcs; extern BufferList bufferlist; extern LyXServer * lyxserver; @@ -121,12 +121,11 @@ inline void LyXFunc::moveCursorUpdate(bool flag, bool selecting) { if (selecting || TEXT(flag)->selection.mark()) { - TEXT(flag)->setSelection(view()); - if (TEXT(flag)->isTopLevel()) + TEXT(flag)->setSelection(); + if (!TEXT(flag)->isInInset()) view()->toggleToggle(); } - view()->update(TEXT(flag), BufferView::SELECT|BufferView::FITCUR); - view()->showCursor(); + view()->update(TEXT(flag), BufferView::SELECT); view()->switchKeyMap(); } @@ -146,8 +145,7 @@ void LyXFunc::handleKeyFunc(kb_action action) // actions keyseq.clear(); // copied verbatim from do_accent_char - view()->update(TEXT(false), - BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); + view()->update(TEXT(false), BufferView::SELECT); TEXT(false)->selection.cursor = TEXT(false)->cursor; } @@ -349,7 +347,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const disable = !mathcursor && !view()->getLyXText()->selection.set(); break; case LFUN_RUNCHKTEX: - disable = lyxrc.chktex_command == "none"; + disable = !buf->isLatex() || lyxrc.chktex_command == "none"; break; case LFUN_BUILDPROG: disable = !Exporter::IsExportable(buf, "program"); @@ -365,6 +363,14 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const && !tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE)); break; + case LFUN_DEPTH_MIN: + disable = !changeDepth(view(), TEXT(false), DEC_DEPTH, true); + break; + + case LFUN_DEPTH_PLUS: + disable = !changeDepth(view(), TEXT(false), INC_DEPTH, true); + break; + case LFUN_LAYOUT: case LFUN_LAYOUT_PARAGRAPH: { Inset * inset = TEXT(false)->cursor.par()->inInset(); @@ -424,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; @@ -478,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; @@ -507,12 +556,42 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const // the functions which insert insets Inset::Code code = Inset::NO_CODE; switch (ev.action) { + case LFUN_DIALOG_SHOW_NEW_INSET: + if (ev.argument == "bibitem") + code = Inset::BIBITEM_CODE; + else if (ev.argument == "bibtex") + code = Inset::BIBTEX_CODE; + else if (ev.argument == "citation") + code = Inset::CITE_CODE; + else if (ev.argument == "ert") + code = Inset::ERT_CODE; + else if (ev.argument == "external") + code = Inset::EXTERNAL_CODE; + else if (ev.argument == "float") + code = Inset::FLOAT_CODE; + else if (ev.argument == "graphics") + code = Inset::GRAPHICS_CODE; + else if (ev.argument == "include") + code = Inset::INCLUDE_CODE; + else if (ev.argument == "index") + code = Inset::INDEX_CODE; + else if (ev.argument == "label") + code = Inset::LABEL_CODE; + else if (ev.argument == "minipage") + code = Inset::MINIPAGE_CODE; + else if (ev.argument == "ref") + code = Inset::REF_CODE; + else if (ev.argument == "toc") + code = Inset::TOC_CODE; + else if (ev.argument == "url") + code = Inset::URL_CODE; + else if (ev.argument == "wrap") + code = Inset::WRAP_CODE; + break; + case LFUN_INSET_ERT: code = Inset::ERT_CODE; break; - case LFUN_INSET_GRAPHICS: - code = Inset::GRAPHICS_CODE; - break; case LFUN_INSET_FOOTNOTE: code = Inset::FOOT_CODE; break; @@ -555,8 +634,8 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & ev) const case LFUN_INSET_OPTARG: code = Inset::OPTARG_CODE; break; - case LFUN_REF_INSERT: - code = Inset::REF_CODE; + case LFUN_ENVIRONMENT_INSERT: + code = Inset::MINIPAGE_CODE; break; case LFUN_INDEX_INSERT: code = Inset::INDEX_CODE; @@ -567,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; @@ -586,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; @@ -695,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; } @@ -736,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; @@ -752,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) && @@ -767,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(); @@ -782,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 @@ -789,13 +871,13 @@ 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()->previous()) { + if (TEXT()->cursor.irow() != TEXT()->rows().begin()) { #if 1 TEXT()->setCursorFromCoordinates( - view(), TEXT()->cursor.ix() + inset_x, + TEXT()->cursor.ix() + inset_x, TEXT()->cursor.iy() - TEXT()->cursor.irow()->baseline() - 1); TEXT()->cursor.x_fix(TEXT()->cursor.x()); @@ -803,16 +885,16 @@ 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|BufferView::FITCUR); + view()->update(TEXT(), BufferView::SELECT); } + owner->clearMessage(); goto exit_with_message; } else if (result == FINISHED_DOWN) { - if (TEXT()->cursor.irow()->next()) { + if (boost::next(TEXT()->cursor.irow()) != TEXT()->rows().end()) { #if 1 TEXT()->setCursorFromCoordinates( - view(), TEXT()->cursor.ix() + inset_x, + TEXT()->cursor.ix() + inset_x, TEXT()->cursor.iy() - TEXT()->cursor.irow()->baseline() + TEXT()->cursor.irow()->height() + 1); @@ -824,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) @@ -853,7 +935,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) } goto exit_with_message; case LFUN_DOWN: - if (TEXT()->cursor.row()->next()) + if (boost::next(TEXT()->cursor.row()) != TEXT()->rows().end()) TEXT()->cursorDown(view()); else TEXT()->cursorRight(view()); @@ -890,7 +972,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) } finishUndo(); // Tell the paragraph dialog that we changed paragraph - owner->getDialogs().updateParagraph(); + dispatch(FuncRequest(LFUN_PARAGRAPH_UPDATE)); } } break; @@ -911,15 +993,13 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) if (!searched_string.empty()) { lyxfind::LyXFind(view(), searched_string, fw); } -// view()->showCursor(); } break; case LFUN_PREFIX: { if (view()->available() && !view()->theLockingInset()) { - view()->update(TEXT(), - BufferView::SELECT|BufferView::FITCUR); + view()->update(TEXT(), BufferView::SELECT); } owner->message(keyseq.printOptions()); } @@ -974,30 +1054,30 @@ 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: - reloadBuffer(); + case LFUN_MENURELOAD: { + string const file = MakeDisplayPath(view()->buffer()->fileName(), 20); + 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, 0, 1, _("&Revert"), _("&Cancel")); + + if (ret == 0) + view()->reload(); break; + } case LFUN_UPDATE: Exporter::Export(owner->buffer(), argument, true); @@ -1012,7 +1092,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) break; case LFUN_RUNCHKTEX: - MenuRunChktex(owner->buffer()); + owner->buffer()->runChktex(); break; case LFUN_MENUPRINT: @@ -1058,24 +1138,22 @@ 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), -1); + changeDepth(view(), TEXT(false), DEC_DEPTH, false); + owner->view_state_changed(); break; case LFUN_DEPTH_PLUS: - changeDepth(view(), TEXT(false), 1); + changeDepth(view(), TEXT(false), INC_DEPTH, false); + owner->view_state_changed(); break; - case LFUN_FREE: - owner->getDialogs().setUserFreeFont(); + case LFUN_FREEFONT_APPLY: + apply_freefont(view()); + break; + + case LFUN_FREEFONT_UPDATE: + update_and_apply_freefont(view(), argument); break; case LFUN_RECONFIGURE: @@ -1099,7 +1177,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) #endif #endif case LFUN_HELP_ABOUTLYX: - owner->getDialogs().showAboutlyx(); + owner->getDialogs().show("about"); break; case LFUN_HELP_TEXINFO: @@ -1119,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; } @@ -1170,7 +1241,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) case LFUN_VC_HISTORY: { - owner->getDialogs().showVCLogFile(); + owner->getDialogs().show("vclog"); break; } @@ -1194,20 +1265,19 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) break; case LFUN_LATEX_LOG: - owner->getDialogs().showLogFile(); + owner->getDialogs().show("log"); break; case LFUN_LAYOUT_DOCUMENT: owner->getDialogs().showDocument(); break; - case LFUN_LAYOUT_PARAGRAPH: - owner->getDialogs().showParagraph(); - break; - - case LFUN_LAYOUT_CHARACTER: - owner->getDialogs().showCharacter(); + case LFUN_LAYOUT_CHARACTER: { + string data = freefont2string(); + if (!data.empty()) + owner->getDialogs().show("character", data); break; + } case LFUN_LAYOUT_TABULAR: if (view()->theLockingInset()) { @@ -1287,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; @@ -1300,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(view(), par, 0); + view()->getLyXText()->setCursor(par.pit(), 0); view()->switchKeyMap(); owner->view_state_changed(); @@ -1313,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. @@ -1350,6 +1413,7 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) string data; if (name == "bibitem" || name == "bibtex" || + name == "include" || name == "index" || name == "ref" || name == "toc" || @@ -1359,9 +1423,6 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) } else if (name == "citation") { InsetCommandParams p("cite"); data = InsetCommandMailer::params2string(name, p); - } else if (name == "ert") { - data = InsetERTMailer::params2string(name, - InsetERT::Open); } owner->getDialogs().show(name, data, 0); } @@ -1374,45 +1435,19 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) case LFUN_DIALOG_UPDATE: { string const & name = argument; // Can only update a dialog connected to an existing inset - InsetBase * i = owner->getDialogs().getOpenInset(name); - if (!i) - break; - - if (name == "bibitem" || - name == "bibtex" || - name == "citation" || - name == "index" || - name == "ref" || - name == "toc" || - name == "url") { - InsetCommand * inset = dynamic_cast(i); - if (!inset) - break; - - InsetCommandMailer mailer(name, *inset); - mailer.updateDialog(); - - } else if (name == "error") { - InsetError * inset = dynamic_cast(i); - if (!inset) - break; - - owner->getDialogs().update("error", - inset->getContents()); - - } else if (name == "ert") { - InsetERT * inset = dynamic_cast(i); - if (!inset) - break; - - InsetERTMailer mailer(*inset); - mailer.updateDialog(); + InsetBase * inset = owner->getDialogs().getOpenInset(name); + if (inset) { + FuncRequest fr(view(), LFUN_INSET_DIALOG_UPDATE, + ev.argument); + inset->localDispatch(fr); + } else if (name == "paragraph") { + dispatch(FuncRequest(LFUN_PARAGRAPH_UPDATE)); } } break; case LFUN_DIALOG_HIDE: - owner ->getDialogs().hide(argument); + Dialogs::hide(argument, 0); break; case LFUN_DIALOG_DISCONNECT_INSET: @@ -1508,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; } @@ -1564,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: @@ -1575,6 +1606,18 @@ void LyXFunc::dispatch(FuncRequest const & ev, bool verbose) } // end of switch exit_with_message: + + view()->owner()->updateLayoutChoice(); + + if (view()->available()) { + view()->fitCursor(); + + // If we executed a mutating lfun, mark the buffer as dirty + if (!lyxaction.funcHasFlag(ev.action, LyXAction::NoBuffer) + && !lyxaction.funcHasFlag(ev.action, LyXAction::ReadOnly)) + view()->buffer()->markDirty(); + } + sendDispatchMessage(getMessage(), ev, verbose); } @@ -1743,44 +1786,23 @@ void LyXFunc::open(string const & fname) // if the file doesn't exist, let the user create one FileInfo const f(filename, true); if (!f.exist()) { - if (!Alert::askQuestion(_("No such file"), disp_fn, - _("Start a new document with this filename ?"))) { - owner->message(_("Canceled.")); - return; - } // the user specifically chose this name. Believe them. Buffer * buffer = bufferlist.newFile(filename, "", true); view()->buffer(buffer); 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); } @@ -1803,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, @@ -1845,31 +1861,24 @@ void LyXFunc::doImport(string const & argument) string const lyxfile = ChangeExtension(filename, ".lyx"); // Check if the document already is open - if (lyxrc.use_gui && bufferlist.exists(lyxfile)) { - switch (Alert::askConfirmation(_("Document is already open:"), - MakeDisplayPath(lyxfile, 50), - _("Do you want to close that document now?\n" - "('No' will just switch to the open version)"))) - { - case 1: - // If close is canceled, we cancel here too. - if (!bufferlist.close(bufferlist.getBuffer(lyxfile))) - return; - break; - case 2: - view()->buffer(bufferlist.getBuffer(lyxfile)); - return; - case 3: - owner->message(_("Canceled.")); - return; - } + if (lyx_gui::use_gui && bufferlist.exists(lyxfile)) { + if (!bufferlist.close(bufferlist.getBuffer(lyxfile), true)) { + owner->message(_("Canceled.")); + return; + } } // if the file exists already, and we didn't do // -i lyx thefile.lyx, warn if (FileInfo(lyxfile, true).exist() && filename != lyxfile) { - if (!Alert::askQuestion(_("A document by the name"), - MakeDisplayPath(lyxfile), _("already exists. Overwrite?"))) { + string const file = MakeDisplayPath(lyxfile, 30); + + 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, 0, 1, _("&Over-write"), _("&Cancel")); + + if (ret == 1) { owner->message(_("Canceled.")); return; } @@ -1879,17 +1888,9 @@ void LyXFunc::doImport(string const & argument) } -void LyXFunc::reloadBuffer() -{ - string const fn = owner->buffer()->fileName(); - if (bufferlist.close(owner->buffer())) - view()->buffer(bufferlist.loadLyXFile(fn)); -} - - void LyXFunc::closeBuffer() { - if (bufferlist.close(owner->buffer()) && !quitting) { + 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