#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 "menus.h"
#endif
#include "FloatList.h"
+#include "exporter.h"
+#include "FontLoader.h"
+#include "TextCache.h"
using std::pair;
using std::endl;
extern BufferList bufferlist;
extern LyXServer * lyxserver;
extern int greek_kb_flag;
-extern FD_form_toc * fd_form_toc;
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 *);
+#ifdef NEW_MENUBAR
extern int MenuRunLaTeX(Buffer *);
+#endif
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();
extern void MenuFax(Buffer *);
+#ifndef NEW_EXPORT
extern void MenuExport(Buffer *, string const &);
+#endif
+extern void show_symbols_form(LyXFunc *);
extern LyXAction lyxaction;
// (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(char const *);
-extern void MenuInsertRef();
extern void MenuLayoutCharacter();
extern void MenuLayoutParagraph();
extern void MenuLayoutDocument();
}
+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 << "]"
+ << 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;
+ }
+ }
+
+ 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 = 0;
-
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) {
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
// no
setErrorMessage(N_("Document is read-only"));
flag |= LyXFunc::Disabled;
- return flag;
}
} else {
// no
setErrorMessage(N_("Command not allowed with"
"out any document open"));
flag |= LyXFunc::Disabled;
+ return flag;
}
}
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_RUNDVIPS:
disable = noLaTeX;
break;
+#endif
case LFUN_MENUPRINT:
disable = noLaTeX || lyxrc.print_command == "none";
break;
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;
+#ifndef NEW_EXPORT
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;
+#endif
case LFUN_UNDO:
disable = buf->undostack.empty();
break;
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;
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) {
+ func_status ret = LyXFunc::Disabled;
+ 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);
+ }
+ flag |= ret;
+ disable = false;
+ } else {
+ static InsetTabular inset(owner->buffer(), 1, 1);
+ func_status ret;
+
+ disable = true;
+ ret = inset.getStatus(argument);
+ if ((ret & LyXFunc::ToggleOn) ||
+ (ret & LyXFunc::ToggleOff))
+ flag |= LyXFunc::ToggleOff;
+ }
+ break;
+
case LFUN_VC_REGISTER:
disable = buf->lyxvc.inUse();
break;
case LFUN_VC_HISTORY:
disable = !buf->lyxvc.inUse();
break;
+ case LFUN_REF_BACK:
+ disable = owner->view()->NoSavedPositions();
+ 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)
owner->view()->hideCursor();
// We cannot use this function here
- if (getStatus(action) & Disabled)
+ if (getStatus(ac) & Disabled)
goto exit_with_message;
commandshortcut.erase();
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:
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_RUNLATEX:
MenuRunLaTeX(owner->buffer());
break;
+
+ case LFUN_RUNDVIPS:
+ CreatePostscript(owner->buffer(), false);
+ break;
+#endif
case LFUN_BUILDPROG:
MenuBuildProg(owner->buffer());
case LFUN_RUNCHKTEX:
MenuRunChktex(owner->buffer());
break;
-
- case LFUN_RUNDVIPS:
- CreatePostscript(owner->buffer(), false);
- break;
-
+
case LFUN_MENUPRINT:
owner->getDialogs()->showPrint();
break;
break;
case LFUN_EXPORT:
+#ifdef NEW_EXPORT
+ Exporter::Export(owner->buffer(), argument, false);
+#else
MenuExport(owner->buffer(), argument);
+#endif
break;
case LFUN_IMPORT:
case LFUN_LOTVIEW:
case LFUN_LOAVIEW:
{
- Buffer::TocType type = Buffer::TOC_TOC;
- if (action == LFUN_LOFVIEW)
- type = Buffer::TOC_LOF;
- else if (action == LFUN_LOTVIEW)
- type = Buffer::TOC_LOT;
- else if (action == LFUN_LOAVIEW)
- type = Buffer::TOC_LOA;
- fl_set_choice(fd_form_toc->toctype,type + 1);
- 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);
- }
+ 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());
- if (!owner->view()->insertInset(new_inset, "Standard", true))
- delete new_inset;
- break;
- }
-
- case LFUN_LOF_INSERT:
- {
- Inset * new_inset = new InsetLOF(owner->buffer());
- if (!owner->view()->insertInset(new_inset, "Standard", true))
- delete new_inset;
- break;
- }
-
case LFUN_LOA_INSERT:
- {
- Inset * new_inset = new InsetLOA(owner->buffer());
- if (!owner->view()->insertInset(new_inset, "Standard", true))
- delete new_inset;
- break;
- }
-
+ case LFUN_LOF_INSERT:
case LFUN_LOT_INSERT:
{
- Inset * new_inset = new InsetLOT(owner->buffer());
- if (!owner->view()->insertInset(new_inset, "Standard", true))
- delete new_inset;
+ 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:
+ case LFUN_DIALOG_TABULAR_INSERT:
#ifndef NEW_TABULAR
Table();
#else
#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_INSET_GRAPHICS:
{
Inset * new_inset = new InsetGraphics;
- if (!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;
}
break;
case LFUN_LAYOUT_DOCUMENT:
+#ifdef USE_OLD_DOCUMENT_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:
+#ifdef USE_OLD_DOCUMENT_LAYOUT
MenuLayoutPaper();
+#endif
break;
case LFUN_LAYOUT_QUOTES:
+#ifdef USE_OLD_DOCUMENT_LAYOUT
MenuLayoutQuotes();
+#endif
break;
case LFUN_LAYOUT_PREAMBLE:
MenuInsertLabel(argument.c_str());
break;
- case LFUN_INSERT_REF:
- MenuInsertRef();
- break;
-
- case LFUN_REFTOGGLE:
- {
- InsetRef * inset =
- static_cast<InsetRef*>(getInsetByCode(Inset::REF_CODE));
- if (inset) {
- inset->Toggle();
- owner->view()->updateInset(inset, true);
+ case LFUN_REF_INSERT:
+ if (argument.empty()) {
+ InsetCommandParams p("ref");
+ owner->getDialogs()->createRef(p.getAsString());
} 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:
+ break;
+
+ case LFUN_REF_BACK:
{
owner->view()->restorePosition();
}
break;
- case LFUN_REFGOTO:
+ case LFUN_REF_GOTO:
{
string label(argument);
if (label.empty()) {
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", "", "");
- if (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
- delete new_inset;
+ owner->view()->updateInset( inset, true );
}
break;
-
+
case LFUN_INSET_TEXT:
{
InsetText * new_inset = new InsetText;
// Do we have a locking inset...
if (owner->view()->the_locking_inset) {
lyxerr << "Locking inset code: "
- << owner->view()->the_locking_inset->LyxCode();
+ << 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);
}
break;
+ case LFUN_GOTO_PARAGRAPH:
+ {
+#ifdef HAVE_SSTREAM
+ istringstream istr(argument);
+#else
+ istrstream istr(argument.c_str());
+#endif
+
+ int id;
+ istr >> id;
+ LyXParagraph * par = owner->view()->text->GetParFromID(id);
+
+ // Set the cursor
+ owner->view()->text->SetCursor(owner->view(), par, 0);
+ owner->view()->setState();
+ owner->showState();
+
+ // Recenter screen
+ owner->view()->center();
+ }
+ break;
+
case LFUN_APROPOS:
case LFUN_GETTIP:
{
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_CREATE_CITATION:
+ case LFUN_CITATION_CREATE:
{
- owner->getDialogs()->createCitation( argument );
+ // 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() );
}
break;
- case LFUN_INSERT_CITATION:
+ case LFUN_CITATION_INSERT:
{
- string keys = token(argument, '|', 0);
- string text = token(argument, '|', 1);
+ InsetCommandParams p;
+ p.setFromString( argument );
- InsetCitation * inset = new InsetCitation( keys, text );
+ InsetCitation * inset = new InsetCitation( p );
if (!owner->view()->insertInset(inset))
delete inset;
else
// 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());
- if (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 new_inset;
+ 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);
- if (!owner->view()->insertInset(new_inset))
- delete 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));
+ p.setContents( argument );
+ }
- //make the new inset and write the current word into it
- InsetIndex * new_inset = new InsetIndex();
+ owner->getDialogs()->createIndex( p.getAsString() );
+ }
+ break;
+
+ case LFUN_INDEX_INSERT:
+ {
+ InsetCommandParams p;
+ p.setFromString( argument );
+ InsetIndex * inset = new InsetIndex( p );
- new_inset->setContents(curstring);
+ 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;
- //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.
+ string curstring( owner->view()->text
+ ->cursor.par()->GetWord(curpos) );
- // move the cursor to the returned value of lastpos
- // but only for the auto-insert
- owner->view()->text->cursor.pos(lastpos);
- }
+ InsetCommandParams p( "index", curstring );
+ 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
- if (!owner->view()->insertInset(new_inset))
- delete new_inset;
- }
+ 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());
- if (!owner->view()->insertInset(new_inset, "Standard", true))
- delete new_inset;
+ 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());
- if (!owner->view()->insertInset(new_inset, "Standard", true))
- delete new_inset;
+ 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());
- if (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 new_inset;
+ delete inset;
}
break;
}
break;
+ case LFUN_DIALOG_PREFERENCES:
+ owner->getDialogs()->showPreferences();
+ break;
+
case LFUN_SAVEPREFERENCES:
{
Path p(user_lyxdir);
}
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;
initpath = trypath;
}
- 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
- 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);
}
}