X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=8774312f1c59444c13782e051a3068d88e34b925;hb=00d24ec87650e4ac7db77ad54cb4aa2f688100f3;hp=537ce1aeec2b70f240aac4f934b949721136f68a;hpb=b15e539c6868321078523e60d2c1a210c639a4eb;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 537ce1aeec..8774312f1c 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -12,8 +12,9 @@ #include "Lsstream.h" -#include -#include +#include +#include + #include #include @@ -25,6 +26,7 @@ #endif #include "support/lyxalgo.h" +#include "support/LAssert.h" #include "version.h" #include "kbmap.h" #include "lyxfunc.h" @@ -53,9 +55,11 @@ #include "insets/insetmarginal.h" #include "insets/insetminipage.h" #include "insets/insetfloat.h" +#if 0 #include "insets/insetlist.h" -#include "insets/insettabular.h" #include "insets/insettheorem.h" +#endif +#include "insets/insettabular.h" #include "insets/insetcaption.h" #include "mathed/formulamacro.h" #include "mathed/math_cursor.h" @@ -90,6 +94,8 @@ #include "TextCache.h" #include "lyxfind.h" #include "undo_funcs.h" +#include "ParagraphParameters.h" +#include "figureForm.h" using std::pair; using std::make_pair; @@ -546,7 +552,7 @@ func_status::value_type LyXFunc::getStatus(int ac, case LFUN_MATH_MUTATE: { Inset * tli = owner->view()->theLockingInset(); if (tli && (tli->lyxCode() == Inset::MATH_CODE)) { - MathInsetTypes type = mathcursor->par()->GetType(); + MathInsetTypes type = mathcursor->formula()->getType(); func_status::value_type box = func_status::ToggleOff; if (argument == "inline") { if (type == LM_OT_SIMPLE) @@ -572,6 +578,7 @@ func_status::value_type LyXFunc::getStatus(int ac, // we just need to be in math mode to enable that case LFUN_MATH_SIZE: + case LFUN_MATH_SPACE: case LFUN_MATH_LIMITS: case LFUN_MATH_NONUMBER: case LFUN_MATH_NUMBER: @@ -600,12 +607,14 @@ func_status::value_type LyXFunc::getStatus(int ac, case LFUN_INSET_ERT: code = Inset::ERT_CODE; break; + case LFUN_FIGURE: case LFUN_INSET_GRAPHICS: code = Inset::GRAPHICS_CODE; break; case LFUN_INSET_FOOTNOTE: code = Inset::FOOT_CODE; break; + case LFUN_DIALOG_TABULAR_INSERT: case LFUN_INSET_TABULAR: code = Inset::TABULAR_CODE; break; @@ -622,14 +631,17 @@ func_status::value_type LyXFunc::getStatus(int ac, case LFUN_INSET_WIDE_FLOAT: code = Inset::FLOAT_CODE; break; + case LFUN_FLOAT_LIST: + code = Inset::FLOAT_LIST_CODE; + break; #if 0 case LFUN_INSET_LIST: code = Inset::LIST_CODE; break; -#endif case LFUN_INSET_THEOREM: code = Inset::THEOREM_CODE; break; +#endif case LFUN_INSET_CAPTION: code = Inset::CAPTION_CODE; break; @@ -642,6 +654,7 @@ func_status::value_type LyXFunc::getStatus(int ac, case LFUN_REF_INSERT: code = Inset::REF_CODE; break; + case LFUN_CITATION_CREATE: case LFUN_CITATION_INSERT: code = Inset::CITE_CODE; break; @@ -650,22 +663,39 @@ func_status::value_type LyXFunc::getStatus(int ac, break; case LFUN_INDEX_INSERT: case LFUN_INDEX_INSERT_LAST: + case LFUN_INDEX_CREATE: code = Inset::INDEX_CODE; break; -#if 0 + case LFUN_INDEX_PRINT: + code = Inset::INDEX_PRINT_CODE; + break; case LFUN_CHILD_INSERT: - code = Inset::CHILD_CODE; + code = Inset::INCLUDE_CODE; break; -#endif case LFUN_TOC_INSERT: code = Inset::TOC_CODE; break; case LFUN_PARENTINSERT: code = Inset::PARENT_CODE; break; + case LFUN_HTMLURL: + case LFUN_URL: case LFUN_INSERT_URL: code = Inset::URL_CODE; break; + case LFUN_QUOTE: + // always allow this, since we will inset a raw quote + // if an inset is not allowed. + break; + case LFUN_HYPHENATION: + case LFUN_LIGATURE_BREAK: + case LFUN_HFILL: + case LFUN_MENU_SEPARATOR: + case LFUN_LDOTS: + case LFUN_END_OF_SENTENCE: + case LFUN_PROTECTEDSPACE: + code = Inset::SPECIALCHAR_CODE; + break; default: break; } @@ -678,7 +708,7 @@ func_status::value_type LyXFunc::getStatus(int ac, if (disable) flag |= func_status::Disabled; - // the font related functions + // the font related functions (and a few others) func_status::value_type box = func_status::ToggleOff; LyXFont const & font = TEXT(false)->real_current_font; @@ -695,16 +725,14 @@ func_status::value_type LyXFunc::getStatus(int ac, if (font.series() == LyXFont::BOLD_SERIES) box = func_status::ToggleOn; break; -#ifndef NO_LATEX - case LFUN_TEX: - if (font.latex() == LyXFont::ON) - box = func_status::ToggleOn; - break; -#endif case LFUN_READ_ONLY_TOGGLE: if (buf->isReadonly()) box = func_status::ToggleOn; break; + case LFUN_APPENDIX: + if (TEXT(false)->cursor.par()->params().startOfAppendix()) + box = func_status::ToggleOn; + break; default: box = func_status::OK; break; @@ -774,9 +802,13 @@ string const LyXFunc::dispatch(int ac, owner->view()->hideCursor(); // We cannot use this function here - if (getStatus(ac, do_not_use_this_arg) & func_status::Disabled) + if (getStatus(ac, do_not_use_this_arg) & func_status::Disabled) { + lyxerr << "LyXFunc::Dispatch: " + << lyxaction.getActionName(ac) + << " [" << ac << "] is disabled at this location" + << endl; goto exit_with_message; - + } if (owner->view()->available() && owner->view()->theLockingInset()) { UpdatableInset::RESULT result; @@ -834,12 +866,40 @@ string const LyXFunc::dispatch(int ac, inset->edit(owner->view(),slx,sly,0); return string(); } else if (((result=owner->view()->theLockingInset()-> - localDispatch(owner->view(), action, - argument)) == - UpdatableInset::DISPATCHED) || - (result == UpdatableInset::DISPATCHED_NOUPDATE)) + localDispatch(owner->view(), action, argument)) == + UpdatableInset::DISPATCHED) || + (result == UpdatableInset::DISPATCHED_NOUPDATE)) + return string(); + else if (result == UpdatableInset::FINISHED) { + if (TEXT()->cursor.par()->isRightToLeftPar(owner->buffer()->params)) { + TEXT()->cursorRight(owner->view()); + moveCursorUpdate(true, false); + owner->showState(); + } + return string(); + } else if (result == UpdatableInset::FINISHED_RIGHT) { + if (!TEXT()->cursor.par()->isRightToLeftPar(owner->buffer()->params)) { + TEXT()->cursorRight(owner->view()); + moveCursorUpdate(true, false); + owner->showState(); + } return string(); - else { + } else if (result == UpdatableInset::FINISHED_UP) { + if (TEXT()->cursor.row()->previous()) { + TEXT()->cursorUp(owner->view()); + moveCursorUpdate(true, false); + owner->showState(); + } + return string(); + } else if (result == UpdatableInset::FINISHED_DOWN) { + if (TEXT()->cursor.row()->next()) + TEXT()->cursorDown(owner->view()); + else + TEXT()->cursorRight(owner->view()); + moveCursorUpdate(true, false); + owner->showState(); + return string(); + } else { //setMessage(N_("Text mode")); switch (action) { case LFUN_UNKNOWN_ACTION: @@ -878,8 +938,6 @@ string const LyXFunc::dispatch(int ac, } } - lyx::Assert(action != LFUN_SELECT_FILE_SYNC); - switch (action) { case LFUN_ESCAPE: @@ -918,34 +976,11 @@ string const LyXFunc::dispatch(int ac, } else { searched_string = last_search; } - - if (!searched_string.empty() && - ((action == LFUN_WORDFINDBACKWARD) ? - SearchBackward(owner->view(), searched_string) : - SearchForward(owner->view(), searched_string))) { - - // ??? What is that ??? - owner->view()->update(TEXT(), BufferView::SELECT|BufferView::FITCUR); - - // ??? Needed ??? - // clear the selection (if there is any) - owner->view()->toggleSelection(); - TEXT()->clearSelection(owner->view()); - - // Move cursor so that successive C-s 's will not stand in place. - if (action == LFUN_WORDFINDFORWARD ) - TEXT()->cursorRightOneWord(owner->view()); - finishUndo(); - moveCursorUpdate(true, false); - - // ??? Needed ??? - // set the new selection - // SetSelectionOverLenChars(owner->view()->currentBuffer()->text, iLenSelected); - owner->view()->toggleSelection(false); + bool fw = (action == LFUN_WORDFINDBACKWARD); + if (!searched_string.empty()) { + LyXFind(owner->view(), searched_string, fw); } - - // REMOVED : if (owner->view()->getWorkArea()->focus) - owner->view()->showCursor(); +// owner->view()->showCursor(); } break; @@ -1123,7 +1158,7 @@ string const LyXFunc::dispatch(int ac, case LFUN_REMOVEERRORS: if (owner->view()->removeAutoInsets()) { owner->view()->redraw(); - owner->view()->fitCursor(TEXT()); + owner->view()->fitCursor(); } break; @@ -1143,14 +1178,6 @@ string const LyXFunc::dispatch(int ac, owner->getDialogs()->setUserFreeFont(); break; -#ifndef NO_LATEX - case LFUN_TEX: - Tex(owner->view()); - owner->view()->setState(); - owner->showState(); - break; -#endif - case LFUN_RECONFIGURE: Reconfigure(owner->view()); break; @@ -1359,16 +1386,10 @@ string const LyXFunc::dispatch(int ac, case LFUN_GOTOFILEROW: { -#if 0 - char file_name[100]; - int row; - ::sscanf(argument.c_str(), " %s %d", file_name, &row); -#else string file_name; int row; istringstream istr(argument.c_str()); istr >> file_name >> row; -#endif // Must replace extension of the file to be .lyx and get full path string const s(ChangeExtension(file_name, ".lyx")); @@ -1398,10 +1419,13 @@ string const LyXFunc::dispatch(int ac, lyxerr[Debug::INFO] << "No matching paragraph found! [" << id << "]" << std::endl; break; + } else { + lyxerr << "Paragraph " << par->id() + << " found." << endl; } // Set the cursor - TEXT()->setCursor(owner->view(), par, 0); + owner->view()->text->setCursor(owner->view(), par, 0); owner->view()->setState(); owner->showState(); @@ -1451,30 +1475,6 @@ string const LyXFunc::dispatch(int ac, // --- insert characters ---------------------------------------- // --- Mathed stuff. If we are here, there is no locked inset yet. - - // Greek mode - case LFUN_GREEK: - { - if (!greek_kb_flag) { - greek_kb_flag = 1; - setMessage(N_("Math greek mode on")); - } else - greek_kb_flag = 0; - } - break; - - // Greek keyboard - case LFUN_GREEK_TOGGLE: - { - greek_kb_flag = greek_kb_flag ? 0 : 2; - if (greek_kb_flag) { - setMessage(N_("Math greek keyboard on")); - } else { - setMessage(N_("Math greek keyboard off")); - } - } - break; - case LFUN_MATH_EXTERN: case LFUN_MATH_NUMBER: case LFUN_MATH_NONUMBER: @@ -1707,7 +1707,7 @@ void LyXFunc::menuNew(bool fromTemplate) if (owner->view()->available()) { string const trypath = owner->buffer()->filepath; // If directory is writeable, use this as default. - if (IsDirWriteable(trypath) == 1) + if (IsDirWriteable(trypath)) initpath = trypath; } @@ -1833,7 +1833,7 @@ void LyXFunc::open(string const & fname) if (owner->view()->available()) { string const trypath = owner->buffer()->filepath; // If directory is writeable, use this as default. - if (IsDirWriteable(trypath) == 1) + if (IsDirWriteable(trypath)) initpath = trypath; } @@ -1866,8 +1866,14 @@ void LyXFunc::open(string const & fname) // get absolute path of file and add ".lyx" to the filename if // necessary - filename = FileSearch(string(), filename, "lyx"); + string const fullpath = FileSearch(string(), filename, "lyx"); + if (fullpath.empty()) { + WriteAlert(_("Error"), _("Could not find file"), filename); + return; + } + filename = fullpath; + // loads document string const disp_fn(MakeDisplayPath(filename)); @@ -1884,7 +1890,7 @@ void LyXFunc::open(string const & fname) owner->message(str.str().c_str()); } else { ostringstream str; - str << _("Could not open docuent") << ' ' << disp_fn; + str << _("Could not open document") << ' ' << disp_fn; owner->message(str.str().c_str()); } } @@ -1904,11 +1910,11 @@ void LyXFunc::doImport(string const & argument) if (owner->view()->available()) { string const trypath = owner->buffer()->filepath; // If directory is writeable, use this as default. - if (IsDirWriteable(trypath) == 1) + if (IsDirWriteable(trypath)) initpath = trypath; } - string const text = _("Select ") + formats.PrettyName(format) + string const text = _("Select ") + formats.prettyName(format) + _(" file to import"); FileDialog fileDlg(owner, text, @@ -1918,9 +1924,9 @@ void LyXFunc::doImport(string const & argument) make_pair(string(_("Examples")), string(AddPath(system_lyxdir, "examples")))); - string const extension = "*." + formats.Extension(format) - + "| " + formats.PrettyName(format) - + " (*." + formats.Extension(format) + ")"; + string const extension = "*." + formats.extension(format) + + "| " + formats.prettyName(format) + + " (*." + formats.extension(format) + ")"; FileDialog::Result result = fileDlg.Select(initpath, extension); @@ -2048,7 +2054,7 @@ void LyXFunc::initMiniBuffer() text += nicename; if (tmpbuf->lyxvc.inUse()) { text += " ["; - text += tmpbuf->lyxvc.version(); + text += tmpbuf->lyxvc.versionString(); text += ' '; text += tmpbuf->lyxvc.locker(); if (tmpbuf->isReadonly())