#include <algorithm>
#include <iostream>
-#include "LString.h"
+//#include "LString.h"
#include FORMS_H_LOCATION
#include "lyx.h"
#include "layout_forms.h"
#include "support/filetools.h"
#include "support/path.h"
#include "lyxserver.h"
-#include "FontLoader.h"
#include "lyxrc.h"
#include "lyxtext.h"
#include "CutAndPaste.h"
-#include "TextCache.h"
+#include "exporter.h"
using std::ifstream;
using std::copy;
extern FD_form_preamble * fd_form_preamble;
extern FD_form_table * fd_form_table;
extern FD_form_figure * fd_form_figure;
-extern FD_form_screen * fd_form_screen;
-extern FD_form_toc * fd_form_toc;
-extern FD_form_ref * fd_form_ref;
extern FD_form_bullet * fd_form_bullet;
extern BufferView * current_view; // called too many times in this file...
int RunLinuxDoc(BufferView *, int, string const &);
int RunDocBook(int, string const &);
-void MenuWrite(Buffer * buf);
-void MenuWriteAs(Buffer * buffer);
+bool MenuWrite(Buffer * buf);
+bool MenuWriteAs(Buffer * buffer);
void MenuReload(Buffer * buf);
void MenuLayoutSave();
void ShowMessage(Buffer * buf,
string const & msg1,
- string const & msg2 = string(),
- string const & msg3 = string(), int delay = 6)
+ string const & msg2,
+ string const & msg3, int delay)
{
if (lyxrc.use_gui) {
buf->getUser()->owner()->getMiniBuffer()->Set(msg1, msg2,
//
// should be moved to lyxfunc.C
-void MenuWrite(Buffer * buffer)
+bool MenuWrite(Buffer * buffer)
{
XFlush(fl_display);
if (!buffer->save()) {
if (AskQuestion(_("Save failed. Rename and try again?"),
MakeDisplayPath(s, 50),
_("(If not, document is not saved.)"))) {
- MenuWriteAs(buffer);
+ return MenuWriteAs(buffer);
}
+ return false;
} else {
lastfiles->newFile(buffer->fileName());
}
+ return true;
}
// should be moved to BufferView.C
// Half of this func should be in LyXView, the rest in BufferView.
-void MenuWriteAs(Buffer * buffer)
+bool MenuWriteAs(Buffer * buffer)
{
// Why do we require BufferView::text to be able to write a
// document? I see no point in that. (Lgb)
if (!IsLyXFilename(fname))
fname += ".lyx";
- fname = fileDlg.Select(_("Enter Filename to Save Document as"),
- OnlyPath(fname),
- "*.lyx",
- OnlyFilename(fname));
+ if (buffer->isUnnamed()) {
+ fname = fileDlg.Select(_("Enter Filename to Save Document as"),
+ "",
+ "*.lyx",
+ "");
+ } else {
+ fname = fileDlg.Select(_("Enter Filename to Save Document as"),
+ OnlyPath(fname),
+ "*.lyx",
+ OnlyFilename(fname));
+ }
AllowInput(current_view);
if (fname.empty()) {
- return;
+ return false;
}
// Make sure the absolute filename ends with appropriate suffix
string s = MakeAbsPath(fname);
if (!AskQuestion(_("Same name as document already has:"),
MakeDisplayPath(s, 50),
_("Save anyway?")))
- return;
+ return false;
// Falls through to name change and save
}
// No, but do we have another file with this name open?
ShowMessage(buffer, _("Document renamed to '"),
MakeDisplayPath(s), _("', but not saved..."));
}
- return;
+ return false;
} // Check whether the file exists
else {
FileInfo myfile(s);
if (myfile.isOK() && !AskQuestion(_("Document already exists:"),
MakeDisplayPath(s, 50),
_("Replace file?")))
- return;
+ return false;
}
// Ok, change the name of the buffer
buffer->fileName(s);
buffer->markDirty();
+ bool unnamed = buffer->isUnnamed();
+ buffer->setUnnamed(false);
// And save
// Small bug: If the save fails, we have irreversible changed the name
// of the document.
- MenuWrite(buffer);
-}
-
+ // Hope this is fixed this way! (Jug)
+ if (!MenuWrite(buffer)) {
+ buffer->fileName(oldname);
+ buffer->setUnnamed(unnamed);
+ ShowMessage(buffer, _("Document could not be saved!"),
+ _("Holding the old name."), MakeDisplayPath(oldname));
+ return false;
+ }
+ // now remove the oldname autosave file if existant!
+ removeAutosaveFile(oldname);
+ return true;
+}
+#ifndef NEW_EXPORT
int MenuRunLaTeX(Buffer * buffer)
{
int ret = 0;
}
return ret;
}
-
+#endif
int MenuBuildProg(Buffer * buffer)
{
return ret;
}
-
+#ifndef NEW_EXPORT
int MakeLaTeXOutput(Buffer * buffer)
{
// Who cares?
AllowInput(current_view);
return ret;
}
-
+#endif
void MenuFax(Buffer * buffer)
{
//if (!bv->text)
// return;
+#ifdef NEW_EXPORT
+ // Generate postscript file
+ if (!Exporter::Export(buffer, "ps", true))
+ return;
+
+ // Send fax
+ string ps = OnlyFilename(ChangeExtension (buffer->fileName(),
+ ".ps"));
+#else
// Generate postscript file
if (!CreatePostscript(buffer, true)) {
return;
// Send fax
string ps = OnlyFilename(ChangeExtension (buffer->fileName(),
".ps_tmp"));
+#endif
string path = OnlyPath (buffer->fileName());
if (lyxrc.use_tempdir || (IsDirWriteable(path) < 1)) {
path = buffer->tmppath;
}
+#ifndef NEW_EXPORT
// Returns false if we fail
bool PreviewDVI(Buffer * buffer)
{
}
// HTML
else if (extyp == "html") {
- MenuMakeHTML(buffer);
- }
- // HTML from linuxdoc
- else if (extyp == "html-linuxdoc") {
- MenuMakeHTML_LinuxDoc(buffer);
- }
- // HTML from docbook
- else if (extyp == "html-docbook") {
- MenuMakeHTML_DocBook(buffer);
+ if (buffer->isLinuxDoc())
+ MenuMakeHTML_LinuxDoc(buffer);
+ else if (buffer->isDocBook())
+ MenuMakeHTML_DocBook(buffer);
+ else
+ MenuMakeHTML(buffer);
}
else {
ShowMessage(buffer, _("Unknown export type: ") + extyp);
}
}
+#endif
void QuitLyX()
if (!bv->available())
return;
- if (bv->buffer()->isBakClean()
- || bv->buffer()->isReadonly()) {
+ if (bv->buffer()->isBakClean() || bv->buffer()->isReadonly()) {
// We don't save now, but we'll try again later
bv->owner()->resetAutosaveTimer();
return;
ifs.unsetf(ios::skipws);
istream_iterator<char> ii(ifs);
istream_iterator<char> end;
+#if !defined(USE_INCLUDED_STRING) && !defined(STD_STRING_IS_GOOD)
+ // We use this until the compilers get better...
+ vector<char> tmp;
+ copy(ii, end, back_inserter(tmp));
+ string tmpstr(tmp.begin(), tmp.end());
+#else
+ // This is what we want to use and what we will use once the
+ // compilers get good enough.
//string tmpstr(ii, end); // yet a reason for using std::string
// alternate approach to get the file into a string:
string tmpstr;
copy(ii, end, back_inserter(tmpstr));
+#endif
// insert the string
current_view->hideCursor();
}
-void MenuShowTableOfContents()
-{
- static int ow = -1, oh;
-
- TocUpdateCB(0, 0);
- if (fd_form_toc->form_toc->visible) {
- fl_raise_form(fd_form_toc->form_toc);
- } else {
- 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);
- }
-}
-
-
void MenuInsertLabel(char const * arg)
{
string label = arg;
}
}
if (!label.empty()) {
- InsetLabel * new_inset = new InsetLabel;
- new_inset->setContents(label);
- current_view->insertInset(new_inset);
+ InsetCommandParams p( "label", label );
+ InsetLabel * inset = new InsetLabel( p );
+ current_view->insertInset( inset );
}
AllowInput(current_view);
}
-void MenuInsertRef()
-{
- static int ow = -1, oh;
-
- RefUpdateCB(0, 0);
- if (fd_form_ref->form_ref->visible) {
- fl_raise_form(fd_form_ref->form_ref);
- } else {
- fl_show_form(fd_form_ref->form_ref,
- FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
- _("Insert Reference"));
- if (ow < 0) {
- ow = fd_form_ref->form_ref->w;
- oh = fd_form_ref->form_ref->h;
- }
- fl_set_form_minsize(fd_form_ref->form_ref, ow, oh);
- }
-}
-
-
// candidate for move to LyXView
// This is only used in toolbar.C
void LayoutsCB(int sel, void *)
tmp.c_str());
}
-
+#ifndef NEW_EXPORT
/*
* SGML Linuxdoc support:
* (flag == 0) make TeX output
current_view->buffer()->redraw();
return errorcode;
}
-
+#endif
void MenuLayoutCharacter()
{
}
}
-
+#ifdef USE_OLD_DOCUMENT_LAYOUT
inline
void DeactivateDocumentButtons ()
{
}
}
}
+#endif
bool UpdateLayoutPreamble()
}
+#ifdef USE_OLD_DOCUMENT_LAYOUT
/* callbacks for form form_document */
-
void UpdateDocumentButtons(BufferParams const & params)
{
fl_set_choice(fd_form_document->choice_pagestyle, 1);
// bullet callbacks etc. in bullet_panel.C -- ARRae
}
-
/* callbacks for form form_quotes */
extern "C" void QuotesApplyCB(FL_OBJECT *, long)
QuotesApplyCB(ob, data);
QuotesCancelCB(ob, data);
}
-
+#else
+// this is needed for now!
+extern "C" void ChoiceClassCB(FL_OBJECT *, long) {}
+extern "C" void DocumentDefskipCB(FL_OBJECT *, long) {}
+extern "C" void DocumentSpacingCB(FL_OBJECT *, long) {}
+extern "C" void DocumentApplyCB(FL_OBJECT *, long) {}
+extern "C" void DocumentCancelCB(FL_OBJECT *, long) {}
+extern "C" void DocumentOKCB(FL_OBJECT *, long) {}
+extern "C" void DocumentBulletsCB(FL_OBJECT *, long) {}
+extern "C" void QuotesApplyCB(FL_OBJECT *, long) {}
+extern "C" void QuotesCancelCB(FL_OBJECT *, long) {}
+extern "C" void QuotesOKCB(FL_OBJECT *, long) {}
+#endif
/* callbacks for form form_preamble */
{
if (!current_view->available())
return;
-
+
+#ifndef NEW_TABULAR
// check for tables in tables
if (current_view->text->cursor.par()->table){
WriteAlert(_("Impossible Operation!"),
_("Sorry."));
return;
}
-
+#endif
current_view->owner()->getMiniBuffer()->Set(_("Inserting table..."));
int ysize = int(fl_get_slider_value(fd_form_table->slider_columns) + 0.5);
0);
}
#endif
-
+#ifndef NEW_TABULAR
current_view->text->cursor.par()->table =
new LyXTable(xsize, ysize);
-
+#endif
Language const * lang =
current_view->text->cursor.par()->getParLanguage(current_view->buffer()->params);
LyXFont font(LyXFont::ALL_INHERIT, lang);
current_view->owner()->getMiniBuffer()->Set(_("Inserting figure..."));
if (fl_get_button(fd_form_figure->radio_inline)
- || current_view->text->cursor.par()->table) {
+#ifndef NEW_TABULAR
+ || current_view->text->cursor.par()->table
+#endif
+ ) {
InsetFig * new_inset = new InsetFig(100, 20, buffer);
current_view->insertInset(new_inset);
current_view->owner()->getMiniBuffer()->Set(_("Figure inserted"));
}
-extern "C" void ScreenApplyCB(FL_OBJECT *, long)
-{
- lyxrc.roman_font_name = fl_get_input(fd_form_screen->input_roman);
- lyxrc.sans_font_name = fl_get_input(fd_form_screen->input_sans);
- lyxrc.typewriter_font_name = fl_get_input(fd_form_screen->input_typewriter);
- lyxrc.font_norm = fl_get_input(fd_form_screen->input_font_norm);
- lyxrc.set_font_norm_type();
- lyxrc.zoom = atoi(fl_get_input(fd_form_screen->intinput_size));
- fontloader.update();
-
- // Of course we should only to the resize and the textcahce.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();
-
- current_view->owner()->getMiniBuffer()->Set(_("Screen options set"));
-}
-
-
-extern "C" void ScreenCancelCB(FL_OBJECT *, long)
-{
- fl_hide_form(fd_form_screen->form_screen);
-}
-
-
-extern "C" void ScreenOKCB(FL_OBJECT * ob, long data)
-{
- ScreenCancelCB(ob, data);
- ScreenApplyCB(ob, data);
-}
-
-
// This function runs "configure" and then rereads lyx.defaults to
// reconfigure the automatic settings.
void Reconfigure(BufferView * bv)
_("You need to restart LyX to make use of any"),
_("updated document class specifications."));
}
-
-
-//
-// Table of Contents
-//
-
-static vector<Buffer::TocItem> toclist;
-
-
-extern "C" void TocSelectCB(FL_OBJECT * ob, long)
-{
- if (!current_view->available())
- return;
-
- TocUpdateCB(0, 0);
- unsigned int choice = fl_get_browser(ob);
- if (0 < choice && choice - 1 < toclist.size()) {
- current_view->beforeChange();
- current_view->text->SetCursor(current_view, toclist[choice-1].par, 0);
- current_view->text->sel_cursor =
- current_view->text->cursor;
- current_view->update(BufferView::SELECT|BufferView::FITCUR);
- } else {
- WriteAlert(_("Error"),
- _("Couldn't find this label"),
- _("in current document."));
- }
-}
-
-
-extern "C" void TocCancelCB(FL_OBJECT *, long)
-{
- fl_hide_form(fd_form_toc->form_toc);
-}
-
-
-extern "C"
-void TocUpdateCB(FL_OBJECT *, long)
-{
- if (!current_view->available()) {
- toclist.clear();
- fl_clear_browser(fd_form_toc->browser_toc);
- fl_add_browser_line(fd_form_toc->browser_toc,
- _("*** No Document ***"));
- return;
- }
-
- vector<vector<Buffer::TocItem> > tmp =
- current_view->buffer()->getTocList();
- int type = fl_get_choice(fd_form_toc->toctype)-1;
- //if (toclist == tmp[type])
- // return;
- if (toclist.size() == tmp[type].size()) {
- // Check if all elements are the same.
- unsigned int i = 0;
- for (; i < toclist.size(); ++i) {
- if (toclist[i] != tmp[type][i])
- break;
- }
- if (i >= toclist.size()) return;
- }
-
- toclist = tmp[type];
-
- static Buffer * buffer = 0;
- int topline = 0;
- int line = 0;
- if (buffer == current_view->buffer()) {
- topline = fl_get_browser_topline(fd_form_toc->browser_toc);
- line = fl_get_browser(fd_form_toc->browser_toc);
- } else
- buffer = current_view->buffer();
-
- fl_clear_browser(fd_form_toc->browser_toc);
- fl_hide_object(fd_form_toc->browser_toc);
-
- for (vector<Buffer::TocItem>::const_iterator it = toclist.begin();
- it != toclist.end(); ++it)
- fl_add_browser_line(fd_form_toc->browser_toc,
- (string(4*(*it).depth,' ')+
- (*it).str).c_str());
-
- fl_set_browser_topline(fd_form_toc->browser_toc, topline);
- fl_select_browser_line(fd_form_toc->browser_toc, line);
- fl_show_object(fd_form_toc->browser_toc);
-}
-
-
-/* callbacks for form form_ref */
-extern "C" void RefSelectCB(FL_OBJECT *, long data)
-{
- if (!current_view->available())
- return;
-
- string s =
- fl_get_browser_line(fd_form_ref->browser_ref,
- fl_get_browser(fd_form_ref->browser_ref));
- string u = frontStrip(strip(fl_get_input(fd_form_ref->ref_name)));
-
- if (s.empty())
- return;
-
- if (data == 5) {
- current_view->owner()->getLyXFunc()->Dispatch(LFUN_REFGOTO, s.c_str());
- if (!current_view->NoSavedPositions()) {
- fl_activate_object(fd_form_ref->back);
- fl_set_object_lcol(fd_form_ref->back, FL_BLACK);
- }
- return;
- } else if (data >= 6) {
- current_view->owner()->getLyXFunc()->Dispatch(LFUN_REFBACK);
- if (current_view->NoSavedPositions()) {
- fl_deactivate_object(fd_form_ref->back);
- fl_set_object_lcol(fd_form_ref->back, FL_INACTIVE);
- }
- return;
- }
-
- static string const commands[5]
- = { "\\ref", "\\pageref", "\\vref", "\\vpageref",
- "\\prettyref"};
- string t = commands[data];
-
- if (current_view->buffer()->isSGML())
- t += "[" + u + "]" + "{" + s + "}";
- else
- t += "{" + s + "}";
-
- Inset * new_inset =
- new InsetRef(t, current_view->buffer());
- current_view->insertInset(new_inset);
-}
-
-
-extern "C" void RefUpdateCB(FL_OBJECT *, long)
-{
- if (!current_view->available()) {
- fl_clear_browser(fd_form_ref->browser_ref);
- return;
- }
-
- FL_OBJECT * brow = fd_form_ref->browser_ref;
-
- // Get the current line, in order to restore it later
- char const * const btmp = fl_get_browser_line(brow,
- fl_get_browser(brow));
- string currentstr = btmp ? btmp : "";
-
- fl_clear_browser(brow);
- fl_hide_object(brow);
-
- vector<string> refs = current_view->buffer()->getLabelList();
- if (fl_get_button(fd_form_ref->sort))
- sort(refs.begin(),refs.end());
- for (vector<string>::const_iterator it = refs.begin();
- it != refs.end(); ++it)
- fl_add_browser_line(brow, (*it).c_str());
-
- int topline = 1;
- int total_lines = fl_get_browser_maxline(brow);
- for (int i = 1; i <= total_lines ; ++i) {
- if (fl_get_browser_line(brow, i) == currentstr) {
- topline = i;
- break;
- }
- }
- fl_set_browser_topline(brow, topline);
-
- bool empty = refs.empty();
- bool sgml = current_view->buffer()->isSGML();
- bool readonly = current_view->buffer()->isReadonly();
-
- if (current_view->NoSavedPositions()) {
- fl_deactivate_object(fd_form_ref->back);
- fl_set_object_lcol(fd_form_ref->back, FL_INACTIVE);
- } else {
- fl_activate_object(fd_form_ref->back);
- fl_set_object_lcol(fd_form_ref->back, FL_BLACK);
- }
-
- if (empty) {
- fl_add_browser_line(brow,
- _("*** No labels found in document ***"));
- fl_deactivate_object(brow);
- fl_deactivate_object(fd_form_ref->gotoref);
- fl_set_object_lcol(fd_form_ref->gotoref, FL_INACTIVE);
- } else {
- fl_select_browser_line(brow, topline);
- fl_activate_object(brow);
- fl_activate_object(fd_form_ref->gotoref);
- fl_set_object_lcol(fd_form_ref->gotoref, FL_BLACK);
- }
-
- if (empty || readonly) {
- fl_deactivate_object(fd_form_ref->ref);
- fl_set_object_lcol(fd_form_ref->ref, FL_INACTIVE);
- fl_deactivate_object(fd_form_ref->pageref);
- fl_set_object_lcol(fd_form_ref->pageref, FL_INACTIVE);
- } else {
- fl_activate_object(fd_form_ref->ref);
- fl_set_object_lcol(fd_form_ref->ref, FL_BLACK);
- fl_activate_object(fd_form_ref->pageref);
- fl_set_object_lcol(fd_form_ref->pageref, FL_BLACK);
- }
-
- if (empty || readonly || sgml) {
- fl_deactivate_object(fd_form_ref->vref);
- fl_set_object_lcol(fd_form_ref->vref, FL_INACTIVE);
- fl_deactivate_object(fd_form_ref->vpageref);
- fl_set_object_lcol(fd_form_ref->vpageref, FL_INACTIVE);
- fl_deactivate_object(fd_form_ref->prettyref);
- fl_set_object_lcol(fd_form_ref->prettyref, FL_INACTIVE);
- } else {
- fl_activate_object(fd_form_ref->vref);
- fl_set_object_lcol(fd_form_ref->vref, FL_BLACK);
- fl_activate_object(fd_form_ref->vpageref);
- fl_set_object_lcol(fd_form_ref->vpageref, FL_BLACK);
- fl_activate_object(fd_form_ref->prettyref);
- fl_set_object_lcol(fd_form_ref->prettyref, FL_BLACK);
- }
-
- if (sgml) {
- fl_activate_object(fd_form_ref->ref_name);
- fl_set_object_lcol(fd_form_ref->ref_name, FL_BLACK);
- } else {
- fl_deactivate_object(fd_form_ref->ref_name);
- fl_set_object_lcol(fd_form_ref->ref_name, FL_INACTIVE);
- }
-
- fl_show_object(brow);
-}
-
-
-extern "C" void RefHideCB(FL_OBJECT *, long)
-{
- fl_hide_form(fd_form_ref->form_ref);
-}