X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftext3.C;h=9fb01eda4f153259b3307df1a09148b06d5424b3;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=6210304ad6a1bfa21562f2c01dab4d560115e076;hpb=eb651c3d6100eac2d3ec6d176234a0f9512671b9;p=lyx.git diff --git a/src/text3.C b/src/text3.C index 6210304ad6..9fb01eda4f 100644 --- a/src/text3.C +++ b/src/text3.C @@ -305,6 +305,11 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) { lyxerr[Debug::ACTION] << "LyXText::dispatch: cmd: " << cmd << endl; + // FIXME: We use the update flag to indicates wether a singlePar or a + // full screen update is needed. We reset it here but shall we restore it + // at the end? + cur.noUpdate(); + BOOST_ASSERT(cur.text() == this); BufferView * bv = &cur.bv(); CursorSlice oldTopSlice = cur.top(); @@ -748,7 +753,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) break; case LFUN_CHARS_TRANSPOSE: - recordUndo(cur); + charsTranspose(cur); break; case LFUN_PASTE: @@ -809,24 +814,15 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) break; case LFUN_LAYOUT: { - lyxerr[Debug::INFO] << "LFUN_LAYOUT: (arg) " - << to_utf8(cmd.argument()) << endl; - - // This is not the good solution to the empty argument - // problem, but it will hopefully suffice for 1.2.0. - // The correct solution would be to augument the - // function list/array with information about what - // functions needs arguments and their type. - if (cmd.argument().empty()) { - cur.errorMessage(_("LyX function 'layout' needs an argument.")); - break; - } + string layout = to_ascii(cmd.argument()); + lyxerr[Debug::INFO] << "LFUN_LAYOUT: (arg) " << layout << endl; // Derive layout number from given argument (string) // and current buffer's textclass (number) LyXTextClass const & tclass = bv->buffer()->params().getLyXTextClass(); - bool hasLayout = tclass.hasLayout(to_utf8(cmd.argument())); - string layout = to_utf8(cmd.argument()); + if (layout.empty()) + layout = tclass.defaultLayoutName(); + bool hasLayout = tclass.hasLayout(layout); // If the entry is obsolete, use the new one instead. if (hasLayout) { @@ -997,6 +993,11 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph")); } + if (cmd.button() == mouse_button::button1) { + needsUpdate = false; + cur.noUpdate(); + } + break; } @@ -1046,8 +1047,12 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) break; // finish selection - if (cmd.button() == mouse_button::button1) - theSelection().haveSelection(cur.selection()); + if (cmd.button() == mouse_button::button1) { + if (cur.selection()) + theSelection().haveSelection(cur.selection()); + needsUpdate = false; + cur.noUpdate(); + } bv->switchKeyMap(); break; @@ -1105,8 +1110,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) InsetCommandParams p("label"); // Try to generate a valid label p["name"] = (cmd.argument().empty()) ? - // FIXME UNICODE - from_utf8(cur.getPossibleLabel()) : + cur.getPossibleLabel() : cmd.argument(); string const data = InsetCommandMailer::params2string("label", p); @@ -1160,7 +1164,8 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) cur.dispatch(FuncRequest(LFUN_LAYOUT, "Caption")); break; - case LFUN_INDEX_INSERT: { + case LFUN_INDEX_INSERT: + case LFUN_NOMENCL_INSERT: { InsetBase * inset = createInset(&cur.bv(), cmd); if (!inset) break; @@ -1169,11 +1174,17 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) cur.clearSelection(); insertInset(cur, inset); inset->edit(cur, true); + // Show the dialog for the nomenclature entry, since the + // description entry still needs to be filled in. + if (cmd.action == LFUN_NOMENCL_INSERT) + InsetCommandMailer("nomenclature", + *reinterpret_cast(inset)).showDialog(&cur.bv()); cur.posRight(); break; } case LFUN_INDEX_PRINT: + case LFUN_NOMENCL_PRINT: case LFUN_TOC_INSERT: case LFUN_HFILL_INSERT: case LFUN_LINE_INSERT: @@ -1405,7 +1416,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) } setLayout(cur, tclass.defaultLayoutName()); - setParagraph(cur, Spacing(), LYX_ALIGN_LAYOUT, string(), 0); + setParagraph(cur, Spacing(), LYX_ALIGN_LAYOUT, docstring(), 0); insertInset(cur, new InsetFloatList(to_utf8(cmd.argument()))); cur.posRight(); } else { @@ -1449,11 +1460,10 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) lex.setStream(is); ParagraphParameters params; params.read(lex); - // FIXME UNICODE setParagraph(cur, params.spacing(), params.align(), - to_ascii(params.labelWidthString()), + params.labelWidthString(), params.noindent()); cur.message(_("Paragraph layout set")); break; @@ -1478,6 +1488,19 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) } needsUpdate |= (cur.pos() != cur.lastpos()) && cur.selection(); + + // FIXME: The cursor flag is reset two lines below + // so we need to check here if some of the LFUN did touch that. + // for now only LyXText::erase() and LyXText::backspace() do that. + // The plan is to verify all the LFUNs and then to remove this + // singleParUpdate boolean altogether. + if (cur.result().update() & Update::Force) { + singleParUpdate = false; + needsUpdate = true; + } + + // FIXME: the following code should go in favor of fine grained + // update flag treatment. if (singleParUpdate) // Inserting characters does not change par height if (cur.bottom().paragraph().dim().height() @@ -1489,10 +1512,11 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) return; } else needsUpdate = true; + if (!needsUpdate && &oldTopSlice.inset() == &cur.inset() && oldTopSlice.idx() == cur.idx() - && !sel + && !sel // sel is a backup of cur.selection() at the biginning of the function. && !cur.selection()) cur.noUpdate(); else @@ -1550,6 +1574,8 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd, code = InsetBase::INCLUDE_CODE; else if (cmd.argument() == "index") code = InsetBase::INDEX_CODE; + else if (cmd.argument() == "nomenclature") + code = InsetBase::NOMENCL_CODE; else if (cmd.argument() == "label") code = InsetBase::LABEL_CODE; else if (cmd.argument() == "note") @@ -1632,6 +1658,12 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd, case LFUN_INDEX_PRINT: code = InsetBase::INDEX_PRINT_CODE; break; + case LFUN_NOMENCL_INSERT: + code = InsetBase::NOMENCL_CODE; + break; + case LFUN_NOMENCL_PRINT: + code = InsetBase::NOMENCL_PRINT_CODE; + break; case LFUN_TOC_INSERT: code = InsetBase::TOC_CODE; break;