X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetinclude.C;h=1d28e3347b4e8ab3b3389c3a5a03c663182e5127;hb=3c8aba3b556871fb1100a2f98cd93d5d4e3f70c9;hp=51a0da72a4dadbab3a023545b304eee4db7b0a7f;hpb=27de1486ca34aaad446adb798d71a77d6f6304da;p=lyx.git diff --git a/src/insets/insetinclude.C b/src/insets/insetinclude.C index 51a0da72a4..1d28e3347b 100644 --- a/src/insets/insetinclude.C +++ b/src/insets/insetinclude.C @@ -1,80 +1,83 @@ #include -#include +#include #ifdef __GNUG__ #pragma implementation #endif #include FORMS_H_LOCATION -#include "filedlg.h" #include "insetinclude.h" +#include "filedlg.h" #include "buffer.h" #include "bufferlist.h" -#include "error.h" -#include "filetools.h" +#include "debug.h" +#include "support/filetools.h" #include "lyxrc.h" #include "LyXView.h" #include "LaTeXFeatures.h" #include "lyx_gui_misc.h" // CancelCloseBoxCB #include "gettext.h" #include "include_form.h" -#include "FileInfo.h" +#include "support/FileInfo.h" +#include "layout.h" +#include "lyxfunc.h" + +using std::ostream; +using std::endl; -extern BufferView *current_view; +extern BufferView * current_view; -extern LyXRC *lyxrc; extern BufferList bufferlist; -extern void UpdateInset(Inset* inset, bool mark_dirty = true); -FD_include *create_form_include(void) +FD_include * create_form_include(void) { - FL_OBJECT *obj; - FD_include *fdui = (FD_include *) fl_calloc(1, sizeof(FD_include)); + FL_OBJECT * obj; + FD_include * fdui = (FD_include *) fl_calloc(1, sizeof(FD_include)); fdui->include = fl_bgn_form(FL_NO_BOX, 340, 210); - obj = fl_add_box(FL_UP_BOX,0,0,340,210,""); - obj = fl_add_frame(FL_ENGRAVED_FRAME,10,70,160,90,""); - fdui->browsebt = obj = fl_add_button(FL_NORMAL_BUTTON,230,30,100,30,idex(_("Browse|#B"))); - fl_set_button_shortcut(obj,scex(_("Browse|#B")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - fl_set_object_callback(obj,include_cb,0); - fdui->flag1 = obj = fl_add_checkbutton(FL_PUSH_BUTTON,180,70,150,30,idex(_("Don't typeset|#D"))); - fl_set_button_shortcut(obj,scex(_("Don't typeset|#D")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - obj = fl_add_button(FL_RETURN_BUTTON,120,170,100,30,_("OK")); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - fl_set_object_callback(obj,include_cb,1); - obj = fl_add_button(FL_NORMAL_BUTTON,230,170,100,30,idex(_("Cancel|^["))); - fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - fl_set_object_callback(obj,include_cb,2); - obj = fl_add_button(FL_NORMAL_BUTTON,230,130,100,30,idex(_("Load|#L"))); - fl_set_button_shortcut(obj,scex(_("Load|#L")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - fl_set_object_callback(obj,include_cb,5); - fdui->input = obj = fl_add_input(FL_NORMAL_INPUT,10,30,210,30,idex(_("File name:|#F"))); - fl_set_input_shortcut(obj,scex(_("File name:|#F")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT); - fdui->flag41 = obj = fl_add_checkbutton(FL_PUSH_BUTTON,180,100,150,30,idex(_("Visible space|#s"))); - fl_set_button_shortcut(obj,scex(_("Visible space|#s")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); + obj = fl_add_box(FL_UP_BOX, 0, 0, 340, 210, ""); + obj = fl_add_frame(FL_ENGRAVED_FRAME, 10, 70, 160, 90, ""); + fdui->browsebt = obj = fl_add_button(FL_NORMAL_BUTTON, 230, 30, 100, 30, idex(_("Browse|#B"))); + fl_set_button_shortcut(obj, scex(_("Browse|#B")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_callback(obj, include_cb, 0); + fdui->flag1 = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 180, 70, 150, 30, idex(_("Don't typeset|#D"))); + fl_set_button_shortcut(obj, scex(_("Don't typeset|#D")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + obj = fl_add_button(FL_RETURN_BUTTON, 120, 170, 100, 30, _("OK")); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_callback(obj, include_cb, 1); + obj = fl_add_button(FL_NORMAL_BUTTON, 230, 170, 100, 30, idex(_("Cancel|^["))); + fl_set_button_shortcut(obj, scex(_("Cancel|^[")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_callback(obj, include_cb, 2); + obj = fl_add_button(FL_NORMAL_BUTTON, 230, 130, 100, 30, idex(_("Load|#L"))); + fl_set_button_shortcut(obj, scex(_("Load|#L")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_callback(obj, include_cb, 5); + fdui->input = obj = fl_add_input(FL_NORMAL_INPUT, 10, 30, 210, 30, idex(_("File name:|#F"))); + fl_set_input_shortcut(obj, scex(_("File name:|#F")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT); + fdui->flag41 = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 180, 100, 150, 30, idex(_("Visible space|#s"))); + fl_set_button_shortcut(obj, scex(_("Visible space|#s")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); fdui->include_grp = fl_bgn_group(); - fdui->flag4 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,130,160,30,idex(_("Verbatim|#V"))); - fl_set_button_shortcut(obj,scex(_("Verbatim|#V")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - fl_set_object_callback(obj,include_cb,10); - fdui->flag2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,100,160,30,idex(_("Use input|#i"))); - fl_set_button_shortcut(obj,scex(_("Use input|#i")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - fl_set_object_callback(obj,include_cb,11); - fdui->flag3 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,70,160,30,idex(_("Use include|#U"))); - fl_set_button_shortcut(obj,scex(_("Use include|#U")),1); - fl_set_object_lsize(obj,FL_NORMAL_SIZE); - fl_set_object_callback(obj,include_cb,11); + fdui->flag4 = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 130, 160, 30, idex(_("Verbatim|#V"))); + fl_set_button_shortcut(obj, scex(_("Verbatim|#V")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_callback(obj, include_cb, 10); + fdui->flag2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 100, 160, 30, idex(_("Use input|#i"))); + fl_set_button_shortcut(obj, scex(_("Use input|#i")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_callback(obj, include_cb, 11); + fdui->flag3 = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 70, 160, 30, idex(_("Use include|#U"))); + fl_set_button_shortcut(obj, scex(_("Use include|#U")), 1); + fl_set_object_lsize(obj, FL_NORMAL_SIZE); + fl_set_object_callback(obj, include_cb, 11); fl_end_group(); fl_end_form(); @@ -86,19 +89,19 @@ FD_include *create_form_include(void) /*---------------------------------------*/ -FD_include *form = 0; +FD_include * form = 0; -void include_cb(FL_OBJECT *, long arg) +extern "C" void include_cb(FL_OBJECT *, long arg) { - InsetInclude *inset = (InsetInclude*)form->vdata; + InsetInclude * inset = static_cast(form->include->u_vdata); switch (arg) { case 0: { // Should browsing too be disabled in RO-mode? LyXFileDlg fileDlg; - LString mpath = OnlyPath(inset->getMasterFilename()); - LString ext; + string mpath = OnlyPath(inset->getMasterFilename()); + string ext; if (fl_get_button(form->flag2)) // Use Input Button ext = "*.tex"; @@ -107,19 +110,19 @@ void include_cb(FL_OBJECT *, long arg) else ext = "*.lyx"; // launches dialog - fileDlg.SetButton(0, _("Documents"), lyxrc->document_path); + fileDlg.SetButton(0, _("Documents"), lyxrc.document_path); // Use by default the master's path - LString filename = fileDlg.Select(_("Select Child Document"), + string filename = fileDlg.Select(_("Select Child Document"), mpath, ext, inset->getContents()); XFlush(fl_get_display()); // check selected filename if (!filename.empty()) { - LString filename2 = MakeRelPath(filename, + string filename2 = MakeRelPath(filename, mpath); - if (filename2.prefixIs("..")) + if (prefixIs(filename2, "..")) fl_set_input(form->input, filename.c_str()); else @@ -130,7 +133,7 @@ void include_cb(FL_OBJECT *, long arg) } case 1: - if(!current_view->currentBuffer()->isReadonly()) { + if(!current_view->buffer()->isReadonly()) { inset->setContents(fl_get_input(form->input)); // don't typeset inset->setNoLoad(fl_get_button(form->flag1)); @@ -144,7 +147,7 @@ void include_cb(FL_OBJECT *, long arg) } fl_hide_form(form->include); - UpdateInset(inset); + current_view->updateInset(inset, true); break; } // fall through @@ -152,7 +155,7 @@ void include_cb(FL_OBJECT *, long arg) fl_hide_form(form->include); break; case 5: - if(!current_view->currentBuffer()->isReadonly()) { + if(!current_view->buffer()->isReadonly()) { inset->setContents(fl_get_input(form->input)); inset->setNoLoad(fl_get_button(form->flag1)); if (fl_get_button(form->flag2)) @@ -165,8 +168,8 @@ void include_cb(FL_OBJECT *, long arg) } fl_hide_form(form->include); - UpdateInset(inset); - current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, inset->getContents().c_str()); + current_view->updateInset(inset, true); + current_view->owner()->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, inset->getContents().c_str()); } break; @@ -183,7 +186,7 @@ void include_cb(FL_OBJECT *, long arg) } -InsetInclude::InsetInclude(LString const & fname, Buffer *bf) +InsetInclude::InsetInclude(string const & fname, Buffer * bf) : InsetCommand("include") { master = bf; @@ -195,7 +198,7 @@ InsetInclude::InsetInclude(LString const & fname, Buffer *bf) InsetInclude::~InsetInclude() { - if (form && form->vdata == this) { + if (form && form->include->u_vdata == this) { // this inset is in the popup so hide the popup // and remove the reference to this inset. ARRae if (form->include) { @@ -209,7 +212,8 @@ InsetInclude::~InsetInclude() } } -Inset * InsetInclude::Clone() + +Inset * InsetInclude::Clone() const { InsetInclude * ii = new InsetInclude (contents, master); ii->setNoLoad(isNoLoad()); @@ -221,19 +225,20 @@ Inset * InsetInclude::Clone() ii->setVerb(); ii->setVisibleSpace(isVerbVisibleSpace()); } - return (Inset*)ii; + return ii; } -void InsetInclude::Edit(int, int) + +void InsetInclude::Edit(BufferView * bv, int, int, unsigned int) { - if(current_view->currentBuffer()->isReadonly()) - WarnReadonly(); + if(bv->buffer()->isReadonly()) + WarnReadonly(bv->buffer()->fileName()); if (!form) { form = create_form_include(); - fl_set_form_atclose(form->include, IgnoreCloseBoxCB, NULL); + fl_set_form_atclose(form->include, IgnoreCloseBoxCB, 0); } - form->vdata = this; + form->include->u_vdata = this; fl_set_input(form->input, contents.c_str()); fl_set_button(form->flag1, int(isNoLoad())); @@ -251,27 +256,27 @@ void InsetInclude::Edit(int, int) if (form->include->visible) { fl_raise_form(form->include); } else { - fl_show_form(form->include,FL_PLACE_MOUSE, FL_FULLBORDER, + fl_show_form(form->include, FL_PLACE_MOUSE, FL_FULLBORDER, _("Include")); } } -void InsetInclude::Write(FILE *file) +void InsetInclude::Write(ostream & os) const { - fprintf(file, "Include %s\n", getCommand().c_str()); + os << "Include " << getCommand() << "\n"; } -void InsetInclude::Read(LyXLex &lex) +void InsetInclude::Read(LyXLex & lex) { InsetCommand::Read(lex); - if (getCmdName()=="include") + if (getCmdName() == "include") setInclude(); else if (getCmdName() == "input") setInput(); - else if (getCmdName().contains("verbatim")) { + else if (contains(getCmdName(), "verbatim")) { setVerb(); if (getCmdName() == "verbatiminput*") setVisibleSpace(true); @@ -279,9 +284,15 @@ void InsetInclude::Read(LyXLex &lex) } -LString InsetInclude::getScreenLabel() const +bool InsetInclude::display() const +{ + return !isInput(); +} + + +string InsetInclude::getScreenLabel() const { - LString temp; + string temp; if (isInput()) temp += _("Input"); else if (isVerb()) { @@ -291,14 +302,22 @@ LString InsetInclude::getScreenLabel() const temp += ": "; if (contents.empty()) { - temp+="???"; + temp+= "???"; } else { - temp+=contents; + temp+= contents; } return temp; } +void InsetInclude::setContents(string const & c) +{ + InsetCommand::setContents(c); + filename = MakeAbsPath(contents, + OnlyPath(getMasterFilename())); +} + + bool InsetInclude::loadIfNeeded() const { if (isNoLoad() || isVerb()) return false; @@ -309,59 +328,49 @@ bool InsetInclude::loadIfNeeded() const // the readonly flag can/will be wrong, not anymore I think. FileInfo finfo(getFileName()); bool ro = !finfo.writable(); - return ( bufferlist.readFile(getFileName(), ro) != NULL ); -} - - -int InsetInclude::Latex(FILE *file, signed char /*fragile*/) -{ - LString include_file; - signed char dummy = 0; - Latex(include_file, dummy); - fprintf(file, "%s", include_file.c_str()); - return 0; + return ( bufferlist.readFile(getFileName(), ro) != 0 ); } -int InsetInclude::Latex(LString &file, signed char /*fragile*/) +int InsetInclude::Latex(ostream & os, + bool /*fragile*/, bool /*fs*/) const { - LString writefile, incfile; - // Do nothing if no file name has been specified if (contents.empty()) return 0; // Use += to force a copy of contents (JMarc) - incfile += contents; + // How does that force anything? (Lgb) + string incfile(contents); if (loadIfNeeded()) { - Buffer *tmp = bufferlist.getBuffer(getFileName()); + Buffer * tmp = bufferlist.getBuffer(getFileName()); if (tmp->params.textclass != master->params.textclass) { - lyxerr.print("ERROR: Cannot handle include file `" - + MakeDisplayPath(getFileName()) - + "' which has textclass `" - + lyxstyle.NameOfClass(tmp->params.textclass) - + "' instead of `" - + lyxstyle.NameOfClass(master->params.textclass) - + "'."); + lyxerr << "ERROR: Cannot handle include file `" + << MakeDisplayPath(getFileName()) + << "' which has textclass `" + << textclasslist.NameOfClass(tmp->params.textclass) + << "' instead of `" + << textclasslist.NameOfClass(master->params.textclass) + << "'." << endl; return 0; } // write it to a file (so far the complete file) - writefile = ChangeExtension(getFileName(), ".tex", false); + string writefile = ChangeExtension(getFileName(), ".tex", false); if (!master->tmppath.empty() && !master->niceFile) { - incfile.subst('/','@'); - #ifdef __EMX__ - incfile.subst(':', '$'); - #endif + incfile = subst(incfile, '/','@'); +#ifdef __EMX__ + incfile = subst(incfile, ':', '$'); +#endif writefile = AddName(master->tmppath, incfile); } else writefile = getFileName(); - writefile = ChangeExtension(writefile,".tex",false); - lyxerr.debug("incfile:" + incfile, Error::LATEX); - lyxerr.debug("writefile:" + writefile, Error::LATEX); + writefile = ChangeExtension(writefile, ".tex", false); + lyxerr[Debug::LATEX] << "incfile:" << incfile << endl; + lyxerr[Debug::LATEX] << "writefile:" << writefile << endl; tmp->markDepClean(master->tmppath); @@ -371,36 +380,30 @@ int InsetInclude::Latex(LString &file, signed char /*fragile*/) } if (isVerb()) { - file += '\\'; - file += command + '{'; - file += incfile + '}'; + os << '\\' << command << '{' << incfile << '}'; } else if (isInput()) { // \input wants file with extension (default is .tex) if (!IsLyXFilename(getFileName())) { - file += '\\'; - file += command + '{'; - file += incfile + '}'; + os << '\\' << command << '{' << incfile << '}'; } else { - file += '\\'; - file += command + '{'; - file += ChangeExtension(incfile, ".tex", false) - + '}'; + os << '\\' << command << '{' + << ChangeExtension(incfile, ".tex", false) + << '}'; } } else { // \include don't want extension and demands that the // file really have .tex - file += '\\'; - file += command + '{'; - file += ChangeExtension(incfile, LString(), false) - + '}'; + os << '\\' << command << '{' + << ChangeExtension(incfile, string(), false) + << '}'; } return 0; } -void InsetInclude::Validate(LaTeXFeatures& features) const +void InsetInclude::Validate(LaTeXFeatures & features) const { if (isVerb()) features.verbatim = true; @@ -410,20 +413,20 @@ void InsetInclude::Validate(LaTeXFeatures& features) const // to be loaded: if (loadIfNeeded()) { // a file got loaded - Buffer *tmp = bufferlist.getBuffer(getFileName()); + Buffer * tmp = bufferlist.getBuffer(getFileName()); tmp->validate(features); } } -LString InsetInclude::getLabel(int) const +string InsetInclude::getLabel(int) const { - LString label; - LString parentname; + string label; + string parentname; if (loadIfNeeded()) { - Buffer *tmp = bufferlist.getBuffer(getFileName()); + Buffer * tmp = bufferlist.getBuffer(getFileName()); tmp->setParentName(""); label = tmp->getReferenceList('\n'); tmp->setParentName(getMasterFilename()); @@ -433,32 +436,32 @@ LString InsetInclude::getLabel(int) const } -int InsetInclude::GetNumberOfLabels() const { - LString label; - int nl; +int InsetInclude::GetNumberOfLabels() const +{ + string label; if (loadIfNeeded()) { - Buffer *tmp = bufferlist.getBuffer(getFileName()); + Buffer * tmp = bufferlist.getBuffer(getFileName()); tmp->setParentName(""); label = tmp->getReferenceList('\n'); tmp->setParentName(getMasterFilename()); } - nl = (label.empty())? 0: 1; + int nl = (label.empty())? 0: 1; return nl; } -LString InsetInclude::getKeys() const +string InsetInclude::getKeys(char delim) const { - LString list; + string lst; if (loadIfNeeded()) { Buffer *tmp = bufferlist.getBuffer(getFileName()); tmp->setParentName(""); - list = tmp->getBibkeyList(','); + lst = tmp->getBibkeyList(delim); tmp->setParentName(getMasterFilename()); } - return list; + return lst; }