case LFUN_CHILD_INSERT:
{
- InsetCommandParams p;
- p.setFromString(argument);
+ InsetInclude::InsetIncludeParams p;
+ p.cparams.setFromString(argument);
+ p.buffer = buffer_;
- InsetInclude * inset = new InsetInclude(p, *buffer_);
+ InsetInclude * inset = new InsetInclude(p);
if (!bv_->insertInset(inset))
delete inset;
- else
+ else {
bv_->updateInset(inset, true);
+ bv_->owner()->getDialogs()->showInclude(inset);
+ }
}
break;
* BufferView_pimpl.C: add comment, destroySplash()
+2001-03-12 John Levon <moz@compsoc.man.ac.uk>
+
+ * BufferView_pimpl.C:
+ * LyXAction.C:
+ * buffer.C:
+ * commandtags.h:
+ * lyxfunc.C: use re-worked insetinclude
+
2001-03-12 Lars Gullik Bjønnes <larsbj@trylle.birdstep.com>
* buffer.C: add using std::stringstream.
N_("Go to beginning of document"), ReadOnly },
{ LFUN_BEGINNINGBUFSEL, "buffer-begin-select",
N_("Select to beginning of document"), ReadOnly },
- { LFUN_CHILD_CREATE, "buffer-child-insert", "", Noop },
+ { LFUN_CHILD_INSERT, "buffer-child-insert", "", Noop },
{ LFUN_CHILDOPEN, "buffer-child-open", "", ReadOnly },
{ LFUN_RUNCHKTEX, "buffer-chktex", N_("Check TeX"), ReadOnly },
{ LFUN_CLOSEBUFFER, "buffer-close", N_("Close"), ReadOnly },
if ((*it)->LyxCode() == Inset::INCLUDE_CODE) {
InsetInclude * insetinc =
static_cast<InsetInclude *>(*it);
- if (insetinc->isInclude()
- && insetinc->isNoLoad()) {
+ if (insetinc->isIncludeOnly()) {
if (!lst.empty())
lst += delim;
- lst += OnlyFilename(ChangeExtension(insetinc->getContents(), string()));
+ lst += insetinc->getRelFileBaseName();
}
}
}
LFUN_REFERENCE_GOTO, // Dekel 20010114
LFUN_BOOKMARK_SAVE, // Dekel 20010127
LFUN_BOOKMARK_GOTO, // Dekel 20010127
- LFUN_CHILD_CREATE, // Levon 20010207
LFUN_SELECT_FILE_SYNC, // Levon 20010214
LFUN_LASTACTION /* this marks the end of the table */
};
* GUIRunTime.h: minor cleanup
+2001-03-12 John Levon <moz@compsoc.man.ac.uk>
+
+ * Dialogs.h: remove createInclude
+
2001-02-26 John Levon <moz@compsoc.man.ac.uk>
* Makefile.am
///
Signal1<void, InsetGraphics *> showGraphics;
/// show the details of a LyX file include inset
- Signal1<void, InsetCommand *> showInclude;
- /// create a LyX file include inset
- Signal1<void, string const &> createInclude;
+ Signal1<void, InsetInclude *> showInclude;
///
Signal1<void, InsetCommand *> showIndex;
///
+2001-03-13 John Levon <moz@compsoc.man.ac.uk>
+
+ * FormGraphics.C: remove unnecessary hack
+
2001-03-13 Dekel Tsur <dekelts@tau.ac.il>
* FormCitation.C (apply): Do not put space between multiple keys.
* Menubar_pimpl.C: destroy splash on interaction
+2001-03-12 John Levon <moz@compsoc.man.ac.uk>
+
+ * FormInclude.h:
+ * FormInclude.C:
+ * form_include.h:
+ * form_include.C:
+ * forms/form_include.fd: rework, clean up
+
2001-03-12 Lars Gullik Bjønnes <larsbj@trylle.birdstep.com>
* FormToc.h: use Buffer::typedef
string const title = N_("Graphics");
// FIXME: currently we need the second '|' to prevent mis-interpretation
- // FIXME: rfind() in split() seems to be broken hence the second space
- string const pattern = "*.(ps|png)| ";
+ string const pattern = "*.(ps|png)|";
// Does user clipart directory exist?
string clipdir = AddName (user_lyxdir, "clipart");
#include "Dialogs.h"
#include "FormInclude.h"
-#include "insets/insetinclude.h"
+#include "insets/insetinclude.h"
#include "frontends/FileDialog.h"
#include "support/filetools.h"
#include "support/lstrings.h"
#include "LyXView.h"
#include "buffer.h"
-#include "lyxrc.h"
-#include "lyxfunc.h"
-#include "xforms_helpers.h"
-
+#include "lyxrc.h"
+#include "lyxfunc.h"
+#include "xforms_helpers.h"
+
#include "form_include.h"
using std::make_pair;
using std::pair;
FormInclude::FormInclude(LyXView * lv, Dialogs * d)
- : FormCommand(lv, d, _("Include file"), new OkCancelPolicy),
- dialog_(0)
+ : FormBaseBD(lv, d, _("Include file"), new OkCancelPolicy),
+ dialog_(0), ih_(0), inset_(0)
{
- d->showInclude.connect(slot(this, &FormInclude::showInset));
- d->createInclude.connect(slot(this, &FormInclude::createInset));
+ d->showInclude.connect(slot(this, &FormInclude::showInclude));
}
FL_FORM * FormInclude::form() const
{
- if (dialog_)
+ if (dialog_)
return dialog_->form;
return 0;
}
+void FormInclude::connect()
+{
+ u_ = d_->updateBufferDependent.
+ connect(slot(this, &FormInclude::updateSlot));
+ h_ = d_->hideBufferDependent.
+ connect(slot(this, &FormInclude::hide));
+ FormBase::connect();
+}
+
+
+void FormInclude::disconnect()
+{
+ ih_.disconnect();
+ FormBaseBD::disconnect();
+ inset_ = 0;
+}
+
+
+void FormInclude::updateSlot(bool switched)
+{
+ if (switched)
+ hide();
+ else
+ update();
+}
+
+
void FormInclude::build()
{
dialog_ = build_include();
bc_.setCancel(dialog_->button_cancel);
bc_.refresh();
- bc_.addReadOnly(dialog_->browsebt);
- bc_.addReadOnly(dialog_->flag1);
- bc_.addReadOnly(dialog_->flag2);
- bc_.addReadOnly(dialog_->flag3);
- bc_.addReadOnly(dialog_->flag4);
- bc_.addReadOnly(dialog_->filename);
- bc_.addReadOnly(dialog_->flag41);
+ bc_.addReadOnly(dialog_->button_browse);
+ bc_.addReadOnly(dialog_->check_verbatim);
+ bc_.addReadOnly(dialog_->check_typeset);
+ bc_.addReadOnly(dialog_->check_useinput);
+ bc_.addReadOnly(dialog_->check_useinclude);
+}
+
+
+void FormInclude::showInclude(InsetInclude * inset)
+{
+ // If connected to another inset, disconnect from it.
+ if (inset_)
+ ih_.disconnect();
+
+ inset_ = inset;
+ params = inset->params();
+ ih_ = inset->hideDialog.connect(slot(this, &FormInclude::hide));
+ show();
}
bc_.readOnly(lv_->buffer()->isReadonly());
if (!inset_) {
- fl_set_input(dialog_->filename, "");
- fl_set_button(dialog_->flag1, 0);
- fl_set_button(dialog_->flag2, 0);
- fl_set_button(dialog_->flag3, 1);
- fl_set_button(dialog_->flag4, 0);
- fl_set_button(dialog_->flag41, 0);
- fl_deactivate_object(dialog_->flag41);
- fl_set_object_lcol(dialog_->flag41, FL_INACTIVE);
+ fl_set_input(dialog_->input_filename, "");
+ fl_set_button(dialog_->check_typeset, 0);
+ fl_set_button(dialog_->check_useinput, 0);
+ fl_set_button(dialog_->check_useinclude, 1);
+ fl_set_button(dialog_->check_verbatim, 0);
+ fl_set_button(dialog_->check_visiblespace, 0);
+ fl_deactivate_object(dialog_->check_visiblespace);
+ fl_set_object_lcol(dialog_->check_visiblespace, FL_INACTIVE);
return;
}
-
- fl_set_input(dialog_->filename, params.getContents().c_str());
-
- string const cmdname = params.getCmdName();
-
- /* FIXME: what do with Don't typeset here ... */
- //fl_set_button(dialog_->flag1, int(inset_->isNoLoad()));
-
- fl_set_button(dialog_->flag2, cmdname == "input");
- fl_set_button(dialog_->flag3, cmdname == "include");
+
+ fl_set_input(dialog_->input_filename, params.cparams.getContents().c_str());
+
+ string const cmdname = params.cparams.getCmdName();
+
+ fl_set_button(dialog_->check_typeset, int(params.noload));
+
+ fl_set_button(dialog_->check_useinput, cmdname == "input");
+ fl_set_button(dialog_->check_useinclude, cmdname == "include");
if (cmdname == "verbatiminput" || cmdname == "verbatiminput*") {
- fl_set_button(dialog_->flag4, 1);
- fl_set_button(dialog_->flag41, cmdname == "verbatiminput*");
+ fl_set_button(dialog_->check_verbatim, 1);
+ fl_set_button(dialog_->check_visiblespace, cmdname == "verbatiminput*");
+ setEnabled(dialog_->check_visiblespace, true);
} else {
- fl_set_button(dialog_->flag41, 0);
- fl_deactivate_object(dialog_->flag41);
- fl_set_object_lcol(dialog_->flag41, FL_INACTIVE);
+ fl_set_button(dialog_->check_visiblespace, 0);
+ setEnabled(dialog_->check_visiblespace, false);
}
+
+ if (cmdname.empty())
+ fl_set_button(dialog_->check_useinclude, 1);
}
if (lv_->buffer()->isReadonly())
return;
- /* FIXME: no way to update internal flags of inset ??? */
-
- //inset_->setNoLoad(fl_get_button(dialog_->flag1));
-
- params.setContents(fl_get_input(dialog_->filename));
-
- if (fl_get_button(dialog_->flag2))
- params.setCmdName("input");
- else if (fl_get_button(dialog_->flag3))
- params.setCmdName("include");
- else if (fl_get_button(dialog_->flag4)) {
- if (fl_get_button(dialog_->flag41))
- params.setCmdName("verbatiminput*");
+ params.noload = fl_get_button(dialog_->check_typeset);
+
+ params.cparams.setContents(fl_get_input(dialog_->input_filename));
+
+ if (fl_get_button(dialog_->check_useinput))
+ params.flag = InsetInclude::INPUT;
+ else if (fl_get_button(dialog_->check_useinclude))
+ params.flag = InsetInclude::INCLUDE;
+ else if (fl_get_button(dialog_->check_verbatim)) {
+ if (fl_get_button(dialog_->check_visiblespace))
+ params.flag = InsetInclude::VERBAST;
else
- params.setCmdName("verbatiminput");
+ params.flag = InsetInclude::VERB;
}
- if (inset_) {
- if (params != inset_->params()) {
- inset_->setParams(params);
- lv_->view()->updateInset(inset_, true);
- }
- } else
- lv_->getLyXFunc()->Dispatch(LFUN_CHILD_INSERT, params.getAsString());
+ inset_->setFromParams(params);
+ lv_->view()->updateInset(inset_, true);
}
-
+
#ifdef WITH_WARNINGS
#warning convert this to use the buttoncontroller
#endif
bool FormInclude::input(FL_OBJECT *, long data)
{
- State state = static_cast<State>(data);
-
+ State state = static_cast<State>(data);
+
switch (state) {
case BROWSE: {
// Should browsing too be disabled in RO-mode?
FileDialog fileDlg(lv_, _("Select document to include"),
LFUN_SELECT_FILE_SYNC,
make_pair(string(_("Documents")), string(lyxrc.document_path)));
-
+
string ext;
-
+
/* input TeX, verbatim, or LyX file ? */
- if (fl_get_button(dialog_->flag2))
+ if (fl_get_button(dialog_->check_useinput))
ext = _("*.tex| LaTeX Documents (*.tex)");
- else if (fl_get_button(dialog_->flag4))
+ else if (fl_get_button(dialog_->check_verbatim))
ext = _("*| All files ");
else
ext = _("*.lyx| LyX Documents (*.lyx)");
-
+
string mpath;
-
- /* FIXME: what do I do here ? */
- //if (inset_)
- // mpath = OnlyPath(inset_->getMasterFilename());
-
- FileDialog::Result result = fileDlg.Select(mpath, ext, fl_get_input(dialog_->filename));
-
+
+ mpath = OnlyPath(params.buffer->fileName());
+
+ FileDialog::Result result = fileDlg.Select(mpath, ext, fl_get_input(dialog_->input_filename));
+
// check selected filename
if (result.second.empty())
break;
-
+
string const filename2 = MakeRelPath(result.second, mpath);
-
+
if (prefixIs(filename2, ".."))
- fl_set_input(dialog_->filename, result.second.c_str());
+ fl_set_input(dialog_->input_filename, result.second.c_str());
else
- fl_set_input(dialog_->filename, filename2.c_str());
-
+ fl_set_input(dialog_->input_filename, filename2.c_str());
+
} break;
case LOAD:
- apply();
- lv_->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, params.getContents());
+ if (compare(fl_get_input(dialog_->input_filename),"")) {
+ apply();
+ lv_->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, params.cparams.getContents());
+ }
break;
case VERBATIM:
- setEnabled(dialog_->flag41, true);
+ setEnabled(dialog_->check_visiblespace, true);
break;
-
+
case INPUTINCLUDE:
- /* FIXME: huh ? why doesn't this work ? */
- setEnabled(dialog_->flag41, false);
- fl_set_button(dialog_->flag41, 0);
+ fl_set_button(dialog_->check_visiblespace, 0);
+ setEnabled(dialog_->check_visiblespace, false);
break;
}
- return true;
+ return true;
}
#pragma interface
#endif
-#include "FormInset.h"
+#include "FormBase.h"
+#include "insets/insetinclude.h"
class InsetInclude;
/** This class provides an XForms implementation of the FormInclude Dialog.
*/
-class FormInclude : public FormCommand {
+class FormInclude : public FormBaseBD {
public:
///
FormInclude(LyXView *, Dialogs *);
INPUTINCLUDE=11
};
+ /// Slot launching dialog to an existing inset
+ void showInclude(InsetInclude *);
+
+ /// Connect signals. Also perform any necessary initialisation.
+ virtual void connect();
+ /// Disconnect signals. Also perform any necessary housekeeping.
+ virtual void disconnect();
+
/// Build the dialog
virtual void build();
/// Filter the inputs
virtual void apply();
/// Pointer to the actual instantiation of the xforms form
virtual FL_FORM * form() const;
+ /// bool indicates if a buffer switch took place
+ virtual void updateSlot(bool);
+
/// Type definition from the fdesign produced header file.
FD_form_include * build_include();
/// Real GUI implementation.
FD_form_include * dialog_;
+
+ /// inset::hide connection.
+ Connection ih_;
+
+ /// pointer to the inset passed through showInset
+ InsetInclude * inset_;
+ /// the nitty-gritty. What is modified and passed back
+ InsetInclude::InsetIncludeParams params;
};
#endif
obj = fl_add_frame(FL_ENGRAVED_FRAME, 10, 70, 160, 90, "");
{
char const * const dummy = N_("Browse|#B");
- fdui->browsebt = obj = fl_add_button(FL_NORMAL_BUTTON, 230, 30, 100, 30, idex(_(dummy)));
+ fdui->button_browse = obj = fl_add_button(FL_NORMAL_BUTTON, 230, 30, 100, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
{
char const * const dummy = N_("Don't typeset|#D");
- fdui->flag1 = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 180, 70, 150, 30, idex(_(dummy)));
+ fdui->check_typeset = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 180, 70, 150, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseCancelCB, 2);
{
char const * const dummy = N_("Load|#L");
- fdui->loadbt = obj = fl_add_button(FL_NORMAL_BUTTON, 230, 130, 100, 30, idex(_(dummy)));
+ fdui->button_load = obj = fl_add_button(FL_NORMAL_BUTTON, 230, 130, 100, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseInputCB, 5);
{
char const * const dummy = N_("File name:|#F");
- fdui->filename = obj = fl_add_input(FL_NORMAL_INPUT, 10, 30, 210, 30, idex(_(dummy)));
+ fdui->input_filename = obj = fl_add_input(FL_NORMAL_INPUT, 10, 30, 210, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
{
char const * const dummy = N_("Visible space|#s");
- fdui->flag41 = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 180, 100, 150, 30, idex(_(dummy)));
+ fdui->check_visiblespace = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 180, 100, 150, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fdui->include_grp = fl_bgn_group();
{
char const * const dummy = N_("Verbatim|#V");
- fdui->flag4 = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 130, 160, 30, idex(_(dummy)));
+ fdui->check_verbatim = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 130, 160, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseInputCB, 10);
{
char const * const dummy = N_("Use input|#i");
- fdui->flag2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 100, 160, 30, idex(_(dummy)));
+ fdui->check_useinput = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 100, 160, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormBaseInputCB, 11);
{
char const * const dummy = N_("Use include|#U");
- fdui->flag3 = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 70, 160, 30, idex(_(dummy)));
+ fdui->check_useinclude = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 10, 70, 160, 30, idex(_(dummy)));
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
}
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
~FD_form_include();
FL_FORM *form;
- FL_OBJECT *browsebt;
- FL_OBJECT *flag1;
+ FL_OBJECT *button_browse;
+ FL_OBJECT *check_typeset;
FL_OBJECT *button_ok;
FL_OBJECT *button_cancel;
- FL_OBJECT *loadbt;
- FL_OBJECT *filename;
- FL_OBJECT *flag41;
+ FL_OBJECT *button_load;
+ FL_OBJECT *input_filename;
+ FL_OBJECT *check_visiblespace;
FL_OBJECT *include_grp;
- FL_OBJECT *flag4;
- FL_OBJECT *flag2;
- FL_OBJECT *flag3;
+ FL_OBJECT *check_verbatim;
+ FL_OBJECT *check_useinput;
+ FL_OBJECT *check_useinclude;
};
#endif /* FD_form_include_h_ */
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
-name: browsebt
+name: button_browse
callback: C_FormBaseInputCB
argument: 0
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
-name: flag1
+name: check_typeset
callback:
argument:
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
-name: loadbt
+name: button_load
callback: C_FormBaseInputCB
argument: 5
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
-name: filename
+name: input_filename
callback:
argument:
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
-name: flag41
+name: check_visiblespace
callback:
argument:
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
-name: flag4
+name: check_verbatim
callback: C_FormBaseInputCB
argument: 10
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
-name: flag2
+name: check_useinput
callback: C_FormBaseInputCB
argument: 11
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
-name: flag3
+name: check_useinclude
callback: C_FormBaseInputCB
argument: 11
* insetexternal.h:
* insetexternal.C: move form to GUII
+2001-03-12 John Levon <moz@compsoc.man.ac.uk>
+
+ * insetinclude.h:
+ * insetinclude.C: add InsetIncludeParams, use
+ composition rather than derivation of InsetCommand
+
2001-03-12 Lars Gullik Bjønnes <larsbj@trylle.birdstep.com>
* insettoc.C (Ascii): use the Buffer typedefs
#endif
#include "frontends/Dialogs.h"
-
+
#include "insetinclude.h"
#include "buffer.h"
#include "bufferlist.h"
}
-InsetInclude::InsetInclude(InsetCommandParams const & p, Buffer const & bf)
- : InsetCommand(p), master(&bf)
+InsetInclude::InsetInclude(InsetIncludeParams const & p)
+{
+ include_label = unique_id();
+ setFromParams(p);
+ params_.buffer = p.buffer;
+}
+
+
+InsetInclude::InsetInclude(InsetCommandParams const & p, Buffer const & b)
{
- flag = InsetInclude::INCLUDE;
- noload = false;
include_label = unique_id();
+ params_.buffer = &b;
+ setFromParams(p);
}
InsetInclude::~InsetInclude()
{
+ hideDialog();
}
-Inset * InsetInclude::Clone(Buffer const & buffer) const
-{
- InsetInclude * ii = new InsetInclude (params(), buffer);
- ii->setNoLoad(isNoLoad());
- // By default, the newly created inset is of `include' type,
- // so we do not test this case.
- if (isInput())
- ii->setInput();
- else if (isVerb()) {
- ii->setVerb();
- ii->setVisibleSpace(isVerbVisibleSpace());
+InsetInclude::InsetIncludeParams const & InsetInclude::params() const
+{
+ return params_;
+}
+
+
+void InsetInclude::setFromParams(InsetIncludeParams const & p)
+{
+ params_.cparams.setContents(p.cparams.getContents());
+ params_.noload = p.noload;
+ if (params_.flag == p.flag)
+ return;
+
+ params_.flag = p.flag;
+
+ string command;
+
+ switch (params_.flag) {
+ case INCLUDE:
+ command="include";
+ break;
+ case VERB:
+ command="verbatiminput";
+ break;
+ case INPUT:
+ command="input";
+ break;
+ case VERBAST:
+ command="verbatiminput*";
+ break;
}
- return ii;
+
+ params_.cparams.setCmdName(command);
+}
+
+
+Inset * InsetInclude::Clone(Buffer const & buffer) const
+{
+ InsetIncludeParams p(params_);
+ p.buffer = &buffer;
+
+ return new InsetInclude (p);
}
void InsetInclude::Write(Buffer const *, ostream & os) const
{
- os << "Include " << getCommand() << "\n";
+ os << "Include " << params_.cparams.getCommand() << "\n";
}
-void InsetInclude::Read(Buffer const * buf, LyXLex & lex)
+void InsetInclude::Read(Buffer const *, LyXLex & lex)
{
- InsetCommand::Read(buf, lex);
-
- if (getCmdName() == "include")
- setInclude();
- else if (getCmdName() == "input")
- setInput();
- else if (contains(getCmdName(), "verbatim")) {
- setVerb();
- if (getCmdName() == "verbatiminput*")
- setVisibleSpace(true);
+ params_.cparams.Read(lex);
+
+ if (params_.cparams.getCmdName() == "include")
+ params_.flag = INCLUDE;
+ else if (params_.cparams.getCmdName() == "input")
+ params_.flag = INPUT;
+ /* FIXME: is this logic necessary now ? */
+ else if (contains(params_.cparams.getCmdName(), "verbatim")) {
+ params_.flag = VERB;
+ if (params_.cparams.getCmdName() == "verbatiminput*")
+ params_.flag = VERBAST;
}
}
-bool InsetInclude::display() const
+bool InsetInclude::display() const
{
- return !isInput();
+ return !(params_.flag == INPUT);
}
string const InsetInclude::getScreenLabel() const
{
string temp;
- if (isInput())
- temp += _("Input");
- else if (isVerb()) {
- temp += _("Verbatim Input");
- if (isVerbVisibleSpace()) temp += '*';
- } else temp += _("Include");
+
+ switch (params_.flag) {
+ case INPUT: temp += _("Input"); break;
+ case VERB: temp += _("Verbatim Input"); break;
+ case VERBAST: temp += _("Verbatim Input*"); break;
+ case INCLUDE: temp += _("Include"); break;
+ }
+
temp += ": ";
- if (getContents().empty()) {
- temp+= "???";
- } else {
- temp+= getContents();
- }
+ if (params_.cparams.getContents().empty())
+ temp += "???";
+ else
+ temp += params_.cparams.getContents();
+
return temp;
}
+string const InsetInclude::getRelFileBaseName() const
+{
+ return OnlyFilename(ChangeExtension(params_.cparams.getContents(), string()));
+}
+
+
string const InsetInclude::getFileName() const
{
- return MakeAbsPath(getContents(),
+ return MakeAbsPath(params_.cparams.getContents(),
OnlyPath(getMasterFilename()));
}
string const InsetInclude::getMasterFilename() const
{
- return master->fileName();
+ return params_.buffer->fileName();
}
bool InsetInclude::loadIfNeeded() const
{
- if (isNoLoad() || isVerb()) return false;
- if (!IsLyXFilename(getFileName())) return false;
+ if (params_.noload || isVerbatim())
+ return false;
+
+ if (!IsLyXFilename(getFileName()))
+ return false;
- if (bufferlist.exists(getFileName())) return true;
+ if (bufferlist.exists(getFileName()))
+ return true;
// the readonly flag can/will be wrong, not anymore I think.
FileInfo finfo(getFileName());
int InsetInclude::Latex(Buffer const * buffer, ostream & os,
bool /*fragile*/, bool /*fs*/) const
{
- string incfile(getContents());
+ string incfile(params_.cparams.getContents());
// Do nothing if no file name has been specified
if (incfile.empty())
return 0;
-
+
if (loadIfNeeded()) {
Buffer * tmp = bufferlist.getBuffer(getFileName());
+ // FIXME: this should be a GUI warning
if (tmp->params.textclass != buffer->params.textclass) {
lyxerr << "WARNING: Included file `"
<< MakeDisplayPath(getFileName())
// write it to a file (so far the complete file)
string writefile = ChangeExtension(getFileName(), ".tex");
+
if (!buffer->tmppath.empty()
&& !buffer->niceFile) {
incfile = subst(incfile, '/','@');
tmp->markDepClean(buffer->tmppath);
tmp->makeLaTeXFile(writefile,
- OnlyPath(getMasterFilename()),
+ OnlyPath(getMasterFilename()),
buffer->niceFile, true);
- }
+ }
- if (isVerb()) {
- os << '\\' << getCmdName() << '{' << incfile << '}';
- } else if (isInput()) {
+ if (isVerbatim()) {
+ os << '\\' << params_.cparams.getCmdName() << '{' << incfile << '}';
+ } else if (params_.flag == INPUT) {
// \input wants file with extension (default is .tex)
if (!IsLyXFilename(getFileName())) {
- os << '\\' << getCmdName() << '{' << incfile << '}';
+ os << '\\' << params_.cparams.getCmdName() << '{' << incfile << '}';
} else {
- os << '\\' << getCmdName() << '{'
+ os << '\\' << params_.cparams.getCmdName() << '{'
<< ChangeExtension(incfile, ".tex")
<< '}';
}
} else {
// \include don't want extension and demands that the
// file really have .tex
- os << '\\' << getCmdName() << '{'
+ os << '\\' << params_.cparams.getCmdName() << '{'
<< ChangeExtension(incfile, string())
<< '}';
}
int InsetInclude::Ascii(Buffer const *, std::ostream & os, int) const
{
- if (isVerb())
+ if (isVerbatim())
os << GetFileContents(getFileName());
return 0;
}
int InsetInclude::Linuxdoc(Buffer const * buffer, ostream & os) const
{
- string incfile(getContents());
+ string incfile(params_.cparams.getContents());
// Do nothing if no file name has been specified
if (incfile.empty())
return 0;
-
+
if (loadIfNeeded()) {
Buffer * tmp = bufferlist.getBuffer(getFileName());
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
tmp->makeLinuxDocFile(writefile, buffer->niceFile, true);
- }
+ }
- if (isVerb()) {
+ if (isVerbatim()) {
os << "<inlinegraphic fileref=\"" << '&' << include_label << ';'
<< "\" format=\"linespecific\">"
<< "</inlinegraphic>";
- } else
+ } else
os << '&' << include_label << ';';
return 0;
int InsetInclude::DocBook(Buffer const * buffer, ostream & os) const
{
- string incfile(getContents());
+ string incfile(params_.cparams.getContents());
// Do nothing if no file name has been specified
if (incfile.empty())
return 0;
-
+
if (loadIfNeeded()) {
Buffer * tmp = bufferlist.getBuffer(getFileName());
lyxerr[Debug::LATEX] << "writefile:" << writefile << endl;
tmp->makeDocBookFile(writefile, buffer->niceFile, true);
- }
+ }
- if (isVerb()) {
+ if (isVerbatim()) {
os << "<inlinegraphic fileref=\"" << '&' << include_label << ';'
<< "\" format=\"linespecific\">"
<< "</inlinegraphic>";
- } else
+ } else
os << '&' << include_label << ';';
return 0;
void InsetInclude::Validate(LaTeXFeatures & features) const
{
- string incfile(getContents());
- string writefile; // = ChangeExtension(getFileName(), ".sgml");
+ string incfile(params_.cparams.getContents());
+ string writefile;
+
+ Buffer const & b = *params_.buffer;
- if (!master->tmppath.empty() && !master->niceFile) {
+ if (!b.tmppath.empty() && b.niceFile) {
incfile = subst(incfile, '/','@');
- writefile = AddName(master->tmppath, incfile);
+ writefile = AddName(b.tmppath, incfile);
} else
writefile = getFileName();
- // Use the relative path.
- //writefile = incfile;
if (IsLyXFilename(getFileName()))
writefile = ChangeExtension(writefile, ".sgml");
features.IncludedFiles[include_label] = writefile;
- if (isVerb())
+ if (isVerbatim())
features.verbatim = true;
// Here we must do the fun stuff...
if (loadIfNeeded()) {
Buffer * tmp = bufferlist.getBuffer(getFileName());
- tmp->setParentName("");
+ tmp->setParentName("");
l = tmp->getLabelList();
tmp->setParentName(getMasterFilename());
}
if (loadIfNeeded()) {
Buffer * tmp = bufferlist.getBuffer(getFileName());
- tmp->setParentName("");
+ tmp->setParentName("");
keys = tmp->getBibkeyList();
tmp->setParentName(getMasterFilename());
}
* ======================================================
*
* LyX, The Document Processor
- *
+ *
* Copyright 1997 LyX Team (this file was created this year)
- *
+ *
* ====================================================== */
#ifndef INSET_INCLUDE_H
/** Used to include files
*/
-class InsetInclude: public InsetCommand {
+class InsetInclude: public InsetButton, public noncopyable {
public:
+ /// the type of inclusion
+ enum IncludeFlags {
+ ///
+ INCLUDE= 0,
+ ///
+ VERB = 1,
+ ///
+ INPUT = 2,
+ ///
+ VERBAST = 3
+ };
+
+ struct InsetIncludeParams {
+ InsetIncludeParams(InsetCommandParams const & cp = InsetCommandParams(),
+ IncludeFlags f = INCLUDE, bool nl = false, Buffer const * b = 0)
+ : cparams(cp), flag(f), noload(nl), buffer(b) {}
+ InsetCommandParams cparams;
+ IncludeFlags flag;
+ bool noload;
+ Buffer const * buffer;
+ };
+
+ ///
+ InsetInclude(InsetIncludeParams const &);
///
InsetInclude(InsetCommandParams const &, Buffer const &);
///
~InsetInclude();
+
+ /// get the parameters
+ InsetIncludeParams const & params(void) const;
+
+ /// set the parameters
+ void setFromParams(InsetIncludeParams const & params);
+
///
Inset * Clone(Buffer const &) const;
///
void Write(Buffer const *, std::ostream &) const;
///
void Read(Buffer const *, LyXLex &);
- ///
+ ///
int Latex(Buffer const *, std::ostream &, bool fragile, bool free_spc) const;
///
int Ascii(Buffer const *, std::ostream &, int linelen) const;
Display can give some visual feedback
*/
bool display() const;
- ///
- string const getScreenLabel() const;
- ///
- string const getMasterFilename() const;
- ///
- string const getFileName() const;
- /// In "input" mode uses \input instead of \include.
- bool isInput() const { return flag == InsetInclude::INPUT; }
- /// If this is true, the child file shouldn't be loaded by lyx
- bool isNoLoad() const { return noload; }
+ /// return the filename stub of the included file
+ string const getRelFileBaseName() const;
+
+ /// return true if the included file is not loaded
+ bool isIncludeOnly() const;
- /** A verbatim file shouldn't be loaded by LyX
- * No need to generate LaTeX code of a verbatim file
- */
- bool isVerb() const;
- ///
- bool isVerbVisibleSpace() const {
- return flag == InsetInclude::VERBAST;
- }
- ///
- bool isInclude() const { return flag == InsetInclude::INCLUDE;}
- ///
- void setInput();
- ///
- void setNoLoad(bool);
- ///
- void setInclude();
- ///
- void setVerb();
- ///
- void setVisibleSpace(bool b);
/// return true if the file is or got loaded.
bool loadIfNeeded() const;
+
+ /// hide a dialog if about
+ Signal0<void> hideDialog;
private:
- ///
- enum Include_Flags {
- ///
- INCLUDE= 0,
- ///
- VERB = 1,
- ///
- INPUT = 2,
- ///
- VERBAST = 3
- };
-
- ///
- bool noload;
- ///
- int flag;
- ///
- Buffer const * master;
+ /// get the text displayed on the button
+ string const getScreenLabel() const;
+ /// is this a verbatim include ?
+ bool isVerbatim() const;
+ /// get the filename of the master buffer
+ string const getMasterFilename() const;
+ /// get the included file name
+ string const getFileName() const;
+
+ /// the parameters
+ InsetIncludeParams params_;
///
string include_label;
};
-inline
-bool InsetInclude::isVerb() const
+inline bool InsetInclude::isVerbatim() const
{
- return flag == InsetInclude::VERB || flag == InsetInclude::VERBAST;
+ return params_.flag == VERB || params_.flag == VERBAST;
}
-inline
-void InsetInclude::setInput()
+inline bool InsetInclude::isIncludeOnly() const
{
- if (!isInput()) {
- flag = InsetInclude::INPUT;
- setCmdName("input");
- }
+ return params_.flag == INCLUDE && params_.noload;
}
-
-inline
-void InsetInclude::setNoLoad(bool b)
-{
- noload = b;
-}
-
-
-inline
-void InsetInclude::setInclude()
-{
- if (!isInclude()) {
- flag = InsetInclude::INCLUDE;
- setCmdName("include");
- }
-}
-
-
-inline
-void InsetInclude::setVerb()
-{
- if (!isVerb()) {
- flag = InsetInclude::VERB;
- setCmdName("verbatiminput");
- }
-}
-
-
-inline
-void InsetInclude::setVisibleSpace(bool b)
-{
- if (b && flag == InsetInclude::VERB) {
- setCmdName("verbatiminput*");
- flag = InsetInclude::VERBAST;
- } else if (!b && flag == InsetInclude::VERBAST) {
- setCmdName("verbatiminput");
- flag = InsetInclude::VERB;
- }
-}
#endif
}
break;
- case LFUN_CHILD_CREATE:
- {
- InsetCommandParams p("include");
-
- if (!argument.empty()) {
- if (contains(argument, "|")) {
- p.setContents(token(argument, '|', 0));
- p.setOptions(token(argument, '|', 1));
- } else
- p.setContents(argument);
- Dispatch(LFUN_CHILD_INSERT, p.getAsString());
- } else
- owner->getDialogs()->createInclude(p.getAsString());
- }
- break;
-
case LFUN_CHILDOPEN:
{
string const filename =