* ====================================================== */
#include <config.h>
+
+#ifdef HAVE_SSTREAM
+#include <sstream>
+using std::istringstream;
+#else
+#include <strstream>
+#endif
+
#include <time.h>
#include <locale.h>
#include "insets/insetinclude.h"
#include "insets/insetbib.h"
#include "insets/insettext.h"
-//#include "insets/insetnumber.h"
#include "insets/insetert.h"
#include "insets/insetgraphics.h"
#include "insets/insetfoot.h"
+#include "insets/insettabular.h"
#include "mathed/formulamacro.h"
#include "toolbar.h"
#include "spellchecker.h" // RVDK_PATCH_5
#include "layout.h"
#include "WorkArea.h"
#include "lyxfr1.h"
+#include "menus.h"
+#include "bufferview_funcs.h"
using std::pair;
using std::endl;
// (alkis)
extern tex_accent_struct get_accent(kb_action action);
-extern void AutoSave();
+extern void AutoSave(BufferView *);
extern void SetUpdateTimer(float timer = 0.3);
extern void FreeUpdateTimer();
extern bool PreviewDVI(Buffer *);
if (selecting || owner->view()->text->mark_set) {
owner->view()->text->SetSelection();
owner->view()->toggleToggle();
- owner->view()->update(0);
- } else {
- owner->view()->update(-2); // this IS necessary
+ //owner->view()->update(0);
+ //} else {
+ //owner->view()->update(-2); // this IS necessary
// (Matthias)
}
-
+ owner->view()->update(0);
owner->view()->showCursor();
/* ---> Everytime the cursor is moved, show the current font state. */
}
// this function should be used always [asierra060396]
- if (owner->view()->available() &&
- owner->view()->the_locking_inset &&
- keysym_return == XK_Escape) {
- owner->view()->unlockInset(owner->view()->the_locking_inset);
- owner->view()->text->CursorRight();
- moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ UpdatableInset * tli = owner->view()->the_locking_inset;
+ if (owner->view()->available() && tli && (keysym_return==XK_Escape)) {
+ if (tli == tli->GetLockingInset()) {
+ owner->view()->unlockInset(tli);
+ owner->view()->text->CursorRight();
+ moveCursorUpdate(false);
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+ } else {
+ tli->UnlockInsetInInset(owner->view(),
+ tli->GetLockingInset());
+ }
return 0;
}
// we have not done anything wrong yet.
errorstat = false;
- dispatch_buffer.clear();
+ dispatch_buffer.erase();
// if action is a pseudo-action, we need the real action
if (lyxaction.isPseudoAction(ac)) {
if (getStatus(action) & Disabled)
goto exit_with_message;
- commandshortcut.clear();
+ commandshortcut.erase();
if (lyxrc.display_shortcuts && show_sc) {
if (action != LFUN_SELFINSERT) {
// the math inset [asierra060396]
if (owner->view()->available() &&
owner->view()->the_locking_inset) {
+ UpdatableInset::RESULT result;
if (action > 1
|| (action == LFUN_UNKNOWN_ACTION
&& keyseq.length >= -1)) {
if (inset)
inset->Edit(owner->view(),slx,sly,0);
return string();
- } else if (owner->view()->the_locking_inset->
+ } else if (((result=owner->view()->the_locking_inset->
LocalDispatch(owner->view(), action,
- argument) ==
- UpdatableInset::DISPATCHED)
+ argument)) ==
+ UpdatableInset::DISPATCHED) ||
+ (result == UpdatableInset::DISPATCHED_NOUPDATE))
return string();
else {
setMessage(N_("Text mode"));
- LyXDirection direction = owner->view()->text->
- cursor.par->getParDirection();
switch(action) {
case LFUN_UNKNOWN_ACTION:
case LFUN_BREAKPARAGRAPH:
case LFUN_BREAKLINE:
owner->view()->text->CursorRight();
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_RIGHT:
- if (direction == LYX_DIR_LEFT_TO_RIGHT) {
+ if (!owner->view()->text->cursor.par->isRightToLeftPar()) {
owner->view()->text->CursorRight();
moveCursorUpdate(false);
owner->getMiniBuffer()->
- Set(CurrentState());
+ Set(CurrentState(owner->view()));
}
return string();
case LFUN_LEFT:
- if (direction == LYX_DIR_RIGHT_TO_LEFT) {
+ if (owner->view()->text->cursor.par->isRightToLeftPar()) {
owner->view()->text->CursorRight();
moveCursorUpdate(false);
owner->getMiniBuffer()->
- Set(CurrentState());
+ Set(CurrentState(owner->view()));
}
return string();
+ case LFUN_DOWN:
+ owner->view()->text->CursorDown();
+ moveCursorUpdate(false);
+ owner->getMiniBuffer()->
+ Set(CurrentState(owner->view()));
+ return string();
default:
break;
}
MakeDisplayPath(owner->buffer()->fileName()),
"...");
MenuWrite(owner->buffer());
- //owner->getMiniBuffer()->
+ //owner->getMiniBuffer()-> {
// Set(_("Document saved as"),
// MakeDisplayPath(owner->buffer()->fileName()));
//} else {
break;
case LFUN_IMPORT:
- {
- //needs argument as string
- string imtyp = argument;
-
- // latex
- if (imtyp == "latex") {
- doImportLaTeX(false);
- }
- // ascii
- else if (imtyp == "ascii") {
- doImportASCII(false);
- } else if (imtyp == "asciiparagraph") {
- doImportASCII(true);
- // noweb
- } else if (imtyp == "noweb") {
- doImportLaTeX(true);
- } else if (imtyp == "linuxdoc") {
- doImportLinuxDoc();
- } else {
- setErrorMessage(string(N_("Unknown import type: "))
- + imtyp);
- }
+ doImport(argument);
break;
- }
case LFUN_QUIT:
QuitLyX();
}
case LFUN_AUTOSAVE:
- AutoSave();
+ AutoSave(owner->view());
break;
case LFUN_UNDO:
if (owner->view()->removeAutoInsets()) {
owner->view()->redraw();
owner->view()->fitCursor();
- owner->view()->updateScrollbar();
+ //owner->view()->updateScrollbar();
}
break;
break;
case LFUN_FREE:
- Free();
+ Free(owner->view());
+ owner->view()->setState();
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_TEX:
- Tex();
+ Tex(owner->view());
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_MELT:
// Pretend we got the name instead.
Dispatch(int(LFUN_LAYOUT),
- textclasslist.NameOfLayout(owner->view()->
- text->parameters->
- textclass,
+ textclasslist.NameOfLayout(owner->view()
+ ->buffer()->params.textclass,
sel).c_str());
return string();
}
// Derive layout number from given argument (string)
// and current buffer's textclass (number). */
LyXTextClassList::ClassList::size_type tclass =
- owner->view()->text->parameters->textclass;
+ owner->view()->buffer()->params.textclass;
pair <bool, LyXTextClass::size_type> layout =
textclasslist.NumberOfLayout(tclass, argument);
case LFUN_LANGUAGE:
{
- LangCB(argument);
+ Lang(owner->view(), argument);
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
}
break;
case LFUN_EMPH:
- Emph();
+ Emph(owner->view());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_BOLD:
- Bold();
+ Bold(owner->view());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_NOUN:
- Noun();
+ Noun(owner->view());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_CODE:
- Code();
+ Code(owner->view());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_SANS:
- Sans();
+ Sans(owner->view());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_ROMAN:
- Roman();
+ Roman(owner->view());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_DEFAULT:
- StyleReset();
+ StyleReset(owner->view());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_UNDERLINE:
- Underline();
+ Underline(owner->view());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_FONT_SIZE:
- FontSize(argument);
+ FontSize(owner->view(), argument);
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_FONT_STATE:
- setMessage(CurrentState());
+ setMessage(CurrentState(owner->view()));
break;
case LFUN_UPCASE_WORD:
case LFUN_RIGHT:
{
LyXText * tmptext = owner->view()->text;
- LyXDirection direction =
- tmptext->cursor.par->getParDirection();
+ bool is_rtl = tmptext->cursor.par->isRightToLeftPar();
if(!tmptext->mark_set)
owner->view()->beforeChange();
owner->view()->update(-2);
- if (direction == LYX_DIR_RIGHT_TO_LEFT)
+ if (is_rtl)
tmptext->CursorLeft();
if (tmptext->cursor.pos < tmptext->cursor.par->Last()
&& tmptext->cursor.par->GetChar(tmptext->cursor.pos)
tmpinset->Edit(owner->view(), 0, 0, 0);
break;
}
- if (direction == LYX_DIR_LEFT_TO_RIGHT)
+ if (!is_rtl)
tmptext->CursorRight();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
}
break;
// This is soooo ugly. Isn`t it possible to make
// it simpler? (Lgb)
LyXText * txt = owner->view()->text;
- LyXDirection direction = txt->cursor.par->getParDirection();
+ bool is_rtl = txt->cursor.par->isRightToLeftPar();
if(!txt->mark_set) owner->view()->beforeChange();
owner->view()->update(-2);
- if (direction == LYX_DIR_LEFT_TO_RIGHT)
+ if (!is_rtl)
txt->CursorLeft();
if (txt->cursor.pos < txt->cursor.par->Last()
&& txt->cursor.par->GetChar(txt->cursor.pos)
0, 0);
break;
}
- if (direction == LYX_DIR_RIGHT_TO_LEFT)
+ if (is_rtl)
txt->CursorRight();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
}
break;
owner->view()->text->CursorUp();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_DOWN:
owner->view()->text->CursorDown();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_UP_PARAGRAPH:
owner->view()->text->CursorUpParagraph();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_DOWN_PARAGRAPH:
owner->view()->text->CursorDownParagraph();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_PRIOR:
owner->view()->cursorPrevious();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_NEXT:
owner->view()->cursorNext();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_HOME:
owner->view()->text->CursorHome();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_END:
owner->view()->text->CursorEnd();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_TAB:
owner->view()->text->CursorTab();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_WORDRIGHT:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorRightOneWord();
- else
+ if (owner->view()->text->cursor.par->isRightToLeftPar())
owner->view()->text->CursorLeftOneWord();
+ else
+ owner->view()->text->CursorRightOneWord();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_WORDLEFT:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorLeftOneWord();
- else
+ if (owner->view()->text->cursor.par->isRightToLeftPar())
owner->view()->text->CursorRightOneWord();
+ else
+ owner->view()->text->CursorLeftOneWord();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_BEGINNINGBUF:
owner->view()->text->CursorTop();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_ENDBUF:
owner->view()->text->CursorBottom();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
/* cursor selection ---------------------------- */
case LFUN_RIGHTSEL:
owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorRight();
- else
+ if (owner->view()->text->cursor.par->isRightToLeftPar())
owner->view()->text->CursorLeft();
+ else
+ owner->view()->text->CursorRight();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_LEFTSEL:
owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorLeft();
- else
+ if (owner->view()->text->cursor.par->isRightToLeftPar())
owner->view()->text->CursorRight();
+ else
+ owner->view()->text->CursorLeft();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_UPSEL:
owner->view()->text->CursorUp();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_DOWNSEL:
owner->view()->text->CursorDown();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_UP_PARAGRAPHSEL:
owner->view()->text->CursorUpParagraph();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_DOWN_PARAGRAPHSEL:
owner->view()->text->CursorDownParagraph();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_PRIORSEL:
owner->view()->cursorPrevious();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_NEXTSEL:
owner->view()->cursorNext();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_HOMESEL:
owner->view()->text->CursorHome();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_ENDSEL:
owner->view()->text->CursorEnd();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_WORDRIGHTSEL:
owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorRightOneWord();
- else
+ if (owner->view()->text->cursor.par->isRightToLeftPar())
owner->view()->text->CursorLeftOneWord();
+ else
+ owner->view()->text->CursorRightOneWord();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_WORDLEFTSEL:
owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorLeftOneWord();
- else
+ if (owner->view()->text->cursor.par->isRightToLeftPar())
owner->view()->text->CursorRightOneWord();
+ else
+ owner->view()->text->CursorLeftOneWord();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_BEGINNINGBUFSEL:
owner->view()->text->CursorTop();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
case LFUN_ENDBUFSEL:
owner->view()->text->CursorBottom();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
// --- text changing commands ------------------------
case LFUN_BREAKLINE:
-#if 1
owner->view()->beforeChange();
owner->view()->text->InsertChar(LyXParagraph::META_NEWLINE);
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
SetUpdateTimer(0.01);
moveCursorUpdate(false);
-#else
- owner->view()->newline();
-#endif
break;
case LFUN_PROTECTEDSPACE:
-#if 1
{
LyXLayout const & style =
textclasslist.Style(owner->view()->buffer()->params.textclass,
}
moveCursorUpdate(false);
}
-#else
- owner->view()->beforeChange();
- owner->view()->text->
- InsertChar(LyXParagraph::META_PROTECTED_SEPARATOR);
- owner->view()->smallUpdate(1);
- SetUpdateTimer();
- moveCursorUpdate(false);
-#endif
- break;
+ break;
case LFUN_SETMARK:
if(owner->view()->text->mark_set) {
owner->view()->text->Delete();
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
// It is possible to make it a lot faster still
// just comment out the lone below...
owner->view()->showCursor();
}
SetUpdateTimer();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
owner->view()->setState();
break;
owner->view()->text->Delete();
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
}
} else {
owner->view()->text->Delete();
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
}
} else {
owner->view()->cut();
owner->view()->update( 1 );
SetUpdateTimer();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
/* -------> Delete word backward. */
owner->view()->update( 1 );
SetUpdateTimer();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
/* -------> Kill to end of line. */
owner->view()->text->Backspace();
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
// It is possible to make it a lot faster still
// just comment out the lone below...
owner->view()->showCursor();
owner->view()->cut();
}
SetUpdateTimer();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
owner->view()->setState();
}
break;
owner->view()->text->Backspace();
owner->view()->text->sel_cursor
= cursor;
- owner->view()->smallUpdate (1);
+ owner->view()->update(1);
}
} else
owner->view()->cut();
{
owner->view()->beforeChange();
owner->view()->text->BreakParagraph(0);
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
SetUpdateTimer(0.01);
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
}
{
owner->view()->beforeChange();
owner->view()->text->BreakParagraph(1);
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
SetUpdateTimer(0.01);
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
break;
}
}
else {
owner->view()->text->BreakParagraph(0);
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
}
SetUpdateTimer(0.01);
owner->view()->text->sel_cursor = cursor;
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->getMiniBuffer()->Set(CurrentState(owner->view()));
+ }
+ 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()->update(-1);
+ }
}
break;
case LFUN_QUOTE:
owner->view()->beforeChange();
owner->view()->text->InsertChar('\"'); // This " matches the single quote in the code
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
SetUpdateTimer();
moveCursorUpdate(false);
break;
new_inset->Edit(owner->view(), 0, 0, 0);
}
break;
+
case LFUN_INSET_TEXT:
{
InsetText * new_inset = new InsetText(owner->buffer());
new_inset->Edit(owner->view(), 0, 0, 0);
}
break;
-#if 0
- case LFUN_INSET_NUMBER:
+ case LFUN_INSET_ERT:
{
- InsetNumber * new_inset = new InsetNumber(owner->buffer());
+ InsetERT * new_inset = new InsetERT(owner->buffer());
owner->view()->insertInset(new_inset);
new_inset->Edit(owner->view(), 0, 0, 0);
}
break;
-#endif
- case LFUN_INSET_ERT:
+
+ case LFUN_INSET_FOOTNOTE:
{
- InsetERT * new_inset = new InsetERT(owner->buffer());
+ InsetFoot * new_inset = new InsetFoot(owner->buffer());
owner->view()->insertInset(new_inset);
new_inset->Edit(owner->view(), 0, 0, 0);
}
break;
- case LFUN_INSET_FOOTNOTE:
+
+ case LFUN_INSET_TABULAR:
{
- InsetFoot * new_inset = new InsetFoot(owner->buffer());
+ int r = 2, c = 2;
+ if (!argument.empty())
+ sscanf(argument.c_str(),"%d%d",&r,&c);
+ InsetTabular * new_inset = new InsetTabular(owner->buffer(),r,c);
owner->view()->insertInset(new_inset);
new_inset->Edit(owner->view(), 0, 0, 0);
}
case LFUN_GETFONT:
{
- LyXFont * font = &(owner->view()->text->current_font);
- if(font->shape() == LyXFont::ITALIC_SHAPE)
+ LyXFont & font = owner->view()->text->current_font;
+ if(font.shape() == LyXFont::ITALIC_SHAPE)
dispatch_buffer = 'E';
- else if(font->shape() == LyXFont::SMALLCAPS_SHAPE)
+ else if(font.shape() == LyXFont::SMALLCAPS_SHAPE)
dispatch_buffer = 'N';
else
dispatch_buffer = '0';
case LFUN_GETLATEX:
{
- LyXFont * font = &(owner->view()->text->current_font);
- if(font->latex() == LyXFont::ON)
+ LyXFont & font = owner->view()->text->current_font;
+ if(font.latex() == LyXFont::ON)
dispatch_buffer = 'L';
else
dispatch_buffer = '0';
case LFUN_CIRCLE:
case LFUN_OGONEK:
{
- char c;
+ char c = 0;
if (keyseq.length == -1 && keyseq.getiso() != 0)
c = keyseq.getiso();
- else
- c = 0;
owner->getIntl()->getTrans()->
deadkey(c, get_accent(action).accent,
keyseq.length = 0;
// copied verbatim from do_accent_char
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
+
SetUpdateTimer();
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
owner->view()->text->InsertChar(argument[i]);
// This needs to be in the loop, or else we
// won't break lines correctly. (Asger)
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
}
SetUpdateTimer();
owner->view()->text->sel_cursor =
datetmp_len = (int) strftime(datetmp, 32, arg.c_str(), now_tm);
for (int i = 0; i < datetmp_len; i++) {
owner->view()->text->InsertChar(datetmp[i]);
- owner->view()->smallUpdate(1);
+ owner->view()->update(1);
}
SetUpdateTimer();
owner->view()->text->sel_cursor = owner->view()->text->cursor;
}
owner->view()->beforeChange();
-
-#if 0
- if (isdigit(argument[0]) &&
- (lyxrc.number_inset == "true" ||
- (lyxrc.number_inset == "rtl" &&
- owner->view()->text->real_current_font.isVisibleRightToLeft()
- ))) {
- UpdatableInset * tmpinset = new InsetNumber(owner->buffer());
- owner->view()->open_new_inset(tmpinset);
- tmpinset->LocalDispatch(owner->view(), action,
- argument);
- return string();
- }
-#endif
for (string::size_type i = 0;
i < argument.length(); ++i) {
} else
owner->getIntl()->getTrans()->TranslateAndInsert(argument[i], owner->view()->text);
}
-
- owner->view()->smallUpdate(1);
+
+ owner->view()->update(1);
SetUpdateTimer();
owner->view()->text->sel_cursor =
initpath = trypath;
}
- ProhibitInput();
+ 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();
+ AllowInput(owner->view());
if (fname.empty()) {
owner->getMiniBuffer()->Set(_("Canceled."));
// The template stuff
string templname;
if (fromTemplate) {
- ProhibitInput();
+ ProhibitInput(owner->view());
fname = fileDlg.Select(_("Choose template"),
lyxrc.template_path,
"*.lyx");
templname = fname;
- AllowInput();
+ AllowInput(owner->view());
}
// find a free buffer
}
// launches dialog
- ProhibitInput();
+ ProhibitInput(owner->view());
fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
string filename = fileDlg.Select(_("Select Document to Open"),
initpath, "*.lyx");
- AllowInput();
+ AllowInput(owner->view());
// check selected filename
if (filename.empty()) {
}
}
+// returns filename if file must be imported,
+// empty string if either file not found or already loaded
+// checks for running without gui are missing.
-void LyXFunc::doImportASCII(bool linorpar)
+void LyXFunc::doImportHelper(
+ string const & file, // filename (possibly empty)
+ string const & text, // info when asking for filename
+ string const & pattern, // filetype
+ bool func(BufferView *, string const &) // the real import function
+)
{
- string initpath = lyxrc.document_path;
- LyXFileDlg fileDlg;
-
- if (owner->view()->available()) {
- string trypath = owner->buffer()->filepath;
- // If directory is writeable, use this as default.
- if (IsDirWriteable(trypath) == 1)
- initpath = trypath;
- }
+ string filename = file;
- // launches dialog
- ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
- fileDlg.SetButton(1, _("Examples"),
- AddPath(system_lyxdir, "examples"));
- string filename = fileDlg.Select(_("Select ASCII file to Import"),
- initpath, "*.txt");
- AllowInput();
+ if (filename.empty()) { // need user interaction
+ string initpath = lyxrc.document_path;
+ LyXFileDlg fileDlg;
+
+ if (owner->view()->available()) {
+ string trypath = owner->buffer()->filepath;
+ // If directory is writeable, use this as default.
+ if (IsDirWriteable(trypath) == 1)
+ initpath = trypath;
+ }
+
+ // launches dialog
+ ProhibitInput(owner->view());
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
+ fileDlg.SetButton(1, _("Examples"),
+ AddPath(system_lyxdir, "examples"));
+ filename = fileDlg.Select(text, initpath, pattern);
+ AllowInput(owner->view());
- // check selected filename
- if (filename.empty()) {
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
+ // check selected filename
+ if (filename.empty())
+ owner->getMiniBuffer()->Set(_("Canceled."));
}
+ // still no filename? abort
+ if (filename.empty())
+ return;
+
// get absolute path of file
filename = MakeAbsPath(filename);
- string s = ChangeExtension(filename, ".lyx", false);
+ string lyxfile = ChangeExtension(filename, ".lyx", false);
// Check if the document already is open
- if (bufferlist.exists(s)) {
+ if (bufferlist.exists(lyxfile)) {
switch(AskConfirmation(_("Document is already open:"),
- MakeDisplayPath(s, 50),
+ MakeDisplayPath(lyxfile, 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)))
+ if (!bufferlist.close(bufferlist.getBuffer(lyxfile)))
// If close is canceled, we cancel here too.
return;
break;
case 2: // No: switch to the open document
- owner->view()->buffer(bufferlist.getBuffer(s));
+ owner->view()->buffer(bufferlist.getBuffer(lyxfile));
return;
case 3: // Cancel: Do nothing
owner->getMiniBuffer()->Set(_("Canceled."));
}
// Check if a LyX document by the same root exists in filesystem
- FileInfo f(s, true);
+ FileInfo f(lyxfile, true);
if (f.exist() && !AskQuestion(_("A document by the name"),
- MakeDisplayPath(s),
+ MakeDisplayPath(lyxfile),
_("already exists. Overwrite?"))) {
owner->getMiniBuffer()->Set(_("Canceled."));
return;
}
+ // filename should be valid now
- owner->view()->buffer(bufferlist.newFile(s, string()));
- owner->getMiniBuffer()->Set(_("Importing ASCII file"),
- MakeDisplayPath(filename), "...");
- // Insert ASCII file
- InsertAsciiFile(owner->view(), filename, linorpar);
- owner->getMiniBuffer()->Set(_("ASCII file "),
- MakeDisplayPath(filename),
- _("imported."));
-}
-
-
-void LyXFunc::doImportLaTeX(bool isnoweb)
-{
- string initpath = lyxrc.document_path;
- LyXFileDlg fileDlg;
-
- if (owner->view()->available()) {
- string trypath = owner->buffer()->filepath;
- // If directory is writeable, use this as default.
- if (IsDirWriteable(trypath) == 1)
- initpath = trypath;
- }
+ // notify user of import ahead
+ string displaypath = MakeDisplayPath(filename);
+ owner->view()->buffer(bufferlist.newFile(lyxfile, string()));
+ owner->getMiniBuffer()->Set(_("Importing"), displaypath, "...");
- // launches dialog
- ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
- fileDlg.SetButton(1, _("Examples"),
- AddPath(system_lyxdir, "examples"));
- string filename;
- if (isnoweb) {
- filename = fileDlg.Select(_("Select Noweb file to Import"),
- initpath, "*.nw");
- } else {
- filename = fileDlg.Select(_("Select LaTeX file to Import"),
- initpath, "*.tex");
- }
-
- AllowInput();
-
- // check selected filename
- if (filename.empty()) {
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
- }
+ // call real importer
+ bool result = func(owner->view(), filename);
- // get absolute path of file
- filename = MakeAbsPath(filename);
-
- // Check if the document already is open
- string LyXfilename = ChangeExtension(filename, ".lyx", false);
- if (bufferlist.exists(LyXfilename)){
- switch(AskConfirmation(_("Document is already open:"),
- MakeDisplayPath(LyXfilename, 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(LyXfilename)))
- // If close is canceled, we cancel here too.
- return;
- break;
- case 2: // No: switch to the open document
- owner->view()->buffer(
- bufferlist.getBuffer(LyXfilename));
- return;
- case 3: // Cancel: Do nothing
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
- }
- }
-
- // Check if a LyX document by the same root exists in filesystem
- FileInfo f(LyXfilename, true);
- if (f.exist() && !AskQuestion(_("A document by the name"),
- MakeDisplayPath(LyXfilename),
- _("already exists. Overwrite?"))) {
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
- }
-
- // loads document
- Buffer * openbuf;
- if (!isnoweb) {
- owner->getMiniBuffer()->Set(_("Importing LaTeX file"),
- MakeDisplayPath(filename), "...");
- ImportLaTeX myImport(filename);
- openbuf = myImport.run();
- } else {
- owner->getMiniBuffer()->Set(_("Importing Noweb file"),
- MakeDisplayPath(filename), "...");
- ImportNoweb myImport(filename);
- openbuf = myImport.run();
- }
- if (openbuf) {
- owner->view()->buffer(openbuf);
- owner->getMiniBuffer()->Set(isnoweb ?
- _("Noweb file ") : _("LateX file "),
- MakeDisplayPath(filename),
- _("imported."));
- } else {
- owner->getMiniBuffer()->Set(isnoweb ?
- _("Could not import Noweb file") :
- _("Could not import LaTeX file"),
- MakeDisplayPath(filename));
- }
+ // we are done
+ if (result)
+ owner->getMiniBuffer()->Set(displaypath, _("imported."));
+ else
+ owner->getMiniBuffer()->Set(displaypath, _(": import failed."));
}
-
-void LyXFunc::doImportLinuxDoc()
+static
+bool doImportASCIIasLines(BufferView * view, string const & filename)
{
- string initpath = lyxrc.document_path;
- LyXFileDlg fileDlg;
-
- if (owner->view()->available()) {
- string trypath = owner->buffer()->filepath;
- // If directory is writeable, use this as default.
- if (IsDirWriteable(trypath) == 1)
- initpath = trypath;
- }
-
- // launches dialog
- ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
- fileDlg.SetButton(1, _("Examples"),
- AddPath(system_lyxdir, "examples"));
-
- string filename = fileDlg.Select(_("Select LinuxDoc file to Import"),
- initpath, "*.sgml");
-
- AllowInput();
-
- // check selected filename
- if (filename.empty()) {
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
- }
-
- // get absolute path of file
- filename = MakeAbsPath(filename);
+ InsertAsciiFile(view, filename, false);
+ return true;
+}
- // Check if the document already is open
- string LyXfilename = ChangeExtension(filename, ".lyx", false);
- if (bufferlist.exists(LyXfilename)){
- switch(AskConfirmation(_("Document is already open:"),
- MakeDisplayPath(LyXfilename, 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(LyXfilename)))
- // If close is canceled, we cancel here too.
- return;
- break;
- case 2: // No: switch to the open document
- owner->view()->buffer(
- bufferlist.getBuffer(LyXfilename));
- return;
- case 3: // Cancel: Do nothing
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
- }
- }
+static
+bool doImportASCIIasParagraphs(BufferView * view, string const & filename)
+{
+ InsertAsciiFile(view, filename, true);
+ return true;
+}
- // Check if a LyX document by the same root exists in filesystem
- FileInfo f(LyXfilename, true);
- if (f.exist() && !AskQuestion(_("A document by the name"),
- MakeDisplayPath(LyXfilename),
- _("already exists. Overwrite?"))) {
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
- }
+static
+bool doImportLaTeX(BufferView *, string const & filename)
+{
+ ImportLaTeX myImport(filename);
+ Buffer * openbuf = myImport.run();
+ return openbuf != NULL;
+}
- // loads document
- owner->getMiniBuffer()->Set(_("Importing LinuxDoc file"),
- MakeDisplayPath(filename), "...");
+static
+bool doImportNoweb(BufferView *, string const & filename)
+{
+ ImportNoweb myImport(filename);
+ Buffer * openbuf = myImport.run();
+ return openbuf != NULL;
+}
+static
+bool doImportLinuxDoc(BufferView *, string const & filename)
+{
// run sgml2lyx
string tmp = lyxrc.linuxdoc_to_lyx_command + filename;
- Systemcalls one;
+ Systemcalls one;
Buffer * buf = 0;
int result = one.startscript(Systemcalls::System, tmp);
string filename = ChangeExtension(filename, ".lyx", false);
// File was generated without problems. Load it.
buf = bufferlist.loadLyXFile(filename);
- owner->view()->buffer(buf);
- owner->getMiniBuffer()->Set(_("LinuxDoc file "),
- MakeDisplayPath(filename),
- _("imported."));
- } else {
- owner->getMiniBuffer()->Set(_("Could not import LinuxDoc file"),
- MakeDisplayPath(filename));
}
+
+ return result == 0;
}
}
// launches dialog
- ProhibitInput();
+ ProhibitInput(owner->view());
fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
filename = fileDlg.Select(_("Select Document to Insert"),
initpath, "*.lyx");
- AllowInput();
+ AllowInput(owner->view());
// check selected filename
if (filename.empty()) {
}
}
+void LyXFunc::doImport(string const & argument)
+{
+ string type;
+ string filename = split(argument, type, ' ');
+ lyxerr.debug() << "LyXFunc::doImport: " << type
+ << " file: " << filename << endl;
+
+ if (type == "latex")
+ doImportHelper(filename,
+ _("Select LaTeX file to import"), "*.tex",
+ doImportLaTeX);
+ else if (type == "ascii")
+ doImportHelper(filename,
+ _("Select ASCII file to import"), "*.txt",
+ doImportASCIIasLines);
+ else if (type == "asciiparagraph")
+ doImportHelper(filename,
+ _("Select ASCII file to import"), "*.txt",
+ doImportASCIIasParagraphs);
+ else if (type == "noweb")
+ doImportHelper(filename,
+ _("Select NoWeb file to import"), "*.nw",
+ doImportNoweb);
+ else if (type == "linuxdoc")
+ doImportHelper(filename,
+ _("Select LinuxDoc file to import"), "*.doc",
+ doImportLinuxDoc);
+ else
+ setErrorMessage(string(N_("Unknown import type: ")) + type);
+}
void LyXFunc::reloadBuffer()
{