* LyX, The Document Processor
*
* Copyright 1995 Matthias Ettrich
- * Copyright 1995-1999 The LyX Team.
+ * Copyright 1995-2000 The LyX Team.
*
* ====================================================== */
#include <config.h>
+#include <time.h>
+#include <locale.h>
#include <cstdlib>
#include <cctype>
#include "lyx_main.h"
#include "lyx_cb.h"
#include "LyXAction.h"
-#if 0
-#include "insets/insetlatex.h"
-#endif
#include "insets/inseturl.h"
#include "insets/insetlatexaccent.h"
#include "insets/insettoc.h"
#include "insets/insetindex.h"
#include "insets/insetinclude.h"
#include "insets/insetbib.h"
+#include "insets/insettext.h"
+#include "insets/insetert.h"
+#include "insets/insetgraphics.h"
+#include "insets/insetfoot.h"
#include "mathed/formulamacro.h"
#include "toolbar.h"
#include "spellchecker.h" // RVDK_PATCH_5
#include "lyx_gui_misc.h"
#include "support/filetools.h"
#include "support/FileInfo.h"
-#include "support/LAssert.h"
#include "support/syscall.h"
#include "support/lstrings.h"
#include "support/path.h"
-#include "lyxscreen.h"
#include "debug.h"
#include "lyxrc.h"
#include "lyxtext.h"
#include "ImportLaTeX.h"
#include "ImportNoweb.h"
#include "layout.h"
+#include "WorkArea.h"
+#include "lyxfr1.h"
extern bool cursor_follows_scrollbar;
-extern void InsertAsciiFile(string const &, bool);
-extern void math_insert_symbol(char const*);
+extern void InsertAsciiFile(BufferView *, string const &, bool);
+extern void math_insert_symbol(char const *);
extern Bool math_insert_greek(char const); // why "Bool"?
extern BufferList bufferlist;
extern LyXServer * lyxserver;
extern kb_keymap * toplevel_keymap;
-extern void BeforeChange();
-extern void MenuWrite(Buffer*);
-extern void MenuWriteAs(Buffer*);
-extern int MenuRunLaTeX(Buffer*);
-extern int MenuBuildProg(Buffer*);
-extern int MenuRunChktex(Buffer*);
-extern bool MenuRunDvips(Buffer *, bool);
-extern void MenuPrint(Buffer*);
+extern void MenuWrite(Buffer *);
+extern void MenuWriteAs(Buffer *);
+extern int MenuRunLaTeX(Buffer *);
+extern int MenuBuildProg(Buffer *);
+extern int MenuRunChktex(Buffer *);
+extern bool CreatePostscript(Buffer *, bool);
+extern void MenuPrint(Buffer *);
extern void MenuSendto();
extern void QuitLyX();
extern void MenuFax(Buffer *);
-extern void MenuMakeLaTeX(Buffer *);
-extern void MenuMakeLinuxDoc(Buffer *);
-extern void MenuMakeDocBook(Buffer *);
-extern void MenuMakeAscii(Buffer *);
+extern void MenuExport(Buffer *, string const &);
extern void MenuPasteSelection(char at);
extern LyXAction lyxaction;
// (alkis)
extern tex_accent_struct get_accent(kb_action action);
extern void AutoSave();
-extern void MenuSearch();
-extern void CopyCB();
-extern void CopyEnvironmentCB();
-extern void PasteEnvironmentCB();
-extern void GotoNote();
-extern void NoteCB();
-extern void OpenStuff();
-extern void HyphenationPoint();
-extern void Ldots();
-extern void EndOfSentenceDot();
-extern void MenuSeparator();
-extern void HFill();
-extern void MenuUndo();
-extern void MenuRedo();
-extern void SmallUpdate(signed char);
-extern void SetUpdateTimer(float timer= 0.3);
+extern void SetUpdateTimer(float timer = 0.3);
extern void FreeUpdateTimer();
-extern bool MenuPreview(Buffer*);
-extern bool MenuPreviewPS(Buffer*);
+extern bool PreviewDVI(Buffer *);
+extern bool PreviewPostscript(Buffer *);
extern void MenuInsertLabel(char const *);
extern void MenuInsertRef();
extern void MenuLayoutCharacter();
extern Buffer * NewLyxFile(string const &);
extern void LoadLyXFile(string const &);
-extern void Reconfigure();
+extern void Reconfigure(BufferView *);
-extern int current_layout;
+extern LyXTextClass::size_type current_layout;
extern int getISOCodeFromLaTeX(char *);
-extern int UnlockInset(UpdatableInset*);
-
extern void ShowLatexLog();
-extern void UpdateInset(Inset* inset, bool mark_dirty = true);
-
/* === globals =========================================================== */
bool LyXFunc::show_sc = true;
LyXFunc::LyXFunc(LyXView * o)
- :owner(o)
+ : owner(o)
{
meta_fake_bit = 0;
lyx_dead_action = LFUN_NOACTION;
inline
void LyXFunc::moveCursorUpdate(bool selecting)
{
- if (selecting || owner->buffer()->text->mark_set) {
- owner->buffer()->text->SetSelection();
- owner->view()->getScreen()->ToggleToggle();
- owner->buffer()->update(0);
+ if (selecting || owner->view()->text->mark_set) {
+ owner->view()->text->SetSelection();
+ owner->view()->toggleToggle();
+ owner->view()->update(0);
} else {
- owner->buffer()->update(-2); // this IS necessary
+ owner->view()->update(-2); // this IS necessary
// (Matthias)
}
- owner->view()->getScreen()->ShowCursor();
+
+ owner->view()->showCursor();
/* ---> Everytime the cursor is moved, show the current font state. */
// should this too me moved out of this func?
//owner->getMiniBuffer()->Set(CurrentState());
+ owner->view()->setState();
}
int LyXFunc::processKeyEvent(XEvent * ev)
{
char s_r[10];
- s_r[9] = '\0';
- int num_bytes;
- int action;
string argument;
XKeyEvent * keyevent = &ev->xkey;
KeySym keysym_return;
- num_bytes = LyXLookupString(ev, s_r, 10, &keysym_return);
+ int num_bytes = LyXLookupString(ev, s_r, 10, &keysym_return);
+ s_r[num_bytes] = '\0';
if (lyxerr.debugging(Debug::KEY)) {
+ char * tmp = XKeysymToString(keysym_return);
+ string stm = (tmp ? tmp : "");
lyxerr << "KeySym is "
- << XKeysymToString(keysym_return)
+ << stm
<< "["
<< keysym_return << "]"
<< " and num_bytes is "
// this function should be used always [asierra060396]
if (owner->view()->available() &&
- owner->buffer()->the_locking_inset &&
+ owner->view()->the_locking_inset &&
keysym_return == XK_Escape) {
- UnlockInset(owner->buffer()->the_locking_inset);
- owner->buffer()->text->CursorRight();
+ owner->view()->unlockInset(owner->view()->the_locking_inset);
+ owner->view()->text->CursorRight();
+ moveCursorUpdate(false);
+ owner->getMiniBuffer()->Set(CurrentState());
return 0;
}
// cancel and meta-fake keys. RVDK_PATCH_5
cancel_meta_seq.reset();
- action = cancel_meta_seq.addkey(keysym_return, keyevent->state
- &(ShiftMask|ControlMask
- |Mod1Mask));
+ int action = cancel_meta_seq.addkey(keysym_return, keyevent->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.
if (action == 0) action = LFUN_PREFIX;
if (lyxerr.debugging(Debug::KEY)) {
- char buf[100];
- keyseq.print(buf, 100);
+ string buf;
+ keyseq.print(buf);
lyxerr << "Key ["
<< action << "]["
<< buf << "]["
// why not return already here if action == -1 and
// num_bytes == 0? (Lgb)
- if(keyseq.length>1 || keyseq.length<-1){
- char buf[100];
- keyseq.print(buf, 100);
+ 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...
- char buf[100];
+ if (keyseq.length < -1) { // unknown key sequence...
+ string buf;
LyXBell();
- keyseq.print(buf, 100);
+ keyseq.print(buf);
owner->getMiniBuffer()->Set(_("Unknown sequence:"), buf);
return 0;
}
LyXAction::ReadOnly)) {
// no
setErrorMessage(N_("Document is read-only"));
- flag = func_status(flag | LyXFunc::Disabled);
+ flag |= LyXFunc::Disabled;
}
} else {
// no
setErrorMessage(N_("Command not allowed with"
"out any document open"));
- flag = func_status(flag | LyXFunc::Disabled);
+ flag |= LyXFunc::Disabled;
}
}
if (flag & LyXFunc::Disabled)
return flag;
- static bool noLaTeX = lyxrc->latex_command == "none";
+ // 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) {
- case LFUN_PREVIEW:
- disable = noLaTeX || lyxrc->view_dvi_command == "none";
- break;
- case LFUN_PREVIEWPS:
- disable = noLaTeX || lyxrc->view_ps_command == "none";
- break;
- case LFUN_RUNLATEX:
- case LFUN_RUNDVIPS:
- disable = noLaTeX;
- break;
- case LFUN_MENUPRINT:
- disable = noLaTeX || lyxrc->print_command == "none";
- break;
- case LFUN_FAX:
- disable = noLaTeX || lyxrc->fax_command == "none";
- break;
- case LFUN_IMPORT:
- if (argument == "latex")
- disable = lyxrc->relyx_command == "none";
- break;
- case LFUN_EXPORT:
- if (argument == "dvi" || argument == "postscript")
- disable = noLaTeX;
- break;
- case LFUN_UNDO:
- disable = buf->undostack.empty();
- break;
- case LFUN_REDO:
- disable = buf->redostack.empty();
- break;
- case LFUN_SPELLCHECK:
- disable = lyxrc->isp_command == "none";
- break;
- case LFUN_RUNCHKTEX:
- disable = lyxrc->chktex_command == "none";
- break;
- case LFUN_LAYOUT_TABLE:
-#warning change this and font code once it is possible to get to cursor
- // disable = ! buf->text->cursor.par->table;
- break;
- default:
- break;
- }
- if (disable)
- flag = func_status(flag | LyXFunc::Disabled);
-
- func_status box = LyXFunc::ToggleOff;
- // LyXFont font = buf->text->real_current_font;
- LyXFont font;
- switch (action) {
- case LFUN_EMPH:
- if (font.emph() == LyXFont::ON)
- box = LyXFunc::ToggleOn;
+ case LFUN_PREVIEW:
+ disable = noLaTeX || lyxrc.view_dvi_command == "none";
+ break;
+ case LFUN_PREVIEWPS:
+ disable = noLaTeX || lyxrc.view_ps_command == "none";
break;
- case LFUN_NOUN:
- if (font.noun() == LyXFont::ON)
- box = LyXFunc::ToggleOn;
+ case LFUN_RUNLATEX:
+ case LFUN_RUNDVIPS:
+ disable = noLaTeX;
break;
- case LFUN_BOLD:
- if (font.series() == LyXFont::BOLD_SERIES)
- box = LyXFunc::ToggleOn;
+ case LFUN_MENUPRINT:
+ disable = noLaTeX || lyxrc.print_command == "none";
break;
- case LFUN_TEX:
- if (font.latex() == LyXFont::ON)
- box = LyXFunc::ToggleOn;
+ case LFUN_FAX:
+ disable = noLaTeX || lyxrc.fax_command == "none";
+ break;
+ case LFUN_IMPORT:
+ if (argument == "latex")
+ disable = lyxrc.relyx_command == "none";
+ if (argument == "linuxdoc")
+ disable = lyxrc.linuxdoc_to_lyx_command == "none";
+ break;
+ case LFUN_EXPORT:
+ 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";
+ break;
+ case LFUN_UNDO:
+ disable = buf->undostack.empty();
+ break;
+ case LFUN_REDO:
+ disable = buf->redostack.empty();
+ break;
+ case LFUN_SPELLCHECK:
+ disable = lyxrc.isp_command == "none";
+ break;
+ case LFUN_RUNCHKTEX:
+ disable = lyxrc.chktex_command == "none";
+ break;
+ case LFUN_LAYOUT_TABLE:
+ disable = ! owner->view()->text->cursor.par->table;
break;
default:
- box = LyXFunc::OK;
break;
+ }
+ if (disable)
+ flag |= LyXFunc::Disabled;
+
+ if (buf) {
+ func_status box = LyXFunc::ToggleOff;
+ LyXFont font = owner->view()->text->real_current_font;
+ switch (action) {
+ case LFUN_EMPH:
+ if (font.emph() == LyXFont::ON)
+ box = LyXFunc::ToggleOn;
+ break;
+ case LFUN_NOUN:
+ if (font.noun() == LyXFont::ON)
+ box = LyXFunc::ToggleOn;
+ break;
+ case LFUN_BOLD:
+ if (font.series() == LyXFont::BOLD_SERIES)
+ box = LyXFunc::ToggleOn;
+ break;
+ case LFUN_TEX:
+ if (font.latex() == LyXFont::ON)
+ box = LyXFunc::ToggleOn;
+ break;
+ default:
+ box = LyXFunc::OK;
+ break;
+ }
+ flag |= box;
}
- flag |= box;
-
return flag;
}
string LyXFunc::Dispatch(int ac,
- char const * do_not_use_this_arg)
+ char const * do_not_use_this_arg)
{
string argument;
kb_action action;
- FL_OBJECT * ob = 0; // This will disapear soon
-
// we have not done anything wrong yet.
errorstat = false;
dispatch_buffer.clear();
selection_possible = false;
- if (owner->view()->available()
- && owner->view()->getScreen())
- owner->view()->getScreen()->HideCursor();
+ if (owner->view()->available())
+ owner->view()->hideCursor();
// We cannot use this function here
if (getStatus(action) & Disabled)
commandshortcut.clear();
- if (lyxrc->display_shortcuts && show_sc) {
+ if (lyxrc.display_shortcuts && show_sc) {
if (action != LFUN_SELFINSERT) {
// Put name of command and list of shortcuts
// for it in minibuffer
// If in math mode pass the control to
// the math inset [asierra060396]
if (owner->view()->available() &&
- owner->buffer()->the_locking_inset) {
+ owner->view()->the_locking_inset) {
if (action > 1
- || (action == LFUN_UNKNOWN_ACTION && keyseq.length>= -1)) {
- if (action == LFUN_UNKNOWN_ACTION && argument.empty()) {
+ || (action == LFUN_UNKNOWN_ACTION
+ && keyseq.length >= -1)) {
+ if (action == LFUN_UNKNOWN_ACTION
+ && argument.empty()) {
argument = keyseq.getiso();
}
// Undo/Redo pre 0.13 is a bit tricky for insets.
if (action == LFUN_UNDO) {
int slx, sly;
UpdatableInset * inset =
- owner->buffer()->the_locking_inset;
+ owner->view()->the_locking_inset;
inset->GetCursorPos(slx, sly);
- UnlockInset(inset);
- MenuUndo();
- inset = static_cast<UpdatableInset*>(owner->buffer()->text->cursor.par->GetInset(owner->buffer()->text->cursor.pos));
- if (inset)
- inset->Edit(slx, sly);
+ owner->view()->unlockInset(inset);
+ owner->view()->menuUndo();
+ inset = static_cast<UpdatableInset*>(
+ owner->view()->text->cursor.par->
+ GetInset(owner->view()->text->
+ cursor.pos));
+ if (inset)
+ inset->Edit(owner->view(),slx,sly,0);
return string();
- } else
- if (action == LFUN_REDO) {
- int slx, sly;
- UpdatableInset * inset = owner->buffer()->the_locking_inset;
- inset->GetCursorPos(slx, sly);
- UnlockInset(inset);
- MenuRedo();
- inset = static_cast<UpdatableInset*>(owner->buffer()->text->cursor.par->GetInset(owner->buffer()->text->cursor.pos));
- if (inset)
- inset->Edit(slx, sly);
+ } else if (action == LFUN_REDO) {
+ int slx, sly;
+ UpdatableInset * inset = owner->view()->
+ the_locking_inset;
+ inset->GetCursorPos(slx, sly);
+ owner->view()->unlockInset(inset);
+ owner->view()->menuRedo();
+ inset = static_cast<UpdatableInset*>(
+ owner->view()->text->cursor.par->
+ GetInset(owner->view()->text->
+ cursor.pos));
+ if (inset)
+ inset->Edit(owner->view(),slx,sly,0);
+ return string();
+ } else if (owner->view()->the_locking_inset->
+ LocalDispatch(owner->view(), action,
+ argument) ==
+ UpdatableInset::DISPATCHED)
+ return string();
+ else {
+ setMessage(N_("Text mode"));
+ LyXDirection direction = owner->view()->text->
+ cursor.par->getParDirection();
+ if ((action == -1) ||
+ ((action == LFUN_RIGHT) &&
+ (direction == LYX_DIR_LEFT_TO_RIGHT))) {
+ owner->view()->text->CursorRight();
+ moveCursorUpdate(false);
+ owner->getMiniBuffer()->
+ Set(CurrentState());
+ }
+ if ((action == LFUN_LEFT) &&
+ (direction == LYX_DIR_RIGHT_TO_LEFT)) {
+ owner->view()->text->CursorRight();
+ moveCursorUpdate(false);
+ owner->getMiniBuffer()->
+ Set(CurrentState());
+ }
+ if ((action == LFUN_LEFT) ||
+ (action == LFUN_RIGHT))
return string();
- } else
- if (owner->buffer()->the_locking_inset->LocalDispatch(action, argument.c_str()))
- return string();
- else {
- setMessage(N_("Text mode"));
- if (action == LFUN_RIGHT || action == -1)
- owner->buffer()->text->CursorRight();
- if (action == LFUN_LEFT || action == LFUN_RIGHT)
- return string();
- }
+ }
}
}
searched_string = last_search;
}
- LyXText * ltCur = owner->view()->buffer()->text ;
+ LyXText * ltCur = owner->view()->text ;
if (!searched_string.empty() &&
((action == LFUN_WORDFINDBACKWARD) ?
ltCur->SearchForward(searched_string.c_str()))) {
// ??? What is that ???
- owner->view()->buffer()->update(-2);
+ owner->view()->update(-2);
// ??? Needed ???
// clear the selection (if there is any)
- owner->view()->getScreen()->ToggleSelection();
- owner->view()->buffer()->text->ClearSelection();
+ owner->view()->toggleSelection();
+ owner->view()->text->ClearSelection();
// Move cursor so that successive C-s 's will not stand in place.
if( action == LFUN_WORDFINDFORWARD )
- owner->buffer()->text->CursorRightOneWord();
- owner->buffer()->text->FinishUndo();
+ owner->view()->text->CursorRightOneWord();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
// ??? Needed ???
// set the new selection
// SetSelectionOverLenChars(owner->view()->currentBuffer()->text, iLenSelected);
- owner->view()->getScreen()->ToggleSelection(false);
+ owner->view()->toggleSelection(false);
} else
LyXBell();
// REMOVED : if (owner->view()->getWorkArea()->focus)
- owner->view()->getScreen()->ShowCursor();
+ owner->view()->showCursor();
}
break;
case LFUN_PREFIX:
{
- if (owner->view()->available()
- && owner->view()->getScreen()) {
- owner->buffer()->update(-2);
+ if (owner->view()->available()) {
+ owner->view()->update(-2);
}
- char buf[100];
- keyseq.print(buf, 100, true);
+ string buf;
+ keyseq.print(buf, true);
owner->getMiniBuffer()->Set(buf, string(), string(), 1);
}
break;
case LFUN_META_FAKE: // RVDK_PATCH_5
{
meta_fake_bit = Mod1Mask;
- char buf[100];
- keyseq.print(buf, 98, true);
+ string buf;
+ keyseq.print(buf, true);
string res = string("M-") + buf;
setMessage(buf); // RVDK_PATCH_5
}
break;
case LFUN_CENTER: // this is center and redraw.
- BeforeChange();
- if (owner->buffer()->text->cursor.y >
- owner->view()->getWorkArea()->h / 2) {
- owner->view()->getScreen()->
- Draw(owner->buffer()->text->cursor.y -
- owner->view()->getWorkArea()->h/2);
- } else { // <=
- owner->view()->getScreen()->
- Draw(0);
- }
- owner->buffer()->update(0);
- owner->view()->redraw();
+ owner->view()->center();
break;
case LFUN_APPENDIX:
if (owner->view()->available()) {
- owner->buffer()->text->toggleAppendix();
- owner->buffer()->update(1);
+ owner->view()->text->toggleAppendix();
+ owner->view()->update(1);
}
break;
- // --- Menus -----------------------------------------------
+ // --- Menus -----------------------------------------------
case LFUN_MENUNEW:
MenuNew(false);
break;
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!"));
+ //}
break;
case LFUN_MENUWRITEAS:
break;
case LFUN_PREVIEW:
- MenuPreview(owner->buffer());
+ PreviewDVI(owner->buffer());
break;
case LFUN_PREVIEWPS:
- MenuPreviewPS(owner->buffer());
+ PreviewPostscript(owner->buffer());
break;
case LFUN_RUNLATEX:
break;
case LFUN_RUNDVIPS:
- MenuRunDvips(owner->buffer(), false);
+ CreatePostscript(owner->buffer(), false);
break;
case LFUN_MENUPRINT:
break;
case LFUN_EXPORT:
- {
- //needs argument as string
- string extyp = argument;
-
- // latex
- if (extyp == "latex") {
- // make sure that this buffer is not linuxdoc
- MenuMakeLaTeX(owner->buffer());
- }
- // linuxdoc
- else if (extyp == "linuxdoc") {
- // make sure that this buffer is not latex
- MenuMakeLinuxDoc(owner->buffer());
- }
- // docbook
- else if (extyp == "docbook") {
- // make sure that this buffer is not latex or linuxdoc
- MenuMakeDocBook(owner->buffer());
- }
- // dvi
- else if (extyp == "dvi") {
- // Run LaTeX as "Update dvi..." Bernhard.
- // We want the dvi in the current directory. This
- // is achieved by temporarily disabling use of
- // temp directory. As a side-effect, we get
- // *.log and *.aux files also. (Asger)
- bool flag = lyxrc->use_tempdir;
- lyxrc->use_tempdir = false;
- MenuRunLaTeX(owner->buffer());
- lyxrc->use_tempdir = flag;
- }
- // postscript
- else if (extyp == "postscript") {
- // Start Print-dialog. Not as good as dvi... Bernhard.
- MenuPrint(owner->buffer());
- // Since the MenuPrint is a pop-up, we can't use
- // the same trick as above. (Asger)
- // MISSING: Move of ps-file :-(
- }
- // ascii
- else if (extyp == "ascii") {
- MenuMakeAscii(owner->buffer());
- }
- else if (extyp == "custom") {
- MenuSendto();
- break;
- }
- // HTML
- else if (extyp == "html" && lyxrc->html_command != "none") {
- // First, create LaTeX file
- MenuMakeLaTeX(owner->buffer());
-
- // And now, run the converter
- string file = owner->buffer()->getFileName();
- Path path(OnlyPath(file));
- // the tex file name has to be correct for
- // latex, but the html file name can be
- // anything.
- string result = ChangeExtension(file, ".html", false);
- file = ChangeExtension(SpaceLess(file), ".tex", false);
- string tmp = lyxrc->html_command;
- tmp = subst(tmp, "$$FName", file);
- tmp = subst(tmp, "$$OutName", result);
- Systemcalls one;
- int res = one.startscript(Systemcalls::System, tmp);
- if (res == 0) {
- setMessage(N_("Document exported as HTML to file `")
- + MakeDisplayPath(result) +'\'');
- } else {
- setErrorMessage(N_("Unable to convert to HTML the file `")
- + MakeDisplayPath(file)
- + '\'');
- }
- }
- else {
- setErrorMessage(N_("Unknown export type: ")
- + extyp);
- }
- }
- break;
+ MenuExport(owner->buffer(), argument);
+ break;
case LFUN_IMPORT:
{
doImportASCII(false);
} else if (imtyp == "asciiparagraph") {
doImportASCII(true);
- // noweb
+ // noweb
} else if (imtyp == "noweb") {
doImportLaTeX(true);
+ } else if (imtyp == "linuxdoc") {
+ doImportLinuxDoc();
} else {
setErrorMessage(string(N_("Unknown import type: "))
+ imtyp);
break;
case LFUN_TOCVIEW:
- TocUpdateCB(ob, 0);
+ TocUpdateCB(0, 0);
if (fd_form_toc->form_toc->visible) {
fl_raise_form(fd_form_toc->form_toc);
} else {
case LFUN_TOC_INSERT:
{
Inset * new_inset = new InsetTOC(owner->buffer());
- owner->buffer()->insertInset(new_inset, "Standard", true);
+ owner->view()->insertInset(new_inset, "Standard", true);
break;
}
case LFUN_LOF_INSERT:
{
Inset * new_inset = new InsetLOF(owner->buffer());
- owner->buffer()->insertInset(new_inset, "Standard", true);
+ owner->view()->insertInset(new_inset, "Standard", true);
break;
}
case LFUN_LOA_INSERT:
{
Inset * new_inset = new InsetLOA(owner->buffer());
- owner->buffer()->insertInset(new_inset, "Standard", true);
+ owner->view()->insertInset(new_inset, "Standard", true);
break;
}
case LFUN_LOT_INSERT:
{
Inset * new_inset = new InsetLOT(owner->buffer());
- owner->buffer()->insertInset(new_inset, "Standard", true);
+ owner->view()->insertInset(new_inset, "Standard", true);
break;
}
case LFUN_TABLE:
- TableCB(ob, 0);
+ Table();
break;
case LFUN_FIGURE:
- FigureCB(ob, 0);
+ Figure();
break;
-
+
+ case LFUN_INSERT_GRAPHICS:
+ {
+ Inset * new_inset = new InsetGraphics;
+ owner->view()->insertInset(new_inset);
+ break;
+ }
+
case LFUN_AUTOSAVE:
AutoSave();
break;
case LFUN_UNDO:
- MenuUndo();
+ owner->view()->menuUndo();
break;
case LFUN_REDO:
- MenuRedo();
+ owner->view()->menuRedo();
break;
case LFUN_MENUSEARCH:
- MenuSearch();
+ {
+ // Ok this is one _very_ bad solution, but I think that some
+ // of this will be rewritten as part of GUI indep anyway.
+ // Lgb
+ static LyXFindReplace FR_;
+ FR_.StartSearch(owner->view());
+ }
+
break;
case LFUN_PASTE:
- PasteCB();
+ owner->view()->paste();
break;
case LFUN_PASTESELECTION:
}
case LFUN_CUT:
- CutCB();
+ owner->view()->cut();
break;
case LFUN_COPY:
- CopyCB();
+ owner->view()->copy();
break;
case LFUN_LAYOUT_COPY:
- CopyEnvironmentCB();
+ owner->view()->copyEnvironment();
break;
case LFUN_LAYOUT_PASTE:
- PasteEnvironmentCB();
+ owner->view()->pasteEnvironment();
break;
case LFUN_GOTOERROR:
break;
case LFUN_REMOVEERRORS:
- if (owner->buffer()->removeAutoInsets()) {
+ if (owner->view()->removeAutoInsets()) {
owner->view()->redraw();
owner->view()->fitCursor();
owner->view()->updateScrollbar();
break;
case LFUN_GOTONOTE:
- GotoNote();
+ owner->view()->gotoNote();
break;
case LFUN_OPENSTUFF:
- OpenStuff();
+ owner->view()->openStuff();
break;
case LFUN_HYPHENATION:
- HyphenationPoint();
+ owner->view()->hyphenationPoint();
break;
case LFUN_LDOTS:
- Ldots();
+ owner->view()->ldots();
break;
case LFUN_END_OF_SENTENCE:
- EndOfSentenceDot();
+ owner->view()->endOfSentenceDot();
break;
case LFUN_MENU_SEPARATOR:
- MenuSeparator();
+ owner->view()->menuSeparator();
break;
case LFUN_HFILL:
- HFill();
+ owner->view()->hfill();
break;
case LFUN_DEPTH:
- DepthCB(ob, 0);
+ changeDepth(owner->view(), 0);
break;
case LFUN_DEPTH_MIN:
- DepthCB(ob, -1);
+ changeDepth(owner->view(), -1);
break;
case LFUN_DEPTH_PLUS:
- DepthCB(ob, 1);
+ changeDepth(owner->view(), 1);
break;
case LFUN_FREE:
- FreeCB();
+ Free();
break;
case LFUN_TEX:
- TexCB();
+ Tex();
+ owner->view()->setState();
+ owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_MELT:
- MeltCB(ob, 0);
+ Melt(owner->view());
break;
case LFUN_RECONFIGURE:
- Reconfigure();
+ Reconfigure(owner->view());
break;
case LFUN_FOOTMELT:
if (owner->view()->available()
- && !owner->buffer()->text->selection
- && owner->buffer()->text->cursor.par->footnoteflag
+ && !owner->view()->text->selection
+ && owner->view()->text->cursor.par->footnoteflag
!= LyXParagraph::NO_FOOTNOTE)
- { // only melt footnotes with FOOTMELT, not margins etc
- if(owner->buffer()->text->cursor.par->footnotekind == LyXParagraph::FOOTNOTE)
- MeltCB(ob, 0);
- }
+ { // only melt footnotes with FOOTMELT, not margins etc
+ if(owner->view()->text->cursor.par->footnotekind == LyXParagraph::FOOTNOTE)
+ Melt(owner->view());
+ }
else
- FootCB(ob, 0);
+ Foot(owner->view());
+ owner->view()->setState();
break;
case LFUN_MARGINMELT:
if (owner->view()->available()
- && !owner->buffer()->text->selection
- && owner->buffer()->text->cursor.par->footnoteflag
+ && !owner->view()->text->selection
+ && owner->view()->text->cursor.par->footnoteflag
!= LyXParagraph::NO_FOOTNOTE) {
// only melt margins
- if(owner->buffer()->text->cursor.par->footnotekind == LyXParagraph::MARGIN)
- MeltCB(ob, 0);
- }
- else
- MarginCB(ob, 0);
+ if(owner->view()->text->cursor.par->footnotekind == LyXParagraph::MARGIN)
+ Melt(owner->view());
+ } else
+ Margin(owner->view());
+ owner->view()->setState();
break;
// --- version control -------------------------------
}
// --- buffers ----------------------------------------
- case LFUN_PREVBUFFER:
-#ifdef WITH_WARNINGS
-#warning fix this please
-#endif
- // it is the LyXView or the BufferView that should
- // remember the previous buffer, not bufferlist.
-// if (owner->view()->available()){
-// BeforeChange();
-// owner->buffer()->update(-2);
-// }
-// owner->view()->setBuffer(bufferlist.prev());
-// owner->view()->
-// resizeCurrentBufferPseudoExpose();
- break;
-
case LFUN_FILE_INSERT:
{
MenuInsertLyXFile(argument);
case LFUN_FILE_INSERT_ASCII:
{
bool asPara = (argument == "paragraph");
- InsertAsciiFile(string(), asPara);
+ InsertAsciiFile(owner->view(), string(), asPara);
}
break;
if (tmpbuf)
owner->view()->buffer(tmpbuf);
}
- break;
+ break;
case LFUN_FILE_OPEN:
- owner->view()->buffer(
- bufferlist.loadLyXFile(argument));
+ owner->view()->buffer(bufferlist.loadLyXFile(argument));
break;
case LFUN_LATEX_LOG:
if (sel == 0)
return string(); // illegal argument
- sel--; // sel 1..., but layout 0...
+ --sel; // sel 1..., but layout 0...
// Pretend we got the name instead.
Dispatch(int(LFUN_LAYOUT),
- textclasslist.NameOfLayout(owner->buffer()->
- text->parameters->
- textclass,
- sel).c_str());
+ textclasslist.NameOfLayout(owner->view()->
+ text->parameters->
+ textclass,
+ sel).c_str());
return string();
}
// Derive layout number from given argument (string)
// and current buffer's textclass (number). */
- int layoutno =
- textclasslist.NumberOfLayout(owner->
- buffer()->
- text->parameters->
- textclass,
- argument).second;
+ LyXTextClassList::ClassList::size_type tclass =
+ owner->view()->text->parameters->textclass;
+ pair <bool, LyXTextClass::size_type> layout =
+ textclasslist.NumberOfLayout(tclass, argument);
+
+ // If the entry is obsolete, use the new one instead.
+ if (layout.first) {
+ string obs = textclasslist.Style(tclass,layout.second)
+ .obsoleted_by();
+ if (!obs.empty())
+ layout =
+ textclasslist.NumberOfLayout(tclass, obs);
+ }
// see if we found the layout number:
- if (layoutno == -1) {
+ if (!layout.first) {
setErrorMessage(string(N_("Layout ")) + argument +
N_(" not known"));
break;
}
-
- if (current_layout != layoutno) {
- owner->view()->getScreen()->HideCursor();
- current_layout = layoutno;
- owner->buffer()->update(-2);
- owner->buffer()->text->
- SetLayout(layoutno);
+
+ if (current_layout != layout.second) {
+ owner->view()->hideCursor();
+ current_layout = layout.second;
+ owner->view()->update(-2);
+ owner->view()->text->
+ SetLayout(layout.second);
owner->getToolbar()->combox->
- select(owner->buffer()->
+ select(owner->view()->
text->cursor.par->
GetLayout() + 1);
- owner->buffer()->update(1);
+ owner->view()->update(1);
}
}
break;
owner->getToolbar()->combox->Show();
break;
+ case LFUN_LANGUAGE:
+ {
+ LangCB(argument);
+ owner->view()->setState();
+ owner->getMiniBuffer()->Set(CurrentState());
+ }
+ break;
+
case LFUN_EMPH:
- EmphCB();
+ Emph();
break;
case LFUN_BOLD:
- BoldCB();
+ Bold();
break;
case LFUN_NOUN:
- NounCB();
+ Noun();
break;
case LFUN_CODE:
- CodeCB();
+ Code();
break;
case LFUN_SANS:
- SansCB();
+ Sans();
break;
case LFUN_ROMAN:
- RomanCB();
+ Roman();
break;
case LFUN_DEFAULT:
- StyleResetCB();
+ StyleReset();
break;
case LFUN_UNDERLINE:
- UnderlineCB();
+ Underline();
break;
case LFUN_FONT_SIZE:
- FontSizeCB(argument);
+ FontSize(argument);
break;
case LFUN_FONT_STATE:
break;
case LFUN_UPCASE_WORD:
- owner->buffer()->update(-2);
+ owner->view()->update(-2);
FreeUpdateTimer();
- owner->buffer()->text->ChangeWordCase(LyXText::text_uppercase);
- owner->buffer()->update(1);
+ owner->view()->text->ChangeWordCase(LyXText::text_uppercase);
+ owner->view()->update(1);
SetUpdateTimer();
break;
case LFUN_LOWCASE_WORD:
- owner->buffer()->update(-2);
+ owner->view()->update(-2);
FreeUpdateTimer();
- owner->buffer()->text->ChangeWordCase(LyXText::text_lowercase);
- owner->buffer()->update(1);
+ owner->view()->text->ChangeWordCase(LyXText::text_lowercase);
+ owner->view()->update(1);
SetUpdateTimer();
break;
case LFUN_CAPITALIZE_WORD:
- owner->buffer()->update(-2);
+ owner->view()->update(-2);
FreeUpdateTimer();
- owner->buffer()->text->ChangeWordCase(LyXText::text_capitalization);
- owner->buffer()->update(1);
+ owner->view()->text->ChangeWordCase(LyXText::text_capitalization);
+ owner->view()->update(1);
SetUpdateTimer();
break;
inset->setFlag(InsetRef::PAGE_REF);
else
inset->setFlag(InsetRef::REF);
- UpdateInset(inset);
+ owner->view()->updateInset(inset, true);
} else {
setErrorMessage(N_("No cross-reference to toggle"));
}
if (!label.empty()) {
owner->view()->savePosition();
- owner->buffer()->gotoLabel(label.c_str());
+ owner->view()->gotoLabel(label.c_str());
}
}
break;
break; // RVDK_PATCH_5
case LFUN_SPELLCHECK:
- if (lyxrc->isp_command != "none")
- ShowSpellChecker();
+ if (lyxrc.isp_command != "none")
+ ShowSpellChecker(owner->view());
break; // RVDK_PATCH_5
// --- Cursor Movements -----------------------------
case LFUN_RIGHT:
{
- Buffer * tmpbuffer = owner->buffer();
- LyXText * tmptext = owner->buffer()->text;
+ LyXText * tmptext = owner->view()->text;
+ LyXDirection direction =
+ tmptext->cursor.par->getParDirection();
if(!tmptext->mark_set)
- BeforeChange();
- tmpbuffer->update(-2);
+ owner->view()->beforeChange();
+ owner->view()->update(-2);
+ if (direction == LYX_DIR_RIGHT_TO_LEFT)
+ tmptext->CursorLeft();
if (tmptext->cursor.pos < tmptext->cursor.par->Last()
&& tmptext->cursor.par->GetChar(tmptext->cursor.pos)
== LyXParagraph::META_INSET
&& tmptext->cursor.par->GetInset(tmptext->cursor.pos)
- && tmptext->cursor.par->GetInset(tmptext->cursor.pos)->Editable() == 2){
+ && tmptext->cursor.par->GetInset(tmptext->cursor.pos)->Editable() == Inset::HIGHLY_EDITABLE){
Inset * tmpinset = tmptext->cursor.par->GetInset(tmptext->cursor.pos);
setMessage(tmpinset->EditMessage());
- tmpinset->Edit(0, 0);
+ tmpinset->Edit(owner->view(), 0, 0, 0);
break;
}
- tmptext->CursorRight();
- owner->buffer()->text->FinishUndo();
+ if (direction == LYX_DIR_LEFT_TO_RIGHT)
+ tmptext->CursorRight();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
}
{
// This is soooo ugly. Isn`t it possible to make
// it simpler? (Lgb)
- LyXText * txt = owner->buffer()->text;
- if(!txt->mark_set) BeforeChange();
- owner->buffer()->update(-2);
- txt->CursorLeft();
+ LyXText * txt = owner->view()->text;
+ LyXDirection direction = txt->cursor.par->getParDirection();
+ if(!txt->mark_set) owner->view()->beforeChange();
+ owner->view()->update(-2);
+ if (direction == LYX_DIR_LEFT_TO_RIGHT)
+ txt->CursorLeft();
if (txt->cursor.pos < txt->cursor.par->Last()
&& txt->cursor.par->GetChar(txt->cursor.pos)
== LyXParagraph::META_INSET
&& txt->cursor.par->GetInset(txt->cursor.pos)
- && txt->cursor.par->GetInset(txt->cursor.pos)->Editable() == 2) {
+ && txt->cursor.par->GetInset(txt->cursor.pos)->Editable() == Inset::HIGHLY_EDITABLE) {
Inset * tmpinset = txt->cursor.par->GetInset(txt->cursor.pos);
setMessage(tmpinset->EditMessage());
- tmpinset->Edit(tmpinset->Width(txt->GetFont(txt->cursor.par,
- txt->cursor.pos)), 0);
+ tmpinset->Edit(owner->view(),
+ tmpinset->width(owner->view()->painter(),
+ txt->GetFont(txt->cursor.par,
+ txt->cursor.pos)),
+ 0, 0);
break;
}
- owner->buffer()->text->FinishUndo();
+ if (direction == LYX_DIR_RIGHT_TO_LEFT)
+ txt->CursorRight();
+
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
}
break;
case LFUN_UP:
- if(!owner->buffer()->text->mark_set) BeforeChange();
- owner->buffer()->update(-3);
- owner->buffer()->text->CursorUp();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set) owner->view()->beforeChange();
+ owner->view()->update(-3);
+ owner->view()->text->CursorUp();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_DOWN:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-3);
- owner->buffer()->text->CursorDown();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-3);
+ owner->view()->text->CursorDown();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_UP_PARAGRAPH:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-3);
- owner->buffer()->text->CursorUpParagraph();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-3);
+ owner->view()->text->CursorUpParagraph();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_DOWN_PARAGRAPH:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-3);
- owner->buffer()->text->CursorDownParagraph();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-3);
+ owner->view()->text->CursorDownParagraph();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_PRIOR:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-3);
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-3);
owner->view()->cursorPrevious();
- owner->buffer()->text->FinishUndo();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_NEXT:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-3);
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-3);
owner->view()->cursorNext();
- owner->buffer()->text->FinishUndo();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_HOME:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorHome();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-2);
+ owner->view()->text->CursorHome();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_END:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorEnd();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-2);
+ owner->view()->text->CursorEnd();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_TAB:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorTab();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-2);
+ owner->view()->text->CursorTab();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_WORDRIGHT:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorRightOneWord();
- owner->buffer()->text->FinishUndo();
+ 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
+ owner->view()->text->CursorLeftOneWord();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_WORDLEFT:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorLeftOneWord();
- owner->buffer()->text->FinishUndo();
+ 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
+ owner->view()->text->CursorRightOneWord();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_BEGINNINGBUF:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorTop();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-2);
+ owner->view()->text->CursorTop();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_ENDBUF:
- if(!owner->buffer()->text->mark_set)
- BeforeChange();
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorBottom();
- owner->buffer()->text->FinishUndo();
+ if(!owner->view()->text->mark_set)
+ owner->view()->beforeChange();
+ owner->view()->update(-2);
+ owner->view()->text->CursorBottom();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(false);
owner->getMiniBuffer()->Set(CurrentState());
break;
/* cursor selection ---------------------------- */
case LFUN_RIGHTSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorRight();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ if (owner->view()->text->cursor.par->getParDirection()
+ == LYX_DIR_LEFT_TO_RIGHT)
+ owner->view()->text->CursorRight();
+ else
+ owner->view()->text->CursorLeft();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_LEFTSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorLeft();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ if (owner->view()->text->cursor.par->getParDirection()
+ == LYX_DIR_LEFT_TO_RIGHT)
+ owner->view()->text->CursorLeft();
+ else
+ owner->view()->text->CursorRight();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_UPSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorUp();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ owner->view()->text->CursorUp();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_DOWNSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorDown();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ owner->view()->text->CursorDown();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_UP_PARAGRAPHSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorUpParagraph();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ owner->view()->text->CursorUpParagraph();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_DOWN_PARAGRAPHSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorDownParagraph();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ owner->view()->text->CursorDownParagraph();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_PRIORSEL:
- owner->buffer()->update(-2);
+ owner->view()->update(-2);
owner->view()->cursorPrevious();
- owner->buffer()->text->FinishUndo();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_NEXTSEL:
- owner->buffer()->update(-2);
+ owner->view()->update(-2);
owner->view()->cursorNext();
- owner->buffer()->text->FinishUndo();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_HOMESEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorHome();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ owner->view()->text->CursorHome();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_ENDSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorEnd();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ owner->view()->text->CursorEnd();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_WORDRIGHTSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorRightOneWord();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ if (owner->view()->text->cursor.par->getParDirection()
+ == LYX_DIR_LEFT_TO_RIGHT)
+ owner->view()->text->CursorRightOneWord();
+ else
+ owner->view()->text->CursorLeftOneWord();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_WORDLEFTSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorLeftOneWord();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ if (owner->view()->text->cursor.par->getParDirection()
+ == LYX_DIR_LEFT_TO_RIGHT)
+ owner->view()->text->CursorLeftOneWord();
+ else
+ owner->view()->text->CursorRightOneWord();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_BEGINNINGBUFSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorTop();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ owner->view()->text->CursorTop();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
case LFUN_ENDBUFSEL:
- owner->buffer()->update(-2);
- owner->buffer()->text->CursorBottom();
- owner->buffer()->text->FinishUndo();
+ owner->view()->update(-2);
+ owner->view()->text->CursorBottom();
+ owner->view()->text->FinishUndo();
moveCursorUpdate(true);
owner->getMiniBuffer()->Set(CurrentState());
break;
// --- text changing commands ------------------------
case LFUN_BREAKLINE:
- BeforeChange();
- owner->buffer()->text->InsertChar(LyXParagraph::META_NEWLINE);
- SmallUpdate(1);
+#if 1
+ owner->view()->beforeChange();
+ owner->view()->text->InsertChar(LyXParagraph::META_NEWLINE);
+ owner->view()->smallUpdate(1);
SetUpdateTimer(0.01);
moveCursorUpdate(false);
+#else
+ owner->view()->newline();
+#endif
break;
case LFUN_PROTECTEDSPACE:
- BeforeChange();
- owner->buffer()->text->
+#if 1
+ {
+ LyXLayout const & style =
+ textclasslist.Style(owner->view()->buffer()->params.textclass,
+ owner->view()->text->cursor.par->GetLayout());
+
+ if (style.free_spacing) {
+ owner->view()->text->InsertChar(' ');
+ owner->view()->update(-1);
+ } else {
+ owner->view()->protectedBlank();
+ }
+ moveCursorUpdate(false);
+ }
+#else
+ owner->view()->beforeChange();
+ owner->view()->text->
InsertChar(LyXParagraph::META_PROTECTED_SEPARATOR);
- SmallUpdate(1);
+ owner->view()->smallUpdate(1);
SetUpdateTimer();
moveCursorUpdate(false);
+#endif
break;
case LFUN_SETMARK:
- if(owner->buffer()->text->mark_set) {
- BeforeChange();
- owner->buffer()->update(0);
+ if(owner->view()->text->mark_set) {
+ owner->view()->beforeChange();
+ owner->view()->update(0);
setMessage(N_("Mark removed"));
} else {
- BeforeChange();
- owner->buffer()->text->mark_set = 1;
- owner->buffer()->update(0);
+ owner->view()->beforeChange();
+ owner->view()->text->mark_set = 1;
+ owner->view()->update(0);
setMessage(N_("Mark set"));
}
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
break;
case LFUN_DELETE:
FreeUpdateTimer();
- if (!owner->buffer()->text->selection) {
- owner->buffer()->text->Delete();
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
- SmallUpdate(1);
+ if (!owner->view()->text->selection) {
+ owner->view()->text->Delete();
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
+ owner->view()->smallUpdate(1);
// It is possible to make it a lot faster still
// just comment out the lone below...
- owner->view()->getScreen()->ShowCursor();
+ owner->view()->showCursor();
} else {
- CutCB();
+ owner->view()->cut();
}
SetUpdateTimer();
+ moveCursorUpdate(false);
+ owner->getMiniBuffer()->Set(CurrentState());
+ owner->view()->setState();
break;
case LFUN_DELETE_SKIP:
{
// Reverse the effect of LFUN_BREAKPARAGRAPH_SKIP.
- LyXCursor cursor = owner->buffer()->text->cursor;
+ LyXCursor cursor = owner->view()->text->cursor;
FreeUpdateTimer();
- if (!owner->buffer()->text->selection) {
+ if (!owner->view()->text->selection) {
if (cursor.pos == cursor.par->Last()) {
- owner->buffer()->text->CursorRight();
- cursor = owner->buffer()->text->cursor;
+ owner->view()->text->CursorRight();
+ cursor = owner->view()->text->cursor;
if (cursor.pos == 0
&& !(cursor.par->added_space_top
== VSpace (VSpace::NONE))) {
- owner->buffer()->text->SetParagraph
+ owner->view()->text->SetParagraph
(cursor.par->line_top,
cursor.par->line_bottom,
cursor.par->pagebreak_top,
cursor.par->added_space_bottom,
cursor.par->align,
cursor.par->labelwidthstring, 0);
- owner->buffer()->text->CursorLeft();
- owner->buffer()->update (1);
+ owner->view()->text->CursorLeft();
+ owner->view()->update (1);
} else {
- owner->buffer()->text->CursorLeft();
- owner->buffer()->text->Delete();
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
- SmallUpdate(1);
+ owner->view()->text->CursorLeft();
+ owner->view()->text->Delete();
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
+ owner->view()->smallUpdate(1);
}
} else {
- owner->buffer()->text->Delete();
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
- SmallUpdate(1);
+ owner->view()->text->Delete();
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
+ owner->view()->smallUpdate(1);
}
} else {
- CutCB();
+ owner->view()->cut();
}
SetUpdateTimer();
}
/* -------> Delete word forward. */
case LFUN_DELETE_WORD_FORWARD:
- owner->buffer()->update(-2);
+ owner->view()->update(-2);
FreeUpdateTimer();
- owner->buffer()->text->DeleteWordForward();
- owner->buffer()->update( 1 );
+ owner->view()->text->DeleteWordForward();
+ owner->view()->update( 1 );
SetUpdateTimer();
moveCursorUpdate(false);
+ owner->getMiniBuffer()->Set(CurrentState());
break;
/* -------> Delete word backward. */
case LFUN_DELETE_WORD_BACKWARD:
- owner->buffer()->update(-2);
+ owner->view()->update(-2);
FreeUpdateTimer();
- owner->buffer()->text->DeleteWordBackward();
- owner->buffer()->update( 1 );
+ owner->view()->text->DeleteWordBackward();
+ owner->view()->update( 1 );
SetUpdateTimer();
moveCursorUpdate(false);
+ owner->getMiniBuffer()->Set(CurrentState());
break;
/* -------> Kill to end of line. */
case LFUN_DELETE_LINE_FORWARD:
FreeUpdateTimer();
- owner->buffer()->update(-2);
- owner->buffer()->text->DeleteLineForward();
- owner->buffer()->update( 1 );
+ owner->view()->update(-2);
+ owner->view()->text->DeleteLineForward();
+ owner->view()->update( 1 );
SetUpdateTimer();
moveCursorUpdate(false);
break;
/* -------> Set mark off. */
case LFUN_MARK_OFF:
- BeforeChange();
- owner->buffer()->update(0);
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
+ owner->view()->beforeChange();
+ owner->view()->update(0);
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
setMessage(N_("Mark off"));
break;
/* -------> Set mark on. */
case LFUN_MARK_ON:
- BeforeChange();
- owner->buffer()->text->mark_set = 1;
- owner->buffer()->update( 0 );
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
+ owner->view()->beforeChange();
+ owner->view()->text->mark_set = 1;
+ owner->view()->update( 0 );
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
setMessage(N_("Mark on"));
break;
case LFUN_BACKSPACE:
{
FreeUpdateTimer();
- if (!owner->buffer()->text->selection) {
+ if (!owner->view()->text->selection) {
if (owner->getIntl()->getTrans()->backspace()) {
- owner->buffer()->text->Backspace();
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
- SmallUpdate(1);
+ owner->view()->text->Backspace();
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
+ owner->view()->smallUpdate(1);
// It is possible to make it a lot faster still
// just comment out the lone below...
- owner->view()->getScreen()->ShowCursor();
+ owner->view()->showCursor();
}
} else {
- CutCB();
+ owner->view()->cut();
}
SetUpdateTimer();
+ owner->getMiniBuffer()->Set(CurrentState());
+ owner->view()->setState();
}
break;
{
// Reverse the effect of LFUN_BREAKPARAGRAPH_SKIP.
- LyXCursor cursor = owner->buffer()->text->cursor;
+ LyXCursor cursor = owner->view()->text->cursor;
FreeUpdateTimer();
- if (!owner->buffer()->text->selection) {
+ if (!owner->view()->text->selection) {
if (cursor.pos == 0
&& !(cursor.par->added_space_top
== VSpace (VSpace::NONE))) {
- owner->buffer()->text->SetParagraph
+ owner->view()->text->SetParagraph
(cursor.par->line_top,
cursor.par->line_bottom,
cursor.par->pagebreak_top,
VSpace(VSpace::NONE), cursor.par->added_space_bottom,
cursor.par->align,
cursor.par->labelwidthstring, 0);
- owner->buffer()->update (1);
+ owner->view()->update (1);
} else {
- owner->buffer()->text->Backspace();
- owner->buffer()->text->sel_cursor
+ owner->view()->text->Backspace();
+ owner->view()->text->sel_cursor
= cursor;
- SmallUpdate (1);
+ owner->view()->smallUpdate (1);
}
} else
- CutCB();
+ owner->view()->cut();
SetUpdateTimer();
}
break;
case LFUN_BREAKPARAGRAPH:
{
- BeforeChange();
- owner->buffer()->text->BreakParagraph(0);
- SmallUpdate(1);
+ owner->view()->beforeChange();
+ owner->view()->text->BreakParagraph(0);
+ owner->view()->smallUpdate(1);
SetUpdateTimer(0.01);
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
+ owner->view()->setState();
+ owner->getMiniBuffer()->Set(CurrentState());
break;
}
case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
{
- BeforeChange();
- owner->buffer()->text->BreakParagraph(1);
- SmallUpdate(1);
+ owner->view()->beforeChange();
+ owner->view()->text->BreakParagraph(1);
+ owner->view()->smallUpdate(1);
SetUpdateTimer(0.01);
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
+ owner->view()->setState();
+ owner->getMiniBuffer()->Set(CurrentState());
break;
}
// indentation and add a "defskip" at the top.
// Otherwise, do the same as LFUN_BREAKPARAGRAPH.
- LyXCursor cursor = owner->buffer()->text->cursor;
+ LyXCursor cursor = owner->view()->text->cursor;
- BeforeChange();
+ owner->view()->beforeChange();
if (cursor.pos == 0) {
if (cursor.par->added_space_top == VSpace(VSpace::NONE)) {
- owner->buffer()->text->SetParagraph
+ owner->view()->text->SetParagraph
(cursor.par->line_top,
cursor.par->line_bottom,
cursor.par->pagebreak_top,
VSpace(VSpace::DEFSKIP), cursor.par->added_space_bottom,
cursor.par->align,
cursor.par->labelwidthstring, 1);
- owner->buffer()->update(1);
+ owner->view()->update(1);
}
}
else {
- owner->buffer()->text->BreakParagraph(0);
- SmallUpdate(1);
+ owner->view()->text->BreakParagraph(0);
+ owner->view()->smallUpdate(1);
}
SetUpdateTimer(0.01);
- owner->buffer()->text->sel_cursor = cursor;
+ owner->view()->text->sel_cursor = cursor;
+ owner->view()->setState();
+ owner->getMiniBuffer()->Set(CurrentState());
}
break;
case LFUN_QUOTE:
- BeforeChange();
- owner->buffer()->text->InsertChar('\"'); // This " matches the single quote in the code
- SmallUpdate(1);
+ owner->view()->beforeChange();
+ owner->view()->text->InsertChar('\"'); // This " matches the single quote in the code
+ owner->view()->smallUpdate(1);
SetUpdateTimer();
moveCursorUpdate(false);
break;
new_inset = new InsetUrl("htmlurl", "", "");
else
new_inset = new InsetUrl("url", "", "");
- owner->buffer()->insertInset(new_inset);
- new_inset->Edit(0, 0);
+ owner->view()->insertInset(new_inset);
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ }
+ break;
+ case LFUN_INSET_TEXT:
+ {
+ InsetText * new_inset = new InsetText(owner->buffer());
+ owner->view()->insertInset(new_inset);
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ }
+ break;
+ case LFUN_INSET_ERT:
+ {
+ InsetERT * new_inset = new InsetERT(owner->buffer());
+ owner->view()->insertInset(new_inset);
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ }
+ break;
+ case LFUN_INSET_FOOTNOTE:
+ {
+ InsetFoot * new_inset = new InsetFoot(owner->buffer());
+ owner->view()->insertInset(new_inset);
+ new_inset->Edit(owner->view(), 0, 0, 0);
}
break;
case LFUN_CHARATCURSOR:
{
LyXParagraph::size_type pos =
- owner->buffer()->text->cursor.pos;
- if(pos < owner->buffer()->text->cursor.par->size())
- dispatch_buffer = owner->buffer()->text->
- cursor.par->text[pos];
+ owner->view()->text->cursor.pos;
+ if(pos < owner->view()->text->cursor.par->size())
+ //dispatch_buffer = owner->view()->text->
+ // cursor.par->text[pos];
+ dispatch_buffer =
+ owner->view()->text->
+ cursor.par->GetChar(pos);
else
dispatch_buffer = "EOF";
}
case LFUN_GETXY:
dispatch_buffer =
- tostr(owner->buffer()->text->cursor.x) + ' '
- + tostr(owner->buffer()->text->cursor.y);
+ tostr(owner->view()->text->cursor.x) + ' '
+ + tostr(owner->view()->text->cursor.y);
break;
case LFUN_SETXY:
int x;
long y;
sscanf(argument.c_str(), " %d %ld", &x, &y);
- owner->buffer()->text->SetCursorFromCoordinates(x, y);
+ owner->view()->text->SetCursorFromCoordinates(x, y);
}
break;
case LFUN_GETLAYOUT:
dispatch_buffer =
- tostr(owner->buffer()->text->cursor.par->layout);
+ tostr(owner->view()->text->cursor.par->layout);
break;
case LFUN_GETFONT:
{
- LyXFont *font = &(owner->buffer()->text->current_font);
+ LyXFont * font = &(owner->view()->text->current_font);
if(font->shape() == LyXFont::ITALIC_SHAPE)
dispatch_buffer = 'E';
else if(font->shape() == LyXFont::SMALLCAPS_SHAPE)
case LFUN_GETLATEX:
{
- LyXFont *font = &(owner->buffer()->text->current_font);
+ LyXFont * font = &(owner->view()->text->current_font);
if(font->latex() == LyXFont::ON)
dispatch_buffer = 'L';
else
break;
case LFUN_GETNAME:
- setMessage(owner->buffer()->getFileName());
+ setMessage(owner->buffer()->fileName());
lyxerr.debug() << "FNAME["
- << owner->buffer()->getFileName()
+ << owner->buffer()->fileName()
<< "] " << endl;
break;
case LFUN_NOTIFY:
{
- char buf[100];
- keyseq.print(buf, 100);
+ string buf;
+ keyseq.print(buf);
dispatch_buffer = buf;
lyxserver->notifyClient(dispatch_buffer);
}
owner->view()->buffer(bufferlist.loadLyXFile(s));
// Set the cursor
- owner->buffer()->setCursorFromRow(row);
+ owner->view()->setCursorFromRow(row);
// Recenter screen
- BeforeChange();
- if (owner->buffer()->text->cursor.y >
- owner->view()->getWorkArea()->h / 2) {
- owner->view()->getScreen()->
- Draw(owner->buffer()->text->cursor.y -
- owner->view()->getWorkArea()->h/2);
- } else { // <=
- owner->view()->getScreen()->
- Draw(0);
- }
- owner->buffer()->update(0);
- owner->view()->redraw();
+ owner->view()->center();
}
break;
case LFUN_GETTIP:
{
int qa = lyxaction.LookupFunc(argument.c_str());
- setMessage(lyxaction.helpText((kb_action)qa));
+ setMessage(lyxaction.helpText(static_cast<kb_action>(qa)));
}
break;
{
char c;
- if (keyseq.length == -1 && keyseq.getiso()!= 0)
- c= keyseq.getiso();
+ if (keyseq.length == -1 && keyseq.getiso() != 0)
+ c = keyseq.getiso();
else
- c= 0;
+ c = 0;
owner->getIntl()->getTrans()->
deadkey(c, get_accent(action).accent,
- owner->buffer()->text);
+ owner->view()->text);
// Need to reset, in case the minibuffer calls these
// actions
keyseq.reset();
- keyseq.length= 0;
+ keyseq.length = 0;
// copied verbatim from do_accent_char
- SmallUpdate(1);
+ owner->view()->smallUpdate(1);
SetUpdateTimer();
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
}
break;
break;
// --- insert characters ----------------------------------------
-#if 0
- case LFUN_INSERT_INSET_LATEX:
- {
- Inset *new_inset = new InsetLatex(argument);
- owner->buffer()->insertInset(new_inset);
- }
- break;
-#endif
+
// --- Mathed stuff. If we are here, there is no locked inset yet.
// Greek mode
// Greek keyboard
case LFUN_GREEK_TOGGLE:
{
- greek_kb_flag = (greek_kb_flag) ? 0: 2;
+ greek_kb_flag = greek_kb_flag ? 0 : 2;
if (greek_kb_flag) {
setMessage(N_("Math greek keyboard on"));
} else {
case LFUN_INSERT_MATRIX:
{
if (owner->view()->available()) {
- owner->buffer()->
+ owner->view()->
open_new_inset(new InsetFormula(false));
- owner->buffer()->
- the_locking_inset->LocalDispatch(action, argument.c_str());
+ owner->view()
+ ->the_locking_inset
+ ->LocalDispatch(owner->view(),
+ action,
+ argument);
}
}
break;
case LFUN_MATH_DISPLAY:
{
if (owner->view()->available())
- owner->buffer()->open_new_inset(new InsetFormula(true));
+ owner->view()->open_new_inset(new InsetFormula(true));
break;
}
if (owner->view()->available()) {
string s(argument);
if (s.empty())
- setErrorMessage(N_("Missing argument"));
+ setErrorMessage(N_("Missing argument"));
else {
- string s1 = token(s, ' ', 1);
- int na = s1.empty() ? 0: atoi(s1.c_str());
- owner->buffer()->
- open_new_inset(new InsetFormulaMacro(token(s, ' ', 0), na));
+ string s1 = token(s, ' ', 1);
+ int na = s1.empty() ? 0: atoi(s1.c_str());
+ owner->view()->
+ open_new_inset(new InsetFormulaMacro(token(s, ' ', 0), na));
}
}
}
{
if (owner->view()->available())
- owner->buffer()->open_new_inset(new InsetFormula);
+ owner->view()->open_new_inset(new InsetFormula);
setMessage(N_("Math editor mode"));
}
break;
new_inset->setOptions(token(lsarg, '|', 1));
} else
new_inset->setContents(lsarg);
- owner->buffer()->insertInset(new_inset);
+ owner->view()->insertInset(new_inset);
} else {
- owner->buffer()->insertInset(new_inset);
- new_inset->Edit(0, 0);
+ owner->view()->insertInset(new_inset);
+ new_inset->Edit(owner->view(), 0, 0, 0);
}
}
break;
bibstyle,
owner->buffer());
- owner->buffer()->insertInset(new_inset);
+ owner->view()->insertInset(new_inset);
if (lsarg.empty()) {
- new_inset->Edit(0, 0);
+ new_inset->Edit(owner->view(), 0, 0, 0);
}
}
break;
case LFUN_INDEX_INSERT:
case LFUN_INDEX_INSERT_LAST:
{
+ // Can't do that at the beginning of a paragraph.
+ if (owner->view()->text->cursor.pos - 1 < 0)
+ break;
+
InsetIndex * new_inset = new InsetIndex();
if (!argument.empty()) {
string lsarg(argument);
new_inset->setContents(lsarg);
- owner->buffer()->insertInset(new_inset);
+ owner->view()->insertInset(new_inset);
} else {
- //reh 98/09/21
- //get the current word for an argument
-
-
- // grab a word
-
- LyXParagraph::size_type lastpos =
- owner->buffer()->text->cursor.pos - 1;
- // If this can't happen, let's make sure that it really don't
- Assert(owner->buffer()->text->cursor.pos - 1 >= 0);
- // get the current word
- // note that this must be done before
- // inserting the inset, or the inset will break
- // the word
- string curstring(owner->buffer()
- ->text->cursor.par->GetWord(lastpos));
-
- //make the new inset and write the current word into it
- InsetIndex * new_inset = new InsetIndex();
-
- new_inset->setContents(curstring);
-
- //don't edit it if the call was to INSERT_LAST
- if(action!= LFUN_INDEX_INSERT_LAST) {
- new_inset->Edit(0, 0);
- } else {
- //it looks blank on the screen unless
- //we do something. put it here.
-
- // move the cursor to the returned value of lastpos
- // but only for the auto-insert
- owner->buffer()->text->cursor.pos= lastpos;
- }
-
- //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
- owner->buffer()->insertInset(new_inset);
+ //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));
+
+ //make the new inset and write the current word into it
+ InsetIndex * new_inset = new InsetIndex();
+
+ new_inset->setContents(curstring);
+
+ //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.
+
+ // move the cursor to the returned value of lastpos
+ // but only for the auto-insert
+ owner->view()->text->cursor.pos = lastpos;
+ }
+
+ //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
+ owner->view()->insertInset(new_inset);
}
}
break;
case LFUN_INDEX_PRINT:
{
Inset * new_inset = new InsetPrintIndex(owner->buffer());
- owner->buffer()->insertInset(new_inset, "Standard", true);
+ owner->view()->insertInset(new_inset, "Standard", true);
}
break;
{
lyxerr << "arg " << argument << endl;
Inset * new_inset = new InsetParent(argument, owner->buffer());
- owner->buffer()->insertInset(new_inset, "Standard", true);
+ owner->view()->insertInset(new_inset, "Standard", true);
}
break;
{
Inset * new_inset = new InsetInclude(argument,
owner->buffer());
- owner->buffer()->insertInset(new_inset, "Standard", true);
- new_inset->Edit(0, 0);
+ owner->view()->insertInset(new_inset, "Standard", true);
+ new_inset->Edit(owner->view(), 0, 0, 0);
}
break;
{
string filename =
MakeAbsPath(argument,
- OnlyPath(owner->buffer()->getFileName()));
+ OnlyPath(owner->buffer()->fileName()));
setMessage(N_("Opening child document ") +
MakeDisplayPath(filename) + "...");
owner->view()->savePosition();
if (bufferlist.exists(filename))
- owner->view()->buffer(bufferlist.getBuffer(filename));
+ owner->view()->buffer(bufferlist.getBuffer(filename));
else
- owner->view()->buffer(bufferlist.loadLyXFile(filename));
+ owner->view()->buffer(bufferlist.loadLyXFile(filename));
}
break;
case LFUN_INSERT_NOTE:
- NoteCB();
+ owner->view()->insertNote();
break;
case LFUN_INSERTFOOTNOTE:
setErrorMessage(N_("Unknown kind of footnote"));
break;
}
- owner->buffer()->text->InsertFootnoteEnvironment(kind);
- owner->buffer()->update(1);
+ owner->view()->text->InsertFootnoteEnvironment(kind);
+ owner->view()->update(1);
+ owner->view()->setState();
}
break;
case LFUN_SELFINSERT:
{
for (string::size_type i = 0; i < argument.length(); ++i) {
- owner->buffer()->text->InsertChar(argument[i]);
+ owner->view()->text->InsertChar(argument[i]);
// This needs to be in the loop, or else we
// won't break lines correctly. (Asger)
- SmallUpdate(1);
+ owner->view()->smallUpdate(1);
}
SetUpdateTimer();
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
moveCursorUpdate(false);
}
break;
}
break;
+ case LFUN_DATE_INSERT: // jdblair: date-insert cmd
+ {
+ char datetmp[32];
+ int datetmp_len;
+ time_t now_time_t;
+ struct tm *now_tm;
+ static string arg;
+
+ now_time_t = time(NULL);
+ now_tm = localtime(&now_time_t);
+ (void)setlocale(LC_TIME, "");
+ if (!argument.empty())
+ arg = argument;
+ else if (arg.empty())
+ arg = lyxrc.date_insert_format;
+ 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);
+ }
+ SetUpdateTimer();
+ owner->view()->text->sel_cursor = owner->view()->text->cursor;
+ moveCursorUpdate(false);
+ }
+ break;
+
+ case LFUN_SAVEPREFERENCES:
+ {
+ Path p(user_lyxdir);
+ lyxrc.write("preferences");
+ }
+ break;
+
case LFUN_UNKNOWN_ACTION:
{
+ if(!owner->buffer()) {
+ LyXBell();
+ setErrorMessage(N_("No document open"));
+ break;
+ }
+
if (owner->buffer()->isReadonly()) {
LyXBell();
setErrorMessage(N_("Document is read only"));
* "auto_region_delete", which defaults to
* true (on). */
- if ( lyxrc->auto_region_delete ) {
- if (owner->buffer()->text->selection){
- owner->buffer()->text->CutSelection(false);
- owner->buffer()->update(-1);
+ if ( lyxrc.auto_region_delete ) {
+ if (owner->view()->text->selection){
+ owner->view()->text->CutSelection(false);
+ owner->view()->update(-1);
}
}
- BeforeChange();
+ owner->view()->beforeChange();
+
+ if (isdigit(argument[0]) &&
+ (lyxrc.auto_mathmode == "true" ||
+ (lyxrc.auto_mathmode == "rtl" &&
+ owner->view()->text->real_current_font.isVisibleRightToLeft()
+ ))) {
+ UpdatableInset * tmpinset = new InsetFormula;
+ LyXCursor & cursor = owner->view()->text->cursor;
+ if (cursor.pos > 0 &&
+ cursor.par->GetChar(cursor.pos - 1) == '-' &&
+ (cursor.pos == 1 ||
+ cursor.par->IsSeparator(cursor.pos - 2) ||
+ cursor.par->IsNewline(cursor.pos - 2) )
+ ) {
+ owner->view()->text->Backspace();
+ owner->view()->open_new_inset(tmpinset);
+ tmpinset->LocalDispatch(owner->view(),
+ LFUN_UNKNOWN_ACTION,
+ "-");
+ } else {
+ owner->view()->open_new_inset(tmpinset);
+ }
+ tmpinset->LocalDispatch(owner->view(),
+ LFUN_UNKNOWN_ACTION,
+ argument);
+ return string();
+ }
+
for (string::size_type i = 0;
i < argument.length(); ++i) {
if (greek_kb_flag) {
if (!math_insert_greek(argument[i]))
- owner->getIntl()->getTrans()->TranslateAndInsert(argument[i], owner->buffer()->text);
+ owner->getIntl()->getTrans()->TranslateAndInsert(argument[i], owner->view()->text);
} else
- owner->getIntl()->getTrans()->TranslateAndInsert(argument[i], owner->buffer()->text);
+ owner->getIntl()->getTrans()->TranslateAndInsert(argument[i], owner->view()->text);
}
- SmallUpdate(1);
+ owner->view()->smallUpdate(1);
SetUpdateTimer();
- owner->buffer()->text->sel_cursor =
- owner->buffer()->text->cursor;
+ owner->view()->text->sel_cursor =
+ owner->view()->text->cursor;
moveCursorUpdate(false);
return string();
} else {
return res;
}
-
+
void LyXFunc::setupLocalKeymap()
{
void LyXFunc::MenuNew(bool fromTemplate)
{
- string fname, initpath = lyxrc->document_path;
+ string fname, initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
}
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
- fileDlg.SetButton(1, _("Templates"), lyxrc->template_path);
+ 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();
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)))
+ {
+ case 1: // Yes: close the document
+ if (!bufferlist.close(bufferlist.getBuffer(s)))
// If close is canceled, we cancel here too.
+ return;
+ break;
+ case 2: // No: switch to the open document
+ owner->view()->buffer(bufferlist.getBuffer(s));
return;
- break;
- case 2: // No: switch to the open document
- owner->view()->buffer(bufferlist.getBuffer(s));
- return;
- case 3: // Cancel: Do nothing
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
- }
+ case 3: // Cancel: Do nothing
+ owner->getMiniBuffer()->Set(_("Canceled."));
+ return;
+ }
}
// Check whether the file already exists
if (fromTemplate) {
ProhibitInput();
fname = fileDlg.Select(_("Choose template"),
- lyxrc->template_path,
+ lyxrc.template_path,
"*.lyx");
templname = fname;
AllowInput();
void LyXFunc::MenuOpen()
{
- string initpath = lyxrc->document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
// launches dialog
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+ 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");
+ initpath, "*.lyx");
AllowInput();
// check selected filename
void LyXFunc::doImportASCII(bool linorpar)
{
- string initpath = lyxrc->document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
// launches dialog
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+ 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");
+ initpath, "*.txt");
AllowInput();
// check selected filename
string s = ChangeExtension(filename, ".lyx", false);
// Check if the document already is open
- if (bufferlist.exists(s)){
+ 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)))
+ {
+ case 1: // Yes: close the document
+ if (!bufferlist.close(bufferlist.getBuffer(s)))
// If close is canceled, we cancel here too.
+ return;
+ break;
+ case 2: // No: switch to the open document
+ owner->view()->buffer(bufferlist.getBuffer(s));
return;
- break;
- case 2: // No: switch to the open document
- owner->view()->buffer(bufferlist.getBuffer(s));
- return;
- case 3: // Cancel: Do nothing
- owner->getMiniBuffer()->Set(_("Canceled."));
- return;
- }
+ case 3: // Cancel: Do nothing
+ owner->getMiniBuffer()->Set(_("Canceled."));
+ return;
+ }
}
// Check if a LyX document by the same root exists in filesystem
owner->getMiniBuffer()->Set(_("Importing ASCII file"),
MakeDisplayPath(filename), "...");
// Insert ASCII file
- InsertAsciiFile(filename, linorpar);
+ InsertAsciiFile(owner->view(), filename, linorpar);
owner->getMiniBuffer()->Set(_("ASCII file "),
MakeDisplayPath(filename),
_("imported."));
void LyXFunc::doImportLaTeX(bool isnoweb)
{
- string initpath = lyxrc->document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
// launches dialog
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
string filename;
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)))
+ {
+ 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;
- 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;
- }
+ case 3: // Cancel: Do nothing
+ owner->getMiniBuffer()->Set(_("Canceled."));
+ return;
+ }
}
// Check if a LyX document by the same root exists in filesystem
}
+void LyXFunc::doImportLinuxDoc()
+{
+ 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);
+
+ // 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
+ owner->getMiniBuffer()->Set(_("Importing LinuxDoc file"),
+ MakeDisplayPath(filename), "...");
+
+ // run sgml2lyx
+ string tmp = lyxrc.linuxdoc_to_lyx_command + filename;
+ Systemcalls one;
+ Buffer * buf = 0;
+
+ int result = one.startscript(Systemcalls::System, tmp);
+ if (result == 0) {
+ 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));
+ }
+}
+
+
void LyXFunc::MenuInsertLyXFile(string const & filen)
{
string filename = filen;
if (filename.empty()) {
// Launch a file browser
- string initpath = lyxrc->document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
// launches dialog
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
filename = fileDlg.Select(_("Select Document to Insert"),
// Inserts document
owner->getMiniBuffer()->Set(_("Inserting document"),
MakeDisplayPath(filename), "...");
- bool res = owner->buffer()->insertLyXFile(filename);
+ bool res = owner->view()->insertLyXFile(filename);
if (res) {
owner->getMiniBuffer()->Set(_("Document"),
MakeDisplayPath(filename),
void LyXFunc::reloadBuffer()
{
- string fn = owner->buffer()->getFileName();
+ string fn = owner->buffer()->fileName();
if (bufferlist.close(owner->buffer()))
owner->view()->buffer(bufferlist.loadLyXFile(fn));
}
{
bool found = false;
Inset * inset = 0;
- LyXCursor cursor = owner->buffer()->text->cursor;
+ LyXCursor cursor = owner->view()->text->cursor;
LyXParagraph::size_type pos = cursor.pos;
LyXParagraph * par = cursor.par;
found = true;
break;
}
- pos++;
+ ++pos;
}
par = par->next;
}
- return (found) ? inset: 0;
+ return found ? inset : 0;
}