#include "insets/insetindex.h"
#include "insets/insetinclude.h"
#include "insets/insetbib.h"
+#include "insets/insettext.h"
+#include "insets/insetert.h"
+#include "insets/insetgraphics.h"
+#include "insets/insetfoot.h"
#include "mathed/formulamacro.h"
#include "toolbar.h"
#include "spellchecker.h" // RVDK_PATCH_5
#include "ImportNoweb.h"
#include "layout.h"
#include "WorkArea.h"
+#include "lyxfr1.h"
extern bool cursor_follows_scrollbar;
-extern void InsertAsciiFile(string const &, bool);
+extern void InsertAsciiFile(BufferView *, string const &, bool);
extern void math_insert_symbol(char const *);
extern Bool math_insert_greek(char const); // why "Bool"?
extern BufferList bufferlist;
extern tex_accent_struct get_accent(kb_action action);
extern void AutoSave();
-extern void MenuSearch();
extern void SetUpdateTimer(float timer = 0.3);
extern void FreeUpdateTimer();
extern bool PreviewDVI(Buffer *);
extern void LoadLyXFile(string const &);
extern void Reconfigure(BufferView *);
-extern int current_layout;
+extern LyXTextClass::size_type current_layout;
extern int getISOCodeFromLaTeX(char *);
extern void ShowLatexLog();
// 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";
+ static bool noLaTeX = lyxrc.latex_command == "none";
bool disable = false;
switch (action) {
case LFUN_PREVIEW:
- disable = noLaTeX || lyxrc->view_dvi_command == "none";
+ disable = noLaTeX || lyxrc.view_dvi_command == "none";
break;
case LFUN_PREVIEWPS:
- disable = noLaTeX || lyxrc->view_ps_command == "none";
+ disable = noLaTeX || lyxrc.view_ps_command == "none";
break;
case LFUN_RUNLATEX:
case LFUN_RUNDVIPS:
disable = noLaTeX;
break;
case LFUN_MENUPRINT:
- disable = noLaTeX || lyxrc->print_command == "none";
+ 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")
- disable = lyxrc->relyx_command == "none";
+ disable = lyxrc.relyx_command == "none";
+ if (argument == "linuxdoc")
+ disable = lyxrc.linuxdoc_to_lyx_command == "none";
break;
case LFUN_EXPORT:
if (argument == "dvi" || argument == "postscript")
disable = noLaTeX;
if (argument == "html")
- disable = lyxrc->html_command == "none";
+ disable = lyxrc.html_command == "none";
+ if (argument == "html-linuxdoc")
+ disable = lyxrc.linuxdoc_to_html_command == "none";
+ if (argument == "html-docbook")
+ disable = lyxrc.docbook_to_html_command == "none";
break;
case LFUN_UNDO:
disable = buf->undostack.empty();
disable = buf->redostack.empty();
break;
case LFUN_SPELLCHECK:
- disable = lyxrc->isp_command == "none";
+ disable = lyxrc.isp_command == "none";
break;
case LFUN_RUNCHKTEX:
- disable = lyxrc->chktex_command == "none";
+ disable = lyxrc.chktex_command == "none";
break;
case LFUN_LAYOUT_TABLE:
disable = ! owner->view()->text->cursor.par->table;
if (font.latex() == LyXFont::ON)
box = LyXFunc::ToggleOn;
break;
- case LFUN_RTL:
- if (font.direction() == LyXFont::RTL_DIR)
- box = LyXFunc::ToggleOn;
- break;
default:
box = LyXFunc::OK;
break;
commandshortcut.clear();
- if (lyxrc->display_shortcuts && show_sc) {
+ if (lyxrc.display_shortcuts && show_sc) {
if (action != LFUN_SELFINSERT) {
// Put name of command and list of shortcuts
// for it in minibuffer
inset->GetCursorPos(slx, sly);
owner->view()->unlockInset(inset);
owner->view()->menuUndo();
- inset = static_cast<UpdatableInset*>(owner->view()->text->cursor.par->GetInset(owner->view()->text->cursor.pos));
- if (inset)
- inset->Edit(owner->view(), slx, sly);
+ inset = static_cast<UpdatableInset*>(
+ owner->view()->text->cursor.par->
+ GetInset(owner->view()->text->
+ cursor.pos));
+ if (inset)
+ inset->Edit(owner->view(),slx,sly,0);
+ return string();
+ } else if (action == LFUN_REDO) {
+ int slx, sly;
+ UpdatableInset * inset = owner->view()->
+ the_locking_inset;
+ inset->GetCursorPos(slx, sly);
+ owner->view()->unlockInset(inset);
+ owner->view()->menuRedo();
+ inset = static_cast<UpdatableInset*>(
+ owner->view()->text->cursor.par->
+ GetInset(owner->view()->text->
+ cursor.pos));
+ if (inset)
+ inset->Edit(owner->view(),slx,sly,0);
return string();
- } else
- if (action == LFUN_REDO) {
- int slx, sly;
- UpdatableInset * inset = owner->view()->the_locking_inset;
- inset->GetCursorPos(slx, sly);
- owner->view()->unlockInset(inset);
- owner->view()->menuRedo();
- inset = static_cast<UpdatableInset*>(owner->view()->text->cursor.par->GetInset(owner->view()->text->cursor.pos));
- if (inset)
- inset->Edit(owner->view(),
- slx, sly);
+ } else if (owner->view()->the_locking_inset->
+ LocalDispatch(owner->view(), action,
+ argument) ==
+ UpdatableInset::DISPATCHED)
+ return string();
+ else {
+ setMessage(N_("Text mode"));
+ LyXDirection direction = owner->view()->text->
+ cursor.par->getParDirection();
+ if ((action == -1) ||
+ ((action == LFUN_RIGHT) &&
+ (direction == LYX_DIR_LEFT_TO_RIGHT))) {
+ owner->view()->text->CursorRight();
+ moveCursorUpdate(false);
+ owner->getMiniBuffer()->
+ Set(CurrentState());
+ }
+ if ((action == LFUN_LEFT) &&
+ (direction == LYX_DIR_RIGHT_TO_LEFT)) {
+ owner->view()->text->CursorRight();
+ moveCursorUpdate(false);
+ owner->getMiniBuffer()->
+ Set(CurrentState());
+ }
+ if ((action == LFUN_LEFT) ||
+ (action == LFUN_RIGHT))
return string();
- } else
- if (owner->view()->the_locking_inset->LocalDispatch(owner->view(), action, argument.c_str()))
- return string();
- else {
- setMessage(N_("Text mode"));
- LyXDirection direction = owner->view()->text->cursor.par->getParDirection();
- if ( action == -1 ||
- (action == LFUN_RIGHT
- && direction == LYX_DIR_LEFT_TO_RIGHT)) {
- owner->view()->text->CursorRight();
- moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
- }
- if ( action == LFUN_LEFT
- && direction == LYX_DIR_RIGHT_TO_LEFT) {
- owner->view()->text->CursorRight();
- moveCursorUpdate(false);
- owner->getMiniBuffer()->Set(CurrentState());
- }
- if (action == LFUN_LEFT || action == LFUN_RIGHT)
- return string();
- }
+ }
}
}
// noweb
} else if (imtyp == "noweb") {
doImportLaTeX(true);
+ } else if (imtyp == "linuxdoc") {
+ doImportLinuxDoc();
} else {
setErrorMessage(string(N_("Unknown import type: "))
+ imtyp);
case LFUN_FIGURE:
Figure();
break;
-
+
+ case LFUN_INSERT_GRAPHICS:
+ {
+ Inset * new_inset = new InsetGraphics;
+ owner->view()->insertInset(new_inset);
+ break;
+ }
+
case LFUN_AUTOSAVE:
AutoSave();
break;
break;
case LFUN_MENUSEARCH:
- MenuSearch();
+ {
+ // Ok this is one _very_ bad solution, but I think that some
+ // of this will be rewritten as part of GUI indep anyway.
+ // Lgb
+ static LyXFindReplace FR_;
+ FR_.StartSearch(owner->view());
+ }
+
break;
case LFUN_PASTE:
case LFUN_FILE_INSERT_ASCII:
{
bool asPara = (argument == "paragraph");
- InsertAsciiFile(string(), asPara);
+ InsertAsciiFile(owner->view(), string(), asPara);
}
break;
// and current buffer's textclass (number). */
LyXTextClassList::ClassList::size_type tclass =
owner->view()->text->parameters->textclass;
- pair <bool, int> layout =
+ pair <bool, LyXTextClass::size_type> layout =
textclasslist.NumberOfLayout(tclass, argument);
// If the entry is obsolete, use the new one instead.
owner->getToolbar()->combox->Show();
break;
- case LFUN_RTL:
+ case LFUN_LANGUAGE:
{
- RTLCB();
+ LangCB(argument);
owner->view()->setState();
owner->getMiniBuffer()->Set(CurrentState());
}
break; // RVDK_PATCH_5
case LFUN_SPELLCHECK:
- if (lyxrc->isp_command != "none")
+ if (lyxrc.isp_command != "none")
ShowSpellChecker(owner->view());
break; // RVDK_PATCH_5
&& tmptext->cursor.par->GetChar(tmptext->cursor.pos)
== LyXParagraph::META_INSET
&& tmptext->cursor.par->GetInset(tmptext->cursor.pos)
- && tmptext->cursor.par->GetInset(tmptext->cursor.pos)->Editable() == 2){
+ && tmptext->cursor.par->GetInset(tmptext->cursor.pos)->Editable() == Inset::HIGHLY_EDITABLE){
Inset * tmpinset = tmptext->cursor.par->GetInset(tmptext->cursor.pos);
setMessage(tmpinset->EditMessage());
- tmpinset->Edit(owner->view(), 0, 0);
+ tmpinset->Edit(owner->view(), 0, 0, 0);
break;
}
if (direction == LYX_DIR_LEFT_TO_RIGHT)
&& txt->cursor.par->GetChar(txt->cursor.pos)
== LyXParagraph::META_INSET
&& txt->cursor.par->GetInset(txt->cursor.pos)
- && txt->cursor.par->GetInset(txt->cursor.pos)->Editable() == 2) {
+ && txt->cursor.par->GetInset(txt->cursor.pos)->Editable() == Inset::HIGHLY_EDITABLE) {
Inset * tmpinset = txt->cursor.par->GetInset(txt->cursor.pos);
setMessage(tmpinset->EditMessage());
tmpinset->Edit(owner->view(),
tmpinset->width(owner->view()->painter(),
txt->GetFont(txt->cursor.par,
- txt->cursor.pos)), 0);
+ txt->cursor.pos)),
+ 0, 0);
break;
}
if (direction == LYX_DIR_RIGHT_TO_LEFT)
// --- 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);
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());
+
+ if (style.free_spacing) {
+ owner->view()->text->InsertChar(' ');
+ owner->view()->update(-1);
+ } else {
+ owner->view()->protectedBlank();
+ }
+ moveCursorUpdate(false);
+ }
+#else
owner->view()->beforeChange();
owner->view()->text->
InsertChar(LyXParagraph::META_PROTECTED_SEPARATOR);
owner->view()->smallUpdate(1);
SetUpdateTimer();
moveCursorUpdate(false);
+#endif
break;
case LFUN_SETMARK:
else
new_inset = new InsetUrl("url", "", "");
owner->view()->insertInset(new_inset);
- new_inset->Edit(owner->view(), 0, 0);
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ }
+ break;
+ case LFUN_INSET_TEXT:
+ {
+ InsetText * new_inset = new InsetText(owner->buffer());
+ owner->view()->insertInset(new_inset);
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ }
+ break;
+ case LFUN_INSET_ERT:
+ {
+ InsetERT * new_inset = new InsetERT(owner->buffer());
+ owner->view()->insertInset(new_inset);
+ new_inset->Edit(owner->view(), 0, 0, 0);
+ }
+ break;
+ case LFUN_INSET_FOOTNOTE:
+ {
+ InsetFoot * new_inset = new InsetFoot(owner->buffer());
+ owner->view()->insertInset(new_inset);
+ new_inset->Edit(owner->view(), 0, 0, 0);
}
break;
LyXParagraph::size_type pos =
owner->view()->text->cursor.pos;
if(pos < owner->view()->text->cursor.par->size())
- dispatch_buffer = owner->view()->text->
- cursor.par->text[pos];
+ //dispatch_buffer = owner->view()->text->
+ // cursor.par->text[pos];
+ dispatch_buffer =
+ owner->view()->text->
+ cursor.par->GetChar(pos);
else
dispatch_buffer = "EOF";
}
if (owner->view()->available()) {
owner->view()->
open_new_inset(new InsetFormula(false));
- owner->view()->
- the_locking_inset->LocalDispatch(owner->view(),
- action,
- argument.c_str());
+ owner->view()
+ ->the_locking_inset
+ ->LocalDispatch(owner->view(),
+ action,
+ argument);
}
}
break;
owner->view()->insertInset(new_inset);
} else {
owner->view()->insertInset(new_inset);
- new_inset->Edit(owner->view(), 0, 0);
+ new_inset->Edit(owner->view(), 0, 0, 0);
}
}
break;
owner->view()->insertInset(new_inset);
if (lsarg.empty()) {
- new_inset->Edit(owner->view(), 0, 0);
+ new_inset->Edit(owner->view(), 0, 0, 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);
+ new_inset->Edit(owner->view(), 0, 0, 0);
} else {
//it looks blank on the screen unless
//we do something. put it here.
Inset * new_inset = new InsetInclude(argument,
owner->buffer());
owner->view()->insertInset(new_inset, "Standard", true);
- new_inset->Edit(owner->view(), 0, 0);
+ new_inset->Edit(owner->view(), 0, 0, 0);
}
break;
if (!argument.empty())
arg = argument;
else if (arg.empty())
- arg = lyxrc->date_insert_format;
+ arg = lyxrc.date_insert_format;
datetmp_len = (int) strftime(datetmp, 32, arg.c_str(), now_tm);
for (int i = 0; i < datetmp_len; i++) {
owner->view()->text->InsertChar(datetmp[i]);
case LFUN_SAVEPREFERENCES:
{
Path p(user_lyxdir);
- lyxrc->write("preferences");
+ lyxrc.write("preferences");
}
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(false);
owner->view()->update(-1);
}
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) {
void LyXFunc::MenuNew(bool fromTemplate)
{
- string fname, initpath = lyxrc->document_path;
+ string fname, initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
}
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
- fileDlg.SetButton(1, _("Templates"), lyxrc->template_path);
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
+ fileDlg.SetButton(1, _("Templates"), lyxrc.template_path);
fname = fileDlg.Select(_("Enter Filename for new document"),
initpath, "*.lyx", _("newfile"));
AllowInput();
if (fromTemplate) {
ProhibitInput();
fname = fileDlg.Select(_("Choose template"),
- lyxrc->template_path,
+ lyxrc.template_path,
"*.lyx");
templname = fname;
AllowInput();
void LyXFunc::MenuOpen()
{
- string initpath = lyxrc->document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
// launches dialog
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
string filename = fileDlg.Select(_("Select Document to Open"),
void LyXFunc::doImportASCII(bool linorpar)
{
- string initpath = lyxrc->document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
// launches dialog
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
string filename = fileDlg.Select(_("Select ASCII file to Import"),
owner->getMiniBuffer()->Set(_("Importing ASCII file"),
MakeDisplayPath(filename), "...");
// Insert ASCII file
- InsertAsciiFile(filename, linorpar);
+ InsertAsciiFile(owner->view(), filename, linorpar);
owner->getMiniBuffer()->Set(_("ASCII file "),
MakeDisplayPath(filename),
_("imported."));
void LyXFunc::doImportLaTeX(bool isnoweb)
{
- string initpath = lyxrc->document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
// launches dialog
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
string filename;
}
+void LyXFunc::doImportLinuxDoc()
+{
+ string initpath = lyxrc.document_path;
+ LyXFileDlg fileDlg;
+
+ if (owner->view()->available()) {
+ string trypath = owner->buffer()->filepath;
+ // If directory is writeable, use this as default.
+ if (IsDirWriteable(trypath) == 1)
+ initpath = trypath;
+ }
+
+ // launches dialog
+ ProhibitInput();
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
+ fileDlg.SetButton(1, _("Examples"),
+ AddPath(system_lyxdir, "examples"));
+
+ string filename = fileDlg.Select(_("Select LinuxDoc file to Import"),
+ initpath, "*.sgml");
+
+ AllowInput();
+
+ // check selected filename
+ if (filename.empty()) {
+ owner->getMiniBuffer()->Set(_("Canceled."));
+ return;
+ }
+
+ // get absolute path of file
+ filename = MakeAbsPath(filename);
+
+ // Check if the document already is open
+ string LyXfilename = ChangeExtension(filename, ".lyx", false);
+ if (bufferlist.exists(LyXfilename)){
+ switch(AskConfirmation(_("Document is already open:"),
+ MakeDisplayPath(LyXfilename, 50),
+ _("Do you want to close that document now?\n"
+ "('No' will just switch to the open version)")))
+ {
+ case 1: // Yes: close the document
+ if (!bufferlist.close(bufferlist.getBuffer(LyXfilename)))
+ // If close is canceled, we cancel here too.
+ return;
+ break;
+ case 2: // No: switch to the open document
+ owner->view()->buffer(
+ bufferlist.getBuffer(LyXfilename));
+ return;
+ case 3: // Cancel: Do nothing
+ owner->getMiniBuffer()->Set(_("Canceled."));
+ return;
+ }
+ }
+
+ // Check if a LyX document by the same root exists in filesystem
+ FileInfo f(LyXfilename, true);
+ if (f.exist() && !AskQuestion(_("A document by the name"),
+ MakeDisplayPath(LyXfilename),
+ _("already exists. Overwrite?"))) {
+ owner->getMiniBuffer()->Set(_("Canceled."));
+ return;
+ }
+
+ // loads document
+ owner->getMiniBuffer()->Set(_("Importing LinuxDoc file"),
+ MakeDisplayPath(filename), "...");
+
+ // run sgml2lyx
+ string tmp = lyxrc.linuxdoc_to_lyx_command + filename;
+ Systemcalls one;
+ Buffer * buf = 0;
+
+ int result = one.startscript(Systemcalls::System, tmp);
+ if (result == 0) {
+ string filename = ChangeExtension(filename, ".lyx", false);
+ // File was generated without problems. Load it.
+ buf = bufferlist.loadLyXFile(filename);
+ owner->view()->buffer(buf);
+ owner->getMiniBuffer()->Set(_("LinuxDoc file "),
+ MakeDisplayPath(filename),
+ _("imported."));
+ } else {
+ owner->getMiniBuffer()->Set(_("Could not import LinuxDoc file"),
+ MakeDisplayPath(filename));
+ }
+}
+
+
void LyXFunc::MenuInsertLyXFile(string const & filen)
{
string filename = filen;
if (filename.empty()) {
// Launch a file browser
- string initpath = lyxrc->document_path;
+ string initpath = lyxrc.document_path;
LyXFileDlg fileDlg;
if (owner->view()->available()) {
// launches dialog
ProhibitInput();
- fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+ fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
fileDlg.SetButton(1, _("Examples"),
AddPath(system_lyxdir, "examples"));
filename = fileDlg.Select(_("Select Document to Insert"),