3 * Copyright 2001 the LyX Team
4 * Read the file COPYING
6 * \author Alejandro Aguilar Sierra
13 #pragma implementation
17 #include "FormInclude.h"
18 #include "insets/insetinclude.h"
20 #include "support/filetools.C"
21 #include "support/lstrings.h"
27 #include "form_include.h"
29 FormInclude::FormInclude(LyXView * lv, Dialogs * d)
30 : FormCommand(lv, d, _("Include file"), new OkCancelPolicy),
33 // let the dialog be shown
34 // These are permanent connections so we won't bother
35 // storing a copy because we won't be disconnecting.
36 d->showInclude.connect(slot(this, &FormInclude::showInset));
37 d->createInclude.connect(slot(this, &FormInclude::createInset));
41 FormInclude::~FormInclude()
47 FL_FORM * FormInclude::form() const
55 void FormInclude::build()
57 dialog_ = build_include();
59 // Workaround dumb xforms sizing bug
63 // Manage the ok and cancel buttons
64 bc_.setOK(dialog_->button_ok);
65 bc_.setCancel(dialog_->button_cancel);
68 bc_.addReadOnly(dialog_->browsebt);
69 bc_.addReadOnly(dialog_->flag1);
70 bc_.addReadOnly(dialog_->flag2);
71 bc_.addReadOnly(dialog_->flag3);
72 bc_.addReadOnly(dialog_->flag4);
73 bc_.addReadOnly(dialog_->filename);
74 bc_.addReadOnly(dialog_->flag41);
78 void FormInclude::update()
80 bc_.readOnly(lv_->buffer()->isReadonly());
83 fl_set_input(dialog_->filename, "");
84 fl_set_button(dialog_->flag1, 0);
85 fl_set_button(dialog_->flag2, 0);
86 fl_set_button(dialog_->flag3, 1);
87 fl_set_button(dialog_->flag4, 0);
88 fl_set_button(dialog_->flag41, 0);
89 fl_deactivate_object(dialog_->flag41);
90 fl_set_object_lcol(dialog_->flag41, FL_INACTIVE);
94 fl_set_input(dialog_->filename, params.getContents().c_str());
96 string const cmdname = params.getCmdName();
98 /* FIXME: what do with Don't typeset here ... */
99 //fl_set_button(dialog_->flag1, int(inset_->isNoLoad()));
101 fl_set_button(dialog_->flag2, cmdname == "input");
102 fl_set_button(dialog_->flag3, cmdname == "include");
103 if (cmdname == "verbatiminput" || cmdname == "verbatiminput*") {
104 fl_set_button(dialog_->flag4, 1);
105 fl_set_button(dialog_->flag41, cmdname == "verbatiminput*");
107 fl_set_button(dialog_->flag41, 0);
108 fl_deactivate_object(dialog_->flag41);
109 fl_set_object_lcol(dialog_->flag41, FL_INACTIVE);
114 void FormInclude::apply()
116 if (lv_->buffer()->isReadonly())
119 /* FIXME: no way to update internal flags of inset ??? */
121 //inset_->setNoLoad(fl_get_button(dialog_->flag1));
123 params.setContents(fl_get_input(dialog_->filename));
124 cout << params.getContents() << endl;
125 if (fl_get_button(dialog_->flag2))
126 params.setCmdName("input");
127 else if (fl_get_button(dialog_->flag3))
128 params.setCmdName("include");
129 else if (fl_get_button(dialog_->flag4)) {
130 if (fl_get_button(dialog_->flag41))
131 params.setCmdName("verbatiminput*");
133 params.setCmdName("verbatiminput");
137 if (params != inset_->params()) {
138 inset_->setParams(params);
139 lv_->view()->updateInset(inset_, true);
142 lv_->getLyXFunc()->Dispatch(LFUN_CHILD_INSERT, params.getAsString());
146 #warning convert this to use the buttoncontroller
148 bool FormInclude::input(FL_OBJECT *, long data)
150 State state = static_cast<State>(data);
154 // Should browsing too be disabled in RO-mode?
159 fileDlg.SetButton(0, _("Documents"), lyxrc.document_path);
161 /* input TeX, verbatim, or LyX file ? */
162 if (fl_get_button(dialog_->flag2))
164 else if (fl_get_button(dialog_->flag4))
171 /* FIXME: what do I do here ? */
173 // mpath = OnlyPath(inset_->getMasterFilename());
175 string const filename = fileDlg.Select(_("Select Child Document"),
176 mpath, ext, fl_get_input(dialog_->filename));
177 XFlush(fl_get_display());
179 // check selected filename
180 if (filename.empty())
183 string const filename2 = MakeRelPath(filename, mpath);
185 if (prefixIs(filename2, ".."))
186 fl_set_input(dialog_->filename, filename.c_str());
188 fl_set_input(dialog_->filename, filename2.c_str());
194 lv_->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, params.getContents());
198 fl_activate_object(dialog_->flag41);
199 fl_set_object_lcol(dialog_->flag41, FL_BLACK);
203 cout << "inputinclude" << endl;
204 /* huh ? why doesn't this work ? */
205 fl_deactivate_object(dialog_->flag41);
206 fl_set_object_lcol(dialog_->flag41, FL_INACTIVE);
207 fl_set_button(dialog_->flag41, 0);