5 #include "definitions.h"
6 #include FORMS_H_LOCATION
7 #include "layout_forms.h"
11 #include "support/filetools.h"
13 #include "minibuffer.h"
15 #include "lyx_gui_misc.h"
16 #include "BufferView.h"
19 extern FD_form_paper * fd_form_paper;
20 extern MiniBuffer * minibuffer;
21 extern BufferView * current_view;
24 inline void DeactivatePaperButtons ()
26 fl_deactivate_object (fd_form_paper->button_ok);
27 fl_deactivate_object (fd_form_paper->button_apply);
28 fl_set_object_lcol (fd_form_paper->button_ok, FL_INACTIVE);
29 fl_set_object_lcol (fd_form_paper->button_apply, FL_INACTIVE);
33 inline void ActivatePaperButtons ()
35 fl_activate_object (fd_form_paper->button_ok);
36 fl_activate_object (fd_form_paper->button_apply);
37 fl_set_object_lcol (fd_form_paper->button_ok, FL_BLACK);
38 fl_set_object_lcol (fd_form_paper->button_apply, FL_BLACK);
42 inline void DisablePaperLayout()
44 DeactivatePaperButtons();
45 fl_deactivate_object (fd_form_paper->choice_paperpackage);
46 fl_deactivate_object (fd_form_paper->greoup_radio_orientation);
47 fl_deactivate_object (fd_form_paper->radio_portrait);
48 fl_deactivate_object (fd_form_paper->radio_landscape);
49 fl_deactivate_object (fd_form_paper->choice_papersize2);
50 fl_deactivate_object (fd_form_paper->push_use_geometry);
51 fl_deactivate_object (fd_form_paper->input_custom_width);
52 fl_deactivate_object (fd_form_paper->input_custom_height);
53 fl_deactivate_object (fd_form_paper->input_top_margin);
54 fl_deactivate_object (fd_form_paper->input_bottom_margin);
55 fl_deactivate_object (fd_form_paper->input_left_margin);
56 fl_deactivate_object (fd_form_paper->input_right_margin);
57 fl_deactivate_object (fd_form_paper->input_head_height);
58 fl_deactivate_object (fd_form_paper->input_head_sep);
59 fl_deactivate_object (fd_form_paper->input_foot_skip);
60 fl_deactivate_object (fd_form_paper->text_warning);
64 inline void EnablePaperLayout()
66 ActivatePaperButtons();
67 fl_activate_object (fd_form_paper->choice_paperpackage);
68 fl_activate_object (fd_form_paper->greoup_radio_orientation);
69 fl_activate_object (fd_form_paper->radio_portrait);
70 fl_activate_object (fd_form_paper->radio_landscape);
71 fl_activate_object (fd_form_paper->choice_papersize2);
72 fl_activate_object (fd_form_paper->push_use_geometry);
73 fl_activate_object (fd_form_paper->input_custom_width);
74 fl_activate_object (fd_form_paper->input_custom_height);
75 fl_activate_object (fd_form_paper->input_top_margin);
76 fl_activate_object (fd_form_paper->input_bottom_margin);
77 fl_activate_object (fd_form_paper->input_left_margin);
78 fl_activate_object (fd_form_paper->input_right_margin);
79 fl_activate_object (fd_form_paper->input_head_height);
80 fl_activate_object (fd_form_paper->input_head_sep);
81 fl_activate_object (fd_form_paper->input_foot_skip);
82 fl_activate_object (fd_form_paper->text_warning);
86 static void checkMarginValues()
90 fl_hide_object(fd_form_paper->text_warning);
91 ActivatePaperButtons();
93 allEmpty = (!strlen(fl_get_input(fd_form_paper->input_top_margin)) &&
94 !strlen(fl_get_input(fd_form_paper->input_bottom_margin)) &&
95 !strlen(fl_get_input(fd_form_paper->input_left_margin)) &&
96 !strlen(fl_get_input(fd_form_paper->input_right_margin)) &&
97 !strlen(fl_get_input(fd_form_paper->input_head_height)) &&
98 !strlen(fl_get_input(fd_form_paper->input_head_sep)) &&
99 !strlen(fl_get_input(fd_form_paper->input_foot_skip)) &&
100 !strlen(fl_get_input(fd_form_paper->input_custom_width)) &&
101 !strlen(fl_get_input(fd_form_paper->input_custom_height)));
103 fl_set_button(fd_form_paper->push_use_geometry, 1);
108 bool UpdateLayoutPaper()
111 if (!current_view->available())
115 BufferParams * params = ¤t_view->buffer()->params;
117 fl_set_choice(fd_form_paper->choice_papersize2,
118 params->papersize2 + 1);
119 fl_set_choice(fd_form_paper->choice_paperpackage,
120 params->paperpackage + 1);
121 fl_set_button(fd_form_paper->push_use_geometry,
122 params->use_geometry);
123 fl_set_button(fd_form_paper->radio_portrait, 0);
124 fl_set_button(fd_form_paper->radio_landscape, 0);
125 if (params->orientation == ORIENTATION_LANDSCAPE)
126 fl_set_button(fd_form_paper->radio_landscape, 1);
128 fl_set_button(fd_form_paper->radio_portrait, 1);
130 fl_set_input(fd_form_paper->input_custom_width,
131 params->paperwidth.c_str());
132 fl_set_input(fd_form_paper->input_custom_height,
133 params->paperheight.c_str());
134 fl_set_input(fd_form_paper->input_left_margin,
135 params->leftmargin.c_str());
136 fl_set_input(fd_form_paper->input_top_margin,
137 params->topmargin.c_str());
138 fl_set_input(fd_form_paper->input_right_margin,
139 params->rightmargin.c_str());
140 fl_set_input(fd_form_paper->input_bottom_margin,
141 params->bottommargin.c_str());
142 fl_set_input(fd_form_paper->input_head_height,
143 params->headheight.c_str());
144 fl_set_input(fd_form_paper->input_head_sep,
145 params->headsep.c_str());
146 fl_set_input(fd_form_paper->input_foot_skip,
147 params->footskip.c_str());
148 fl_set_focus_object(fd_form_paper->form_paper,
149 fd_form_paper->choice_papersize2);
150 fl_hide_object(fd_form_paper->text_warning);
151 if (current_view->buffer()->isReadonly()) {
152 DisablePaperLayout();
153 fl_set_object_label(fd_form_paper->text_warning,
154 _("Document is read-only."
155 " No changes to layout"
157 fl_show_object(fd_form_paper->text_warning);
161 } else if (fd_form_paper->form_paper->visible) {
162 fl_hide_form(fd_form_paper->form_paper);
168 void MenuLayoutPaper()
170 if (UpdateLayoutPaper()) {
171 if (fd_form_paper->form_paper->visible) {
172 fl_raise_form(fd_form_paper->form_paper);
174 fl_show_form(fd_form_paper->form_paper,
175 FL_PLACE_MOUSE, FL_FULLBORDER,
182 void PaperApplyCB(FL_OBJECT *, long)
184 if (! current_view->available())
187 BufferParams * params = ¤t_view->buffer()->params;
189 FD_form_paper const * fd = fd_form_paper;
191 params->papersize2 = fl_get_choice(fd->choice_papersize2)-1;
192 params->paperpackage = fl_get_choice(fd->choice_paperpackage)-1;
193 params->use_geometry = fl_get_button(fd_form_paper->push_use_geometry);
194 if (fl_get_button(fd_form_paper->radio_landscape))
195 params->orientation = ORIENTATION_LANDSCAPE;
197 params->orientation = ORIENTATION_PORTRAIT;
198 params->paperwidth = fl_get_input(fd->input_custom_width);
199 params->paperheight = fl_get_input(fd->input_custom_height);
200 params->leftmargin = fl_get_input(fd->input_left_margin);
201 params->topmargin = fl_get_input(fd->input_top_margin);
202 params->rightmargin = fl_get_input(fd->input_right_margin);
203 params->bottommargin = fl_get_input(fd->input_bottom_margin);
204 params->headheight = fl_get_input(fd->input_head_height);
205 params->headsep = fl_get_input(fd->input_head_sep);
206 params->footskip = fl_get_input(fd->input_foot_skip);
207 current_view->buffer()->setPaperStuff();
208 minibuffer->Set(_("Paper layout set"));
209 current_view->buffer()->markDirty();
215 void PaperCancelCB(FL_OBJECT *, long)
217 fl_hide_form(fd_form_paper->form_paper);
221 void PaperOKCB(FL_OBJECT * ob, long data)
223 PaperCancelCB(ob,data);
224 PaperApplyCB(ob,data);
228 void PaperMarginsCB(FL_OBJECT * ob, long)
230 FD_form_paper const * fd = fd_form_paper;
235 if (ob == fd->choice_papersize2) {
236 val = fl_get_choice(fd->choice_papersize2)-1;
237 if (val == VM_PAPER_DEFAULT) {
238 fl_set_button(fd->push_use_geometry, 0);
241 if ((val != VM_PAPER_USLETTER) && (val != VM_PAPER_USLEGAL) &&
242 (val != VM_PAPER_USEXECUTIVE) && (val != VM_PAPER_A4) &&
243 (val != VM_PAPER_A5) && (val != VM_PAPER_B5)) {
244 fl_set_button(fd->push_use_geometry, 1);
246 fl_set_choice(fd->choice_paperpackage, PACKAGE_NONE + 1);
248 } else if (ob == fd->choice_paperpackage) {
249 val = fl_get_choice(fd->choice_paperpackage)-1;
250 if (val != PACKAGE_NONE) {
251 fl_set_choice(fd->choice_papersize2, VM_PAPER_DEFAULT + 1);
252 fl_set_button(fd->push_use_geometry, 0);
254 } else if ((ob==fd->input_custom_width)
255 || (ob==fd->input_custom_height)
256 || (ob==fd->input_left_margin)
257 || (ob==fd->input_right_margin)
258 || (ob==fd->input_top_margin)
259 || (ob==fd->input_bottom_margin)
260 || (ob==fd->input_head_height)
261 || (ob==fd->input_head_sep)
262 || (ob==fd->input_foot_skip)) {
263 str = fl_get_input(ob);
264 if (!str.empty() && !isValidLength(str)) {
265 fl_set_object_label(fd_form_paper->text_warning,
266 _("Warning: Invalid Length"
267 " (valid example: 10mm)"));
268 fl_show_object(fd_form_paper->text_warning);
269 DeactivatePaperButtons();
270 } else if (!str.empty())
271 fl_set_button(fd->push_use_geometry, 1);