5 #include FORMS_H_LOCATION
6 #include "layout_forms.h"
10 #include "support/filetools.h"
12 #include "minibuffer.h"
14 #include "lyx_gui_misc.h"
15 #include "BufferView.h"
19 extern FD_form_paper * fd_form_paper;
20 extern BufferView * current_view;
23 inline void DeactivatePaperButtons ()
25 fl_deactivate_object (fd_form_paper->button_ok);
26 fl_deactivate_object (fd_form_paper->button_apply);
27 fl_set_object_lcol (fd_form_paper->button_ok, FL_INACTIVE);
28 fl_set_object_lcol (fd_form_paper->button_apply, FL_INACTIVE);
32 inline void ActivatePaperButtons ()
34 fl_activate_object (fd_form_paper->button_ok);
35 fl_activate_object (fd_form_paper->button_apply);
36 fl_set_object_lcol (fd_form_paper->button_ok, FL_BLACK);
37 fl_set_object_lcol (fd_form_paper->button_apply, FL_BLACK);
41 inline void DisablePaperLayout()
43 DeactivatePaperButtons();
44 fl_deactivate_object (fd_form_paper->choice_paperpackage);
45 fl_deactivate_object (fd_form_paper->greoup_radio_orientation);
46 fl_deactivate_object (fd_form_paper->radio_portrait);
47 fl_deactivate_object (fd_form_paper->radio_landscape);
48 fl_deactivate_object (fd_form_paper->choice_papersize2);
49 fl_deactivate_object (fd_form_paper->push_use_geometry);
50 fl_deactivate_object (fd_form_paper->input_custom_width);
51 fl_deactivate_object (fd_form_paper->input_custom_height);
52 fl_deactivate_object (fd_form_paper->input_top_margin);
53 fl_deactivate_object (fd_form_paper->input_bottom_margin);
54 fl_deactivate_object (fd_form_paper->input_left_margin);
55 fl_deactivate_object (fd_form_paper->input_right_margin);
56 fl_deactivate_object (fd_form_paper->input_head_height);
57 fl_deactivate_object (fd_form_paper->input_head_sep);
58 fl_deactivate_object (fd_form_paper->input_foot_skip);
59 fl_deactivate_object (fd_form_paper->text_warning);
63 inline void EnablePaperLayout()
65 ActivatePaperButtons();
66 fl_activate_object (fd_form_paper->choice_paperpackage);
67 fl_activate_object (fd_form_paper->greoup_radio_orientation);
68 fl_activate_object (fd_form_paper->radio_portrait);
69 fl_activate_object (fd_form_paper->radio_landscape);
70 fl_activate_object (fd_form_paper->choice_papersize2);
71 fl_activate_object (fd_form_paper->push_use_geometry);
72 fl_activate_object (fd_form_paper->input_custom_width);
73 fl_activate_object (fd_form_paper->input_custom_height);
74 fl_activate_object (fd_form_paper->input_top_margin);
75 fl_activate_object (fd_form_paper->input_bottom_margin);
76 fl_activate_object (fd_form_paper->input_left_margin);
77 fl_activate_object (fd_form_paper->input_right_margin);
78 fl_activate_object (fd_form_paper->input_head_height);
79 fl_activate_object (fd_form_paper->input_head_sep);
80 fl_activate_object (fd_form_paper->input_foot_skip);
81 fl_activate_object (fd_form_paper->text_warning);
85 static void checkMarginValues()
89 fl_hide_object(fd_form_paper->text_warning);
90 ActivatePaperButtons();
92 allEmpty = (!strlen(fl_get_input(fd_form_paper->input_top_margin)) &&
93 !strlen(fl_get_input(fd_form_paper->input_bottom_margin)) &&
94 !strlen(fl_get_input(fd_form_paper->input_left_margin)) &&
95 !strlen(fl_get_input(fd_form_paper->input_right_margin)) &&
96 !strlen(fl_get_input(fd_form_paper->input_head_height)) &&
97 !strlen(fl_get_input(fd_form_paper->input_head_sep)) &&
98 !strlen(fl_get_input(fd_form_paper->input_foot_skip)) &&
99 !strlen(fl_get_input(fd_form_paper->input_custom_width)) &&
100 !strlen(fl_get_input(fd_form_paper->input_custom_height)));
102 fl_set_button(fd_form_paper->push_use_geometry, 1);
107 bool UpdateLayoutPaper()
110 if (!current_view->available())
114 BufferParams * params = ¤t_view->buffer()->params;
116 fl_set_choice(fd_form_paper->choice_papersize2,
117 params->papersize2 + 1);
118 fl_set_choice(fd_form_paper->choice_paperpackage,
119 params->paperpackage + 1);
120 fl_set_button(fd_form_paper->push_use_geometry,
121 params->use_geometry);
122 fl_set_button(fd_form_paper->radio_portrait, 0);
123 fl_set_button(fd_form_paper->radio_landscape, 0);
124 if (params->orientation == BufferParams::ORIENTATION_LANDSCAPE)
125 fl_set_button(fd_form_paper->radio_landscape, 1);
127 fl_set_button(fd_form_paper->radio_portrait, 1);
129 fl_set_input(fd_form_paper->input_custom_width,
130 params->paperwidth.c_str());
131 fl_set_input(fd_form_paper->input_custom_height,
132 params->paperheight.c_str());
133 fl_set_input(fd_form_paper->input_left_margin,
134 params->leftmargin.c_str());
135 fl_set_input(fd_form_paper->input_top_margin,
136 params->topmargin.c_str());
137 fl_set_input(fd_form_paper->input_right_margin,
138 params->rightmargin.c_str());
139 fl_set_input(fd_form_paper->input_bottom_margin,
140 params->bottommargin.c_str());
141 fl_set_input(fd_form_paper->input_head_height,
142 params->headheight.c_str());
143 fl_set_input(fd_form_paper->input_head_sep,
144 params->headsep.c_str());
145 fl_set_input(fd_form_paper->input_foot_skip,
146 params->footskip.c_str());
147 fl_set_focus_object(fd_form_paper->form_paper,
148 fd_form_paper->choice_papersize2);
149 fl_hide_object(fd_form_paper->text_warning);
150 if (current_view->buffer()->isReadonly()) {
151 DisablePaperLayout();
152 fl_set_object_label(fd_form_paper->text_warning,
153 _("Document is read-only."
154 " No changes to layout"
156 fl_show_object(fd_form_paper->text_warning);
160 } else if (fd_form_paper->form_paper->visible) {
161 fl_hide_form(fd_form_paper->form_paper);
167 void MenuLayoutPaper()
169 if (UpdateLayoutPaper()) {
170 if (fd_form_paper->form_paper->visible) {
171 fl_raise_form(fd_form_paper->form_paper);
173 fl_show_form(fd_form_paper->form_paper,
174 FL_PLACE_MOUSE, FL_FULLBORDER,
181 void PaperApplyCB(FL_OBJECT *, long)
183 if (!current_view->available())
186 BufferParams * params = ¤t_view->buffer()->params;
188 FD_form_paper const * fd = fd_form_paper;
190 params->papersize2 = fl_get_choice(fd->choice_papersize2)-1;
191 params->paperpackage = fl_get_choice(fd->choice_paperpackage)-1;
192 params->use_geometry = fl_get_button(fd_form_paper->push_use_geometry);
193 if (fl_get_button(fd_form_paper->radio_landscape))
194 params->orientation = BufferParams::ORIENTATION_LANDSCAPE;
196 params->orientation = BufferParams::ORIENTATION_PORTRAIT;
197 params->paperwidth = fl_get_input(fd->input_custom_width);
198 params->paperheight = fl_get_input(fd->input_custom_height);
199 params->leftmargin = fl_get_input(fd->input_left_margin);
200 params->topmargin = fl_get_input(fd->input_top_margin);
201 params->rightmargin = fl_get_input(fd->input_right_margin);
202 params->bottommargin = fl_get_input(fd->input_bottom_margin);
203 params->headheight = fl_get_input(fd->input_head_height);
204 params->headsep = fl_get_input(fd->input_head_sep);
205 params->footskip = fl_get_input(fd->input_foot_skip);
206 current_view->buffer()->setPaperStuff();
207 current_view->owner()->getMiniBuffer()->Set(_("Paper layout set"));
208 current_view->buffer()->markDirty();
214 void PaperCancelCB(FL_OBJECT *, long)
216 fl_hide_form(fd_form_paper->form_paper);
220 void PaperOKCB(FL_OBJECT * ob, long data)
222 PaperCancelCB(ob, data);
223 PaperApplyCB(ob, data);
227 void PaperMarginsCB(FL_OBJECT * ob, long)
229 FD_form_paper const * fd = fd_form_paper;
234 if (ob == fd->choice_papersize2) {
235 val = fl_get_choice(fd->choice_papersize2)-1;
236 if (val == BufferParams::VM_PAPER_DEFAULT) {
237 fl_set_button(fd->push_use_geometry, 0);
240 if (val != BufferParams::VM_PAPER_USLETTER
241 && val != BufferParams::VM_PAPER_USLEGAL
242 && val != BufferParams::VM_PAPER_USEXECUTIVE
243 && val != BufferParams::VM_PAPER_A4
244 && val != BufferParams::VM_PAPER_A5
245 && val != BufferParams::VM_PAPER_B5) {
246 fl_set_button(fd->push_use_geometry, 1);
248 fl_set_choice(fd->choice_paperpackage, BufferParams::PACKAGE_NONE + 1);
250 } else if (ob == fd->choice_paperpackage) {
251 val = fl_get_choice(fd->choice_paperpackage)-1;
252 if (val != BufferParams::PACKAGE_NONE) {
253 fl_set_choice(fd->choice_papersize2,
254 BufferParams::VM_PAPER_DEFAULT + 1);
255 fl_set_button(fd->push_use_geometry, 0);
257 } else if (ob == fd->input_custom_width
258 || ob == fd->input_custom_height
259 || ob == fd->input_left_margin
260 || ob == fd->input_right_margin
261 || ob == fd->input_top_margin
262 || ob == fd->input_bottom_margin
263 || ob == fd->input_head_height
264 || ob == fd->input_head_sep
265 || ob == fd->input_foot_skip) {
266 str = fl_get_input(ob);
267 if (!str.empty() && !isValidLength(str)) {
268 fl_set_object_label(fd_form_paper->text_warning,
269 _("Warning: Invalid Length"
270 " (valid example: 10mm)"));
271 fl_show_object(fd_form_paper->text_warning);
272 DeactivatePaperButtons();
273 } else if (!str.empty())
274 fl_set_button(fd->push_use_geometry, 1);