X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfunc.C;h=79d0dc66a0db010db0a72d57901e216b79f1ebe6;hb=9625f5e2300339330e099ccea259c46667ea1461;hp=f3972ac900956a5b7a6b3e7e08dbd7290381471a;hpb=d59d3eb51af11e2146ac95ec58fc5677ea35386e;p=lyx.git diff --git a/src/lyxfunc.C b/src/lyxfunc.C index f3972ac900..79d0dc66a0 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -28,6 +28,7 @@ using std::istringstream; #pragma implementation #endif +#include "version.h" #include "lyxlookup.h" #include "kbmap.h" #include "lyxfunc.h" @@ -42,9 +43,6 @@ using std::istringstream; #include "insets/inseturl.h" #include "insets/insetlatexaccent.h" #include "insets/insettoc.h" -#include "insets/insetlof.h" -#include "insets/insetloa.h" -#include "insets/insetlot.h" #include "insets/insetref.h" #include "insets/insetparent.h" #include "insets/insetindex.h" @@ -64,7 +62,6 @@ using std::istringstream; #include "insets/insettheorem.h" #include "insets/insetcaption.h" #include "mathed/formulamacro.h" -#include "toolbar.h" #include "spellchecker.h" // RVDK_PATCH_5 #include "minibuffer.h" #include "vspace.h" @@ -86,10 +83,18 @@ using std::istringstream; #include "layout.h" #include "WorkArea.h" #include "lyxfr1.h" -#include "menus.h" #include "bufferview_funcs.h" #include "frontends/Dialogs.h" +#include "frontends/Toolbar.h" +#ifdef NEW_MENUBAR +#include "frontends/Menubar.h" +#else +#include "menus.h" +#endif #include "FloatList.h" +#include "exporter.h" +#include "FontLoader.h" +#include "TextCache.h" using std::pair; using std::endl; @@ -98,36 +103,43 @@ extern bool cursor_follows_scrollbar; extern void InsertAsciiFile(BufferView *, string const &, bool); extern void math_insert_symbol(char const *); -extern Bool math_insert_greek(char const); // why "Bool"? +extern bool math_insert_greek(char); extern BufferList bufferlist; extern LyXServer * lyxserver; -extern short greek_kb_flag; -extern FD_form_toc * fd_form_toc; +extern int greek_kb_flag; extern bool selection_possible; extern kb_keymap * toplevel_keymap; -extern void MenuWrite(Buffer *); -extern void MenuWriteAs(Buffer *); +extern bool MenuWrite(Buffer *); +extern bool MenuWriteAs(Buffer *); +#ifdef NEW_MENUBAR extern int MenuRunLaTeX(Buffer *); +#endif extern int MenuBuildProg(Buffer *); extern int MenuRunChktex(Buffer *); +#ifndef NEW_EXPORT extern bool CreatePostscript(Buffer *, bool); +#endif extern void MenuPrint(Buffer *); extern void MenuSendto(); extern void QuitLyX(); extern void MenuFax(Buffer *); +#ifndef NEW_EXPORT extern void MenuExport(Buffer *, string const &); +#endif +extern void show_symbols_form(LyXFunc *); extern LyXAction lyxaction; // (alkis) extern tex_accent_struct get_accent(kb_action action); extern void AutoSave(BufferView *); +#ifndef NEW_EXPORT extern bool PreviewDVI(Buffer *); extern bool PreviewPostscript(Buffer *); +#endif extern void MenuInsertLabel(char const *); -extern void MenuInsertRef(); extern void MenuLayoutCharacter(); extern void MenuLayoutParagraph(); extern void MenuLayoutDocument(); @@ -179,18 +191,138 @@ void LyXFunc::moveCursorUpdate(bool selecting) /* ---> Everytime the cursor is moved, show the current font state. */ // should this too me moved out of this func? - //owner->getMiniBuffer()->Set(CurrentState()); + //owner->showState(); owner->view()->setState(); } +int LyXFunc::processKeySym(KeySym keysym, unsigned int state) +{ + string argument; + + if (lyxerr.debugging(Debug::KEY)) { + char * tmp = XKeysymToString(keysym); + string stm = (tmp ? tmp : ""); + lyxerr << "KeySym is " + << stm + << "[" + << keysym << "]" + << endl; + } + // Do nothing if we have nothing (JMarc) + if (keysym == NoSymbol) { + lyxerr[Debug::KEY] << "Empty kbd action (probably composing)" + << endl; + //return 0; + return FL_PREEMPT; + } + + // this function should be used always [asierra060396] + UpdatableInset * tli = owner->view()->the_locking_inset; + if (owner->view()->available() && tli && (keysym == XK_Escape)) { + if (tli == tli->GetLockingInset()) { + owner->view()->unlockInset(tli); + owner->view()->text->CursorRight(owner->view()); + moveCursorUpdate(false); + owner->showState(); + } else { + tli->UnlockInsetInInset(owner->view(), + tli->GetLockingInset(),true); + } + //return 0; + return FL_PREEMPT; + } + + // Can we be sure that this will work for all X-Windows + // implementations? (Lgb) + // This code snippet makes lyx ignore some keys. Perhaps + // all of them should be explictly mentioned? + if((keysym >= XK_Shift_L && keysym <= XK_Hyper_R) + || keysym == XK_Mode_switch || keysym == 0x0) + return 0; + + // Do a one-deep top-level lookup for + // cancel and meta-fake keys. RVDK_PATCH_5 + cancel_meta_seq.reset(); + + int action = cancel_meta_seq.addkey(keysym, state + &(ShiftMask|ControlMask + |Mod1Mask)); + + // When not cancel or meta-fake, do the normal lookup. + // Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards. + // Mostly, meta_fake_bit = 0. RVDK_PATCH_5. + if ( (action != LFUN_CANCEL) && (action != LFUN_META_FAKE) ) { + + // remove Caps Lock and Mod2 as a modifiers + action = keyseq.addkey(keysym, + (state | meta_fake_bit) + &(ShiftMask|ControlMask + |Mod1Mask)); + } + // Dont remove this unless you know what you are doing. + meta_fake_bit = 0; + + if (action == 0) action = LFUN_PREFIX; + + if (lyxerr.debugging(Debug::KEY)) { + string buf; + keyseq.print(buf); + lyxerr << "Key [" + << action << "][" + << buf << "]" + << endl; + } + + // already here we know if it any point in going further + // why not return already here if action == -1 and + // num_bytes == 0? (Lgb) + + if(keyseq.length > 1 || keyseq.length < -1) { + string buf; + keyseq.print(buf); + owner->getMiniBuffer()->Set(buf); + } + + if (action == -1) { + if (keyseq.length < -1) { // unknown key sequence... + string buf; + LyXBell(); + keyseq.print(buf); + owner->getMiniBuffer()->Set(_("Unknown sequence:"), buf); + return 0; + } + + char isochar = keyseq.getiso(); + if (!(state & ControlMask) && + !(state & Mod1Mask) && + (isochar && keysym < 0xF000)) { + argument += isochar; + } + if (argument.empty()) { + lyxerr.debug() << "Empty argument!" << endl; + // This can`t possibly be of any use + // so we`ll skip the dispatch. + return 0; + } + } + + bool tmp_sc = show_sc; + show_sc = false; + Dispatch(action, argument.c_str()); + show_sc = tmp_sc; + + return 0; +} + + +#if 0 int LyXFunc::processKeyEvent(XEvent * ev) { char s_r[10]; + KeySym keysym_return = 0; string argument; XKeyEvent * keyevent = &ev->xkey; - KeySym keysym_return = 0; - int num_bytes = LyXLookupString(ev, s_r, 10, &keysym_return); s_r[num_bytes] = '\0'; @@ -204,7 +336,8 @@ int LyXFunc::processKeyEvent(XEvent * ev) << " and num_bytes is " << num_bytes << " the string returned is \"" - << s_r << '\"' << endl; + << s_r << '\"' + << endl; } // Do nothing if we have nothing (JMarc) if (num_bytes == 0 && keysym_return == NoSymbol) { @@ -220,7 +353,7 @@ int LyXFunc::processKeyEvent(XEvent * ev) owner->view()->unlockInset(tli); owner->view()->text->CursorRight(owner->view()); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); } else { tli->UnlockInsetInInset(owner->view(), tli->GetLockingInset(),true); @@ -265,8 +398,10 @@ int LyXFunc::processKeyEvent(XEvent * ev) keyseq.print(buf); lyxerr << "Key [" << action << "][" - << buf << "][" - << num_bytes << "]" << endl; + << buf << "]" + << "[" + << num_bytes << "]" + << endl; } // already here we know if it any point in going further @@ -300,11 +435,12 @@ int LyXFunc::processKeyEvent(XEvent * ev) // so we`ll skip the dispatch. return 0; } - } else + } + else if (action == LFUN_SELFINSERT) { argument = s_r[0]; } - + bool tmp_sc = show_sc; show_sc = false; Dispatch(action, argument.c_str()); @@ -312,6 +448,7 @@ int LyXFunc::processKeyEvent(XEvent * ev) return 0; } +#endif LyXFunc::func_status LyXFunc::getStatus(int ac) const @@ -349,17 +486,16 @@ LyXFunc::func_status LyXFunc::getStatus(int ac) const setErrorMessage(N_("Command not allowed with" "out any document open")); flag |= LyXFunc::Disabled; + return flag; } } - if (flag & LyXFunc::Disabled) - return flag; - // I would really like to avoid having this switch and rather try to // encode this in the function itself. static bool noLaTeX = lyxrc.latex_command == "none"; bool disable = false; switch (action) { +#ifndef NEW_EXPORT case LFUN_PREVIEW: disable = noLaTeX || lyxrc.view_dvi_command == "none"; break; @@ -370,6 +506,7 @@ LyXFunc::func_status LyXFunc::getStatus(int ac) const case LFUN_RUNDVIPS: disable = noLaTeX; break; +#endif case LFUN_MENUPRINT: disable = noLaTeX || lyxrc.print_command == "none"; break; @@ -377,21 +514,32 @@ LyXFunc::func_status LyXFunc::getStatus(int ac) const disable = noLaTeX || lyxrc.fax_command == "none"; break; case LFUN_IMPORT: - if (argument == "latex") + if (argument == "latex" || argument == "noweb") disable = lyxrc.relyx_command == "none"; - if (argument == "linuxdoc") + else if (argument == "linuxdoc") disable = lyxrc.linuxdoc_to_lyx_command == "none"; break; +#ifndef NEW_EXPORT case LFUN_EXPORT: - if (argument == "dvi" || argument == "postscript") + if (argument == "latex") + disable = (! buf->isLatex() && ! buf->isLiterate()) ; + else if (argument == "linuxdoc") + disable = ! buf->isLinuxDoc(); + else if (argument == "docbook") + disable = ! buf->isDocBook(); + else if (argument == "dvi" || argument == "postscript") disable = noLaTeX; - if (argument == "html") - disable = lyxrc.html_command == "none"; - if (argument == "html-linuxdoc") - disable = lyxrc.linuxdoc_to_html_command == "none"; - if (argument == "html-docbook") - disable = lyxrc.docbook_to_html_command == "none"; + else if (argument == "html") + disable = (buf->isLinuxDoc() + && lyxrc.linuxdoc_to_html_command == "none") + || (buf->isDocBook() + && lyxrc.docbook_to_html_command == "none") + || (! buf->isLinuxDoc() && ! buf->isDocBook() + && lyxrc.html_command == "none"); + else if (argument == "custom") + disable = (! buf->isLatex() && ! buf->isLiterate()); break; +#endif case LFUN_UNDO: disable = buf->undostack.empty(); break; @@ -404,9 +552,66 @@ LyXFunc::func_status LyXFunc::getStatus(int ac) const case LFUN_RUNCHKTEX: disable = lyxrc.chktex_command == "none"; break; + case LFUN_BUILDPROG: + disable = (lyxrc.literate_command == "none" + || ! buf->isLiterate()); + break; + +#ifndef NEW_TABULAR case LFUN_LAYOUT_TABLE: disable = ! owner->view()->text->cursor.par()->table; break; +#endif + case LFUN_LAYOUT_TABULAR: + disable = true; + if (owner->view()->the_locking_inset) { + disable = (owner->view()->the_locking_inset->LyxCode() != Inset::TABULAR_CODE) && + !owner->view()->the_locking_inset->GetFirstLockingInsetOfType(Inset::TABULAR_CODE); + } + break; + + case LFUN_TABULAR_FEATURE: + disable = true; + if (owner->view()->the_locking_inset) { + func_status ret = LyXFunc::Disabled; + if (owner->view()->the_locking_inset->LyxCode() == Inset::TABULAR_CODE) { + ret = static_cast + (owner->view()->the_locking_inset)-> + getStatus(argument); + } else if (owner->view()->the_locking_inset->GetFirstLockingInsetOfType(Inset::TABULAR_CODE)) { + ret = static_cast + (owner->view()->the_locking_inset-> + GetFirstLockingInsetOfType(Inset::TABULAR_CODE))-> + getStatus(argument); + } + flag |= ret; + disable = false; + } else { + static InsetTabular inset(owner->buffer(), 1, 1); + func_status ret; + + disable = true; + ret = inset.getStatus(argument); + if ((ret & LyXFunc::ToggleOn) || + (ret & LyXFunc::ToggleOff)) + flag |= LyXFunc::ToggleOff; + } + break; + + case LFUN_VC_REGISTER: + disable = buf->lyxvc.inUse(); + break; + case LFUN_VC_CHECKIN: + disable = !buf->lyxvc.inUse() || buf->isReadonly(); + break; + case LFUN_VC_CHECKOUT: + disable = !buf->lyxvc.inUse() || !buf->isReadonly(); + break; + case LFUN_VC_REVERT: + case LFUN_VC_UNDO: + case LFUN_VC_HISTORY: + disable = !buf->lyxvc.inUse(); + break; default: break; } @@ -415,7 +620,13 @@ LyXFunc::func_status LyXFunc::getStatus(int ac) const if (buf) { func_status box = LyXFunc::ToggleOff; - LyXFont font = owner->view()->text->real_current_font; + LyXFont font; + if (owner->view()->the_locking_inset && + owner->view()->the_locking_inset->getLyXText(owner->view())) + font = owner->view()->the_locking_inset-> + getLyXText(owner->view())->real_current_font; + else + font = owner->view()->text->real_current_font; switch (action) { case LFUN_EMPH: if (font.emph() == LyXFont::ON) @@ -483,7 +694,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->hideCursor(); // We cannot use this function here - if (getStatus(action) & Disabled) + if (getStatus(ac) & Disabled) goto exit_with_message; commandshortcut.erase(); @@ -593,29 +804,26 @@ string LyXFunc::Dispatch(int ac, case LFUN_BREAKLINE: owner->view()->text->CursorRight(owner->view()); owner->view()->setState(); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_RIGHT: if (!owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) { owner->view()->text->CursorRight(owner->view()); moveCursorUpdate(false); - owner->getMiniBuffer()-> - Set(CurrentState(owner->view())); + owner->showState(); } return string(); case LFUN_LEFT: if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) { owner->view()->text->CursorRight(owner->view()); moveCursorUpdate(false); - owner->getMiniBuffer()-> - Set(CurrentState(owner->view())); + owner->showState(); } return string(); case LFUN_DOWN: owner->view()->text->CursorDown(owner->view()); moveCursorUpdate(false); - owner->getMiniBuffer()-> - Set(CurrentState(owner->view())); + owner->showState(); return string(); default: break; @@ -744,16 +952,20 @@ string LyXFunc::Dispatch(int ac, break; case LFUN_MENUWRITE: - owner->getMiniBuffer()->Set(_("Saving document"), - MakeDisplayPath(owner->buffer()->fileName()), - "..."); - MenuWrite(owner->buffer()); - //owner->getMiniBuffer()-> { - // Set(_("Document saved as"), - // MakeDisplayPath(owner->buffer()->fileName())); - //} else { - //owner->getMiniBuffer()->Set(_("Save failed!")); - //} + if (!owner->buffer()->isUnnamed()) { + owner->getMiniBuffer()->Set(_("Saving document"), + MakeDisplayPath(owner->buffer()->fileName()), + "..."); + MenuWrite(owner->buffer()); + //owner->getMiniBuffer()-> { + // Set(_("Document saved as"), + // MakeDisplayPath(owner->buffer()->fileName())); + //} else { + //owner->getMiniBuffer()->Set(_("Save failed!")); + //} + } else { + MenuWriteAs(owner->buffer()); + } break; case LFUN_MENUWRITEAS: @@ -764,6 +976,15 @@ string LyXFunc::Dispatch(int ac, reloadBuffer(); break; +#ifdef NEW_EXPORT + case LFUN_UPDATE: + Exporter::Export(owner->buffer(), argument, true); + break; + + case LFUN_PREVIEW: + Exporter::Preview(owner->buffer(), argument); + break; +#else case LFUN_PREVIEW: PreviewDVI(owner->buffer()); break; @@ -775,6 +996,11 @@ string LyXFunc::Dispatch(int ac, case LFUN_RUNLATEX: MenuRunLaTeX(owner->buffer()); break; + + case LFUN_RUNDVIPS: + CreatePostscript(owner->buffer(), false); + break; +#endif case LFUN_BUILDPROG: MenuBuildProg(owner->buffer()); @@ -783,11 +1009,7 @@ string LyXFunc::Dispatch(int ac, case LFUN_RUNCHKTEX: MenuRunChktex(owner->buffer()); break; - - case LFUN_RUNDVIPS: - CreatePostscript(owner->buffer(), false); - break; - + case LFUN_MENUPRINT: owner->getDialogs()->showPrint(); break; @@ -797,7 +1019,11 @@ string LyXFunc::Dispatch(int ac, break; case LFUN_EXPORT: +#ifdef NEW_EXPORT + Exporter::Export(owner->buffer(), argument, false); +#else MenuExport(owner->buffer(), argument); +#endif break; case LFUN_IMPORT: @@ -813,64 +1039,44 @@ string LyXFunc::Dispatch(int ac, case LFUN_LOTVIEW: case LFUN_LOAVIEW: { - Buffer::TocType type = Buffer::TOC_TOC; - if (action == LFUN_LOFVIEW) - type = Buffer::TOC_LOF; - else if (action == LFUN_LOTVIEW) - type = Buffer::TOC_LOT; - else if (action == LFUN_LOAVIEW) - type = Buffer::TOC_LOA; - fl_set_choice(fd_form_toc->toctype,type + 1); - TocUpdateCB(0, 0); - if (fd_form_toc->form_toc->visible) { - fl_raise_form(fd_form_toc->form_toc); - } else { - static int ow = -1, oh; - fl_show_form(fd_form_toc->form_toc, - FL_PLACE_MOUSE | - FL_FREE_SIZE, FL_FULLBORDER, - _("Table of Contents")); - if (ow < 0) { - ow = fd_form_toc->form_toc->w; - oh = fd_form_toc->form_toc->h; - } - fl_set_form_minsize(fd_form_toc->form_toc, ow, oh); - } + InsetCommandParams p; + + if( action == LFUN_TOCVIEW ) + p.setCmdName( "tableofcontents" ); + else if( action == LFUN_LOAVIEW ) + p.setCmdName( "listofalgorithms" ); + else if( action == LFUN_LOFVIEW ) + p.setCmdName( "listoffigures" ); + else + p.setCmdName( "listoftables" ); + + owner->getDialogs()->createTOC( p.getAsString() ); break; } + case LFUN_TOC_INSERT: - { - Inset * new_inset = new InsetTOC(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; - break; - } - - case LFUN_LOF_INSERT: - { - Inset * new_inset = new InsetLOF(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; - break; - } - case LFUN_LOA_INSERT: - { - Inset * new_inset = new InsetLOA(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; - break; - } - + case LFUN_LOF_INSERT: case LFUN_LOT_INSERT: { - Inset * new_inset = new InsetLOT(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; + InsetCommandParams p; + + if( action == LFUN_TOC_INSERT ) + p.setCmdName( "tableofcontents" ); + else if( action == LFUN_LOA_INSERT ) + p.setCmdName( "listofalgorithms" ); + else if( action == LFUN_LOF_INSERT ) + p.setCmdName( "listoffigures" ); + else + p.setCmdName( "listoftables" ); + + Inset * inset = new InsetTOC( p ); + if( !owner->view()->insertInset( inset, "Standard", true ) ) + delete inset; break; } - case LFUN_TABLE: + case LFUN_DIALOG_TABULAR_INSERT: #ifndef NEW_TABULAR Table(); #else @@ -878,15 +1084,27 @@ string LyXFunc::Dispatch(int ac, #endif break; + case LFUN_TABULAR_FEATURE: + case LFUN_SCROLL_INSET: + // this is not handled here as this funktion is only aktive + // if we have a locking_inset and that one is (or contains) + // a tabular-inset + break; + case LFUN_FIGURE: Figure(); break; - case LFUN_INSERT_GRAPHICS: + case LFUN_INSET_GRAPHICS: { Inset * new_inset = new InsetGraphics; - if (!owner->view()->insertInset(new_inset)) + if (!owner->view()->insertInset(new_inset)) { delete new_inset; + } else { + // this is need because you don't use a inset->Edit() + owner->view()->updateInset(new_inset, true); + new_inset->Edit(owner->view(), 0, 0, 0); + } break; } @@ -957,10 +1175,12 @@ string LyXFunc::Dispatch(int ac, case LFUN_GOTONOTE: owner->view()->gotoNote(); break; - + +#ifndef NEW_INSETS case LFUN_OPENSTUFF: owner->view()->openStuff(); break; +#endif case LFUN_HYPHENATION: owner->view()->hyphenationPoint(); @@ -997,23 +1217,23 @@ string LyXFunc::Dispatch(int ac, case LFUN_FREE: Free(owner->view()); owner->view()->setState(); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_TEX: Tex(owner->view()); owner->view()->setState(); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; - +#ifndef NEW_INSETS case LFUN_MELT: Melt(owner->view()); break; - +#endif case LFUN_RECONFIGURE: Reconfigure(owner->view()); break; - +#ifndef NEW_INSETS case LFUN_FOOTMELT: if (owner->view()->available() && !owner->view()->text->selection @@ -1040,11 +1260,47 @@ string LyXFunc::Dispatch(int ac, Margin(owner->view()); owner->view()->setState(); break; - +#endif case LFUN_HELP_COPYRIGHT: owner->getDialogs()->showCopyright(); break; + case LFUN_HELP_CREDITS: + owner->getDialogs()->showCredits(); + break; + + case LFUN_HELP_OPEN: { + string arg = argument; + if (arg.empty()) { + setErrorMessage(N_("Missing argument")); + break; + } + ProhibitInput(owner->view()); + string fname = i18nLibFileSearch("doc", arg, "lyx"); + if (fname.empty()) { + lyxerr << "LyX: unable to find documentation file `" + << arg << "'. Bad installation?" << endl; + AllowInput(owner->view()); + break; + } + owner->getMiniBuffer()->Set(_("Opening help file"), + MakeDisplayPath(fname),"..."); + owner->view()->buffer(bufferlist.loadLyXFile(fname,false)); + AllowInput(owner->view()); + break; + } + + case LFUN_HELP_VERSION: + ProhibitInput(owner->view()); + fl_show_message((string(_("LyX Version ")) + LYX_VERSION + + _(" of ") + LYX_RELEASE).c_str(), + (_("Library directory: ") + + MakeDisplayPath(system_lyxdir)).c_str(), + (_("User directory: ") + + MakeDisplayPath(user_lyxdir)).c_str()); + AllowInput(owner->view()); + break; + // --- version control ------------------------------- case LFUN_VC_REGISTER: { @@ -1089,6 +1345,11 @@ string LyXFunc::Dispatch(int ac, // --- buffers ---------------------------------------- + case LFUN_SWITCHBUFFER: + owner->view()->buffer(bufferlist.getBuffer(argument)); + break; + + case LFUN_FILE_INSERT: { MenuInsertLyXFile(argument); @@ -1173,10 +1434,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->update(BufferView::SELECT|BufferView::FITCUR); owner->view()->text-> SetLayout(owner->view(), layout.second); - owner->getToolbar()->combox-> - select(owner->view()-> - text->cursor.par()-> - GetLayout() + 1); + owner->setLayout(layout.second); owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); owner->view()->setState(); } @@ -1184,7 +1442,11 @@ string LyXFunc::Dispatch(int ac, break; case LFUN_LAYOUT_DOCUMENT: +#ifdef USE_OLD_DOCUMENT_LAYOUT MenuLayoutDocument(); +#else + owner->getDialogs()->showLayoutDocument(); +#endif break; case LFUN_LAYOUT_PARAGRAPH: @@ -1203,12 +1465,31 @@ string LyXFunc::Dispatch(int ac, } break; + case LFUN_LAYOUT_TABULAR: + if (owner->view()->the_locking_inset) { + if (owner->view()->the_locking_inset->LyxCode()==Inset::TABULAR_CODE) { + InsetTabular * inset = static_cast + (owner->view()->the_locking_inset); + inset->OpenLayoutDialog(owner->view()); + } else if (owner->view()->the_locking_inset-> + GetFirstLockingInsetOfType(Inset::TABULAR_CODE)!=0) { + InsetTabular * inset = static_cast( + owner->view()->the_locking_inset->GetFirstLockingInsetOfType(Inset::TABULAR_CODE)); + inset->OpenLayoutDialog(owner->view()); + } + } + break; + case LFUN_LAYOUT_PAPER: +#ifdef USE_OLD_DOCUMENT_LAYOUT MenuLayoutPaper(); +#endif break; case LFUN_LAYOUT_QUOTES: +#ifdef USE_OLD_DOCUMENT_LAYOUT MenuLayoutQuotes(); +#endif break; case LFUN_LAYOUT_PREAMBLE: @@ -1220,58 +1501,58 @@ string LyXFunc::Dispatch(int ac, break; case LFUN_DROP_LAYOUTS_CHOICE: - owner->getToolbar()->combox->Show(); + owner->getToolbar()->openLayoutList(); break; case LFUN_LANGUAGE: Lang(owner->view(), argument); owner->view()->setState(); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_EMPH: Emph(owner->view()); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_BOLD: Bold(owner->view()); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_NOUN: Noun(owner->view()); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_CODE: Code(owner->view()); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_SANS: Sans(owner->view()); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_ROMAN: Roman(owner->view()); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_DEFAULT: StyleReset(owner->view()); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_UNDERLINE: Underline(owner->view()); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_FONT_SIZE: FontSize(owner->view(), argument); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_FONT_STATE: @@ -1303,30 +1584,33 @@ string LyXFunc::Dispatch(int ac, MenuInsertLabel(argument.c_str()); break; - case LFUN_INSERT_REF: - MenuInsertRef(); - break; + case LFUN_REF_CREATE: + { + InsetCommandParams p( "ref" ); + owner->getDialogs()->createRef( p.getAsString() ); + } + break; - case LFUN_REFTOGGLE: + case LFUN_REF_INSERT: { - InsetRef * inset = - static_cast(getInsetByCode(Inset::REF_CODE)); - if (inset) { - inset->Toggle(); - owner->view()->updateInset(inset, true); - } else { - setErrorMessage(N_("No cross-reference to toggle")); - } + InsetCommandParams p; + p.setFromString( argument ); + + InsetRef * inset = new InsetRef( p ); + if (!owner->view()->insertInset(inset)) + delete inset; + else + owner->view()->updateInset( inset, true ); } break; - - case LFUN_REFBACK: + + case LFUN_REF_BACK: { owner->view()->restorePosition(); } break; - case LFUN_REFGOTO: + case LFUN_REF_GOTO: { string label(argument); if (label.empty()) { @@ -1347,7 +1631,11 @@ string LyXFunc::Dispatch(int ac, break; case LFUN_MENU_OPEN_BY_NAME: +#ifdef NEW_MENUBAR + owner->getMenubar()->openByName(argument); +#else owner->getMenus()->openByName(argument); +#endif break; // RVDK_PATCH_5 case LFUN_SPELLCHECK: @@ -1379,7 +1667,7 @@ string LyXFunc::Dispatch(int ac, tmptext->CursorRight(owner->view(), false); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); } break; @@ -1415,7 +1703,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); } break; @@ -1425,7 +1713,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorUp(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_DOWN: @@ -1435,7 +1723,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorDown(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_UP_PARAGRAPH: @@ -1445,7 +1733,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorUpParagraph(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_DOWN_PARAGRAPH: @@ -1455,7 +1743,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorDownParagraph(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_PRIOR: @@ -1465,7 +1753,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->cursorPrevious(); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_NEXT: @@ -1475,7 +1763,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->cursorNext(); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_HOME: @@ -1485,7 +1773,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorHome(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_END: @@ -1495,7 +1783,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorEnd(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_SHIFT_TAB: @@ -1506,7 +1794,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorTab(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_WORDRIGHT: @@ -1519,7 +1807,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorRightOneWord(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_WORDLEFT: @@ -1532,7 +1820,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorLeftOneWord(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_BEGINNINGBUF: @@ -1542,7 +1830,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorTop(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_ENDBUF: @@ -1552,7 +1840,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorBottom(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; @@ -1565,7 +1853,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorRight(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_LEFTSEL: @@ -1576,7 +1864,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorLeft(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_UPSEL: @@ -1584,7 +1872,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorUp(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_DOWNSEL: @@ -1592,7 +1880,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorDown(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_UP_PARAGRAPHSEL: @@ -1600,7 +1888,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorUpParagraph(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_DOWN_PARAGRAPHSEL: @@ -1608,7 +1896,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorDownParagraph(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_PRIORSEL: @@ -1616,7 +1904,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->cursorPrevious(); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_NEXTSEL: @@ -1624,7 +1912,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->cursorNext(); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_HOMESEL: @@ -1632,7 +1920,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorHome(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_ENDSEL: @@ -1640,7 +1928,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorEnd(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_WORDRIGHTSEL: @@ -1651,7 +1939,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorRightOneWord(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_WORDLEFTSEL: @@ -1662,7 +1950,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorLeftOneWord(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_BEGINNINGBUFSEL: @@ -1670,7 +1958,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorTop(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; case LFUN_ENDBUFSEL: @@ -1678,7 +1966,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->CursorBottom(owner->view()); owner->view()->text->FinishUndo(); moveCursorUpdate(true); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; // --- text changing commands ------------------------ @@ -1733,7 +2021,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->cut(); } moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); owner->view()->setState(); break; @@ -1787,7 +2075,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->DeleteWordForward(owner->view()); owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; /* -------> Delete word backward. */ @@ -1796,7 +2084,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->DeleteWordBackward(owner->view()); owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); moveCursorUpdate(false); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; /* -------> Kill to end of line. */ @@ -1841,7 +2129,7 @@ string LyXFunc::Dispatch(int ac, } else { owner->view()->cut(); } - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); owner->view()->setState(); } break; @@ -1885,7 +2173,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->sel_cursor = owner->view()->text->cursor; owner->view()->setState(); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; } @@ -1897,7 +2185,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->text->sel_cursor = owner->view()->text->cursor; owner->view()->setState(); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); break; } @@ -1932,7 +2220,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); owner->view()->text->sel_cursor = cursor; owner->view()->setState(); - owner->getMiniBuffer()->Set(CurrentState(owner->view())); + owner->showState(); } break; @@ -1994,18 +2282,28 @@ string LyXFunc::Dispatch(int ac, case LFUN_HTMLURL: case LFUN_URL: { - InsetCommand * new_inset; + InsetCommandParams p; if (action == LFUN_HTMLURL) - new_inset = new InsetUrl("htmlurl", "", ""); + p.setCmdName("htmlurl"); else - new_inset = new InsetUrl("url", "", ""); - if (owner->view()->insertInset(new_inset)) - new_inset->Edit(owner->view(), 0, 0, 0); + p.setCmdName("url"); + owner->getDialogs()->createUrl( p.getAsString() ); + } + break; + + case LFUN_INSERT_URL: + { + InsetCommandParams p; + p.setFromString( argument ); + + InsetUrl * inset = new InsetUrl( p ); + if (!owner->view()->insertInset(inset)) + delete inset; else - delete new_inset; + owner->view()->updateInset( inset, true ); } break; - + case LFUN_INSET_TEXT: { InsetText * new_inset = new InsetText; @@ -2108,7 +2406,7 @@ string LyXFunc::Dispatch(int ac, // Do we have a locking inset... if (owner->view()->the_locking_inset) { lyxerr << "Locking inset code: " - << owner->view()->the_locking_inset->LyxCode(); + << static_cast(owner->view()->the_locking_inset->LyxCode()); InsetCaption * new_inset = new InsetCaption; new_inset->setOwner(owner->view()->the_locking_inset); new_inset->SetAutoBreakRows(true); @@ -2289,15 +2587,7 @@ string LyXFunc::Dispatch(int ac, case LFUN_PUSH_TOOLBAR: { int nth = strToInt(argument); - if (lyxerr.debugging(Debug::TOOLBAR)) { - lyxerr << "LFUN_PUSH_TOOLBAR: argument = `" - << argument << "'\n" - << "LFUN_PUSH_TOOLBAR: nth = `" - << nth << "'" << endl; - } - if (nth <= 0) { - LyXBell(); setErrorMessage(N_("Push-toolbar needs argument > 0")); } else { owner->getToolbar()->push(nth); @@ -2307,7 +2597,7 @@ string LyXFunc::Dispatch(int ac, case LFUN_ADD_TO_TOOLBAR: { - if (lyxerr.debugging(Debug::TOOLBAR)) { + if (lyxerr.debugging(Debug::GUI)) { lyxerr << "LFUN_ADD_TO_TOOLBAR:" "argument = `" << argument << '\'' << endl; } @@ -2315,7 +2605,6 @@ string LyXFunc::Dispatch(int ac, //lyxerr <")); } else { owner->getToolbar()->add(argument, false); @@ -2396,8 +2685,7 @@ string LyXFunc::Dispatch(int ac, break; case LFUN_MATH_MODE: // Open or create a math inset - { - + { if (owner->view()->available()) owner->view()->open_new_inset(new InsetFormula); setMessage(N_("Math editor mode")); @@ -2408,21 +2696,38 @@ string LyXFunc::Dispatch(int ac, case LFUN_MATH_LIMITS: { setErrorMessage(N_("This is only allowed in math mode!")); + + } + break; + + case LFUN_MATH_PANEL: + { + show_symbols_form(this); } break; - case LFUN_CREATE_CITATION: + case LFUN_CITATION_CREATE: { - owner->getDialogs()->createCitation( argument ); + // Should do this "at source" + InsetCommandParams p( "cite" ); + + if (contains(argument, "|")) { + p.setContents( token(argument, '|', 0) ); + p.setOptions( token(argument, '|', 1) ); + } else { + p.setContents( argument ); + } + + owner->getDialogs()->createCitation( p.getAsString() ); } break; - case LFUN_INSERT_CITATION: + case LFUN_CITATION_INSERT: { - string keys = token(argument, '|', 0); - string text = token(argument, '|', 1); + InsetCommandParams p; + p.setFromString( argument ); - InsetCitation * inset = new InsetCitation( keys, text ); + InsetCitation * inset = new InsetCitation( p ); if (!owner->view()->insertInset(inset)) delete inset; else @@ -2435,20 +2740,19 @@ string LyXFunc::Dispatch(int ac, // ale970405+lasgoutt970425 // The argument can be up to two tokens separated // by a space. The first one is the bibstyle. - string lsarg(argument); - string bibstyle = token(lsarg, ' ', 1); + string db = token(argument, ' ', 0); + string bibstyle = token(argument, ' ', 1); if (bibstyle.empty()) bibstyle = "plain"; - InsetBibtex * new_inset - = new InsetBibtex(token(lsarg, ' ', 0), - bibstyle, - owner->buffer()); + + InsetCommandParams p( "BibTeX", db, bibstyle ); + InsetBibtex * inset = new InsetBibtex(p, owner->buffer()); - if (owner->view()->insertInset(new_inset)) { - if (lsarg.empty()) - new_inset->Edit(owner->view(), 0, 0, 0); + if (owner->view()->insertInset(inset)) { + if (argument.empty()) + inset->Edit(owner->view(), 0, 0, 0); } else - delete new_inset; + delete inset; } break; @@ -2483,81 +2787,90 @@ string LyXFunc::Dispatch(int ac, } break; - case LFUN_INDEX_INSERT: - case LFUN_INDEX_INSERT_LAST: + case LFUN_INDEX_CREATE: { - // Can't do that at the beginning of a paragraph. - if (owner->view()->text->cursor.pos() - 1 < 0) - break; + InsetCommandParams p( "index" ); + + if( argument.empty() ) { + // Get the word immediately preceding the cursor + LyXParagraph::size_type curpos = + owner->view()->text->cursor.pos() - 1; - InsetIndex * new_inset = new InsetIndex(); - if (!argument.empty()) { - string lsarg(argument); - new_inset->setContents(lsarg); - if (!owner->view()->insertInset(new_inset)) - delete new_inset; + string curstring; + if( curpos >= 0 ) + curstring = owner->view()->text + ->cursor.par()->GetWord(curpos); + + p.setContents( curstring ); } else { - //reh 98/09/21 - //get the current word for an argument - LyXParagraph::size_type lastpos = - owner->view()->text->cursor.pos() - 1; - // Get the current word. note that this must be done - // before inserting the inset, or the inset will - // break the word - string curstring(owner->view() - ->text->cursor.par()->GetWord(lastpos)); + p.setContents( argument ); + } - //make the new inset and write the current word into it - InsetIndex * new_inset = new InsetIndex(); + owner->getDialogs()->createIndex( p.getAsString() ); + } + break; + + case LFUN_INDEX_INSERT: + { + InsetCommandParams p; + p.setFromString( argument ); + InsetIndex * inset = new InsetIndex( p ); - new_inset->setContents(curstring); + if (!owner->view()->insertInset(inset)) + delete inset; + else + owner->view()->updateInset( inset, true ); + } + break; + + case LFUN_INDEX_INSERT_LAST: + { + // Get word immediately preceding the cursor + LyXParagraph::size_type curpos = + owner->view()->text->cursor.pos() - 1; + // Can't do that at the beginning of a paragraph + if( curpos < 0 ) break; - //don't edit it if the call was to INSERT_LAST - if(action != LFUN_INDEX_INSERT_LAST) { - new_inset->Edit(owner->view(), 0, 0, 0); - } else { - //it looks blank on the screen unless - //we do something. put it here. + string curstring( owner->view()->text + ->cursor.par()->GetWord(curpos) ); - // move the cursor to the returned value of lastpos - // but only for the auto-insert - owner->view()->text->cursor.pos(lastpos); - } + InsetCommandParams p( "index", curstring ); + InsetIndex * inset = new InsetIndex( p ); - //put the new inset into the buffer. - // there should be some way of knowing the user - //cancelled & avoiding this, but i don't know how - if (!owner->view()->insertInset(new_inset)) - delete new_inset; - } + if (!owner->view()->insertInset(inset)) + delete inset; + else + owner->view()->updateInset( inset, true ); } break; - + case LFUN_INDEX_PRINT: { - Inset * new_inset = new InsetPrintIndex(owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; + InsetCommandParams p( "printindex" ); + Inset * inset = new InsetPrintIndex(p); + if (!owner->view()->insertInset(inset, "Standard", true)) + delete inset; } break; case LFUN_PARENTINSERT: { lyxerr << "arg " << argument << endl; - Inset * new_inset = new InsetParent(argument, owner->buffer()); - if (!owner->view()->insertInset(new_inset, "Standard", true)) - delete new_inset; + InsetCommandParams p( "lyxparent", argument ); + Inset * inset = new InsetParent(p, owner->buffer()); + if (!owner->view()->insertInset(inset, "Standard", true)) + delete inset; } break; case LFUN_CHILDINSERT: { - Inset * new_inset = new InsetInclude(argument, - owner->buffer()); - if (owner->view()->insertInset(new_inset, "Standard", true)) - new_inset->Edit(owner->view(), 0, 0, 0); + InsetCommandParams p( "Include", argument ); + Inset * inset = new InsetInclude(p, owner->buffer()); + if (owner->view()->insertInset(inset, "Standard", true)) + inset->Edit(owner->view(), 0, 0, 0); else - delete new_inset; + delete inset; } break; @@ -2579,7 +2892,7 @@ string LyXFunc::Dispatch(int ac, case LFUN_INSERT_NOTE: owner->view()->insertNote(); break; - +#ifndef NEW_INSETS case LFUN_INSERTFOOTNOTE: { LyXParagraph::footnote_kind kind; @@ -2606,7 +2919,7 @@ string LyXFunc::Dispatch(int ac, owner->view()->setState(); } break; - +#endif case LFUN_BUFFERBULLETSSELECT: bulletForm(); break; @@ -2680,6 +2993,10 @@ string LyXFunc::Dispatch(int ac, } break; + case LFUN_DIALOG_PREFERENCES: + owner->getDialogs()->showPreferences(); + break; + case LFUN_SAVEPREFERENCES: { Path p(user_lyxdir); @@ -2687,6 +3004,22 @@ string LyXFunc::Dispatch(int ac, } break; + case LFUN_SCREEN_FONT_UPDATE: + { + // handle the screen font changes. + // + lyxrc.set_font_norm_type(); + fontloader.update(); + // Of course we should only do the resize and the textcache.clear + // if values really changed...but not very important right now. (Lgb) + // All buffers will need resize + bufferlist.resize(); + // We also need to empty the textcache so that + // the buffer will be formatted correctly after + // a zoom change. + textcache.clear(); + } + case LFUN_SET_COLOR: { string lyx_name, x11_name; @@ -2811,31 +3144,35 @@ void LyXFunc::MenuNew(bool fromTemplate) initpath = trypath; } - ProhibitInput(owner->view()); - fileDlg.SetButton(0, _("Documents"), lyxrc.document_path); - fileDlg.SetButton(1, _("Templates"), lyxrc.template_path); - fname = fileDlg.Select(_("Enter Filename for new document"), - initpath, "*.lyx", _("newfile")); - AllowInput(owner->view()); - - if (fname.empty()) { - owner->getMiniBuffer()->Set(_("Canceled.")); - lyxerr.debug() << "New Document Cancelled." << endl; - return; - } - - // get absolute path of file and make sure the filename ends - // with .lyx - string s = MakeAbsPath(fname); - if (!IsLyXFilename(s)) - s += ".lyx"; + static int newfile_number = 0; + string s; - // Check if the document already is open - if (bufferlist.exists(s)){ - switch(AskConfirmation(_("Document is already open:"), - MakeDisplayPath(s, 50), - _("Do you want to close that document now?\n" - "('No' will just switch to the open version)"))) + if (lyxrc.new_ask_filename) { + ProhibitInput(owner->view()); + fileDlg.SetButton(0, _("Documents"), lyxrc.document_path); + fileDlg.SetButton(1, _("Templates"), lyxrc.template_path); + fname = fileDlg.Select(_("Enter Filename for new document"), + initpath, "*.lyx", _("newfile")); + AllowInput(owner->view()); + + if (fname.empty()) { + owner->getMiniBuffer()->Set(_("Canceled.")); + lyxerr.debug() << "New Document Cancelled." << endl; + return; + } + + // get absolute path of file and make sure the filename ends + // with .lyx + s = MakeAbsPath(fname); + if (!IsLyXFilename(s)) + s += ".lyx"; + + // Check if the document already is open + if (bufferlist.exists(s)) { + switch(AskConfirmation(_("Document is already open:"), + MakeDisplayPath(s, 50), + _("Do you want to close that document now?\n" + "('No' will just switch to the open version)"))) { case 1: // Yes: close the document if (!bufferlist.close(bufferlist.getBuffer(s))) @@ -2849,25 +3186,34 @@ void LyXFunc::MenuNew(bool fromTemplate) owner->getMiniBuffer()->Set(_("Canceled.")); return; } - } - - // Check whether the file already exists - if (IsLyXFilename(s)) { + } + // Check whether the file already exists + if (IsLyXFilename(s)) { + FileInfo fi(s); + if (fi.readable() && + AskQuestion(_("File already exists:"), + MakeDisplayPath(s, 50), + _("Do you want to open the document?"))) { + // loads document + owner->getMiniBuffer()->Set(_("Opening document"), + MakeDisplayPath(s), "..."); + XFlush(fl_display); + owner->view()->buffer( + bufferlist.loadLyXFile(s)); + owner->getMiniBuffer()->Set(_("Document"), + MakeDisplayPath(s), + _("opened.")); + return; + } + } + } else { + s = lyxrc.document_path + "newfile" + tostr(++newfile_number); FileInfo fi(s); - if (fi.readable() && - AskQuestion(_("File already exists:"), - MakeDisplayPath(s, 50), - _("Do you want to open the document?"))) { - // loads document - owner->getMiniBuffer()->Set(_("Opening document"), - MakeDisplayPath(s), "..."); - XFlush(fl_display); - owner->view()->buffer( - bufferlist.loadLyXFile(s)); - owner->getMiniBuffer()->Set(_("Document"), - MakeDisplayPath(s), - _("opened.")); - return; + while (bufferlist.exists(s) || fi.readable()) { + ++newfile_number; + s = lyxrc.document_path + "newfile" + + tostr(newfile_number); + fi.newFile(s); } }