X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLyXFunc.cpp;h=ee89ed58a651fb9c8bb8b831d72849e60e77a660;hb=a3315920a2816111293b0112b689148bd6635e1e;hp=a743fd261a3ed33fd599e246ca17c5590b1a3cc8;hpb=55b4fbcf2125eb6006516d67730bdf6a9eeb7f5e;p=lyx.git diff --git a/src/LyXFunc.cpp b/src/LyXFunc.cpp index a743fd261a..ee89ed58a6 100644 --- a/src/LyXFunc.cpp +++ b/src/LyXFunc.cpp @@ -84,6 +84,7 @@ #include "support/environment.h" #include "support/FileFilterList.h" +#include "support/FileName.h" #include "support/filetools.h" #include "support/lstrings.h" #include "support/Path.h" @@ -176,7 +177,7 @@ bool import(LyXView * lv, FileName const & filename, if (loader_format == "lyx") { - Buffer * buf = lv->loadLyXFile(lyxfile); + Buffer * buf = theLyXFunc().loadAndViewFile(lyxfile); if (!buf) { // we are done lv->message(_("file not imported!")); @@ -486,17 +487,7 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const //lyxerr << "LyXFunc::getStatus: cmd: " << cmd << endl; FuncStatus flag; - /* In LyX/Mac, when a dialog is open, the menus of the - application can still be accessed without giving focus to - the main window. In this case, we want to disable the menu - entries that are buffer-related. - - Note that this code is not perfect, as bug 1941 attests: - http://bugzilla.lyx.org/show_bug.cgi?id=1941#c4 - */ Buffer * buf = lyx_view_? lyx_view_->buffer() : 0; - if (lyx_view_ && cmd.origin == FuncRequest::MENU && !lyx_view_->hasFocus()) - buf = 0; if (cmd.action == LFUN_NOACTION) { flag.message(from_utf8(N_("Nothing to do"))); @@ -543,6 +534,16 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const // to handle (Andre') bool enable = true; switch (cmd.action) { + + case LFUN_DIALOG_TOGGLE: + case LFUN_DIALOG_SHOW: + case LFUN_DIALOG_UPDATE: + case LFUN_TOOLBAR_TOGGLE: + if (lyx_view_) + return lyx_view_->getStatus(cmd); + enable = false; + break; + case LFUN_BUFFER_TOGGLE_READ_ONLY: flag.setOnOff(buf->isReadonly()); break; @@ -608,47 +609,6 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const break; } - case LFUN_DIALOG_TOGGLE: - flag.setOnOff(lyx_view_->isDialogVisible(cmd.getArg(0))); - // fall through to set "enable" - case LFUN_DIALOG_SHOW: { - string const name = cmd.getArg(0); - if (!buf) - enable = name == "aboutlyx" - || name == "file" //FIXME: should be removed. - || name == "prefs" - || name == "texinfo"; - else if (name == "print") - enable = buf->isExportable("dvi") - && lyxrc.print_command != "none"; - else if (name == "character") { - if (!view()) - enable = false; - else { - InsetCode ic = view()->cursor().inset().lyxCode(); - enable = ic != ERT_CODE && ic != LISTINGS_CODE; - } - } - else if (name == "latexlog") - enable = FileName(buf->logName()).isFileReadable(); - else if (name == "spellchecker") -#if defined (USE_ASPELL) || defined (USE_ISPELL) || defined (USE_PSPELL) - enable = !buf->isReadonly(); -#else - enable = false; -#endif - else if (name == "vclog") - enable = buf->lyxvc().inUse(); - break; - } - - case LFUN_DIALOG_UPDATE: { - string const name = cmd.getArg(0); - if (!buf) - enable = name == "prefs"; - break; - } - case LFUN_CITATION_INSERT: { FuncRequest fr(LFUN_INSET_INSERT, "citation"); enable = getStatus(fr).enabled(); @@ -694,15 +654,9 @@ FuncStatus LyXFunc::getStatus(FuncRequest const & cmd) const enable = LyX::ref().session().bookmarks().size() > 0; break; - case LFUN_TOOLBAR_TOGGLE: { - bool const current = lyx_view_->isToolbarVisible(cmd.getArg(0)); - flag.setOnOff(current); - break; - } - case LFUN_WINDOW_CLOSE: { + case LFUN_WINDOW_CLOSE: enable = theApp()->viewCount() > 0; break; - } // this one is difficult to get right. As a half-baked // solution, we consider only the first action of the sequence @@ -917,6 +871,11 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_DROP_LAYOUTS_CHOICE: case LFUN_MENU_OPEN: case LFUN_TOOLBAR_TOGGLE: + case LFUN_DIALOG_UPDATE: + case LFUN_DIALOG_TOGGLE: + case LFUN_DIALOG_DISCONNECT_INSET: + case LFUN_DIALOG_HIDE: + case LFUN_DIALOG_SHOW: BOOST_ASSERT(lyx_view_); lyx_view_->dispatch(cmd); break; @@ -1080,7 +1039,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) case LFUN_BUFFER_EXPORT: BOOST_ASSERT(lyx_view_ && lyx_view_->buffer()); if (argument == "custom") - lyx_view_->showDialog("sendto"); + dispatch(FuncRequest(LFUN_DIALOG_SHOW, "sendto")); else lyx_view_->buffer()->doExport(argument, false); break; @@ -1271,7 +1230,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } lyx_view_->message(bformat(_("Opening help file %1$s..."), makeDisplayPath(fname.absFilename()))); - Buffer * buf = lyx_view_->loadLyXFile(fname, false); + Buffer * buf = loadAndViewFile(fname, false); if (buf) { updateLabels(*buf); lyx_view_->setBuffer(buf); @@ -1396,7 +1355,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) if (theBufferList().exists(s.absFilename())) buf = theBufferList().getBuffer(s.absFilename()); else { - buf = lyx_view_->loadLyXFile(s); + buf = loadAndViewFile(s); loaded = true; } } @@ -1415,36 +1374,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd) break; } - case LFUN_DIALOG_SHOW: { - BOOST_ASSERT(lyx_view_); - string const name = cmd.getArg(0); - string data = trim(to_utf8(cmd.argument()).substr(name.size())); - - if (name == "character") { - data = freefont2string(); - if (!data.empty()) - lyx_view_->showDialogWithData("character", data); - } else if (name == "latexlog") { - Buffer::LogType type; - string const logfile = lyx_view_->buffer()->logName(&type); - switch (type) { - case Buffer::latexlog: - data = "latex "; - break; - case Buffer::buildlog: - data = "literate "; - break; - } - data += Lexer::quoteString(logfile); - lyx_view_->showDialogWithData("log", data); - } else if (name == "vclog") { - string const data = "vc " + - Lexer::quoteString(lyx_view_->buffer()->lyxvc().getLogFile()); - lyx_view_->showDialogWithData("log", data); - } else - lyx_view_->showDialogWithData(name, data); - break; - } case LFUN_DIALOG_SHOW_NEW_INSET: { BOOST_ASSERT(lyx_view_); @@ -1539,48 +1468,10 @@ void LyXFunc::dispatch(FuncRequest const & cmd) break; } // end switch(code) if (insetCodeOK) - lyx_view_->showDialog(name, data, 0); + dispatch(FuncRequest(LFUN_DIALOG_SHOW, name + " " + data)); break; } - case LFUN_DIALOG_UPDATE: { - BOOST_ASSERT(lyx_view_); - string const & name = argument; - // Can only update a dialog connected to an existing inset - Inset * inset = lyx_view_->getOpenInset(name); - if (inset) { - FuncRequest fr(LFUN_INSET_DIALOG_UPDATE, cmd.argument()); - inset->dispatch(view()->cursor(), fr); - } else if (name == "paragraph") { - dispatch(FuncRequest(LFUN_PARAGRAPH_UPDATE)); - } else if (name == "prefs") { - lyx_view_->updateDialog(name, string()); - } - break; - } - - case LFUN_DIALOG_HIDE: { - if (quitting || !use_gui) - break; - theApp()->hideDialogs(argument, 0); - break; - } - - case LFUN_DIALOG_TOGGLE: { - BOOST_ASSERT(lyx_view_); - if (lyx_view_->isDialogVisible(cmd.getArg(0))) - dispatch(FuncRequest(LFUN_DIALOG_HIDE, argument)); - else - dispatch(FuncRequest(LFUN_DIALOG_SHOW, argument)); - break; - } - - case LFUN_DIALOG_DISCONNECT_INSET: - BOOST_ASSERT(lyx_view_); - lyx_view_->disconnectDialog(argument); - break; - - case LFUN_CITATION_INSERT: { BOOST_ASSERT(lyx_view_); if (!argument.empty()) { @@ -1618,7 +1509,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } else { setMessage(bformat(_("Opening child document %1$s..."), makeDisplayPath(filename.absFilename()))); - child = lyx_view_->loadLyXFile(filename, true); + child = loadAndViewFile(filename, true); parsed = true; } if (child) { @@ -1988,8 +1879,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) actOnUpdatedPrefs(lyxrc_orig, lyxrc); - if (lyx_view_ && lyx_view_->buffer()) - lyx_view_->updateLayoutChoice(true); + theApp()->resetGui(); /// We force the redraw in any case because there might be /// some screen font changes. @@ -2040,7 +1930,6 @@ void LyXFunc::dispatch(FuncRequest const & cmd) // (at least partially) visible top-level paragraphs. // We will redraw the screen only if needed. view()->processUpdateFlags(updateFlags); - lyx_view_->updateStatusBar(); // if we executed a mutating lfun, mark the buffer as dirty if (flag.enabled() @@ -2052,12 +1941,10 @@ void LyXFunc::dispatch(FuncRequest const & cmd) theSelection().haveSelection(view()->cursor().selection()); if (view()->cursor().inTexted()) { - lyx_view_->updateLayoutChoice(false); } } } if (!quitting && lyx_view_) { - lyx_view_->updateToolbars(); // Some messages may already be translated, so we cannot use _() sendDispatchMessage(translateIfPossible(getMessage()), cmd); } @@ -2162,6 +2049,35 @@ void LyXFunc::menuNew(string const & name, bool fromTemplate) } +Buffer * LyXFunc::loadAndViewFile(FileName const & filename, bool tolastfiles) +{ + lyx_view_->setBusy(true); + + Buffer * newBuffer = checkAndLoadLyXFile(filename); + + if (!newBuffer) { + lyx_view_->message(_("Document not loaded.")); + lyx_view_->setBusy(false); + return 0; + } + + lyx_view_->setBuffer(newBuffer); + + // scroll to the position when the file was last closed + if (lyxrc.use_lastfilepos) { + LastFilePosSection::FilePos filepos = + LyX::ref().session().lastFilePos().load(filename); + lyx_view_->view()->moveToPosition(filepos.pit, filepos.pos, 0, 0); + } + + if (tolastfiles) + LyX::ref().session().lastFiles().add(filename); + + lyx_view_->setBusy(false); + return newBuffer; +} + + void LyXFunc::open(string const & fname) { string initpath = lyxrc.document_path; @@ -2218,7 +2134,7 @@ void LyXFunc::open(string const & fname) lyx_view_->message(bformat(_("Opening document %1$s..."), disp_fn)); docstring str2; - Buffer * buf = lyx_view_->loadLyXFile(fullname); + Buffer * buf = loadAndViewFile(fullname); if (buf) { updateLabels(*buf); lyx_view_->setBuffer(buf); @@ -2333,7 +2249,7 @@ void LyXFunc::reloadBuffer() docstring const disp_fn = makeDisplayPath(filename.absFilename()); docstring str; closeBuffer(); - Buffer * buf = lyx_view_->loadLyXFile(filename); + Buffer * buf = loadAndViewFile(filename); if (buf) { updateLabels(*buf); lyx_view_->setBuffer(buf);