]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/FormMinipage.C
Strip out another 180 #includes.
[lyx.git] / src / frontends / xforms / FormMinipage.C
1 /**
2  * \file FormMinipage.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Jürgen Vigna
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "FormMinipage.h"
14 #include "ControlMinipage.h"
15 #include "forms/form_minipage.h"
16
17 #include "xforms_helpers.h"
18 #include "xformsBC.h"
19
20 #include "controllers/helper_funcs.h"
21
22 #include "support/lstrings.h"
23 #include "support/tostr.h"
24
25 #include "lyx_forms.h"
26
27 using namespace lyx::support;
28
29
30 typedef FormController<ControlMinipage, FormView<FD_minipage> > base_class;
31
32 FormMinipage::FormMinipage(Dialog & parent)
33         : base_class(parent, _("Minipage Settings"))
34 {}
35
36
37 void FormMinipage::build()
38 {
39         dialog_.reset(build_minipage(this));
40
41         // Allow the base class to control messages
42         setMessageWidget(dialog_->text_warning);
43
44         fl_set_input_return(dialog_->input_width, FL_RETURN_CHANGED);
45         setPrehandler(dialog_->input_width);
46
47         string const choice = getStringFromVector(getLatexUnits(), "|");
48         fl_addto_choice(dialog_->choice_width_units, subst(choice, "%", "%%").c_str());
49
50         // Manage the ok, apply and cancel/close buttons
51         bcview().setOK(dialog_->button_ok);
52         bcview().setApply(dialog_->button_apply);
53         bcview().setCancel(dialog_->button_close);
54         bcview().setRestore(dialog_->button_restore);
55
56         bcview().addReadOnly(dialog_->input_width);
57         bcview().addReadOnly(dialog_->choice_width_units);
58         bcview().addReadOnly(dialog_->radio_top);
59         bcview().addReadOnly(dialog_->radio_middle);
60         bcview().addReadOnly(dialog_->radio_bottom);
61 }
62
63
64 void FormMinipage::apply()
65 {
66         controller().params().width =
67                 LyXLength(getLengthFromWidgets(dialog_->input_width,
68                                                dialog_->choice_width_units));
69
70         if (fl_get_button(dialog_->radio_top))
71                 controller().params().pos = InsetMinipage::top;
72         else if (fl_get_button(dialog_->radio_middle))
73                 controller().params().pos = InsetMinipage::center;
74         else
75                 controller().params().pos = InsetMinipage::bottom;
76 }
77
78
79 void FormMinipage::update()
80 {
81         LyXLength len(controller().params().width);
82         fl_set_input(dialog_->input_width, tostr(len.value()).c_str());
83         fl_set_choice(dialog_->choice_width_units, len.unit() + 1);
84
85         switch (controller().params().pos) {
86         case InsetMinipage::top:
87                 fl_set_button(dialog_->radio_top, 1);
88                 break;
89         case InsetMinipage::center:
90                 fl_set_button(dialog_->radio_middle, 1);
91                 break;
92         case InsetMinipage::bottom:
93                 fl_set_button(dialog_->radio_bottom, 1);
94                 break;
95         }
96 }
97
98
99 ButtonPolicy::SMInput FormMinipage::input(FL_OBJECT * ob, long)
100 {
101         clearMessage();
102
103         ButtonPolicy::SMInput action = ButtonPolicy::SMI_NOOP;
104
105         if (ob == dialog_->radio_top ||
106             ob == dialog_->radio_middle ||
107             ob == dialog_->radio_bottom ||
108             ob == dialog_->choice_width_units)
109                 return ButtonPolicy::SMI_VALID;
110
111         // disallow senseless data
112         // warnings if input is senseless
113         if (ob == dialog_->input_width) {
114                 string const input = getString(dialog_->input_width);
115                 bool const invalid = !isValidLength(input) && !isStrDbl(input);
116                 if (invalid) {
117                         postWarning(_("Invalid Length!"));
118                         action = ButtonPolicy::SMI_INVALID;
119                 } else {
120                         action = ButtonPolicy::SMI_VALID;
121                 }
122         }
123
124         return action;
125 }