3 * Copyright 2001 the LyX Team
4 * Read the file COPYING
6 * \author Alejandro Aguilar Sierra
14 #pragma implementation
18 #include "FormInclude.h"
19 #include "insets/insetinclude.h"
21 #include "support/filetools.C"
22 #include "support/lstrings.h"
28 #include "form_include.h"
32 FormInclude::FormInclude(LyXView * lv, Dialogs * d)
33 : FormCommand(lv, d, _("Include file"), new OkCancelPolicy),
36 // let the dialog be shown
37 // These are permanent connections so we won't bother
38 // storing a copy because we won't be disconnecting.
39 d->showInclude.connect(slot(this, &FormInclude::showInset));
40 d->createInclude.connect(slot(this, &FormInclude::createInset));
44 FormInclude::~FormInclude()
50 FL_FORM * FormInclude::form() const
58 void FormInclude::build()
60 dialog_ = build_include();
62 // Workaround dumb xforms sizing bug
66 // Manage the ok and cancel buttons
67 bc_.setOK(dialog_->button_ok);
68 bc_.setCancel(dialog_->button_cancel);
71 bc_.addReadOnly(dialog_->browsebt);
72 bc_.addReadOnly(dialog_->flag1);
73 bc_.addReadOnly(dialog_->flag2);
74 bc_.addReadOnly(dialog_->flag3);
75 bc_.addReadOnly(dialog_->flag4);
76 bc_.addReadOnly(dialog_->filename);
77 bc_.addReadOnly(dialog_->flag41);
81 void FormInclude::update()
83 bc_.readOnly(lv_->buffer()->isReadonly());
86 fl_set_input(dialog_->filename, "");
87 fl_set_button(dialog_->flag1, 0);
88 fl_set_button(dialog_->flag2, 0);
89 fl_set_button(dialog_->flag3, 1);
90 fl_set_button(dialog_->flag4, 0);
91 fl_set_button(dialog_->flag41, 0);
92 fl_deactivate_object(dialog_->flag41);
93 fl_set_object_lcol(dialog_->flag41, FL_INACTIVE);
97 fl_set_input(dialog_->filename, params.getContents().c_str());
99 string const cmdname = params.getCmdName();
101 /* FIXME: what do with Don't typeset here ... */
102 //fl_set_button(dialog_->flag1, int(inset_->isNoLoad()));
104 fl_set_button(dialog_->flag2, cmdname == "input");
105 fl_set_button(dialog_->flag3, cmdname == "include");
106 if (cmdname == "verbatiminput" || cmdname == "verbatiminput*") {
107 fl_set_button(dialog_->flag4, 1);
108 fl_set_button(dialog_->flag41, cmdname == "verbatiminput*");
110 fl_set_button(dialog_->flag41, 0);
111 fl_deactivate_object(dialog_->flag41);
112 fl_set_object_lcol(dialog_->flag41, FL_INACTIVE);
117 void FormInclude::apply()
119 if (lv_->buffer()->isReadonly())
122 /* FIXME: no way to update internal flags of inset ??? */
124 //inset_->setNoLoad(fl_get_button(dialog_->flag1));
126 params.setContents(fl_get_input(dialog_->filename));
127 cout << params.getContents() << endl;
128 if (fl_get_button(dialog_->flag2))
129 params.setCmdName("input");
130 else if (fl_get_button(dialog_->flag3))
131 params.setCmdName("include");
132 else if (fl_get_button(dialog_->flag4)) {
133 if (fl_get_button(dialog_->flag41))
134 params.setCmdName("verbatiminput*");
136 params.setCmdName("verbatiminput");
140 if (params != inset_->params()) {
141 inset_->setParams(params);
142 lv_->view()->updateInset(inset_, true);
145 lv_->getLyXFunc()->Dispatch(LFUN_CHILD_INSERT, params.getAsString());
149 #warning convert this to use the buttoncontroller
151 bool FormInclude::input(FL_OBJECT *, long data)
153 State state = static_cast<State>(data);
157 // Should browsing too be disabled in RO-mode?
162 fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
164 /* input TeX, verbatim, or LyX file ? */
165 if (fl_get_button(dialog_->flag2))
167 else if (fl_get_button(dialog_->flag4))
174 /* FIXME: what do I do here ? */
176 // mpath = OnlyPath(inset_->getMasterFilename());
178 string const filename = fileDlg.Select(_("Select Child Document"),
179 mpath, ext, fl_get_input(dialog_->filename));
180 XFlush(fl_get_display());
182 // check selected filename
183 if (filename.empty())
186 string const filename2 = MakeRelPath(filename, mpath);
188 if (prefixIs(filename2, ".."))
189 fl_set_input(dialog_->filename, filename.c_str());
191 fl_set_input(dialog_->filename, filename2.c_str());
197 lv_->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, params.getContents());
201 fl_activate_object(dialog_->flag41);
202 fl_set_object_lcol(dialog_->flag41, FL_BLACK);
206 cout << "inputinclude" << endl;
207 /* huh ? why doesn't this work ? */
208 fl_deactivate_object(dialog_->flag41);
209 fl_set_object_lcol(dialog_->flag41, FL_INACTIVE);
210 fl_set_button(dialog_->flag41, 0);