* ====================================================== */
#include <config.h>
+
+#ifdef HAVE_SSTREAM
+#include <sstream>
+using std::istringstream;
+#else
+#include <strstream>
+#endif
+
#include <time.h>
#include <locale.h>
#pragma implementation
#endif
+#include "version.h"
#include "lyxlookup.h"
#include "kbmap.h"
#include "lyxfunc.h"
#include "bufferlist.h"
+#include "ColorHandler.h"
#include "lyxserver.h"
#include "lyx.h"
#include "intl.h"
#include "insets/inseturl.h"
#include "insets/insetlatexaccent.h"
#include "insets/insettoc.h"
-#include "insets/insetlof.h"
-#include "insets/insetloa.h"
-#include "insets/insetlot.h"
#include "insets/insetref.h"
#include "insets/insetparent.h"
#include "insets/insetindex.h"
#include "insets/insetinclude.h"
#include "insets/insetbib.h"
+#include "insets/insetcite.h"
#include "insets/insettext.h"
#include "insets/insetert.h"
+#include "insets/insetexternal.h"
#include "insets/insetgraphics.h"
#include "insets/insetfoot.h"
+#include "insets/insetmarginal.h"
+#include "insets/insetminipage.h"
+#include "insets/insetfloat.h"
+#include "insets/insetlist.h"
+#include "insets/insettabular.h"
+#include "insets/insettheorem.h"
+#include "insets/insetcaption.h"
#include "mathed/formulamacro.h"
-#include "toolbar.h"
#include "spellchecker.h" // RVDK_PATCH_5
#include "minibuffer.h"
#include "vspace.h"
#include "layout.h"
#include "WorkArea.h"
#include "lyxfr1.h"
+#include "bufferview_funcs.h"
+#include "frontends/Dialogs.h"
+#include "frontends/Toolbar.h"
+#ifdef NEW_MENUBAR
+#include "frontends/Menubar.h"
+#else
+#include "menus.h"
+#endif
+#include "FloatList.h"
+#include "FontLoader.h"
+#include "TextCache.h"
+using std::pair;
using std::endl;
extern bool cursor_follows_scrollbar;
extern void InsertAsciiFile(BufferView *, string const &, bool);
extern void math_insert_symbol(char const *);
-extern Bool math_insert_greek(char const); // why "Bool"?
+extern bool math_insert_greek(char);
extern BufferList bufferlist;
extern LyXServer * lyxserver;
-extern short greek_kb_flag;
-extern FD_form_toc * fd_form_toc;
+extern int greek_kb_flag;
extern bool selection_possible;
extern kb_keymap * toplevel_keymap;
-extern void MenuWrite(Buffer *);
-extern void MenuWriteAs(Buffer *);
+extern bool MenuWrite(Buffer *);
+extern bool MenuWriteAs(Buffer *);
extern int MenuRunLaTeX(Buffer *);
extern int MenuBuildProg(Buffer *);
extern int MenuRunChktex(Buffer *);
extern void QuitLyX();
extern void MenuFax(Buffer *);
extern void MenuExport(Buffer *, string const &);
-extern void MenuPasteSelection(char at);
+extern void show_symbols_form(LyXFunc *);
+
extern LyXAction lyxaction;
// (alkis)
extern tex_accent_struct get_accent(kb_action action);
-extern void AutoSave();
-extern void SetUpdateTimer(float timer = 0.3);
-extern void FreeUpdateTimer();
+extern void AutoSave(BufferView *);
extern bool PreviewDVI(Buffer *);
extern bool PreviewPostscript(Buffer *);
extern void MenuInsertLabel(char const *);
-extern void MenuInsertRef();
extern void MenuLayoutCharacter();
extern void MenuLayoutParagraph();
extern void MenuLayoutDocument();
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
- // (Matthias)
}
-
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
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->showState();
owner->view()->setState();
}
+int LyXFunc::processKeySym(KeySym keysym, unsigned int state)
+{
+ string argument;
+
+ if (lyxerr.debugging(Debug::KEY)) {
+ char * tmp = XKeysymToString(keysym);
+ string stm = (tmp ? tmp : "");
+ lyxerr << "KeySym is "
+ << stm
+ << "["
+ << keysym << "]"
+ << endl;
+ }
+ // Do nothing if we have nothing (JMarc)
+ if (keysym == NoSymbol) {
+ lyxerr[Debug::KEY] << "Empty kbd action (probably composing)"
+ << endl;
+ //return 0;
+ return FL_PREEMPT;
+ }
+
+ // this function should be used always [asierra060396]
+ UpdatableInset * tli = owner->view()->the_locking_inset;
+ if (owner->view()->available() && tli && (keysym == XK_Escape)) {
+ if (tli == tli->GetLockingInset()) {
+ owner->view()->unlockInset(tli);
+ owner->view()->text->CursorRight(owner->view());
+ moveCursorUpdate(false);
+ owner->showState();
+ } else {
+ tli->UnlockInsetInInset(owner->view(),
+ tli->GetLockingInset(),true);
+ }
+ //return 0;
+ return FL_PREEMPT;
+ }
+
+ // Can we be sure that this will work for all X-Windows
+ // implementations? (Lgb)
+ // This code snippet makes lyx ignore some keys. Perhaps
+ // all of them should be explictly mentioned?
+ if((keysym >= XK_Shift_L && keysym <= XK_Hyper_R)
+ || keysym == XK_Mode_switch || keysym == 0x0)
+ return 0;
+
+ // Do a one-deep top-level lookup for
+ // cancel and meta-fake keys. RVDK_PATCH_5
+ cancel_meta_seq.reset();
+
+ int action = cancel_meta_seq.addkey(keysym, state
+ &(ShiftMask|ControlMask
+ |Mod1Mask));
+
+ // When not cancel or meta-fake, do the normal lookup.
+ // Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards.
+ // Mostly, meta_fake_bit = 0. RVDK_PATCH_5.
+ if ( (action != LFUN_CANCEL) && (action != LFUN_META_FAKE) ) {
+
+ // remove Caps Lock and Mod2 as a modifiers
+ action = keyseq.addkey(keysym,
+ (state | meta_fake_bit)
+ &(ShiftMask|ControlMask
+ |Mod1Mask));
+ }
+ // Dont remove this unless you know what you are doing.
+ meta_fake_bit = 0;
+
+ if (action == 0) action = LFUN_PREFIX;
+
+ if (lyxerr.debugging(Debug::KEY)) {
+ string buf;
+ keyseq.print(buf);
+ lyxerr << "Key ["
+ << action << "]["
+ << buf << "]"
+#if 0
+ << "["
+ << num_bytes << "]"
+#endif
+ << endl;
+ }
+
+ // already here we know if it any point in going further
+ // why not return already here if action == -1 and
+ // num_bytes == 0? (Lgb)
+
+ if(keyseq.length > 1 || keyseq.length < -1) {
+ string buf;
+ keyseq.print(buf);
+ owner->getMiniBuffer()->Set(buf);
+ }
+
+ if (action == -1) {
+ if (keyseq.length < -1) { // unknown key sequence...
+ string buf;
+ LyXBell();
+ keyseq.print(buf);
+ owner->getMiniBuffer()->Set(_("Unknown sequence:"), buf);
+ return 0;
+ }
+
+ char isochar = keyseq.getiso();
+ if (!(state & ControlMask) &&
+ !(state & Mod1Mask) &&
+ (isochar && keysym < 0xF000)) {
+ argument += isochar;
+ }
+ if (argument.empty()) {
+ lyxerr.debug() << "Empty argument!" << endl;
+ // This can`t possibly be of any use
+ // so we`ll skip the dispatch.
+ return 0;
+ }
+ }
+#if 0
+ else
+ if (action == LFUN_SELFINSERT) {
+ argument = s_r[0];
+ }
+#endif
+ bool tmp_sc = show_sc;
+ show_sc = false;
+ Dispatch(action, argument.c_str());
+ show_sc = tmp_sc;
+
+ return 0;
+}
+
+
+#if 0
int LyXFunc::processKeyEvent(XEvent * ev)
{
char s_r[10];
+ KeySym keysym_return = 0;
string argument;
XKeyEvent * keyevent = &ev->xkey;
- KeySym keysym_return;
-
int num_bytes = LyXLookupString(ev, s_r, 10, &keysym_return);
s_r[num_bytes] = '\0';
<< " and num_bytes is "
<< num_bytes
<< " the string returned is \""
- << s_r << '\"' << endl;
+ << s_r << '\"'
+ << endl;
}
// Do nothing if we have nothing (JMarc)
if (num_bytes == 0 && keysym_return == NoSymbol) {
}
// 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(owner->view());
+ moveCursorUpdate(false);
+ owner->showState();
+ } else {
+ tli->UnlockInsetInInset(owner->view(),
+ tli->GetLockingInset(),true);
+ }
return 0;
}
keyseq.print(buf);
lyxerr << "Key ["
<< action << "]["
- << buf << "]["
- << num_bytes << "]" << endl;
+ << buf << "]"
+ << "["
+ << num_bytes << "]"
+ << endl;
}
// already here we know if it any point in going further
// so we`ll skip the dispatch.
return 0;
}
- } else
+ }
+ else
if (action == LFUN_SELFINSERT) {
argument = s_r[0];
}
-
+
bool tmp_sc = show_sc;
show_sc = false;
Dispatch(action, argument.c_str());
return 0;
}
+#endif
LyXFunc::func_status LyXFunc::getStatus(int ac) const
if (lyxaction.isPseudoAction(ac))
action = lyxaction.retrieveActionArg(ac, argument);
- else
+ else
action = static_cast<kb_action>(ac);
if (action == LFUN_UNKNOWN_ACTION) {
setErrorMessage(N_("Unknown action"));
return LyXFunc::Unknown;
- }
+ }
// Check whether we need a buffer
if (!lyxaction.funcHasFlag(action, LyXAction::NoBuffer)) {
setErrorMessage(N_("Command not allowed with"
"out any document open"));
flag |= LyXFunc::Disabled;
+ return flag;
}
}
- if (flag & LyXFunc::Disabled)
- return flag;
-
// I would really like to avoid having this switch and rather try to
// encode this in the function itself.
static bool noLaTeX = lyxrc.latex_command == "none";
switch (action) {
case LFUN_PREVIEW:
disable = noLaTeX || lyxrc.view_dvi_command == "none";
- break;
- case LFUN_PREVIEWPS:
+ break;
+ case LFUN_PREVIEWPS:
disable = noLaTeX || lyxrc.view_ps_command == "none";
break;
case LFUN_RUNLATEX:
disable = noLaTeX || lyxrc.print_command == "none";
break;
case LFUN_FAX:
- disable = noLaTeX || lyxrc.fax_command == "none";
+ disable = noLaTeX || lyxrc.fax_command == "none";
break;
case LFUN_IMPORT:
- if (argument == "latex")
+ if (argument == "latex" || argument == "noweb")
disable = lyxrc.relyx_command == "none";
- if (argument == "linuxdoc")
+ else if (argument == "linuxdoc")
disable = lyxrc.linuxdoc_to_lyx_command == "none";
break;
case LFUN_EXPORT:
- if (argument == "dvi" || argument == "postscript")
+ if (argument == "latex")
+ disable = (! buf->isLatex() && ! buf->isLiterate()) ;
+ else if (argument == "linuxdoc")
+ disable = ! buf->isLinuxDoc();
+ else if (argument == "docbook")
+ disable = ! buf->isDocBook();
+ else if (argument == "dvi" || argument == "postscript")
disable = noLaTeX;
- if (argument == "html")
- disable = lyxrc.html_command == "none";
- if (argument == "html-linuxdoc")
- disable = lyxrc.linuxdoc_to_html_command == "none";
- if (argument == "html-docbook")
- disable = lyxrc.docbook_to_html_command == "none";
+ else if (argument == "html")
+ disable = (buf->isLinuxDoc()
+ && lyxrc.linuxdoc_to_html_command == "none")
+ || (buf->isDocBook()
+ && lyxrc.docbook_to_html_command == "none")
+ || (! buf->isLinuxDoc() && ! buf->isDocBook()
+ && lyxrc.html_command == "none");
+ else if (argument == "custom")
+ disable = (! buf->isLatex() && ! buf->isLiterate());
break;
case LFUN_UNDO:
disable = buf->undostack.empty();
case LFUN_RUNCHKTEX:
disable = lyxrc.chktex_command == "none";
break;
+ case LFUN_BUILDPROG:
+ disable = (lyxrc.literate_command == "none"
+ || ! buf->isLiterate());
+ break;
+
+#ifndef NEW_TABULAR
case LFUN_LAYOUT_TABLE:
- disable = ! owner->view()->text->cursor.par->table;
+ disable = ! owner->view()->text->cursor.par()->table;
+ break;
+#endif
+ case LFUN_LAYOUT_TABULAR:
+ disable = true;
+ if (owner->view()->the_locking_inset) {
+ disable = (owner->view()->the_locking_inset->LyxCode() != Inset::TABULAR_CODE) &&
+ !owner->view()->the_locking_inset->GetFirstLockingInsetOfType(Inset::TABULAR_CODE);
+ }
+ break;
+
+ case LFUN_TABULAR_FEATURE:
+ disable = true;
+ if (owner->view()->the_locking_inset) {
+ int ret = 0;
+ if (owner->view()->the_locking_inset->LyxCode() == Inset::TABULAR_CODE) {
+ ret = static_cast<InsetTabular *>
+ (owner->view()->the_locking_inset)->
+ getStatus(argument);
+ } else if (owner->view()->the_locking_inset->GetFirstLockingInsetOfType(Inset::TABULAR_CODE)) {
+ ret = static_cast<InsetTabular *>
+ (owner->view()->the_locking_inset->
+ GetFirstLockingInsetOfType(Inset::TABULAR_CODE))->
+ getStatus(argument);
+ }
+ switch(ret) {
+ case 0:
+ break;
+ case 1:
+ disable = false;
+ break;
+ case 2:
+ disable = false;
+ flag |= LyXFunc::ToggleOn;
+ break;
+ case 3:
+ disable = false;
+ flag |= LyXFunc::ToggleOff;
+ break;
+ }
+ }
+ break;
+
+ case LFUN_VC_REGISTER:
+ disable = buf->lyxvc.inUse();
+ break;
+ case LFUN_VC_CHECKIN:
+ disable = !buf->lyxvc.inUse() || buf->isReadonly();
+ break;
+ case LFUN_VC_CHECKOUT:
+ disable = !buf->lyxvc.inUse() || !buf->isReadonly();
+ break;
+ case LFUN_VC_REVERT:
+ case LFUN_VC_UNDO:
+ case LFUN_VC_HISTORY:
+ disable = !buf->lyxvc.inUse();
break;
default:
break;
if (buf) {
func_status box = LyXFunc::ToggleOff;
- LyXFont font = owner->view()->text->real_current_font;
+ LyXFont font;
+ if (owner->view()->the_locking_inset &&
+ owner->view()->the_locking_inset->getLyXText(owner->view()))
+ font = owner->view()->the_locking_inset->
+ getLyXText(owner->view())->real_current_font;
+ else
+ font = owner->view()->text->real_current_font;
switch (action) {
case LFUN_EMPH:
if (font.emph() == LyXFont::ON)
// 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)) {
owner->view()->hideCursor();
// We cannot use this function here
- if (getStatus(action) & Disabled)
+ if (getStatus(ac) & 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) {
- if (action > 1
- || (action == LFUN_UNKNOWN_ACTION
- && keyseq.length >= -1)) {
- if (action == LFUN_UNKNOWN_ACTION
- && argument.empty()) {
+ UpdatableInset::RESULT result;
+ if ((action > 1) || ((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.
int slx, sly;
UpdatableInset * inset =
owner->view()->the_locking_inset;
- inset->GetCursorPos(slx, sly);
+ inset->GetCursorPos(owner->view(), slx, sly);
owner->view()->unlockInset(inset);
owner->view()->menuUndo();
- if (owner->view()->text->cursor.par->
- IsInset(owner->view()->text->cursor.pos)) {
+ if (owner->view()->text->cursor.par()->
+ IsInset(owner->view()->text->cursor.pos())) {
inset = static_cast<UpdatableInset*>(
- owner->view()->text->cursor.par->
+ owner->view()->text->cursor.par()->
GetInset(owner->view()->text->
- cursor.pos));
+ cursor.pos()));
} else {
inset = 0;
}
int slx, sly;
UpdatableInset * inset = owner->view()->
the_locking_inset;
- inset->GetCursorPos(slx, sly);
+ inset->GetCursorPos(owner->view(), slx, sly);
owner->view()->unlockInset(inset);
owner->view()->menuRedo();
inset = static_cast<UpdatableInset*>(
- owner->view()->text->cursor.par->
+ owner->view()->text->cursor.par()->
GetInset(owner->view()->text->
- cursor.pos));
+ cursor.pos()));
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();
- 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();
+ switch(action) {
+ case LFUN_UNKNOWN_ACTION:
+ case LFUN_BREAKPARAGRAPH:
+ case LFUN_BREAKLINE:
+ owner->view()->text->CursorRight(owner->view());
+ owner->view()->setState();
+ owner->showState();
+ break;
+ case LFUN_RIGHT:
+ if (!owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) {
+ owner->view()->text->CursorRight(owner->view());
+ moveCursorUpdate(false);
+ owner->showState();
+ }
+ return string();
+ case LFUN_LEFT:
+ if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) {
+ owner->view()->text->CursorRight(owner->view());
+ moveCursorUpdate(false);
+ owner->showState();
+ }
+ return string();
+ case LFUN_DOWN:
+ owner->view()->text->CursorDown(owner->view());
moveCursorUpdate(false);
- owner->getMiniBuffer()->
- Set(CurrentState());
- }
- if ((action == LFUN_LEFT) ||
- (action == LFUN_RIGHT))
+ owner->showState();
return string();
+ default:
+ break;
+ }
}
}
}
if (!searched_string.empty() &&
((action == LFUN_WORDFINDBACKWARD) ?
- ltCur->SearchBackward(searched_string.c_str()) :
- ltCur->SearchForward(searched_string.c_str()))) {
+ ltCur->SearchBackward(owner->view(), searched_string.c_str()) :
+ ltCur->SearchForward(owner->view(), searched_string.c_str()))) {
// ??? What is that ???
- owner->view()->update(-2);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
// ??? Needed ???
// clear the selection (if there is any)
// Move cursor so that successive C-s 's will not stand in place.
if( action == LFUN_WORDFINDFORWARD )
- owner->view()->text->CursorRightOneWord();
+ owner->view()->text->CursorRightOneWord(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
case LFUN_PREFIX:
{
if (owner->view()->available()) {
- owner->view()->update(-2);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
}
string buf;
keyseq.print(buf, true);
case LFUN_APPENDIX:
if (owner->view()->available()) {
- owner->view()->text->toggleAppendix();
- owner->view()->update(1);
+ owner->view()->text->toggleAppendix(owner->view());
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
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!"));
- //}
+ if (!owner->buffer()->isUnnamed()) {
+ owner->getMiniBuffer()->Set(_("Saving document"),
+ MakeDisplayPath(owner->buffer()->fileName()),
+ "...");
+ MenuWrite(owner->buffer());
+ //owner->getMiniBuffer()-> {
+ // Set(_("Document saved as"),
+ // MakeDisplayPath(owner->buffer()->fileName()));
+ //} else {
+ //owner->getMiniBuffer()->Set(_("Save failed!"));
+ //}
+ } else {
+ MenuWriteAs(owner->buffer());
+ }
break;
case LFUN_MENUWRITEAS:
break;
case LFUN_MENUPRINT:
- MenuPrint(owner->buffer());
+ owner->getDialogs()->showPrint();
break;
-
+
case LFUN_FAX:
MenuFax(owner->buffer());
break;
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();
break;
case LFUN_TOCVIEW:
- TocUpdateCB(0, 0);
- if (fd_form_toc->form_toc->visible) {
- fl_raise_form(fd_form_toc->form_toc);
- } else {
- static int ow = -1, oh;
- fl_show_form(fd_form_toc->form_toc,
- FL_PLACE_MOUSE |
- FL_FREE_SIZE, FL_FULLBORDER,
- _("Table of Contents"));
- if (ow < 0) {
- ow = fd_form_toc->form_toc->w;
- oh = fd_form_toc->form_toc->h;
- }
- fl_set_form_minsize(fd_form_toc->form_toc, ow, oh);
- }
+ case LFUN_LOFVIEW:
+ case LFUN_LOTVIEW:
+ case LFUN_LOAVIEW:
+ {
+ InsetCommandParams p;
+
+ if( action == LFUN_TOCVIEW )
+ p.setCmdName( "tableofcontents" );
+ else if( action == LFUN_LOAVIEW )
+ p.setCmdName( "listofalgorithms" );
+ else if( action == LFUN_LOFVIEW )
+ p.setCmdName( "listoffigures" );
+ else
+ p.setCmdName( "listoftables" );
+
+ owner->getDialogs()->createTOC( p.getAsString() );
break;
-
+ }
+
case LFUN_TOC_INSERT:
- {
- Inset * new_inset = new InsetTOC(owner->buffer());
- owner->view()->insertInset(new_inset, "Standard", true);
- break;
- }
-
- case LFUN_LOF_INSERT:
- {
- Inset * new_inset = new InsetLOF(owner->buffer());
- owner->view()->insertInset(new_inset, "Standard", true);
- break;
- }
-
case LFUN_LOA_INSERT:
- {
- Inset * new_inset = new InsetLOA(owner->buffer());
- owner->view()->insertInset(new_inset, "Standard", true);
- break;
- }
-
+ case LFUN_LOF_INSERT:
case LFUN_LOT_INSERT:
{
- Inset * new_inset = new InsetLOT(owner->buffer());
- owner->view()->insertInset(new_inset, "Standard", true);
+ InsetCommandParams p;
+
+ if( action == LFUN_TOC_INSERT )
+ p.setCmdName( "tableofcontents" );
+ else if( action == LFUN_LOA_INSERT )
+ p.setCmdName( "listofalgorithms" );
+ else if( action == LFUN_LOF_INSERT )
+ p.setCmdName( "listoffigures" );
+ else
+ p.setCmdName( "listoftables" );
+
+ Inset * inset = new InsetTOC( p );
+ if( !owner->view()->insertInset( inset, "Standard", true ) )
+ delete inset;
break;
}
case LFUN_TABLE:
+#ifndef NEW_TABULAR
Table();
+#else
+ owner->getDialogs()->showTabularCreate();
+#endif
break;
+ case LFUN_TABULAR_FEATURE:
+ case LFUN_SCROLL_INSET:
+ // this is not handled here as this funktion is only aktive
+ // if we have a locking_inset and that one is (or contains)
+ // a tabular-inset
+ break;
+
case LFUN_FIGURE:
Figure();
break;
- case LFUN_INSERT_GRAPHICS:
+ case LFUN_INSET_GRAPHICS:
{
Inset * new_inset = new InsetGraphics;
- owner->view()->insertInset(new_inset);
+ if (!owner->view()->insertInset(new_inset)) {
+ delete new_inset;
+ } else {
+ // this is need because you don't use a inset->Edit()
+ owner->view()->updateInset(new_inset, true);
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ }
break;
}
case LFUN_AUTOSAVE:
- AutoSave();
+ AutoSave(owner->view());
break;
case LFUN_UNDO:
static LyXFindReplace FR_;
FR_.StartSearch(owner->view());
}
-
- break;
+ break;
case LFUN_PASTE:
owner->view()->paste();
+ owner->view()->setState();
break;
case LFUN_PASTESELECTION:
{
bool asPara = false;
if (argument == "paragraph") asPara = true;
- MenuPasteSelection(asPara);
- break;
+ owner->view()->pasteClipboard(asPara);
}
-
+ break;
+
case LFUN_CUT:
owner->view()->cut();
break;
case LFUN_LAYOUT_PASTE:
owner->view()->pasteEnvironment();
+ owner->view()->setState();
break;
case LFUN_GOTOERROR:
if (owner->view()->removeAutoInsets()) {
owner->view()->redraw();
owner->view()->fitCursor();
- owner->view()->updateScrollbar();
+ //owner->view()->updateScrollbar();
}
break;
case LFUN_GOTONOTE:
owner->view()->gotoNote();
break;
-
+
+#ifndef NEW_INSETS
case LFUN_OPENSTUFF:
owner->view()->openStuff();
break;
+#endif
case LFUN_HYPHENATION:
owner->view()->hyphenationPoint();
break;
case LFUN_FREE:
- Free();
+ Free(owner->view());
+ owner->view()->setState();
+ owner->showState();
break;
case LFUN_TEX:
- Tex();
+ Tex(owner->view());
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
-
+#ifndef NEW_INSETS
case LFUN_MELT:
Melt(owner->view());
break;
-
+#endif
case LFUN_RECONFIGURE:
Reconfigure(owner->view());
break;
-
+#ifndef NEW_INSETS
case LFUN_FOOTMELT:
if (owner->view()->available()
&& !owner->view()->text->selection
- && owner->view()->text->cursor.par->footnoteflag
+ && owner->view()->text->cursor.par()->footnoteflag
!= LyXParagraph::NO_FOOTNOTE)
{ // only melt footnotes with FOOTMELT, not margins etc
- if(owner->view()->text->cursor.par->footnotekind == LyXParagraph::FOOTNOTE)
+ if(owner->view()->text->cursor.par()->footnotekind == LyXParagraph::FOOTNOTE)
Melt(owner->view());
}
else
case LFUN_MARGINMELT:
if (owner->view()->available()
&& !owner->view()->text->selection
- && owner->view()->text->cursor.par->footnoteflag
+ && owner->view()->text->cursor.par()->footnoteflag
!= LyXParagraph::NO_FOOTNOTE) {
// only melt margins
- if(owner->view()->text->cursor.par->footnotekind == LyXParagraph::MARGIN)
+ if(owner->view()->text->cursor.par()->footnotekind == LyXParagraph::MARGIN)
Melt(owner->view());
} else
Margin(owner->view());
owner->view()->setState();
break;
-
+#endif
+ case LFUN_HELP_COPYRIGHT:
+ owner->getDialogs()->showCopyright();
+ break;
+
+ case LFUN_HELP_CREDITS:
+ owner->getDialogs()->showCredits();
+ break;
+
+ case LFUN_HELP_OPEN: {
+ string arg = argument;
+ if (arg.empty()) {
+ setErrorMessage(N_("Missing argument"));
+ break;
+ }
+ ProhibitInput(owner->view());
+ string fname = i18nLibFileSearch("doc", arg, "lyx");
+ if (fname.empty()) {
+ lyxerr << "LyX: unable to find documentation file `"
+ << arg << "'. Bad installation?" << endl;
+ AllowInput(owner->view());
+ break;
+ }
+ owner->getMiniBuffer()->Set(_("Opening help file"),
+ MakeDisplayPath(fname),"...");
+ owner->view()->buffer(bufferlist.loadLyXFile(fname,false));
+ AllowInput(owner->view());
+ break;
+ }
+
+ case LFUN_HELP_VERSION:
+ ProhibitInput(owner->view());
+ fl_show_message((string(_("LyX Version ")) + LYX_VERSION
+ + _(" of ") + LYX_RELEASE).c_str(),
+ (_("Library directory: ")
+ + MakeDisplayPath(system_lyxdir)).c_str(),
+ (_("User directory: ")
+ + MakeDisplayPath(user_lyxdir)).c_str());
+ AllowInput(owner->view());
+ break;
+
// --- version control -------------------------------
case LFUN_VC_REGISTER:
{
// --- buffers ----------------------------------------
+ case LFUN_SWITCHBUFFER:
+ owner->view()->buffer(bufferlist.getBuffer(argument));
+ break;
+
+
case LFUN_FILE_INSERT:
{
MenuInsertLyXFile(argument);
// 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);
if (current_layout != layout.second) {
owner->view()->hideCursor();
current_layout = layout.second;
- owner->view()->update(-2);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->
- SetLayout(layout.second);
- owner->getToolbar()->combox->
- select(owner->view()->
- text->cursor.par->
- GetLayout() + 1);
- owner->view()->update(1);
+ SetLayout(owner->view(), layout.second);
+ owner->setLayout(layout.second);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ owner->view()->setState();
}
}
break;
case LFUN_LAYOUT_DOCUMENT:
+#ifdef USE_OLD_LAYOUT
MenuLayoutDocument();
+#else
+ owner->getDialogs()->showLayoutDocument();
+#endif
break;
case LFUN_LAYOUT_PARAGRAPH:
}
break;
+ case LFUN_LAYOUT_TABULAR:
+ if (owner->view()->the_locking_inset) {
+ if (owner->view()->the_locking_inset->LyxCode()==Inset::TABULAR_CODE) {
+ InsetTabular * inset = static_cast<InsetTabular *>
+ (owner->view()->the_locking_inset);
+ inset->OpenLayoutDialog(owner->view());
+ } else if (owner->view()->the_locking_inset->
+ GetFirstLockingInsetOfType(Inset::TABULAR_CODE)!=0) {
+ InsetTabular * inset = static_cast<InsetTabular *>(
+ owner->view()->the_locking_inset->GetFirstLockingInsetOfType(Inset::TABULAR_CODE));
+ inset->OpenLayoutDialog(owner->view());
+ }
+ }
+ break;
+
case LFUN_LAYOUT_PAPER:
MenuLayoutPaper();
break;
break;
case LFUN_DROP_LAYOUTS_CHOICE:
- owner->getToolbar()->combox->Show();
+ owner->getToolbar()->openLayoutList();
break;
case LFUN_LANGUAGE:
- {
- LangCB(argument);
+ Lang(owner->view(), argument);
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
- }
+ owner->showState();
break;
case LFUN_EMPH:
- Emph();
+ Emph(owner->view());
+ owner->showState();
break;
-
+
case LFUN_BOLD:
- Bold();
+ Bold(owner->view());
+ owner->showState();
break;
case LFUN_NOUN:
- Noun();
+ Noun(owner->view());
+ owner->showState();
break;
case LFUN_CODE:
- Code();
+ Code(owner->view());
+ owner->showState();
break;
case LFUN_SANS:
- Sans();
+ Sans(owner->view());
+ owner->showState();
break;
case LFUN_ROMAN:
- Roman();
+ Roman(owner->view());
+ owner->showState();
break;
case LFUN_DEFAULT:
- StyleReset();
+ StyleReset(owner->view());
+ owner->showState();
break;
case LFUN_UNDERLINE:
- Underline();
+ Underline(owner->view());
+ owner->showState();
break;
case LFUN_FONT_SIZE:
- FontSize(argument);
+ FontSize(owner->view(), argument);
+ owner->showState();
break;
case LFUN_FONT_STATE:
- setMessage(CurrentState());
+ setMessage(CurrentState(owner->view()));
break;
case LFUN_UPCASE_WORD:
- owner->view()->update(-2);
- FreeUpdateTimer();
- owner->view()->text->ChangeWordCase(LyXText::text_uppercase);
- owner->view()->update(1);
- SetUpdateTimer();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->ChangeWordCase(owner->view(),
+ LyXText::text_uppercase);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
case LFUN_LOWCASE_WORD:
- owner->view()->update(-2);
- FreeUpdateTimer();
- owner->view()->text->ChangeWordCase(LyXText::text_lowercase);
- owner->view()->update(1);
- SetUpdateTimer();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->ChangeWordCase(owner->view(),
+ LyXText::text_lowercase);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
case LFUN_CAPITALIZE_WORD:
- owner->view()->update(-2);
- FreeUpdateTimer();
- owner->view()->text->ChangeWordCase(LyXText::text_capitalization);
- owner->view()->update(1);
- SetUpdateTimer();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->ChangeWordCase(owner->view(),
+ LyXText::text_capitalization);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
case LFUN_INSERT_LABEL:
MenuInsertLabel(argument.c_str());
break;
- case LFUN_INSERT_REF:
- MenuInsertRef();
- break;
+ case LFUN_REF_CREATE:
+ {
+ InsetCommandParams p( "ref" );
+ owner->getDialogs()->createRef( p.getAsString() );
+ }
+ break;
- case LFUN_REFTOGGLE:
+ case LFUN_REF_INSERT:
{
- InsetRef * inset =
- static_cast<InsetRef*>(getInsetByCode(Inset::REF_CODE));
- if (inset) {
- if (inset->getFlag() == InsetRef::REF)
- inset->setFlag(InsetRef::PAGE_REF);
- else
- inset->setFlag(InsetRef::REF);
- owner->view()->updateInset(inset, true);
- } else {
- setErrorMessage(N_("No cross-reference to toggle"));
- }
+ InsetCommandParams p;
+ p.setFromString( argument );
+
+ InsetRef * inset = new InsetRef( p );
+ if (!owner->view()->insertInset(inset))
+ delete inset;
+ else
+ owner->view()->updateInset( inset, true );
}
break;
-
- case LFUN_REFBACK:
+
+ case LFUN_REF_BACK:
{
owner->view()->restorePosition();
}
break;
- case LFUN_REFGOTO:
+ case LFUN_REF_GOTO:
{
string label(argument);
if (label.empty()) {
if (!label.empty()) {
owner->view()->savePosition();
- owner->view()->gotoLabel(label.c_str());
+ if (!owner->view()->gotoLabel(label))
+ WriteAlert(_("Error"),
+ _("Couldn't find this label"),
+ _("in current document."));
}
}
break;
case LFUN_MENU_OPEN_BY_NAME:
+#ifdef NEW_MENUBAR
+ owner->getMenubar()->openByName(argument);
+#else
owner->getMenus()->openByName(argument);
+#endif
break; // RVDK_PATCH_5
case LFUN_SPELLCHECK:
case LFUN_RIGHT:
{
LyXText * tmptext = owner->view()->text;
- LyXDirection direction =
- tmptext->cursor.par->getParDirection();
+ bool is_rtl = tmptext->cursor.par()->isRightToLeftPar(owner->buffer()->params);
if(!tmptext->mark_set)
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)
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ if (is_rtl)
+ tmptext->CursorLeft(owner->view(), false);
+ 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() == Inset::HIGHLY_EDITABLE){
- Inset * tmpinset = tmptext->cursor.par->GetInset(tmptext->cursor.pos);
+ && tmptext->cursor.par()->GetInset(tmptext->cursor.pos())
+ && 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(owner->view(), 0, 0, 0);
break;
}
- if (direction == LYX_DIR_LEFT_TO_RIGHT)
- tmptext->CursorRight();
+ if (!is_rtl)
+ tmptext->CursorRight(owner->view(), false);
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
}
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(owner->buffer()->params);
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)
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ if (!is_rtl)
+ txt->CursorLeft(owner->view(), false);
+ 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() == Inset::HIGHLY_EDITABLE) {
- Inset * tmpinset = txt->cursor.par->GetInset(txt->cursor.pos);
+ && txt->cursor.par()->GetInset(txt->cursor.pos())
+ && txt->cursor.par()->GetInset(txt->cursor.pos())->Editable() == Inset::HIGHLY_EDITABLE) {
+ Inset * tmpinset = txt->cursor.par()->GetInset(txt->cursor.pos());
setMessage(tmpinset->EditMessage());
+ LyXFont font = txt->GetFont(owner->view()->buffer(),
+ txt->cursor.par(),
+ txt->cursor.pos());
tmpinset->Edit(owner->view(),
- tmpinset->width(owner->view()->painter(),
- txt->GetFont(txt->cursor.par,
- txt->cursor.pos)),
- 0, 0);
+ tmpinset->x() +
+ tmpinset->width(owner->view(),font),
+ tmpinset->descent(owner->view(),font),
+ 0);
break;
}
- if (direction == LYX_DIR_RIGHT_TO_LEFT)
- txt->CursorRight();
+ if (is_rtl)
+ txt->CursorRight(owner->view(), false);
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
}
break;
case LFUN_UP:
if(!owner->view()->text->mark_set) owner->view()->beforeChange();
- owner->view()->update(-3);
- owner->view()->text->CursorUp();
+ owner->view()->update(BufferView::UPDATE);
+ owner->view()->text->CursorUp(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_DOWN:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-3);
- owner->view()->text->CursorDown();
+ owner->view()->update(BufferView::UPDATE);
+ owner->view()->text->CursorDown(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_UP_PARAGRAPH:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-3);
- owner->view()->text->CursorUpParagraph();
+ owner->view()->update(BufferView::UPDATE);
+ owner->view()->text->CursorUpParagraph(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_DOWN_PARAGRAPH:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-3);
- owner->view()->text->CursorDownParagraph();
+ owner->view()->update(BufferView::UPDATE);
+ owner->view()->text->CursorDownParagraph(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_PRIOR:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-3);
+ owner->view()->update(BufferView::UPDATE);
owner->view()->cursorPrevious();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_NEXT:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-3);
+ owner->view()->update(BufferView::UPDATE);
owner->view()->cursorNext();
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_HOME:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-2);
- owner->view()->text->CursorHome();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorHome(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_END:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-2);
- owner->view()->text->CursorEnd();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorEnd(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
+ case LFUN_SHIFT_TAB:
case LFUN_TAB:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-2);
- owner->view()->text->CursorTab();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorTab(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
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();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ owner->view()->text->CursorLeftOneWord(owner->view());
else
- owner->view()->text->CursorLeftOneWord();
+ owner->view()->text->CursorRightOneWord(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
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();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ owner->view()->text->CursorRightOneWord(owner->view());
else
- owner->view()->text->CursorRightOneWord();
+ owner->view()->text->CursorLeftOneWord(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_BEGINNINGBUF:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-2);
- owner->view()->text->CursorTop();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorTop(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_ENDBUF:
if(!owner->view()->text->mark_set)
owner->view()->beforeChange();
- owner->view()->update(-2);
- owner->view()->text->CursorBottom();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorBottom(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
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();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ owner->view()->text->CursorLeft(owner->view());
else
- owner->view()->text->CursorLeft();
+ owner->view()->text->CursorRight(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_LEFTSEL:
- owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorLeft();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ owner->view()->text->CursorRight(owner->view());
else
- owner->view()->text->CursorRight();
+ owner->view()->text->CursorLeft(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_UPSEL:
- owner->view()->update(-2);
- owner->view()->text->CursorUp();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorUp(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_DOWNSEL:
- owner->view()->update(-2);
- owner->view()->text->CursorDown();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorDown(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_UP_PARAGRAPHSEL:
- owner->view()->update(-2);
- owner->view()->text->CursorUpParagraph();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorUpParagraph(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_DOWN_PARAGRAPHSEL:
- owner->view()->update(-2);
- owner->view()->text->CursorDownParagraph();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorDownParagraph(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_PRIORSEL:
- owner->view()->update(-2);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->cursorPrevious();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_NEXTSEL:
- owner->view()->update(-2);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->cursorNext();
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_HOMESEL:
- owner->view()->update(-2);
- owner->view()->text->CursorHome();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorHome(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_ENDSEL:
- owner->view()->update(-2);
- owner->view()->text->CursorEnd();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorEnd(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_WORDRIGHTSEL:
- owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorRightOneWord();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ owner->view()->text->CursorLeftOneWord(owner->view());
else
- owner->view()->text->CursorLeftOneWord();
+ owner->view()->text->CursorRightOneWord(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_WORDLEFTSEL:
- owner->view()->update(-2);
- if (owner->view()->text->cursor.par->getParDirection()
- == LYX_DIR_LEFT_TO_RIGHT)
- owner->view()->text->CursorLeftOneWord();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ owner->view()->text->CursorRightOneWord(owner->view());
else
- owner->view()->text->CursorRightOneWord();
+ owner->view()->text->CursorLeftOneWord(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_BEGINNINGBUFSEL:
- owner->view()->update(-2);
- owner->view()->text->CursorTop();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorTop(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
case LFUN_ENDBUFSEL:
- owner->view()->update(-2);
- owner->view()->text->CursorBottom();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->CursorBottom(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(true);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
// --- text changing commands ------------------------
case LFUN_BREAKLINE:
-#if 1
owner->view()->beforeChange();
- owner->view()->text->InsertChar(LyXParagraph::META_NEWLINE);
- owner->view()->smallUpdate(1);
- SetUpdateTimer(0.01);
+ owner->view()->text->InsertChar(owner->view(), LyXParagraph::META_NEWLINE);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
-#else
- owner->view()->newline();
-#endif
break;
case LFUN_PROTECTEDSPACE:
-#if 1
{
LyXLayout const & style =
textclasslist.Style(owner->view()->buffer()->params.textclass,
- owner->view()->text->cursor.par->GetLayout());
+ owner->view()->text->cursor.par()->GetLayout());
if (style.free_spacing) {
- owner->view()->text->InsertChar(' ');
- owner->view()->update(-1);
+ owner->view()->text->InsertChar(owner->view(), ' ');
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
} else {
owner->view()->protectedBlank();
}
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()->beforeChange();
- owner->view()->update(0);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
setMessage(N_("Mark removed"));
} else {
owner->view()->beforeChange();
owner->view()->text->mark_set = 1;
- owner->view()->update(0);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
setMessage(N_("Mark set"));
}
owner->view()->text->sel_cursor =
break;
case LFUN_DELETE:
- FreeUpdateTimer();
if (!owner->view()->text->selection) {
- owner->view()->text->Delete();
+ owner->view()->text->Delete(owner->view());
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
- owner->view()->smallUpdate(1);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
// It is possible to make it a lot faster still
// just comment out the lone below...
owner->view()->showCursor();
} else {
owner->view()->cut();
}
- SetUpdateTimer();
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
owner->view()->setState();
break;
LyXCursor cursor = owner->view()->text->cursor;
- FreeUpdateTimer();
if (!owner->view()->text->selection) {
- if (cursor.pos == cursor.par->Last()) {
- owner->view()->text->CursorRight();
+ if (cursor.pos() == cursor.par()->Last()) {
+ owner->view()->text->CursorRight(owner->view());
cursor = owner->view()->text->cursor;
- if (cursor.pos == 0
- && !(cursor.par->added_space_top
+ if (cursor.pos() == 0
+ && !(cursor.par()->added_space_top
== VSpace (VSpace::NONE))) {
owner->view()->text->SetParagraph
- (cursor.par->line_top,
- cursor.par->line_bottom,
- cursor.par->pagebreak_top,
- cursor.par->pagebreak_bottom,
+ (owner->view(),
+ cursor.par()->line_top,
+ cursor.par()->line_bottom,
+ cursor.par()->pagebreak_top,
+ cursor.par()->pagebreak_bottom,
VSpace(VSpace::NONE),
- cursor.par->added_space_bottom,
- cursor.par->align,
- cursor.par->labelwidthstring, 0);
- owner->view()->text->CursorLeft();
- owner->view()->update (1);
+ cursor.par()->added_space_bottom,
+ cursor.par()->align,
+ cursor.par()->labelwidthstring, 0);
+ owner->view()->text->CursorLeft(owner->view());
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
} else {
- owner->view()->text->CursorLeft();
- owner->view()->text->Delete();
+ owner->view()->text->CursorLeft(owner->view());
+ owner->view()->text->Delete(owner->view());
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
- owner->view()->smallUpdate(1);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
} else {
- owner->view()->text->Delete();
+ owner->view()->text->Delete(owner->view());
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
- owner->view()->smallUpdate(1);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
} else {
owner->view()->cut();
}
- SetUpdateTimer();
}
break;
/* -------> Delete word forward. */
case LFUN_DELETE_WORD_FORWARD:
- owner->view()->update(-2);
- FreeUpdateTimer();
- owner->view()->text->DeleteWordForward();
- owner->view()->update( 1 );
- SetUpdateTimer();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->DeleteWordForward(owner->view());
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
/* -------> Delete word backward. */
case LFUN_DELETE_WORD_BACKWARD:
- owner->view()->update(-2);
- FreeUpdateTimer();
- owner->view()->text->DeleteWordBackward();
- owner->view()->update( 1 );
- SetUpdateTimer();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->DeleteWordBackward(owner->view());
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
/* -------> Kill to end of line. */
case LFUN_DELETE_LINE_FORWARD:
- FreeUpdateTimer();
- owner->view()->update(-2);
- owner->view()->text->DeleteLineForward();
- owner->view()->update( 1 );
- SetUpdateTimer();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ owner->view()->text->DeleteLineForward(owner->view());
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
break;
/* -------> Set mark off. */
case LFUN_MARK_OFF:
owner->view()->beforeChange();
- owner->view()->update(0);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
setMessage(N_("Mark off"));
case LFUN_MARK_ON:
owner->view()->beforeChange();
owner->view()->text->mark_set = 1;
- owner->view()->update( 0 );
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
setMessage(N_("Mark on"));
case LFUN_BACKSPACE:
{
- FreeUpdateTimer();
if (!owner->view()->text->selection) {
if (owner->getIntl()->getTrans()->backspace()) {
- owner->view()->text->Backspace();
+ owner->view()->text->Backspace(owner->view());
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
- owner->view()->smallUpdate(1);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
// It is possible to make it a lot faster still
// just comment out the lone below...
owner->view()->showCursor();
} else {
owner->view()->cut();
}
- SetUpdateTimer();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
owner->view()->setState();
}
break;
LyXCursor cursor = owner->view()->text->cursor;
- FreeUpdateTimer();
if (!owner->view()->text->selection) {
- if (cursor.pos == 0
- && !(cursor.par->added_space_top
+ if (cursor.pos() == 0
+ && !(cursor.par()->added_space_top
== VSpace (VSpace::NONE))) {
owner->view()->text->SetParagraph
- (cursor.par->line_top,
- cursor.par->line_bottom,
- cursor.par->pagebreak_top,
- cursor.par->pagebreak_bottom,
- VSpace(VSpace::NONE), cursor.par->added_space_bottom,
- cursor.par->align,
- cursor.par->labelwidthstring, 0);
- owner->view()->update (1);
+ (owner->view(),
+ cursor.par()->line_top,
+ cursor.par()->line_bottom,
+ cursor.par()->pagebreak_top,
+ cursor.par()->pagebreak_bottom,
+ VSpace(VSpace::NONE), cursor.par()->added_space_bottom,
+ cursor.par()->align,
+ cursor.par()->labelwidthstring, 0);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
} else {
- owner->view()->text->Backspace();
+ owner->view()->text->Backspace(owner->view());
owner->view()->text->sel_cursor
= cursor;
- owner->view()->smallUpdate (1);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
} else
owner->view()->cut();
- SetUpdateTimer();
}
break;
case LFUN_BREAKPARAGRAPH:
{
owner->view()->beforeChange();
- owner->view()->text->BreakParagraph(0);
- owner->view()->smallUpdate(1);
- SetUpdateTimer(0.01);
+ owner->view()->text->BreakParagraph(owner->view(), 0);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
}
case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
{
owner->view()->beforeChange();
- owner->view()->text->BreakParagraph(1);
- owner->view()->smallUpdate(1);
- SetUpdateTimer(0.01);
+ owner->view()->text->BreakParagraph(owner->view(), 1);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
break;
}
LyXCursor cursor = owner->view()->text->cursor;
owner->view()->beforeChange();
- if (cursor.pos == 0) {
- if (cursor.par->added_space_top == VSpace(VSpace::NONE)) {
+ if (cursor.pos() == 0) {
+ if (cursor.par()->added_space_top == VSpace(VSpace::NONE)) {
owner->view()->text->SetParagraph
- (cursor.par->line_top,
- cursor.par->line_bottom,
- cursor.par->pagebreak_top,
- cursor.par->pagebreak_bottom,
- VSpace(VSpace::DEFSKIP), cursor.par->added_space_bottom,
- cursor.par->align,
- cursor.par->labelwidthstring, 1);
- owner->view()->update(1);
+ (owner->view(),
+ cursor.par()->line_top,
+ cursor.par()->line_bottom,
+ cursor.par()->pagebreak_top,
+ cursor.par()->pagebreak_bottom,
+ VSpace(VSpace::DEFSKIP), cursor.par()->added_space_bottom,
+ cursor.par()->align,
+ cursor.par()->labelwidthstring, 1);
+ //owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
}
else {
- owner->view()->text->BreakParagraph(0);
- owner->view()->smallUpdate(1);
+ owner->view()->text->BreakParagraph(owner->view(), 0);
+ //owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
- SetUpdateTimer(0.01);
+
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
owner->view()->text->sel_cursor = cursor;
owner->view()->setState();
- owner->getMiniBuffer()->Set(CurrentState());
+ owner->showState();
+ }
+ break;
+
+ case LFUN_PARAGRAPH_SPACING:
+ {
+ LyXParagraph * par = owner->view()->text->cursor.par();
+ Spacing::Space cur_spacing = par->spacing.getSpace();
+ float cur_value = 1.0;
+ if (cur_spacing == Spacing::Other) {
+ cur_value = par->spacing.getValue();
+ }
+
+#ifdef HAVE_SSTREAM
+ istringstream istr(argument);
+#else
+ istrstream istr(argument.c_str());
+#endif
+ string tmp;
+ istr >> tmp;
+ Spacing::Space new_spacing = cur_spacing;
+ float new_value = cur_value;
+ if (tmp.empty()) {
+ lyxerr << "Missing argument to `paragraph-spacing'"
+ << endl;
+ } else if (tmp == "single") {
+ new_spacing = Spacing::Single;
+ } else if (tmp == "onehalf") {
+ new_spacing = Spacing::Onehalf;
+ } else if (tmp == "double") {
+ new_spacing = Spacing::Double;
+ } else if (tmp == "other") {
+ new_spacing = Spacing::Other;
+ float tmpval = 0.0;
+ istr >> tmpval;
+ lyxerr << "new_value = " << tmpval << endl;
+ if (tmpval != 0.0)
+ new_value = tmpval;
+ } else if (tmp == "default") {
+ new_spacing = Spacing::Default;
+ } else {
+ lyxerr << _("Unknown spacing argument: ")
+ << argument << endl;
+ }
+ if (cur_spacing != new_spacing || cur_value != new_value) {
+ par->spacing.set(new_spacing, new_value);
+ owner->view()->text->RedoParagraph(owner->view());
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+ }
}
break;
case LFUN_QUOTE:
owner->view()->beforeChange();
- owner->view()->text->InsertChar('\"'); // This " matches the single quote in the code
- owner->view()->smallUpdate(1);
- SetUpdateTimer();
+ owner->view()->text->InsertChar(owner->view(), '\"'); // This " matches the single quote in the code
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
break;
case LFUN_HTMLURL:
case LFUN_URL:
{
- InsetCommand * new_inset;
+ InsetCommandParams p;
if (action == LFUN_HTMLURL)
- new_inset = new InsetUrl("htmlurl", "", "");
+ p.setCmdName("htmlurl");
else
- new_inset = new InsetUrl("url", "", "");
- owner->view()->insertInset(new_inset);
- new_inset->Edit(owner->view(), 0, 0, 0);
+ p.setCmdName("url");
+ owner->getDialogs()->createUrl( p.getAsString() );
}
break;
+
+ case LFUN_INSERT_URL:
+ {
+ InsetCommandParams p;
+ p.setFromString( argument );
+
+ InsetUrl * inset = new InsetUrl( p );
+ if (!owner->view()->insertInset(inset))
+ delete inset;
+ else
+ owner->view()->updateInset( inset, true );
+ }
+ 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);
+ InsetText * new_inset = new InsetText;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
}
break;
+
case LFUN_INSET_ERT:
{
- InsetERT * new_inset = new InsetERT(owner->buffer());
- owner->view()->insertInset(new_inset);
- new_inset->Edit(owner->view(), 0, 0, 0);
+ InsetERT * new_inset = new InsetERT;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
}
break;
+
+ case LFUN_INSET_EXTERNAL:
+ {
+ InsetExternal * new_inset = new InsetExternal;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
case LFUN_INSET_FOOTNOTE:
{
- InsetFoot * new_inset = new InsetFoot(owner->buffer());
- owner->view()->insertInset(new_inset);
- new_inset->Edit(owner->view(), 0, 0, 0);
+ InsetFoot * new_inset = new InsetFoot;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_MARGINAL:
+ {
+ InsetMarginal * new_inset = new InsetMarginal;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_MINIPAGE:
+ {
+ InsetMinipage * new_inset = new InsetMinipage;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_FLOAT:
+ {
+ // check if the float type exist
+ if (floatList.typeExist(argument)) {
+ InsetFloat * new_inset = new InsetFloat(argument);
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ } else {
+ lyxerr << "Non-existant float type: "
+ << argument << endl;
+ }
+
+ }
+ break;
+
+ case LFUN_INSET_LIST:
+ {
+ InsetList * new_inset = new InsetList;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_THEOREM:
+ {
+ InsetTheorem * new_inset = new InsetTheorem;
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ break;
+
+ case LFUN_INSET_CAPTION:
+ {
+ // Do we have a locking inset...
+ if (owner->view()->the_locking_inset) {
+ lyxerr << "Locking inset code: "
+ << static_cast<int>(owner->view()->the_locking_inset->LyxCode());
+ InsetCaption * new_inset = new InsetCaption;
+ new_inset->setOwner(owner->view()->the_locking_inset);
+ new_inset->SetAutoBreakRows(true);
+ new_inset->SetDrawFrame(0, InsetText::LOCKED);
+ new_inset->SetFrameColor(0, LColor::footnoteframe);
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
+ }
+ }
+ break;
+
+ case LFUN_INSET_TABULAR:
+ {
+ 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);
+ if (owner->view()->insertInset(new_inset))
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete new_inset;
}
break;
case LFUN_CHARATCURSOR:
{
LyXParagraph::size_type pos =
- owner->view()->text->cursor.pos;
- if(pos < owner->view()->text->cursor.par->size())
+ owner->view()->text->cursor.pos();
+ if(pos < owner->view()->text->cursor.par()->size())
//dispatch_buffer = owner->view()->text->
- // cursor.par->text[pos];
+ // cursor.par()->text[pos];
dispatch_buffer =
owner->view()->text->
- cursor.par->GetChar(pos);
+ cursor.par()->GetChar(pos);
else
dispatch_buffer = "EOF";
}
case LFUN_GETXY:
dispatch_buffer =
- tostr(owner->view()->text->cursor.x) + ' '
- + tostr(owner->view()->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->view()->text->SetCursorFromCoordinates(x, y);
+ owner->view()->text->SetCursorFromCoordinates(owner->view(), x, y);
}
break;
case LFUN_GETLAYOUT:
dispatch_buffer =
- tostr(owner->view()->text->cursor.par->layout);
+ tostr(owner->view()->text->cursor.par()->layout);
break;
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';
sscanf(argument.c_str(), " %s %d", file_name, &row);
// Must replace extension of the file to be .lyx and get full path
- string s = ChangeExtension(string(file_name), ".lyx", false);
+ string s = ChangeExtension(string(file_name), ".lyx");
// Either change buffer or load the file
if (bufferlist.exists(s))
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);
- SetUpdateTimer();
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
}
case LFUN_PUSH_TOOLBAR:
{
int nth = strToInt(argument);
- if (lyxerr.debugging(Debug::TOOLBAR)) {
- lyxerr << "LFUN_PUSH_TOOLBAR: argument = `"
- << argument << "'\n"
- << "LFUN_PUSH_TOOLBAR: nth = `"
- << nth << "'" << endl;
- }
-
if (nth <= 0) {
- LyXBell();
setErrorMessage(N_("Push-toolbar needs argument > 0"));
} else {
owner->getToolbar()->push(nth);
case LFUN_ADD_TO_TOOLBAR:
{
- if (lyxerr.debugging(Debug::TOOLBAR)) {
+ if (lyxerr.debugging(Debug::GUI)) {
lyxerr << "LFUN_ADD_TO_TOOLBAR:"
"argument = `" << argument << '\'' << endl;
}
//lyxerr <<string("Argument: ") + argument);
//lyxerr <<string("Tmp : ") + tmp);
if (tmp.empty()) {
- LyXBell();
setErrorMessage(N_("Usage: toolbar-add-to <LyX command>"));
} else {
owner->getToolbar()->add(argument, false);
break;
case LFUN_MATH_MODE: // Open or create a math inset
- {
-
+ {
if (owner->view()->available())
owner->view()->open_new_inset(new InsetFormula);
setMessage(N_("Math editor mode"));
case LFUN_MATH_LIMITS:
{
setErrorMessage(N_("This is only allowed in math mode!"));
+
+ }
+ break;
+
+ case LFUN_MATH_PANEL:
+ {
+ show_symbols_form(this);
}
break;
- case LFUN_INSERT_CITATION:
- {
- InsetCitation * new_inset = new InsetCitation();
- // ale970405
- // The note, if any, must be after the key, delimited
- // by a | so both key and remark can have spaces.
- if (!argument.empty()) {
- string lsarg(argument);
- if (contains(lsarg, "|")) {
- new_inset->setContents(token(lsarg, '|', 0));
- new_inset->setOptions(token(lsarg, '|', 1));
- } else
- new_inset->setContents(lsarg);
- owner->view()->insertInset(new_inset);
+ case LFUN_CITATION_CREATE:
+ {
+ // Should do this "at source"
+ InsetCommandParams p( "cite" );
+
+ if (contains(argument, "|")) {
+ p.setContents( token(argument, '|', 0) );
+ p.setOptions( token(argument, '|', 1) );
} else {
- owner->view()->insertInset(new_inset);
- new_inset->Edit(owner->view(), 0, 0, 0);
+ p.setContents( argument );
}
+
+ owner->getDialogs()->createCitation( p.getAsString() );
+ }
+ break;
+
+ case LFUN_CITATION_INSERT:
+ {
+ InsetCommandParams p;
+ p.setFromString( argument );
+
+ InsetCitation * inset = new InsetCitation( p );
+ if (!owner->view()->insertInset(inset))
+ delete inset;
+ else
+ owner->view()->updateInset( inset, true );
}
break;
// ale970405+lasgoutt970425
// The argument can be up to two tokens separated
// by a space. The first one is the bibstyle.
- string lsarg(argument);
- string bibstyle = token(lsarg, ' ', 1);
+ string db = token(argument, ' ', 0);
+ string bibstyle = token(argument, ' ', 1);
if (bibstyle.empty())
bibstyle = "plain";
- InsetBibtex * new_inset
- = new InsetBibtex(token(lsarg, ' ', 0),
- bibstyle,
- owner->buffer());
+
+ InsetCommandParams p( "BibTeX", db, bibstyle );
+ InsetBibtex * inset = new InsetBibtex(p, owner->buffer());
- owner->view()->insertInset(new_inset);
- if (lsarg.empty()) {
- new_inset->Edit(owner->view(), 0, 0, 0);
- }
+ if (owner->view()->insertInset(inset)) {
+ if (argument.empty())
+ inset->Edit(owner->view(), 0, 0, 0);
+ } else
+ delete inset;
}
break;
}
break;
- case LFUN_INDEX_INSERT:
- case LFUN_INDEX_INSERT_LAST:
+ case LFUN_INDEX_CREATE:
{
- // Can't do that at the beginning of a paragraph.
- if (owner->view()->text->cursor.pos - 1 < 0)
- break;
+ InsetCommandParams p( "index" );
+
+ if( argument.empty() ) {
+ // Get the word immediately preceding the cursor
+ LyXParagraph::size_type curpos =
+ owner->view()->text->cursor.pos() - 1;
- InsetIndex * new_inset = new InsetIndex();
- if (!argument.empty()) {
- string lsarg(argument);
- new_inset->setContents(lsarg);
- owner->view()->insertInset(new_inset);
+ string curstring;
+ if( curpos >= 0 )
+ curstring = owner->view()->text
+ ->cursor.par()->GetWord(curpos);
+
+ p.setContents( curstring );
} else {
- //reh 98/09/21
- //get the current word for an argument
- LyXParagraph::size_type lastpos =
- owner->view()->text->cursor.pos - 1;
- // Get the current word. note that this must be done
- // before inserting the inset, or the inset will
- // break the word
- string curstring(owner->view()
- ->text->cursor.par->GetWord(lastpos));
-
- //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.
+ p.setContents( argument );
+ }
- // move the cursor to the returned value of lastpos
- // but only for the auto-insert
- owner->view()->text->cursor.pos = lastpos;
- }
+ owner->getDialogs()->createIndex( p.getAsString() );
+ }
+ break;
+
+ case LFUN_INDEX_INSERT:
+ {
+ InsetCommandParams p;
+ p.setFromString( argument );
+ InsetIndex * inset = new InsetIndex( p );
- //put the new inset into the buffer.
- // there should be some way of knowing the user
- //cancelled & avoiding this, but i don't know how
- owner->view()->insertInset(new_inset);
- }
+ if (!owner->view()->insertInset(inset))
+ delete inset;
+ else
+ owner->view()->updateInset( inset, true );
}
break;
+
+ case LFUN_INDEX_INSERT_LAST:
+ {
+ // Get word immediately preceding the cursor
+ LyXParagraph::size_type curpos =
+ owner->view()->text->cursor.pos() - 1;
+ // Can't do that at the beginning of a paragraph
+ if( curpos < 0 ) break;
+
+ string curstring( owner->view()->text
+ ->cursor.par()->GetWord(curpos) );
+ InsetCommandParams p( "index", curstring );
+ InsetIndex * inset = new InsetIndex( p );
+
+ if (!owner->view()->insertInset(inset))
+ delete inset;
+ else
+ owner->view()->updateInset( inset, true );
+ }
+ break;
+
case LFUN_INDEX_PRINT:
{
- Inset * new_inset = new InsetPrintIndex(owner->buffer());
- owner->view()->insertInset(new_inset, "Standard", true);
+ InsetCommandParams p( "printindex" );
+ Inset * inset = new InsetPrintIndex(p);
+ if (!owner->view()->insertInset(inset, "Standard", true))
+ delete inset;
}
break;
case LFUN_PARENTINSERT:
{
lyxerr << "arg " << argument << endl;
- Inset * new_inset = new InsetParent(argument, owner->buffer());
- owner->view()->insertInset(new_inset, "Standard", true);
+ InsetCommandParams p( "lyxparent", argument );
+ Inset * inset = new InsetParent(p, owner->buffer());
+ if (!owner->view()->insertInset(inset, "Standard", true))
+ delete inset;
}
break;
case LFUN_CHILDINSERT:
{
- Inset * new_inset = new InsetInclude(argument,
- owner->buffer());
- owner->view()->insertInset(new_inset, "Standard", true);
- new_inset->Edit(owner->view(), 0, 0, 0);
+ InsetCommandParams p( "Include", argument );
+ Inset * inset = new InsetInclude(p, owner->buffer());
+ if (owner->view()->insertInset(inset, "Standard", true))
+ inset->Edit(owner->view(), 0, 0, 0);
+ else
+ delete inset;
}
break;
case LFUN_INSERT_NOTE:
owner->view()->insertNote();
break;
-
+#ifndef NEW_INSETS
case LFUN_INSERTFOOTNOTE:
{
LyXParagraph::footnote_kind kind;
setErrorMessage(N_("Unknown kind of footnote"));
break;
}
- owner->view()->text->InsertFootnoteEnvironment(kind);
- owner->view()->update(1);
+ owner->view()->text->InsertFootnoteEnvironment(owner->view(), kind);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
owner->view()->setState();
}
break;
-
+#endif
case LFUN_BUFFERBULLETSSELECT:
bulletForm();
break;
case LFUN_SELFINSERT:
{
for (string::size_type i = 0; i < argument.length(); ++i) {
- owner->view()->text->InsertChar(argument[i]);
+ owner->view()->text->InsertChar(owner->view(), 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(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
- SetUpdateTimer();
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
moveCursorUpdate(false);
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;
+ struct tm * now_tm;
- now_time_t = time(NULL);
+ time_t now_time_t = time(NULL);
now_tm = localtime(&now_time_t);
- (void)setlocale(LC_TIME, "");
+ setlocale(LC_TIME, "");
+ string arg;
if (!argument.empty())
arg = argument;
- else if (arg.empty())
+ else
arg = lyxrc.date_insert_format;
- datetmp_len = (int) strftime(datetmp, 32, arg.c_str(), now_tm);
+ char datetmp[32];
+ int datetmp_len = 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()->text->InsertChar(owner->view(), datetmp[i]);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
- SetUpdateTimer();
+
owner->view()->text->sel_cursor = owner->view()->text->cursor;
moveCursorUpdate(false);
}
break;
+ case LFUN_DIALOG_PREFERENCES:
+ owner->getDialogs()->showPreferences();
+ break;
+
case LFUN_SAVEPREFERENCES:
{
Path p(user_lyxdir);
lyxrc.write("preferences");
}
break;
-
+
+ case LFUN_SCREEN_FONT_UPDATE:
+ {
+ // handle the screen font changes.
+ //
+ lyxrc.set_font_norm_type();
+ fontloader.update();
+ // Of course we should only do the resize and the textcache.clear
+ // if values really changed...but not very important right now. (Lgb)
+ // All buffers will need resize
+ bufferlist.resize();
+ // We also need to empty the textcache so that
+ // the buffer will be formatted correctly after
+ // a zoom change.
+ textcache.clear();
+ }
+
+ case LFUN_SET_COLOR:
+ {
+ string lyx_name, x11_name;
+ x11_name = split(argument, lyx_name, ' ');
+ if (lyx_name.empty() || x11_name.empty()) {
+ LyXBell();
+ setErrorMessage(N_("Syntax: set-color <lyx_name>"
+ " <x11_name>"));
+ break;
+ }
+
+ if (!lcolor.setColor(lyx_name, x11_name)) {
+ static string err1 (N_("Set-color \""));
+ static string err2 (N_("\" failed - color is undefined "
+ "or may not be redefined"));
+ LyXBell();
+ setErrorMessage(err1 + lyx_name + err2);
+ break;
+ }
+ lyxColorHandler->updateColor(lcolor.getFromLyXName(lyx_name));
+ owner->view()->redraw();
+ break;
+ }
+
case LFUN_UNKNOWN_ACTION:
{
if(!owner->buffer()) {
if ( lyxrc.auto_region_delete ) {
if (owner->view()->text->selection){
- owner->view()->text->CutSelection(false);
- owner->view()->update(-1);
+ owner->view()->text->CutSelection(owner->view(), false);
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
}
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) {
} else
owner->getIntl()->getTrans()->TranslateAndInsert(argument[i], owner->view()->text);
}
-
- owner->view()->smallUpdate(1);
- SetUpdateTimer();
+
+ owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
initpath = trypath;
}
- ProhibitInput();
- 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();
-
- if (fname.empty()) {
- owner->getMiniBuffer()->Set(_("Canceled."));
- lyxerr.debug() << "New Document Cancelled." << endl;
- return;
- }
-
- // get absolute path of file and make sure the filename ends
- // with .lyx
- string s = MakeAbsPath(fname);
- if (!IsLyXFilename(s))
- s += ".lyx";
+ static int newfile_number = 0;
+ string s;
- // Check if the document already is open
- if (bufferlist.exists(s)){
- switch(AskConfirmation(_("Document is already open:"),
- MakeDisplayPath(s, 50),
- _("Do you want to close that document now?\n"
- "('No' will just switch to the open version)")))
+ if (lyxrc.new_ask_filename) {
+ ProhibitInput(owner->view());
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
+ fileDlg.SetButton(1, _("Templates"), lyxrc.template_path);
+ fname = fileDlg.Select(_("Enter Filename for new document"),
+ initpath, "*.lyx", _("newfile"));
+ AllowInput(owner->view());
+
+ if (fname.empty()) {
+ owner->getMiniBuffer()->Set(_("Canceled."));
+ lyxerr.debug() << "New Document Cancelled." << endl;
+ return;
+ }
+
+ // get absolute path of file and make sure the filename ends
+ // with .lyx
+ s = MakeAbsPath(fname);
+ if (!IsLyXFilename(s))
+ s += ".lyx";
+
+ // Check if the document already is open
+ if (bufferlist.exists(s)) {
+ switch(AskConfirmation(_("Document is already open:"),
+ MakeDisplayPath(s, 50),
+ _("Do you want to close that document now?\n"
+ "('No' will just switch to the open version)")))
{
case 1: // Yes: close the document
if (!bufferlist.close(bufferlist.getBuffer(s)))
owner->getMiniBuffer()->Set(_("Canceled."));
return;
}
- }
-
- // Check whether the file already exists
- if (IsLyXFilename(s)) {
+ }
+ // Check whether the file already exists
+ if (IsLyXFilename(s)) {
+ FileInfo fi(s);
+ if (fi.readable() &&
+ AskQuestion(_("File already exists:"),
+ MakeDisplayPath(s, 50),
+ _("Do you want to open the document?"))) {
+ // loads document
+ owner->getMiniBuffer()->Set(_("Opening document"),
+ MakeDisplayPath(s), "...");
+ XFlush(fl_display);
+ owner->view()->buffer(
+ bufferlist.loadLyXFile(s));
+ owner->getMiniBuffer()->Set(_("Document"),
+ MakeDisplayPath(s),
+ _("opened."));
+ return;
+ }
+ }
+ } else {
+ s = lyxrc.document_path + "newfile" + tostr(++newfile_number);
FileInfo fi(s);
- if (fi.readable() &&
- AskQuestion(_("File already exists:"),
- MakeDisplayPath(s, 50),
- _("Do you want to open the document?"))) {
- // loads document
- owner->getMiniBuffer()->Set(_("Opening document"),
- MakeDisplayPath(s), "...");
- XFlush(fl_display);
- owner->view()->buffer(
- bufferlist.loadLyXFile(s));
- owner->getMiniBuffer()->Set(_("Document"),
- MakeDisplayPath(s),
- _("opened."));
- return;
+ while (bufferlist.exists(s) || fi.readable()) {
+ ++newfile_number;
+ s = lyxrc.document_path + "newfile" +
+ tostr(newfile_number);
+ fi.newFile(s);
}
}
// 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");
// 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;
- }
-
- // 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;
- }
+ // notify user of import ahead
+ string displaypath = MakeDisplayPath(filename);
+ owner->getMiniBuffer()->Set(_("Importing"), displaypath, "...");
- // get absolute path of file
- filename = MakeAbsPath(filename);
+ // call real importer
+ bool result = func(owner->view(), 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);
+ view->buffer(bufferlist.newFile(filename, string()));
+ 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)
+{
+ view->buffer(bufferlist.newFile(filename, string()));
+ 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 * view, string const & filename)
+{
+ ImportLaTeX myImport(filename);
+ Buffer * openbuf = myImport.run();
+ if (openbuf) {
+ view->buffer(openbuf);
+ return true;
+ }
+ else
+ return false;
+}
- // loads document
- owner->getMiniBuffer()->Set(_("Importing LinuxDoc file"),
- MakeDisplayPath(filename), "...");
+static
+bool doImportNoweb(BufferView * view, string const & filename)
+{
+ ImportNoweb myImport(filename);
+ Buffer * openbuf = myImport.run();
+ if (openbuf) {
+ view->buffer(openbuf);
+ return true;
+ }
+ else
+ return false;
+}
+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);
if (result == 0) {
- string filename = ChangeExtension(filename, ".lyx", false);
+ string filename = ChangeExtension(filename, ".lyx");
// 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()
{
// need this otherwise SEGV may occur while trying to
// set variables that don't exist
// since there's no current buffer
- CloseAllBufferRelatedPopups();
+ owner->getDialogs()->hideBufferDependent();
}
else {
owner->view()->buffer(bufferlist.first());
Inset * LyXFunc::getInsetByCode(Inset::Code code)
{
- bool found = false;
- Inset * inset = 0;
LyXCursor cursor = owner->view()->text->cursor;
- LyXParagraph::size_type pos = cursor.pos;
- LyXParagraph * par = cursor.par;
-
- while (par && !found) {
- while ((inset = par->ReturnNextInsetPointer(pos))){
- if (inset->LyxCode() == code) {
- found = true;
- break;
- }
- ++pos;
- }
- par = par->next;
+ Buffer * buffer = owner->view()->buffer();
+ for (Buffer::inset_iterator it = Buffer::inset_iterator(cursor.par(),
+ cursor.pos());
+ it != buffer->inset_iterator_end(); ++it) {
+ if ((*it)->LyxCode() == code)
+ return *it;
}
- return found ? inset : 0;
+ return 0;
}