]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insetinclude.C
clear()->erase() ; lots of using directives for cxx
[lyx.git] / src / insets / insetinclude.C
index 554ae2a3cb8a9e04c2ca0229f3f78d320656b66f..1d28e3347b4e8ab3b3389c3a5a03c663182e5127 100644 (file)
@@ -7,8 +7,8 @@
 #endif
 
 #include FORMS_H_LOCATION 
-#include "filedlg.h" 
 #include "insetinclude.h"
+#include "filedlg.h" 
 #include "buffer.h"
 #include "bufferlist.h"
 #include "debug.h"
 #include "gettext.h"
 #include "include_form.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,12 +89,12 @@ FD_include *create_form_include(void)
 /*---------------------------------------*/
 
 
-FD_include *form = 0;
+FD_include * form = 0;
 
 extern "C" void include_cb(FL_OBJECT *, long arg)
 {
     
-       InsetInclude *inset = (InsetInclude*)form->vdata;
+       InsetInclude * inset = static_cast<InsetInclude*>(form->include->u_vdata);
        switch (arg) {
        case 0:
        {
@@ -107,7 +110,7 @@ extern "C" 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
                string filename = fileDlg.Select(_("Select Child Document"),
@@ -130,7 +133,7 @@ extern "C" 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 @@ extern "C" 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 @@ extern "C" 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 @@ extern "C" 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 @@ extern "C" void include_cb(FL_OBJECT *, long arg)
 }
 
 
-InsetInclude::InsetInclude(string const & fname, Buffer *bf)
+InsetInclude::InsetInclude(string const & fname, Buffer * bf)
        : InsetCommand("include") 
 {
        master = bf;
@@ -195,7 +198,7 @@ InsetInclude::InsetInclude(string 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, 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,23 +256,23 @@ 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();
@@ -279,6 +284,12 @@ void InsetInclude::Read(LyXLex &lex)
 }
 
 
+bool InsetInclude::display() const 
+{
+       return !isInput();
+}
+
+
 string InsetInclude::getScreenLabel() const
 {
        string temp;
@@ -291,14 +302,22 @@ string 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;
@@ -313,53 +332,43 @@ bool InsetInclude::loadIfNeeded() const
 }
 
 
-int InsetInclude::Latex(FILE *file, signed char /*fragile*/)
-{
-       string include_file;
-       signed char dummy = 0;
-       Latex(include_file, dummy);
-       fprintf(file, "%s", include_file.c_str());
-       return 0;
-}
-
-
-int InsetInclude::Latex(string &file, signed char /*fragile*/)
+int InsetInclude::Latex(ostream & os,
+                       bool /*fragile*/, bool /*fs*/) const
 {
-       string 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 << "ERROR: Cannot handle include file `"
                               << MakeDisplayPath(getFileName())
                               << "' which has textclass `"
-                              << lyxstyle.NameOfClass(tmp->params.textclass)
+                              << textclasslist.NameOfClass(tmp->params.textclass)
                               << "' instead of `"
-                              << lyxstyle.NameOfClass(master->params.textclass)
+                              << 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) {
-                       subst(incfile, '/','@');
-                       #ifdef __EMX__
-                       subst(incfile, ':', '$');
-                       #endif
+                       incfile = subst(incfile, '/','@');
+#ifdef __EMX__
+                       incfile = subst(incfile, ':', '$');
+#endif
                        writefile = AddName(master->tmppath, incfile);
                } else
                        writefile = getFileName();
-               writefile = ChangeExtension(writefile,".tex",false);
+               writefile = ChangeExtension(writefile, ".tex", false);
                lyxerr[Debug::LATEX] << "incfile:" << incfile << endl;
                lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
                
@@ -371,36 +380,30 @@ int InsetInclude::Latex(string &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, string(), 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,7 +413,7 @@ 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);
        }
 }
@@ -423,7 +426,7 @@ string InsetInclude::getLabel(int) const
        
        
     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 @@ string InsetInclude::getLabel(int) const
 }
 
 
-int InsetInclude::GetNumberOfLabels() const {
+int InsetInclude::GetNumberOfLabels() const
+{
     string label;
-    int nl;
 
     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;
 }
 
 
-string InsetInclude::getKeys() const
+string InsetInclude::getKeys(char delim) const
 {
-       string 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;
 }