#include <config.h>
-#if 0
-#ifdef HAVE_SSTREAM
-#include <sstream>
-using std::istringstream;
-#else
-#include <strstream>
-#endif
-#else
#include "Lsstream.h"
-#endif
#include <time.h>
#include <locale.h>
#endif
#include "version.h"
-#include "lyxlookup.h"
#include "kbmap.h"
#include "lyxfunc.h"
#include "bufferlist.h"
#include "support/syscall.h"
#include "support/lstrings.h"
#include "support/path.h"
+#include "support/lyxfunctional.h"
#include "debug.h"
#include "lyxrc.h"
#include "lyxtext.h"
#include "gettext.h"
#include "trans_mgr.h"
-#include "ImportLaTeX.h"
-#include "ImportNoweb.h"
#include "layout.h"
#include "WorkArea.h"
#include "lyxfr1.h"
#include "frontends/Toolbar.h"
#include "frontends/Menubar.h"
#include "FloatList.h"
+#include "converter.h"
#include "exporter.h"
+#include "importer.h"
#include "FontLoader.h"
#include "TextCache.h"
using std::pair;
using std::endl;
+using std::find_if;
-extern bool cursor_follows_scrollbar;
-
-extern void InsertAsciiFile(BufferView *, string const &, bool);
-extern void math_insert_symbol(string const &);
-extern bool math_insert_greek(char);
+extern void math_insert_symbol(BufferView *, string const &);
+extern bool math_insert_greek(BufferView *, char);
extern BufferList bufferlist;
extern LyXServer * lyxserver;
extern int greek_kb_flag;
extern kb_keymap * toplevel_keymap;
-extern bool MenuWrite(Buffer *);
-extern bool MenuWriteAs(Buffer *);
-extern int MenuRunLaTeX(Buffer *);
-extern int MenuBuildProg(Buffer *);
-extern int MenuRunChktex(Buffer *);
-#ifndef NEW_EXPORT
-extern bool CreatePostscript(Buffer *, bool);
-#endif
-extern void MenuPrint(Buffer *);
-extern void MenuSendto();
-extern void QuitLyX();
+#if 0
extern void MenuFax(Buffer *);
-#ifndef NEW_EXPORT
-extern void MenuExport(Buffer *, string const &);
#endif
extern void show_symbols_form(LyXFunc *);
// (alkis)
extern tex_accent_struct get_accent(kb_action action);
-extern void AutoSave(BufferView *);
-#ifndef NEW_EXPORT
-extern bool PreviewDVI(Buffer *);
-extern bool PreviewPostscript(Buffer *);
-#endif
-extern void MenuInsertLabel(string const &);
-extern void MenuLayoutCharacter();
-extern void MenuLayoutParagraph();
-extern void MenuLayoutDocument();
-extern void MenuLayoutPaper();
-extern void MenuLayoutTable(int flag);
-extern void MenuLayoutQuotes();
-extern void MenuLayoutPreamble();
-extern void MenuLayoutSave();
-extern void bulletForm();
-
-extern Buffer * NewLyxFile(string const &);
-extern void LoadLyXFile(string const &);
-extern void Reconfigure(BufferView *);
-
extern LyXTextClass::size_type current_layout;
-extern int getISOCodeFromLaTeX(char *);
extern void ShowLatexLog();
if (lyxerr.debugging(Debug::KEY)) {
char * tmp = XKeysymToString(keysym);
- string stm = (tmp ? tmp : "");
+ string const stm = (tmp ? tmp : "");
lyxerr << "KeySym is "
<< stm
<< "["
- << keysym << "]"
+ << keysym << "] State is ["
+ << state << "]"
<< endl;
}
// Do nothing if we have nothing (JMarc)
//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);
+
+ if (owner->view()->available()) {
+ // this function should be used always [asierra060396]
+ UpdatableInset * tli = owner->view()->theLockingInset();
+ if (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;
}
- //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)
+ if ((keysym >= XK_Shift_L && keysym <= XK_Hyper_R)
|| keysym == XK_Mode_switch || keysym == 0x0)
return 0;
int action = cancel_meta_seq.addkey(keysym, state
&(ShiftMask|ControlMask
|Mod1Mask));
-
+ if (lyxerr.debugging(Debug::KEY)) {
+ lyxerr << "action first set to [" << action << "]" << endl;
+ }
+
// 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) ) {
-
+ if ((action != LFUN_CANCEL) && (action != LFUN_META_FAKE)) {
+ if (lyxerr.debugging(Debug::KEY)) {
+ lyxerr << "meta_fake_bit is [" << meta_fake_bit << "]" << endl;
+ }
// remove Caps Lock and Mod2 as a modifiers
action = keyseq.addkey(keysym,
(state | meta_fake_bit)
&(ShiftMask|ControlMask
- |Mod1Mask));
+ |Mod1Mask));
+ if (lyxerr.debugging(Debug::KEY)) {
+ lyxerr << "action now set to [" << action << "]" << endl;
+ }
}
// Dont remove this unless you know what you are doing.
meta_fake_bit = 0;
// why not return already here if action == -1 and
// num_bytes == 0? (Lgb)
- if(keyseq.length > 1 || keyseq.length < -1) {
+ if (keyseq.length > 1 || keyseq.length < -1) {
string buf;
keyseq.print(buf);
owner->getMiniBuffer()->Set(buf);
return 0;
}
- char isochar = keyseq.getiso();
+ char const isochar = keyseq.getiso();
if (!(state & ControlMask) &&
!(state & Mod1Mask) &&
(isochar && keysym < 0xF000)) {
// so we`ll skip the dispatch.
return 0;
}
+ } else if (action == LFUN_SELFINSERT) {
+ // We must set the argument to the char looked up by
+ // XKeysymToString
+ XKeyEvent xke;
+ xke.type = KeyPress;
+ xke.serial = 0;
+ xke.send_event = False;
+ xke.display = fl_get_display();
+ xke.window = 0;
+ xke.root = 0;
+ xke.subwindow = 0;
+ xke.time = 0;
+ xke.x = 0;
+ xke.y = 0;
+ xke.x_root = 0;
+ xke.y_root = 0;
+ xke.state = state;
+ xke.keycode = XKeysymToKeycode(fl_get_display(), keysym);
+ xke.same_screen = True;
+ char ret[10];
+ KeySym tmpkeysym;
+ int res = XLookupString(&xke, ret, 10, &tmpkeysym, 0);
+ //Assert(keysym == tmpkeysym);
+ lyxerr[Debug::KEY] << "TmpKeysym ["
+ << tmpkeysym << "]" << endl;
+
+ if (res > 0)
+ argument = string(ret, res);
+ lyxerr[Debug::KEY] << "SelfInsert arg["
+ << argument << "]" << endl;
}
-
- 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;
- int num_bytes = LyXLookupString(ev, s_r, 10, &keysym_return);
- s_r[num_bytes] = '\0';
-
- if (lyxerr.debugging(Debug::KEY)) {
- char * tmp = XKeysymToString(keysym_return);
- string stm = (tmp ? tmp : "");
- lyxerr << "KeySym is "
- << stm
- << "["
- << keysym_return << "]"
- << " and num_bytes is "
- << num_bytes
- << " the string returned is \""
- << s_r << '\"'
- << endl;
- }
- // Do nothing if we have nothing (JMarc)
- if (num_bytes == 0 && keysym_return == NoSymbol) {
- lyxerr[Debug::KEY] << "Empty kbd action (probably composing)"
- << endl;
- return 0;
- }
-
- // this function should be used always [asierra060396]
- 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;
- }
-
- // 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_return >= XK_Shift_L && keysym_return <= XK_Hyper_R)
- || keysym_return == XK_Mode_switch || keysym_return == 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_return, keyevent->state
- &(ShiftMask|ControlMask
- |Mod1Mask));
-
- // When not cancel or meta-fake, do the normal lookup.
- // Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards.
- // 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_return,
- (keyevent->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 << "]"
- << "["
- << num_bytes << "]"
- << 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 (!(keyevent->state&ControlMask) &&
- !(keyevent->state&Mod1Mask) &&
- (isochar && keysym_return < 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;
- }
- }
- else
- if (action == LFUN_SELFINSERT) {
- argument = s_r[0];
- }
bool tmp_sc = show_sc;
show_sc = false;
- Dispatch(action, argument.c_str());
+ Dispatch(action, argument);
show_sc = tmp_sc;
return 0;
}
-#endif
LyXFunc::func_status LyXFunc::getStatus(int ac) const
// I would really like to avoid having this switch and rather try to
// encode this in the function itself.
- static bool noLaTeX = lyxrc.latex_command == "none";
bool disable = false;
switch (action) {
-#ifndef NEW_EXPORT
- case LFUN_PREVIEW:
- disable = noLaTeX || lyxrc.view_dvi_command == "none";
- break;
- case LFUN_PREVIEWPS:
- disable = noLaTeX || lyxrc.view_ps_command == "none";
- break;
- case LFUN_RUNLATEX:
- case LFUN_RUNDVIPS:
- disable = noLaTeX;
- break;
-#endif
case LFUN_MENUPRINT:
- disable = noLaTeX || lyxrc.print_command == "none";
+ disable = !Exporter::IsExportable(buf, "dvi")
+ || lyxrc.print_command == "none";
break;
+#if 0
case LFUN_FAX:
- disable = noLaTeX || lyxrc.fax_command == "none";
- break;
- case LFUN_IMPORT:
- if (argument == "latex" || argument == "noweb")
- disable = lyxrc.relyx_command == "none";
- else if (argument == "linuxdoc")
- disable = lyxrc.linuxdoc_to_lyx_command == "none";
+ disable = !Exporter::IsExportable(buf, "ps")
+ || lyxrc.fax_command == "none";
break;
-#ifndef NEW_EXPORT
+#else
case LFUN_EXPORT:
- 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;
- 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());
+ disable = argument == "fax" &&
+ !Exporter::IsExportable(buf, argument);
break;
#endif
case LFUN_UNDO:
disable = lyxrc.chktex_command == "none";
break;
case LFUN_BUILDPROG:
- disable = (lyxrc.literate_command == "none"
- || ! buf->isLiterate());
+ disable = !Exporter::IsExportable(buf, "program");
break;
-#ifndef NEW_TABULAR
- case LFUN_LAYOUT_TABLE:
- disable = ! owner->view()->text->cursor.par()->table;
+ case LFUN_INSERTFOOTNOTE:
+ case LFUN_FOOTMELT:
+ case LFUN_MARGINMELT:
+ // Disable insertion of floats in a tabular.
+ disable = false;
+ if (owner->view()->theLockingInset()) {
+ disable = (owner->view()->theLockingInset()->LyxCode() == Inset::TABULAR_CODE) ||
+ owner->view()->theLockingInset()->GetFirstLockingInsetOfType(Inset::TABULAR_CODE);
+ }
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);
+ if (owner->view()->theLockingInset()) {
+ disable = (owner->view()->theLockingInset()->LyxCode() != Inset::TABULAR_CODE) &&
+ !owner->view()->theLockingInset()->GetFirstLockingInsetOfType(Inset::TABULAR_CODE);
}
break;
case LFUN_TABULAR_FEATURE:
disable = true;
- if (owner->view()->the_locking_inset) {
+ if (owner->view()->theLockingInset()) {
func_status ret = LyXFunc::Disabled;
- if (owner->view()->the_locking_inset->LyxCode() == Inset::TABULAR_CODE) {
+ if (owner->view()->theLockingInset()->LyxCode() == Inset::TABULAR_CODE) {
ret = static_cast<InsetTabular *>
- (owner->view()->the_locking_inset)->
+ (owner->view()->theLockingInset())->
getStatus(argument);
- } else if (owner->view()->the_locking_inset->GetFirstLockingInsetOfType(Inset::TABULAR_CODE)) {
+ } else if (owner->view()->theLockingInset()->GetFirstLockingInsetOfType(Inset::TABULAR_CODE)) {
ret = static_cast<InsetTabular *>
- (owner->view()->the_locking_inset->
+ (owner->view()->theLockingInset()->
GetFirstLockingInsetOfType(Inset::TABULAR_CODE))->
getStatus(argument);
}
flag |= ret;
disable = false;
} else {
- static InsetTabular inset(owner->buffer(), 1, 1);
+ static InsetTabular inset(*owner->buffer(), 1, 1);
func_status ret;
disable = true;
if (buf) {
func_status box = LyXFunc::ToggleOff;
- 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;
+ LyXFont const & font =
+ owner->view()->getLyXText()->real_current_font;
switch (action) {
case LFUN_EMPH:
if (font.emph() == LyXFont::ON)
string const LyXFunc::Dispatch(string const & s)
{
// Split command string into command and argument
- string cmd, line = frontStrip(s);
+ string cmd;
+ string line = frontStrip(s);
string arg = strip(frontStrip(split(line, cmd, ' ')));
- return Dispatch(lyxaction.LookupFunc(cmd.c_str()), arg.c_str());
+ return Dispatch(lyxaction.LookupFunc(cmd), arg);
}
string const LyXFunc::Dispatch(int ac,
string const & do_not_use_this_arg)
{
+ lyxerr[Debug::ACTION] << "LyXFunc::Dispatch: action[" << ac
+ <<"] arg[" << do_not_use_this_arg << "]" << endl;
+
string argument;
kb_action action;
if (owner->view()->available())
owner->view()->hideCursor();
+ // We have to do this heare because of te goto below. (Lgb)
+ LyXText * text = owner->view()->getLyXText();
+
// We cannot use this function here
if (getStatus(ac) & Disabled)
goto exit_with_message;
// this is better
pseudoaction =
lyxaction.searchActionArg(action,
- argument.c_str());
+ argument);
if (pseudoaction == -1) {
pseudoaction = action;
}
}
- string shortcuts = toplevel_keymap->findbinding(pseudoaction);
+ string const shortcuts =
+ toplevel_keymap->findbinding(pseudoaction);
if (!shortcuts.empty()) {
comname += ": " + shortcuts;
}
}
- // If in math mode pass the control to
- // the math inset [asierra060396]
- if (owner->view()->available() &&
- owner->view()->the_locking_inset) {
+ if (owner->view()->available() && owner->view()->theLockingInset()) {
UpdatableInset::RESULT result;
if ((action > 1) || ((action == LFUN_UNKNOWN_ACTION) &&
(keyseq.length >= -1)))
}
// Undo/Redo pre 0.13 is a bit tricky for insets.
if (action == LFUN_UNDO) {
- int slx, sly;
+ int slx;
+ int sly;
UpdatableInset * inset =
- owner->view()->the_locking_inset;
+ owner->view()->theLockingInset();
inset->GetCursorPos(owner->view(), slx, sly);
owner->view()->unlockInset(inset);
owner->view()->menuUndo();
inset->Edit(owner->view(),slx,sly,0);
return string();
} else if (action == LFUN_REDO) {
- int slx, sly;
+ int slx;
+ int sly;
UpdatableInset * inset = owner->view()->
- the_locking_inset;
+ theLockingInset();
inset->GetCursorPos(owner->view(), slx, sly);
owner->view()->unlockInset(inset);
owner->view()->menuRedo();
if (inset)
inset->Edit(owner->view(),slx,sly,0);
return string();
- } else if (((result=owner->view()->the_locking_inset->
+ } else if (((result=owner->view()->theLockingInset()->
LocalDispatch(owner->view(), action,
argument)) ==
UpdatableInset::DISPATCHED) ||
return string();
else {
setMessage(N_("Text mode"));
- switch(action) {
+ switch (action) {
case LFUN_UNKNOWN_ACTION:
case LFUN_BREAKPARAGRAPH:
case LFUN_BREAKLINE:
}
}
- switch(action) {
+ switch (action) {
// --- Misc -------------------------------------------
case LFUN_WORDFINDFORWARD :
case LFUN_WORDFINDBACKWARD : {
if (!searched_string.empty() &&
((action == LFUN_WORDFINDBACKWARD) ?
- ltCur->SearchBackward(owner->view(), searched_string.c_str()) :
- ltCur->SearchForward(owner->view(), searched_string.c_str()))) {
+ ltCur->SearchBackward(owner->view(), searched_string) :
+ ltCur->SearchForward(owner->view(), searched_string))) {
// ??? What is that ???
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->ClearSelection();
// Move cursor so that successive C-s 's will not stand in place.
- if( action == LFUN_WORDFINDFORWARD )
+ if (action == LFUN_WORDFINDFORWARD )
owner->view()->text->CursorRightOneWord(owner->view());
owner->view()->text->FinishUndo();
moveCursorUpdate(false);
// --- Misc -------------------------------------------
case LFUN_EXEC_COMMAND:
- owner->getMiniBuffer()->ExecCommand();
+ owner->getMiniBuffer()->PrepareForCommand();
break;
case LFUN_CANCEL: // RVDK_PATCH_5
keyseq.reset();
meta_fake_bit = 0;
- if(owner->view()->available())
+ if (owner->view()->available())
// cancel any selection
- Dispatch(LFUN_MARK_OFF, 0);
+ Dispatch(LFUN_MARK_OFF);
setMessage(N_("Cancel"));
break;
meta_fake_bit = Mod1Mask;
string buf;
keyseq.print(buf, true);
- string res = string("M-") + buf;
setMessage(buf); // RVDK_PATCH_5
}
break;
owner->getMiniBuffer()->Set(_("Saving document"),
MakeDisplayPath(owner->buffer()->fileName()),
"...");
- MenuWrite(owner->buffer());
+ MenuWrite(owner->view(), owner->buffer());
//owner->getMiniBuffer()-> {
// Set(_("Document saved as"),
// MakeDisplayPath(owner->buffer()->fileName()));
//owner->getMiniBuffer()->Set(_("Save failed!"));
//}
} else {
- MenuWriteAs(owner->buffer());
+ MenuWriteAs(owner->view(), owner->buffer());
}
break;
case LFUN_MENUWRITEAS:
- MenuWriteAs(owner->buffer());
+ MenuWriteAs(owner->view(), owner->buffer());
break;
case LFUN_MENURELOAD:
reloadBuffer();
break;
-#ifdef NEW_EXPORT
case LFUN_UPDATE:
Exporter::Export(owner->buffer(), argument, true);
break;
case LFUN_PREVIEW:
Exporter::Preview(owner->buffer(), argument);
break;
-#else
- case LFUN_PREVIEW:
- PreviewDVI(owner->buffer());
- break;
-
- case LFUN_PREVIEWPS:
- PreviewPostscript(owner->buffer());
- break;
-
- case LFUN_RUNLATEX:
- MenuRunLaTeX(owner->buffer());
- break;
-
- case LFUN_RUNDVIPS:
- CreatePostscript(owner->buffer(), false);
- break;
-#endif
case LFUN_BUILDPROG:
- MenuBuildProg(owner->buffer());
+ Exporter::Export(owner->buffer(), "program", true);
break;
case LFUN_RUNCHKTEX:
owner->getDialogs()->showPrint();
break;
+#if 0
case LFUN_FAX:
MenuFax(owner->buffer());
break;
-
+#endif
+
case LFUN_EXPORT:
-#ifdef NEW_EXPORT
Exporter::Export(owner->buffer(), argument, false);
-#else
- MenuExport(owner->buffer(), argument);
-#endif
break;
case LFUN_IMPORT:
{
InsetCommandParams p;
- if( action == LFUN_TOCVIEW )
+ if (action == LFUN_TOCVIEW )
p.setCmdName( "tableofcontents" );
- else if( action == LFUN_LOAVIEW )
+ else if (action == LFUN_LOAVIEW )
p.setCmdName( "listofalgorithms" );
- else if( action == LFUN_LOFVIEW )
+ else if (action == LFUN_LOFVIEW )
p.setCmdName( "listoffigures" );
else
p.setCmdName( "listoftables" );
{
InsetCommandParams p;
- if( action == LFUN_TOC_INSERT )
+ if (action == LFUN_TOC_INSERT )
p.setCmdName( "tableofcontents" );
- else if( action == LFUN_LOA_INSERT )
+ else if (action == LFUN_LOA_INSERT )
p.setCmdName( "listofalgorithms" );
- else if( action == LFUN_LOF_INSERT )
+ 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 ) )
+ if (!owner->view()->insertInset( inset, "Standard", true ) )
delete inset;
break;
}
case LFUN_DIALOG_TABULAR_INSERT:
-#ifndef NEW_TABULAR
- Table();
-#else
owner->getDialogs()->showTabularCreate();
-#endif
break;
case LFUN_TABULAR_FEATURE:
case LFUN_REMOVEERRORS:
if (owner->view()->removeAutoInsets()) {
owner->view()->redraw();
- owner->view()->fitCursor();
- //owner->view()->updateScrollbar();
+ owner->view()->fitCursor(owner->view()->text);
}
break;
break;
case LFUN_DEPTH:
- changeDepth(owner->view(), 0);
+ changeDepth(owner->view(), text, 0);
break;
case LFUN_DEPTH_MIN:
- changeDepth(owner->view(), -1);
+ changeDepth(owner->view(), text, -1);
break;
case LFUN_DEPTH_PLUS:
- changeDepth(owner->view(), 1);
+ changeDepth(owner->view(), text, 1);
break;
case LFUN_FREE:
&& 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
&& 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
+#ifndef NEW_INSETS
+ case LFUN_FLOATSOPERATE:
+ if (argument == "openfoot")
+ owner->view()->allFloats(1,0);
+ else if (argument == "closefoot")
+ owner->view()->allFloats(0,0);
+ else if (argument == "openfig")
+ owner->view()->allFloats(1,1);
+ else if (argument == "closefig")
+ owner->view()->allFloats(0,1);
+ break;
+#else
+#warning Find another implementation here (or another lyxfunc)!
#endif
case LFUN_HELP_COPYRIGHT:
owner->getDialogs()->showCopyright();
break;
}
- case LFUN_HELP_VERSION:
+ case LFUN_HELP_VERSION: {
ProhibitInput(owner->view());
- fl_show_message((string(_("LyX Version ")) + LYX_VERSION
- + _(" of ") + LYX_RELEASE).c_str(),
+ string msg(_("LyX Version "));
+ msg += LYX_VERSION;
+ msg += " of ";
+ msg += LYX_RELEASE;
+ fl_show_message(msg.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:
{
Dispatch(int(LFUN_LAYOUT),
textclasslist.NameOfLayout(owner->view()
->buffer()->params.textclass,
- sel).c_str());
+ sel));
return string();
}
break;
case LFUN_LAYOUT_DOCUMENT:
-#ifdef USE_OLD_DOCUMENT_LAYOUT
- MenuLayoutDocument();
-#else
owner->getDialogs()->showLayoutDocument();
-#endif
break;
case LFUN_LAYOUT_PARAGRAPH:
+#ifdef USE_OLD_PARAGRAPH_LAYOUT
MenuLayoutParagraph();
+#else
+ owner->getDialogs()->showLayoutParagraph();
+#endif
break;
case LFUN_LAYOUT_CHARACTER:
MenuLayoutCharacter();
break;
-
- case LFUN_LAYOUT_TABLE:
- {
- int flag = 0;
- if (argument == "true") flag = 1;
- MenuLayoutTable(flag);
- }
- break;
-
+
case LFUN_LAYOUT_TABULAR:
- if (owner->view()->the_locking_inset) {
- if (owner->view()->the_locking_inset->LyxCode()==Inset::TABULAR_CODE) {
+ if (owner->view()->theLockingInset()) {
+ if (owner->view()->theLockingInset()->LyxCode()==Inset::TABULAR_CODE) {
InsetTabular * inset = static_cast<InsetTabular *>
- (owner->view()->the_locking_inset);
+ (owner->view()->theLockingInset());
inset->OpenLayoutDialog(owner->view());
- } else if (owner->view()->the_locking_inset->
+ } else if (owner->view()->theLockingInset()->
GetFirstLockingInsetOfType(Inset::TABULAR_CODE)!=0) {
InsetTabular * inset = static_cast<InsetTabular *>(
- owner->view()->the_locking_inset->GetFirstLockingInsetOfType(Inset::TABULAR_CODE));
+ owner->view()->theLockingInset()->GetFirstLockingInsetOfType(Inset::TABULAR_CODE));
inset->OpenLayoutDialog(owner->view());
}
}
break;
- case LFUN_LAYOUT_PAPER:
-#ifdef USE_OLD_DOCUMENT_LAYOUT
- MenuLayoutPaper();
-#endif
- break;
-
- case LFUN_LAYOUT_QUOTES:
-#ifdef USE_OLD_DOCUMENT_LAYOUT
- MenuLayoutQuotes();
-#endif
- break;
-
case LFUN_LAYOUT_PREAMBLE:
MenuLayoutPreamble();
break;
case LFUN_LAYOUT_SAVE_DEFAULT:
- MenuLayoutSave();
+ MenuLayoutSave(owner->view());
break;
case LFUN_DROP_LAYOUTS_CHOICE:
case LFUN_UPCASE_WORD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->ChangeWordCase(owner->view(),
- LyXText::text_uppercase);
+ text->ChangeWordCase(owner->view(), LyXText::text_uppercase);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
case LFUN_LOWCASE_WORD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->ChangeWordCase(owner->view(),
- LyXText::text_lowercase);
+ text->ChangeWordCase(owner->view(), LyXText::text_lowercase);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
case LFUN_CAPITALIZE_WORD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->ChangeWordCase(owner->view(),
- LyXText::text_capitalization);
+ text->ChangeWordCase(owner->view(),
+ LyXText::text_capitalization);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
break;
case LFUN_INSERT_LABEL:
- MenuInsertLabel(argument.c_str());
+ MenuInsertLabel(owner->view(), argument);
break;
case LFUN_REF_INSERT:
InsetCommandParams p;
p.setFromString(argument);
- InsetRef * inset = new InsetRef(p);
+ InsetRef * inset = new InsetRef(p, *owner->buffer());
if (!owner->view()->insertInset(inset))
delete inset;
else
{
LyXText * tmptext = owner->view()->text;
bool is_rtl = tmptext->cursor.par()->isRightToLeftPar(owner->buffer()->params);
- if(!tmptext->mark_set)
+ if (!tmptext->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
if (is_rtl)
// it simpler? (Lgb)
LyXText * txt = owner->view()->text;
bool is_rtl = txt->cursor.par()->isRightToLeftPar(owner->buffer()->params);
- if(!txt->mark_set) owner->view()->beforeChange();
+ if (!txt->mark_set) owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+ LyXCursor cur = txt->cursor;
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) {
+ if ((cur != txt->cursor) && // only if really moved!
+ 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());
setMessage(tmpinset->EditMessage());
LyXFont font = txt->GetFont(owner->view()->buffer(),
break;
case LFUN_UP:
- if(!owner->view()->text->mark_set) owner->view()->beforeChange();
+ if (!owner->view()->text->mark_set) owner->view()->beforeChange();
owner->view()->update(BufferView::UPDATE);
owner->view()->text->CursorUp(owner->view());
owner->view()->text->FinishUndo();
break;
case LFUN_DOWN:
- if(!owner->view()->text->mark_set)
+ if (!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::UPDATE);
owner->view()->text->CursorDown(owner->view());
break;
case LFUN_UP_PARAGRAPH:
- if(!owner->view()->text->mark_set)
+ if (!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::UPDATE);
owner->view()->text->CursorUpParagraph(owner->view());
break;
case LFUN_DOWN_PARAGRAPH:
- if(!owner->view()->text->mark_set)
+ if (!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::UPDATE);
owner->view()->text->CursorDownParagraph(owner->view());
break;
case LFUN_PRIOR:
- if(!owner->view()->text->mark_set)
- owner->view()->beforeChange();
+ if (!text->mark_set)
+ owner->view()->beforeChange();
owner->view()->update(BufferView::UPDATE);
- owner->view()->cursorPrevious();
+ owner->view()->cursorPrevious(text);
owner->view()->text->FinishUndo();
- moveCursorUpdate(false);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, false);
+ else
+ moveCursorUpdate(false);
owner->showState();
break;
case LFUN_NEXT:
- if(!owner->view()->text->mark_set)
+ if (!text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::UPDATE);
- owner->view()->cursorNext();
+ owner->view()->cursorNext(text);
owner->view()->text->FinishUndo();
- moveCursorUpdate(false);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, false);
+ else
+ moveCursorUpdate(false);
owner->showState();
break;
case LFUN_HOME:
- if(!owner->view()->text->mark_set)
+ if (!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->CursorHome(owner->view());
break;
case LFUN_END:
- if(!owner->view()->text->mark_set)
+ if (!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->CursorEnd(owner->view());
case LFUN_SHIFT_TAB:
case LFUN_TAB:
- if(!owner->view()->text->mark_set)
+ if (!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->CursorTab(owner->view());
break;
case LFUN_WORDRIGHT:
- if(!owner->view()->text->mark_set)
+ if (!text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
- owner->view()->text->CursorLeftOneWord(owner->view());
+ if (text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ text->CursorLeftOneWord(owner->view());
else
- owner->view()->text->CursorRightOneWord(owner->view());
+ text->CursorRightOneWord(owner->view());
owner->view()->text->FinishUndo();
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
moveCursorUpdate(false);
owner->showState();
break;
case LFUN_WORDLEFT:
- if(!owner->view()->text->mark_set)
+ if (!text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
- owner->view()->text->CursorRightOneWord(owner->view());
+ if (text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+ text->CursorRightOneWord(owner->view());
else
- owner->view()->text->CursorLeftOneWord(owner->view());
+ text->CursorLeftOneWord(owner->view());
owner->view()->text->FinishUndo();
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
moveCursorUpdate(false);
owner->showState();
break;
case LFUN_BEGINNINGBUF:
- if(!owner->view()->text->mark_set)
+ if (!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->CursorTop(owner->view());
break;
case LFUN_ENDBUF:
- if(!owner->view()->text->mark_set)
+ if (!owner->view()->text->mark_set)
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
owner->view()->text->CursorBottom(owner->view());
case LFUN_PRIORSEL:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->cursorPrevious();
+ owner->view()->cursorPrevious(text);
owner->view()->text->FinishUndo();
- moveCursorUpdate(true);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, false);
+ else
+ moveCursorUpdate(true);
owner->showState();
break;
case LFUN_NEXTSEL:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->cursorNext();
+ owner->view()->cursorNext(text);
owner->view()->text->FinishUndo();
- moveCursorUpdate(true);
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, false);
+ else
+ moveCursorUpdate(true);
owner->showState();
break;
break;
case LFUN_SETMARK:
- if(owner->view()->text->mark_set) {
+ if (text->mark_set) {
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
setMessage(N_("Mark removed"));
} else {
owner->view()->beforeChange();
- owner->view()->text->mark_set = 1;
+ text->mark_set = 1;
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
setMessage(N_("Mark set"));
}
- owner->view()->text->sel_cursor =
- owner->view()->text->cursor;
+ text->sel_cursor = text->cursor;
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
break;
case LFUN_DELETE:
owner->view()->text->cursor;
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...
+ // just comment out the line below...
owner->view()->showCursor();
} else {
owner->view()->cut();
/* -------> Delete word forward. */
case LFUN_DELETE_WORD_FORWARD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->DeleteWordForward(owner->view());
+ text->DeleteWordForward(owner->view());
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
owner->showState();
/* -------> Delete word backward. */
case LFUN_DELETE_WORD_BACKWARD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->DeleteWordBackward(owner->view());
+ text->DeleteWordBackward(owner->view());
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
owner->showState();
/* -------> Kill to end of line. */
case LFUN_DELETE_LINE_FORWARD:
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->DeleteLineForward(owner->view());
+ text->DeleteLineForward(owner->view());
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
moveCursorUpdate(false);
break;
case LFUN_MARK_OFF:
owner->view()->beforeChange();
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->sel_cursor =
- owner->view()->text->cursor;
+ text->sel_cursor = text->cursor;
setMessage(N_("Mark off"));
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
break;
/* -------> Set mark on. */
owner->view()->beforeChange();
owner->view()->text->mark_set = 1;
owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
- owner->view()->text->sel_cursor =
- owner->view()->text->cursor;
+ text->sel_cursor = text->cursor;
+ if (text->inset_owner)
+ owner->view()->updateInset(text->inset_owner, true);
setMessage(N_("Mark on"));
break;
case LFUN_BACKSPACE:
{
if (!owner->view()->text->selection) {
+#if 0
if (owner->getIntl()->getTrans()->backspace()) {
+#else
+ if (owner->getIntl()->getTrans().backspace()) {
+#endif
owner->view()->text->Backspace(owner->view());
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
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...
+ // just comment out the line below...
owner->view()->showCursor();
}
} else {
cur_value = par->spacing.getValue();
}
-//#ifdef HAVE_SSTREAM
- istringstream istr(argument);
-//#else
-// istrstream istr(argument.c_str());
-//#endif
+ istringstream istr(argument.c_str());
+
string tmp;
istr >> tmp;
Spacing::Space new_spacing = cur_spacing;
case LFUN_INSET_CAPTION:
{
// Do we have a locking inset...
- if (owner->view()->the_locking_inset) {
+ if (owner->view()->theLockingInset()) {
lyxerr << "Locking inset code: "
- << static_cast<int>(owner->view()->the_locking_inset->LyxCode());
+ << static_cast<int>(owner->view()->theLockingInset()->LyxCode());
InsetCaption * new_inset = new InsetCaption;
- new_inset->setOwner(owner->view()->the_locking_inset);
+ new_inset->setOwner(owner->view()->theLockingInset());
new_inset->SetAutoBreakRows(true);
new_inset->SetDrawFrame(0, InsetText::LOCKED);
new_inset->SetFrameColor(0, LColor::footnoteframe);
{
int r = 2, c = 2;
if (!argument.empty())
- sscanf(argument.c_str(),"%d%d", &r, &c);
+ ::sscanf(argument.c_str(),"%d%d", &r, &c);
InsetTabular * new_inset =
- new InsetTabular(owner->buffer(), r, c);
+ new InsetTabular(*owner->buffer(), r, c);
if (owner->view()->insertInset(new_inset))
new_inset->Edit(owner->view(), 0, 0, 0);
else
{
LyXParagraph::size_type pos =
owner->view()->text->cursor.pos();
- if(pos < owner->view()->text->cursor.par()->size())
+ if (pos < owner->view()->text->cursor.par()->size())
//dispatch_buffer = owner->view()->text->
// cursor.par()->text[pos];
dispatch_buffer =
case LFUN_SETXY:
{
- int x;
- long y;
- sscanf(argument.c_str(), " %d %ld", &x, &y);
+ int x;
+ int y;
+ ::sscanf(argument.c_str(), " %d %d", &x, &y);
owner->view()->text->SetCursorFromCoordinates(owner->view(), x, y);
}
break;
case LFUN_GETFONT:
{
LyXFont & font = owner->view()->text->current_font;
- if(font.shape() == LyXFont::ITALIC_SHAPE)
+ 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)
+ if (font.latex() == LyXFont::ON)
dispatch_buffer = 'L';
else
dispatch_buffer = '0';
case LFUN_GOTOFILEROW:
{
char file_name[100];
- int row;
- sscanf(argument.c_str(), " %s %d", file_name, &row);
+ int row;
+ ::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");
case LFUN_GOTO_PARAGRAPH:
{
-//#ifdef HAVE_SSTREAM
- istringstream istr(argument);
-//#else
-// istrstream istr(argument.c_str());
-//#endif
+ istringstream istr(argument.c_str());
int id;
istr >> id;
case LFUN_APROPOS:
case LFUN_GETTIP:
{
- int qa = lyxaction.LookupFunc(argument.c_str());
+ int const qa = lyxaction.LookupFunc(argument);
setMessage(lyxaction.helpText(static_cast<kb_action>(qa)));
}
break;
if (keyseq.length == -1 && keyseq.getiso() != 0)
c = keyseq.getiso();
-
+
+#if 0
owner->getIntl()->getTrans()->
deadkey(c, get_accent(action).accent,
owner->view()->text);
+#else
+ owner->getIntl()->getTrans()
+ .deadkey(c, get_accent(action).accent,
+ owner->view()->text);
+#endif
// Need to reset, in case the minibuffer calls these
// actions
case LFUN_INSERT_MATRIX:
{
if (owner->view()->available()) {
- owner->view()->
- open_new_inset(new InsetFormula(false));
- owner->view()
- ->the_locking_inset
- ->LocalDispatch(owner->view(),
- action,
- argument);
+ if (owner->view()->
+ open_new_inset(new InsetFormula(false)))
+ {
+ owner->view()->theLockingInset()
+ ->LocalDispatch(owner->view(),
+ action,
+ argument);
+ }
}
}
break;
case LFUN_INSERT_MATH:
{
- math_insert_symbol(argument.c_str());
+ math_insert_symbol(owner->view(), argument);
}
break;
if (s.empty())
setErrorMessage(N_("Missing argument"));
else {
- string s1 = token(s, ' ', 1);
- int na = s1.empty() ? 0: atoi(s1.c_str());
+ string const s1 = token(s, ' ', 1);
+ int const na = s1.empty() ? 0 : lyx::atoi(s1);
owner->view()->
open_new_inset(new InsetFormulaMacro(token(s, ' ', 0), na));
}
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 {
- p.setContents( argument );
- }
-
- owner->getDialogs()->createCitation( p.getAsString() );
+ if (!argument.empty()) {
+ // This should be set at source, ie when typing
+ // "citation-insert foo" in the minibuffer.
+ // Question: would pybibliographer also need to be
+ // changed. Suspect so. Leave as-is therefore.
+ if (contains(argument, "|")) {
+ p.setContents( token(argument, '|', 0) );
+ p.setOptions( token(argument, '|', 1) );
+ } else {
+ p.setContents( argument );
+ }
+ Dispatch(LFUN_CITATION_INSERT, p.getAsString());
+ } else
+ owner->getDialogs()->createCitation( p.getAsString() );
}
break;
// ale970405+lasgoutt970425
// The argument can be up to two tokens separated
// by a space. The first one is the bibstyle.
- string db = token(argument, ' ', 0);
+ string const db = token(argument, ' ', 0);
string bibstyle = token(argument, ' ', 1);
if (bibstyle.empty())
bibstyle = "plain";
InsetCommandParams p( "BibTeX", db, bibstyle );
- InsetBibtex * inset = new InsetBibtex(p, owner->buffer());
+ InsetBibtex * inset = new InsetBibtex(p);
if (owner->view()->insertInset(inset)) {
if (argument.empty())
{
InsetCommandParams p( "index" );
- if( argument.empty() ) {
+ if (argument.empty()) {
// Get the word immediately preceding the cursor
LyXParagraph::size_type curpos =
owner->view()->text->cursor.pos() - 1;
string curstring;
- if( curpos >= 0 )
+ if (curpos >= 0 )
curstring = owner->view()->text
->cursor.par()->GetWord(curpos);
case LFUN_INDEX_INSERT:
{
InsetCommandParams p;
- p.setFromString( argument );
- InsetIndex * inset = new InsetIndex( p );
+ p.setFromString(argument);
+ InsetIndex * inset = new InsetIndex(p);
if (!owner->view()->insertInset(inset))
delete inset;
else
- owner->view()->updateInset( inset, true );
+ owner->view()->updateInset(inset, true);
}
break;
LyXParagraph::size_type curpos =
owner->view()->text->cursor.pos() - 1;
// Can't do that at the beginning of a paragraph
- if( curpos < 0 ) break;
+ if (curpos < 0) break;
- string curstring( owner->view()->text
- ->cursor.par()->GetWord(curpos) );
+ string const curstring(owner->view()->text
+ ->cursor.par()->GetWord(curpos));
- InsetCommandParams p( "index", curstring );
- InsetIndex * inset = new InsetIndex( p );
+ InsetCommandParams p("index", curstring);
+ InsetIndex * inset = new InsetIndex(p);
if (!owner->view()->insertInset(inset))
delete inset;
else
- owner->view()->updateInset( inset, true );
+ owner->view()->updateInset(inset, true);
}
break;
case LFUN_INDEX_PRINT:
{
- InsetCommandParams p( "printindex" );
+ InsetCommandParams p("printindex");
Inset * inset = new InsetPrintIndex(p);
if (!owner->view()->insertInset(inset, "Standard", true))
delete inset;
{
lyxerr << "arg " << argument << endl;
InsetCommandParams p( "lyxparent", argument );
- Inset * inset = new InsetParent(p, owner->buffer());
+ Inset * inset = new InsetParent(p, *owner->buffer());
if (!owner->view()->insertInset(inset, "Standard", true))
delete inset;
}
case LFUN_CHILDINSERT:
{
InsetCommandParams p( "Include", argument );
- Inset * inset = new InsetInclude(p, owner->buffer());
+ Inset * inset = new InsetInclude(p, *owner->buffer());
if (owner->view()->insertInset(inset, "Standard", true))
inset->Edit(owner->view(), 0, 0, 0);
else
case LFUN_CHILDOPEN:
{
- string filename =
+ string const filename =
MakeAbsPath(argument,
OnlyPath(owner->buffer()->fileName()));
setMessage(N_("Opening child document ") +
case LFUN_INSERTFOOTNOTE:
{
LyXParagraph::footnote_kind kind;
- if (argument == "footnote")
- { kind = LyXParagraph::FOOTNOTE; }
- else if (argument == "margin")
- { kind = LyXParagraph::MARGIN; }
- else if (argument == "figure")
- { kind = LyXParagraph::FIG; }
- else if (argument == "table")
- { kind = LyXParagraph::TAB; }
- else if (argument == "wide-fig")
- { kind = LyXParagraph::WIDE_FIG; }
- else if (argument == "wide-tab")
- { kind = LyXParagraph::WIDE_TAB; }
- else if (argument == "algorithm")
- { kind = LyXParagraph::ALGORITHM; }
- else {
+ if (argument == "footnote") {
+ kind = LyXParagraph::FOOTNOTE;
+ } else if (argument == "margin") {
+ kind = LyXParagraph::MARGIN;
+ } else if (argument == "figure") {
+ kind = LyXParagraph::FIG;
+ } else if (argument == "table") {
+ kind = LyXParagraph::TAB;
+ } else if (argument == "wide-fig") {
+ kind = LyXParagraph::WIDE_FIG;
+ } else if (argument == "wide-tab") {
+ kind = LyXParagraph::WIDE_TAB;
+ } else if (argument == "algorithm") {
+ kind = LyXParagraph::ALGORITHM;
+ } else {
setErrorMessage(N_("Unknown kind of footnote"));
break;
}
owner->view()->setState();
}
break;
-#endif
- case LFUN_BUFFERBULLETSSELECT:
- bulletForm();
- break;
-
+#endif
case LFUN_TOGGLECURSORFOLLOW:
- cursor_follows_scrollbar = !cursor_follows_scrollbar;
+ lyxrc.cursor_follows_scrollbar = !lyxrc.cursor_follows_scrollbar;
break;
case LFUN_KMAP_OFF: // keymap off
case LFUN_SELFINSERT:
{
+ LyXFont const old_font(owner->view()->text->real_current_font);
for (string::size_type i = 0; i < argument.length(); ++i) {
owner->view()->text->InsertChar(owner->view(), argument[i]);
// This needs to be in the loop, or else we
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
moveCursorUpdate(false);
+
+ // real_current_font.number can change so we need to
+ // update the minibuffer
+ if (old_font != owner->view()->text->real_current_font)
+ owner->showState();
}
break;
else
arg = lyxrc.date_insert_format;
char datetmp[32];
- int datetmp_len = strftime(datetmp, 32, arg.c_str(), now_tm);
+ int const datetmp_len =
+ ::strftime(datetmp, 32, arg.c_str(), now_tm);
for (int i = 0; i < datetmp_len; i++) {
owner->view()->text->InsertChar(owner->view(), datetmp[i]);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
// a zoom change.
textcache.clear();
}
+ break;
case LFUN_SET_COLOR:
{
- string lyx_name, x11_name;
- x11_name = split(argument, lyx_name, ' ');
+ string lyx_name;
+ string const x11_name = split(argument, lyx_name, ' ');
if (lyx_name.empty() || x11_name.empty()) {
LyXBell();
setErrorMessage(N_("Syntax: set-color <lyx_name>"
}
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"));
+ static string const err1 (N_("Set-color \""));
+ static string const err2 (
+ N_("\" failed - color is undefined "
+ "or may not be redefined"));
LyXBell();
- setErrorMessage(err1 + lyx_name + err2);
+ setErrorMessage(_(err1) + lyx_name + _(err2));
break;
}
lyxColorHandler->updateColor(lcolor.getFromLyXName(lyx_name));
case LFUN_UNKNOWN_ACTION:
{
- if(!owner->buffer()) {
+ if (!owner->buffer()) {
LyXBell();
setErrorMessage(N_("No document open"));
break;
* "auto_region_delete", which defaults to
* true (on). */
- if ( lyxrc.auto_region_delete ) {
+ if (lyxrc.auto_region_delete) {
if (owner->view()->text->selection){
owner->view()->text->CutSelection(owner->view(), false);
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
}
owner->view()->beforeChange();
-
+ LyXFont const old_font(owner->view()->text->real_current_font);
for (string::size_type i = 0;
i < argument.length(); ++i) {
if (greek_kb_flag) {
- if (!math_insert_greek(argument[i]))
+ if (!math_insert_greek(owner->view(),
+ argument[i]))
+#if 0
owner->getIntl()->getTrans()->TranslateAndInsert(argument[i], owner->view()->text);
+#else
+ owner->getIntl()->getTrans().TranslateAndInsert(argument[i], owner->view()->text);
+#endif
} else
+#if 0
owner->getIntl()->getTrans()->TranslateAndInsert(argument[i], owner->view()->text);
+#else
+ owner->getIntl()->getTrans().TranslateAndInsert(argument[i], owner->view()->text);
+#endif
}
owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
owner->view()->text->sel_cursor =
owner->view()->text->cursor;
moveCursorUpdate(false);
+
+ // real_current_font.number can change so we need to
+ // update the minibuffer
+ if (old_font != owner->view()->text->real_current_font)
+ owner->showState();
return string();
} else {
// why is an "Unknown action" with empty
setErrorMessage(N_("Unknown action"));
}
break;
+ }
+
default:
lyxerr << "A truly unknown func!" << endl;
break;
- }
} // end of switch
exit_with_message:
- string res = getMessage();
+ string const res = getMessage();
if (res.empty()) {
if (!commandshortcut.empty()) {
- string newbuf = owner->getMiniBuffer()->GetText();
+ string const newbuf =
+ owner->getMiniBuffer()->GetText();
if (newbuf != commandshortcut) {
owner->getMiniBuffer()->Set(newbuf
+ " " +
}
}
} else {
- owner->getMiniBuffer()->Set(string(_(res.c_str()))
- + " " + commandshortcut);
+ string msg(_(res));
+ msg += " ";
+ msg += commandshortcut;
+ owner->getMiniBuffer()->Set(msg);
}
return res;
void LyXFunc::MenuNew(bool fromTemplate)
{
- string fname, initpath = lyxrc.document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
- string trypath = owner->buffer()->filepath;
+ string const trypath = owner->buffer()->filepath;
// If directory is writeable, use this as default.
if (IsDirWriteable(trypath) == 1)
initpath = trypath;
static int newfile_number = 0;
string s;
-
+
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"),
+ string fname = fileDlg.Select(_("Enter Filename for new document"),
initpath, "*.lyx", _("newfile"));
AllowInput(owner->view());
// Check if the document already is open
if (bufferlist.exists(s)) {
- switch(AskConfirmation(_("Document is already open:"),
+ 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)")))
// loads document
owner->getMiniBuffer()->Set(_("Opening document"),
MakeDisplayPath(s), "...");
- XFlush(fl_display);
+ XFlush(fl_get_display());
owner->view()->buffer(
bufferlist.loadLyXFile(s));
owner->getMiniBuffer()->Set(_("Document"),
}
}
} else {
- s = AddPath(lyxrc.document_path,
- "newfile" + tostr(++newfile_number));
+ s = AddName(lyxrc.document_path,
+ "newfile" + tostr(++newfile_number) + ".lyx");
FileInfo fi(s);
while (bufferlist.exists(s) || fi.readable()) {
++newfile_number;
- s = AddPath(lyxrc.document_path,
- "newfile" + tostr(newfile_number));
+ s = AddName(lyxrc.document_path,
+ "newfile" + tostr(newfile_number) +
+ ".lyx");
fi.newFile(s);
}
}
string templname;
if (fromTemplate) {
ProhibitInput(owner->view());
- fname = fileDlg.Select(_("Choose template"),
- lyxrc.template_path,
- "*.lyx");
- templname = fname;
+ string const fname = fileDlg.Select(_("Choose template"),
+ lyxrc.template_path,
+ "*.lyx");
AllowInput(owner->view());
+ if (fname.empty()) return;
+ templname = fname;
}
// find a free buffer
LyXFileDlg fileDlg;
if (owner->view()->available()) {
- string trypath = owner->buffer()->filepath;
+ string const trypath = owner->buffer()->filepath;
// If directory is writeable, use this as default.
if (IsDirWriteable(trypath) == 1)
initpath = trypath;
}
}
-// 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::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
-)
+// checks for running without gui are missing.
+void LyXFunc::doImport(string const & argument)
{
- string filename = file;
+ string format;
+ string filename = split(argument, format, ' ');
+ lyxerr.debug() << "LyXFunc::doImport: " << format
+ << " file: " << filename << endl;
if (filename.empty()) { // need user interaction
string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
- string trypath = owner->buffer()->filepath;
+ string const trypath = owner->buffer()->filepath;
// If directory is writeable, use this as default.
if (IsDirWriteable(trypath) == 1)
initpath = trypath;
fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
- filename = fileDlg.Select(text, initpath, pattern);
+ string const text = _("Select ") + formats.PrettyName(format)
+ + _(" file to import");
+ string const extension = "*." + formats.Extension(format);
+ filename = fileDlg.Select(text, initpath, extension);
AllowInput(owner->view());
// check selected filename
// get absolute path of file
filename = MakeAbsPath(filename);
- string lyxfile = ChangeExtension(filename, ".lyx");
+ string const lyxfile = ChangeExtension(filename, ".lyx");
// Check if the document already is open
if (bufferlist.exists(lyxfile)) {
- switch(AskConfirmation(_("Document is already open:"),
+ switch (AskConfirmation(_("Document is already open:"),
MakeDisplayPath(lyxfile, 50),
_("Do you want to close that document now?\n"
"('No' will just switch to the open version)")))
}
// Check if a LyX document by the same root exists in filesystem
- FileInfo f(lyxfile, true);
+ FileInfo const f(lyxfile, true);
if (f.exist() && !AskQuestion(_("A document by the name"),
MakeDisplayPath(lyxfile),
_("already exists. Overwrite?"))) {
}
// filename should be valid now
- // notify user of import ahead
- string displaypath = MakeDisplayPath(filename);
- owner->getMiniBuffer()->Set(_("Importing"), displaypath, "...");
-
- // call real importer
- bool result = func(owner->view(), filename);
-
- // we are done
- if (result)
- owner->getMiniBuffer()->Set(displaypath, _("imported."));
- else
- owner->getMiniBuffer()->Set(displaypath, _(": import failed."));
-}
-
-static
-bool doImportASCIIasLines(BufferView * view, string const & filename)
-{
- view->buffer(bufferlist.newFile(filename, string()));
- InsertAsciiFile(view, filename, false);
- return true;
-}
-
-static
-bool doImportASCIIasParagraphs(BufferView * view, string const & filename)
-{
- view->buffer(bufferlist.newFile(filename, string()));
- InsertAsciiFile(view, filename, true);
- return true;
-}
-
-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;
-}
-
-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;
- Buffer * buf = 0;
-
- int result = one.startscript(Systemcalls::System, tmp);
- if (result == 0) {
- string filename = ChangeExtension(filename, ".lyx");
- // File was generated without problems. Load it.
- buf = bufferlist.loadLyXFile(filename);
- }
-
- return result == 0;
+ Importer::Import(owner, filename, format);
}
LyXFileDlg fileDlg;
if (owner->view()->available()) {
- string trypath = owner->buffer()->filepath;
+ string const trypath = owner->buffer()->filepath;
// If directory is writeable, use this as default.
if (IsDirWriteable(trypath) == 1)
initpath = trypath;
// Inserts document
owner->getMiniBuffer()->Set(_("Inserting document"),
MakeDisplayPath(filename), "...");
- bool res = owner->view()->insertLyXFile(filename);
+ bool const res = owner->view()->insertLyXFile(filename);
if (res) {
owner->getMiniBuffer()->Set(_("Document"),
MakeDisplayPath(filename),
}
}
-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()
{
- string fn = owner->buffer()->fileName();
+ string const fn = owner->buffer()->fileName();
if (bufferlist.close(owner->buffer()))
owner->view()->buffer(bufferlist.loadLyXFile(fn));
}
// set variables that don't exist
// since there's no current buffer
owner->getDialogs()->hideBufferDependent();
- }
- else {
+ } else {
owner->view()->buffer(bufferlist.first());
}
}
{
LyXCursor cursor = owner->view()->text->cursor;
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 0;
+ Buffer::inset_iterator it =
+ find_if(Buffer::inset_iterator(cursor.par(),
+ cursor.pos()),
+ buffer->inset_iterator_end(),
+ compare_memfun(&Inset::LyxCode, code));
+ return it != buffer->inset_iterator_end() ? (*it) : 0;
}