3 * Copyright 2001 The LyX Team.
4 * See the file COPYING.
6 * \author Lars Gullik Bjønnes, larsbj@lyx.org
7 * \author Juergen Spitzmueller j.spitzmueller@gmx.de
13 #pragma implementation
17 #include "ControlFloat.h"
18 #include "FormFloat.h"
19 #include "forms/form_float.h"
20 #include "support/lstrings.h"
21 #include "xforms_helpers.h"
22 #include FORMS_H_LOCATION
24 typedef FormCB<ControlFloat, FormDB<FD_float> > base_class;
26 FormFloat::FormFloat(ControlFloat & c, Dialogs & d)
27 : base_class(c, d, _("Float Options"))
31 void FormFloat::build()
33 dialog_.reset(build_float(this));
35 // Manage the ok, apply and cancel/close buttons
36 bc().setOK(dialog_->button_ok);
37 bc().setApply(dialog_->button_apply);
38 bc().setCancel(dialog_->button_close);
39 bc().setRestore(dialog_->button_restore);
41 bc().addReadOnly(dialog_->check_default);
42 bc().addReadOnly(dialog_->check_top);
43 bc().addReadOnly(dialog_->check_bottom);
44 bc().addReadOnly(dialog_->check_page);
45 bc().addReadOnly(dialog_->check_here);
46 bc().addReadOnly(dialog_->check_force);
47 bc().addReadOnly(dialog_->check_here_definitely);
48 bc().addReadOnly(dialog_->check_wide);
52 void FormFloat::apply()
55 if (fl_get_button(dialog_->check_here_definitely)) {
58 if (fl_get_button(dialog_->check_force)) {
61 if (fl_get_button(dialog_->check_here)) {
64 if (fl_get_button(dialog_->check_top)) {
67 if (fl_get_button(dialog_->check_bottom)) {
70 if (fl_get_button(dialog_->check_page)) {
75 controller().params().placement = placement;
76 controller().params().wide = fl_get_button(dialog_->check_wide);
80 void FormFloat::update()
82 bool def_placement = false;
88 bool here_definitely = false;
90 string placement(controller().params().placement);
92 if (placement.empty()) {
95 } else if (contains(placement, "H")) {
96 here_definitely = true;
99 if (contains(placement, "!")) {
102 if (contains(placement, "t")) {
105 if (contains(placement, "b")) {
108 if (contains(placement, "p")) {
111 if (contains(placement, "h")) {
115 fl_set_button(dialog_->check_default, def_placement);
116 fl_set_button(dialog_->check_top, top);
117 fl_set_button(dialog_->check_bottom, bottom);
118 fl_set_button(dialog_->check_page, page);
119 fl_set_button(dialog_->check_here, here);
120 fl_set_button(dialog_->check_force, force);
121 fl_set_button(dialog_->check_here_definitely, here_definitely);
122 setEnabled(dialog_->check_here_definitely, !controller().params().wide
124 if (controller().params().wide) {
125 fl_set_button(dialog_->check_here, false);
126 fl_set_button(dialog_->check_bottom, false);
128 setEnabled(dialog_->check_here, !controller().params().wide && !def_placement);
129 setEnabled(dialog_->check_bottom, !controller().params().wide && !def_placement);
130 fl_set_button(dialog_->check_wide, controller().params().wide);
131 setEnabled(dialog_->check_top, !def_placement);
132 setEnabled(dialog_->check_page, !def_placement);
133 setEnabled(dialog_->check_force, !def_placement);
137 ButtonPolicy::SMInput FormFloat::input(FL_OBJECT * ob, long)
139 bool const def_place = fl_get_button(dialog_->check_default);
140 if (ob == dialog_->check_default) {
142 fl_set_button(dialog_->check_top, false);
143 fl_set_button(dialog_->check_bottom, false);
144 fl_set_button(dialog_->check_page, false);
145 fl_set_button(dialog_->check_here, false);
146 fl_set_button(dialog_->check_force, false);
147 fl_set_button(dialog_->check_here_definitely, false);
149 setEnabled(dialog_->check_top, !def_place);
150 setEnabled(dialog_->check_bottom, !def_place);
151 setEnabled(dialog_->check_page, !def_place);
152 setEnabled(dialog_->check_here, !def_place);
153 setEnabled(dialog_->check_force, !def_place);
154 setEnabled(dialog_->check_here_definitely, !def_place);
156 } else if (ob == dialog_->check_here_definitely) {
157 if (fl_get_button(dialog_->check_here_definitely)) {
158 fl_set_button(dialog_->check_top, false);
159 fl_set_button(dialog_->check_bottom, false);
160 fl_set_button(dialog_->check_page, false);
161 fl_set_button(dialog_->check_here, false);
162 fl_set_button(dialog_->check_force, false);
165 if (fl_get_button(dialog_->check_here_definitely)) {
166 fl_set_button(dialog_->check_here_definitely, false);
170 if (ob == dialog_->check_wide) {
171 if (fl_get_button(dialog_->check_wide)) {
172 fl_set_button(dialog_->check_here_definitely, false);
173 setEnabled(dialog_->check_here_definitely, false);
174 fl_set_button(dialog_->check_here, false);
175 setEnabled(dialog_->check_here, false);
176 fl_set_button(dialog_->check_bottom, false);
177 setEnabled(dialog_->check_bottom, false);
180 setEnabled(dialog_->check_here_definitely, true);
181 setEnabled(dialog_->check_here, true);
182 setEnabled(dialog_->check_bottom, true);
186 return ButtonPolicy::SMI_VALID;