+ case LFUN_BREAKPARAGRAPH:
+ {
+ owner->view()->beforeChange();
+ owner->view()->text->BreakParagraph(owner->view(), 0);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
+ owner->view()->setState();
+ owner->showState();
+ break;
+ }
+
+ case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
+ {
+ owner->view()->beforeChange();
+ owner->view()->text->BreakParagraph(owner->view(), 1);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
+ owner->view()->setState();
+ owner->showState();
+ break;
+ }
+
+ case LFUN_BREAKPARAGRAPH_SKIP:
+ {
+ // When at the beginning of a paragraph, remove
+ // indentation and add a "defskip" at the top.
+ // Otherwise, do the same as LFUN_BREAKPARAGRAPH.
+
+ LyXCursor cursor = owner->view()->text->cursor;
+
+ owner->view()->beforeChange();
+ if (cursor.pos() == 0) {
+ if (cursor.par()->added_space_top == VSpace(VSpace::NONE)) {
+ owner->view()->text->SetParagraph
+ (owner->view(),
+ cursor.par()->line_top,
+ cursor.par()->line_bottom,
+ cursor.par()->pagebreak_top,
+ cursor.par()->pagebreak_bottom,
+ VSpace(VSpace::DEFSKIP), cursor.par()->added_space_bottom,
+ cursor.par()->align,
+ cursor.par()->labelwidthstring, 1);
+ //owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ }
+ }
+ else {
+ owner->view()->text->BreakParagraph(owner->view(), 0);
+ //owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ }
+
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ owner->view()->text->sel_cursor = cursor;
+ owner->view()->setState();
+ owner->showState();
+ }
+ break;
+
+ case LFUN_PARAGRAPH_SPACING:
+ {
+ LyXParagraph * par = owner->view()->text->cursor.par();
+ Spacing::Space cur_spacing = par->spacing.getSpace();
+ float cur_value = 1.0;
+ if (cur_spacing == Spacing::Other) {
+ cur_value = par->spacing.getValue();
+ }
+
+#ifdef HAVE_SSTREAM
+ istringstream istr(argument);
+#else
+ istrstream istr(argument.c_str());
+#endif
+ string tmp;
+ istr >> tmp;
+ Spacing::Space new_spacing = cur_spacing;
+ float new_value = cur_value;
+ if (tmp.empty()) {
+ lyxerr << "Missing argument to `paragraph-spacing'"
+ << endl;
+ } else if (tmp == "single") {
+ new_spacing = Spacing::Single;
+ } else if (tmp == "onehalf") {
+ new_spacing = Spacing::Onehalf;
+ } else if (tmp == "double") {
+ new_spacing = Spacing::Double;
+ } else if (tmp == "other") {
+ new_spacing = Spacing::Other;
+ float tmpval = 0.0;
+ istr >> tmpval;
+ lyxerr << "new_value = " << tmpval << endl;
+ if (tmpval != 0.0)
+ new_value = tmpval;
+ } else if (tmp == "default") {
+ new_spacing = Spacing::Default;
+ } else {
+ lyxerr << _("Unknown spacing argument: ")
+ << argument << endl;
+ }
+ if (cur_spacing != new_spacing || cur_value != new_value) {
+ par->spacing.set(new_spacing, new_value);
+ owner->view()->text->RedoParagraph(owner->view());
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ }
+ }
+ break;
+
+ case LFUN_QUOTE:
+ owner->view()->beforeChange();
+ owner->view()->text->InsertChar(owner->view(), '\"'); // This " matches the single quote in the code
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ moveCursorUpdate(false);
+ break;
+
+ case LFUN_HTMLURL:
+ case LFUN_URL:
+ {
+ InsetCommandParams p;
+ if (action == LFUN_HTMLURL)
+ p.setCmdName("htmlurl");
+ else
+ 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
+ owner->view()->updateInset( inset, true );
+ }
+ break;
+
+ case LFUN_INSET_TEXT:
+ {
+ InsetText * new_inset = new InsetText;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_ERT:
+ {
+ InsetERT * new_inset = new InsetERT;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_EXTERNAL:
+ {
+ InsetExternal * new_inset = new InsetExternal;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_FOOTNOTE:
+ {
+ InsetFoot * new_inset = new InsetFoot;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_MARGINAL:
+ {
+ InsetMarginal * new_inset = new InsetMarginal;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_MINIPAGE:
+ {
+ InsetMinipage * new_inset = new InsetMinipage;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_FLOAT:
+ {
+ // check if the float type exist
+ if (floatList.typeExist(argument)) {
+ InsetFloat * new_inset = new InsetFloat(argument);
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ } else {
+ lyxerr << "Non-existant float type: "
+ << argument << endl;
+ }
+
+ }
+ break;
+
+ case LFUN_INSET_LIST:
+ {
+ InsetList * new_inset = new InsetList;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_THEOREM: