]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/FormExternal.C
Yet more dialog tweaking from Rob.
[lyx.git] / src / frontends / xforms / FormExternal.C
1 /**
2  * \file FormExternal.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Asger Alstrup
7  * \author John Levon
8  * \author Angus Leeming 
9  *
10  * Full author contact details are available in file CREDITS
11  */
12
13 #include <config.h>
14
15 #ifdef __GNUG__
16 #pragma implementation
17 #endif
18
19 #include "xformsBC.h"
20 #include "ControlExternal.h"
21 #include "FormExternal.h"
22 #include "forms/form_external.h"
23 #include "gettext.h"
24 #include "xforms_helpers.h"
25 #include "helper_funcs.h"
26
27 #include "support/lstrings.h"
28 #include FORMS_H_LOCATION
29
30 typedef FormCB<ControlExternal, FormDB<FD_external> > base_class;
31
32 FormExternal::FormExternal()
33         : base_class(_("Edit external file"))
34 {}
35
36
37 void FormExternal::apply()
38 {
39         controller().params().filename =
40                 fl_get_input(dialog_->input_filename);
41         controller().params().parameters =
42                 fl_get_input(dialog_->input_parameters);
43
44         int const choice = fl_get_choice(dialog_->choice_template);
45         controller().params().templ = controller().getTemplate(choice);
46 }
47
48
49 void FormExternal::build()
50 {
51         dialog_.reset(build_external(this));
52
53         string const choice =
54                 " " + getStringFromVector(controller().getTemplates(), " | ") + " ";
55         fl_addto_choice(dialog_->choice_template, choice.c_str());
56
57         fl_set_input_return (dialog_->input_filename,  FL_RETURN_CHANGED);
58         fl_set_input_return (dialog_->input_parameters, FL_RETURN_CHANGED);
59
60         setPrehandler(dialog_->input_filename);
61         setPrehandler(dialog_->input_parameters);
62
63         bc().setOK(dialog_->button_ok);
64         bc().setApply(dialog_->button_apply);
65         bc().setCancel(dialog_->button_close);
66
67         bc().addReadOnly(dialog_->input_filename);
68         bc().addReadOnly(dialog_->button_filenamebrowse);
69         bc().addReadOnly(dialog_->input_parameters);
70 }
71
72
73 void FormExternal::update()
74 {
75         InsetExternal::Params const & params = controller().params();
76
77         fl_set_input(dialog_->input_filename, params.filename.c_str());
78         fl_set_input(dialog_->input_parameters, params.parameters.c_str());
79
80         int const ID = controller().getTemplateNumber(params.templ.lyxName);
81         if (ID >= 0) {
82                 setEnabled(dialog_->choice_template, true);
83                 fl_set_choice(dialog_->choice_template, ID+1);
84         } else
85                 setEnabled(dialog_->choice_template, false);
86
87         updateComboChange();
88 }
89
90
91 ButtonPolicy::SMInput FormExternal::input(FL_OBJECT * ob, long)
92 {
93         if (ob == dialog_->choice_template) {
94
95                 // set to the chosen template
96                 int const choice = fl_get_choice(dialog_->choice_template);
97                 controller().params().templ = controller().getTemplate(choice);
98
99                 updateComboChange();
100
101         } else if (ob == dialog_->button_filenamebrowse) {
102
103                 string const in_name  = fl_get_input(dialog_->input_filename);
104                 string const out_name = controller().Browse(in_name);
105                 fl_set_input(dialog_->input_filename, out_name.c_str());
106
107         } else if (ob == dialog_->button_edit) {
108                 controller().editExternal();
109
110         } else if (ob == dialog_->button_view) {
111                 controller().viewExternal();
112
113         } else if (ob == dialog_->button_update) {
114                 controller().updateExternal();
115         }
116
117         return ButtonPolicy::SMI_VALID;
118 }
119
120
121 void FormExternal::updateComboChange()
122 {
123         // Update the help text
124         fl_clear_browser(dialog_->browser_helptext);
125         fl_addto_browser(dialog_->browser_helptext,
126                          controller().params().templ.helpText.c_str());
127         fl_set_browser_topline(dialog_->browser_helptext, 0);
128
129         bool const enabled = (!controller().params().templ.automaticProduction);
130         setEnabled(dialog_->button_update, enabled);
131 }