#include "ParagraphParameters.h"
#include "insets/insetcommand.h"
-#include "insets/inseterror.h"
-#include "insets/insetert.h"
#include "insets/insettabular.h"
#include "mathed/formulamacro.h"
#include "support/path.h"
#include "support/lyxfunctional.h"
-#include "BoostFormat.h"
+#include "support/BoostFormat.h"
#include <ctime>
#include <clocale>
using std::vector;
using std::transform;
using std::back_inserter;
+using namespace bv_funcs;
extern BufferList bufferlist;
extern LyXServer * lyxserver;
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");
&& !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();
if (tli->lyxCode() == Inset::TABULAR_CODE) {
ret = static_cast<InsetTabular *>(tli)
->getStatus(ev.argument);
+ flag |= ret;
+ disable = false;
} else if (tli->getFirstLockingInsetOfType(Inset::TABULAR_CODE)) {
ret = static_cast<InsetTabular *>
(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;
&& 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 = static_cast<UpdatableInset*>(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;
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
} 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(
TEXT()->cursor.ix() + inset_x,
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 (TEXT()->cursor.irow()->next()) {
+ if (boost::next(TEXT()->cursor.irow()) != TEXT()->rows().end()) {
#if 1
TEXT()->setCursorFromCoordinates(
TEXT()->cursor.ix() + inset_x,
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)
}
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());
WriteAs(view(), owner->buffer(), argument);
break;
- case LFUN_MENURELOAD:
- view()->reload();
+ 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
+ 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);
break;
case LFUN_RUNCHKTEX:
- MenuRunChktex(owner->buffer());
+ owner->buffer()->runChktex();
break;
case LFUN_MENUPRINT:
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_FREEFONT_APPLY:
int id;
istr >> id;
- Paragraph * par = owner->buffer()->getParFromID(id);
+ Paragraph * par = &*owner->buffer()->getParFromID(id);
if (par == 0) {
lyxerr[Debug::INFO] << "No matching paragraph found! ["
<< id << ']' << endl;
}
break;
- case LFUN_APROPOS:
- case LFUN_GETTIP:
- {
- int const qa = lyxaction.LookupFunc(argument);
- setMessage(lyxaction.helpText(static_cast<kb_action>(qa)));
- }
- break;
-
// --- insert characters ----------------------------------------
// --- Mathed stuff. If we are here, there is no locked inset yet.
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))
// 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);
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);
+
+#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
+ int const ret = Alert::prompt(_("Over-write document?"),
+ text, 0, 1, _("&Over-write"), _("&Cancel"));
+
+ if (ret == 1) {
owner->message(_("Canceled."));
return;
}
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