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 val = fl_get_choice(fd_form_paper->choice_papersize2)-1;
94 if (val == VM_PAPER_DEFAULT)
97 allEmpty = (!strlen(fl_get_input(fd_form_paper->input_top_margin)) &&
98 !strlen(fl_get_input(fd_form_paper->input_bottom_margin)) &&
99 !strlen(fl_get_input(fd_form_paper->input_left_margin)) &&
100 !strlen(fl_get_input(fd_form_paper->input_right_margin)) &&
101 !strlen(fl_get_input(fd_form_paper->input_head_height)) &&
102 !strlen(fl_get_input(fd_form_paper->input_head_sep)) &&
103 !strlen(fl_get_input(fd_form_paper->input_foot_skip)) &&
104 !strlen(fl_get_input(fd_form_paper->input_custom_width)) &&
105 !strlen(fl_get_input(fd_form_paper->input_custom_height)));
107 fl_set_button(fd_form_paper->push_use_geometry, 1);
112 bool UpdateLayoutPaper()
115 if (!current_view->available())
119 BufferParams * params = ¤t_view->currentBuffer()->params;
121 fl_set_choice(fd_form_paper->choice_papersize2,
122 params->papersize2 + 1);
123 fl_set_choice(fd_form_paper->choice_paperpackage,
124 params->paperpackage + 1);
125 fl_set_button(fd_form_paper->push_use_geometry,
126 params->use_geometry);
127 fl_set_button(fd_form_paper->radio_portrait, 0);
128 fl_set_button(fd_form_paper->radio_landscape, 0);
129 if (params->orientation == ORIENTATION_LANDSCAPE)
130 fl_set_button(fd_form_paper->radio_landscape, 1);
132 fl_set_button(fd_form_paper->radio_portrait, 1);
134 fl_set_input(fd_form_paper->input_custom_width,
135 params->paperwidth.c_str());
136 fl_set_input(fd_form_paper->input_custom_height,
137 params->paperheight.c_str());
138 fl_set_input(fd_form_paper->input_left_margin,
139 params->leftmargin.c_str());
140 fl_set_input(fd_form_paper->input_top_margin,
141 params->topmargin.c_str());
142 fl_set_input(fd_form_paper->input_right_margin,
143 params->rightmargin.c_str());
144 fl_set_input(fd_form_paper->input_bottom_margin,
145 params->bottommargin.c_str());
146 fl_set_input(fd_form_paper->input_head_height,
147 params->headheight.c_str());
148 fl_set_input(fd_form_paper->input_head_sep,
149 params->headsep.c_str());
150 fl_set_input(fd_form_paper->input_foot_skip,
151 params->footskip.c_str());
152 fl_set_focus_object(fd_form_paper->form_paper,
153 fd_form_paper->choice_papersize2);
154 fl_hide_object(fd_form_paper->text_warning);
155 if (current_view->currentBuffer()->isReadonly()) {
156 DisablePaperLayout();
157 fl_set_object_label(fd_form_paper->text_warning,
158 _("Document is read-only."
159 " No changes to layout"
161 fl_show_object(fd_form_paper->text_warning);
165 } else if (fd_form_paper->form_paper->visible) {
166 fl_hide_form(fd_form_paper->form_paper);
172 void MenuLayoutPaper()
174 if (UpdateLayoutPaper()) {
175 if (fd_form_paper->form_paper->visible) {
176 fl_raise_form(fd_form_paper->form_paper);
178 fl_show_form(fd_form_paper->form_paper,
179 FL_PLACE_MOUSE, FL_FULLBORDER,
186 void PaperApplyCB(FL_OBJECT *, long)
188 if (! current_view->available())
191 BufferParams *params = ¤t_view->currentBuffer()->params;
193 const FD_form_paper* fd = fd_form_paper;
195 params->papersize2 = fl_get_choice(fd->choice_papersize2)-1;
196 params->paperpackage = fl_get_choice(fd->choice_paperpackage)-1;
197 params->use_geometry = fl_get_button(fd_form_paper->push_use_geometry);
198 if (fl_get_button(fd_form_paper->radio_landscape))
199 params->orientation = ORIENTATION_LANDSCAPE;
201 params->orientation = ORIENTATION_PORTRAIT;
202 params->paperwidth = fl_get_input(fd->input_custom_width);
203 params->paperheight = fl_get_input(fd->input_custom_height);
204 params->leftmargin = fl_get_input(fd->input_left_margin);
205 params->topmargin = fl_get_input(fd->input_top_margin);
206 params->rightmargin = fl_get_input(fd->input_right_margin);
207 params->bottommargin = fl_get_input(fd->input_bottom_margin);
208 params->headheight = fl_get_input(fd->input_head_height);
209 params->headsep = fl_get_input(fd->input_head_sep);
210 params->footskip = fl_get_input(fd->input_foot_skip);
211 current_view->currentBuffer()->setPaperStuff();
212 minibuffer->Set(_("Paper layout set"));
213 current_view->currentBuffer()->markDirty();
219 void PaperCancelCB(FL_OBJECT *, long)
221 fl_hide_form(fd_form_paper->form_paper);
225 void PaperOKCB(FL_OBJECT *ob, long data)
227 PaperCancelCB(ob,data);
228 PaperApplyCB(ob,data);
232 void PaperMarginsCB(FL_OBJECT *ob, long)
242 if (ob == fd->choice_papersize2) {
243 val = fl_get_choice(fd->choice_papersize2)-1;
244 if (val == VM_PAPER_DEFAULT) {
245 fl_set_button(fd->push_use_geometry, 0);
248 if ((val != VM_PAPER_USLETTER) && (val != VM_PAPER_USLEGAL) &&
249 (val != VM_PAPER_USEXECUTIVE) && (val != VM_PAPER_A4) &&
250 (val != VM_PAPER_A5) && (val != VM_PAPER_B5)) {
251 fl_set_button(fd->push_use_geometry, 1);
253 fl_set_choice(fd->choice_paperpackage, PACKAGE_NONE + 1);
255 } else if (ob == fd->choice_paperpackage) {
256 val = fl_get_choice(fd->choice_paperpackage)-1;
257 if (val != PACKAGE_NONE) {
258 fl_set_choice(fd->choice_papersize2, VM_PAPER_DEFAULT + 1);
259 fl_set_button(fd->push_use_geometry, 0);
261 } else if ((ob==fd->input_custom_width) || (ob==fd->input_custom_height) ||
262 (ob==fd->input_left_margin) || (ob==fd->input_right_margin) ||
263 (ob==fd->input_top_margin) || (ob==fd->input_bottom_margin) ||
264 (ob==fd->input_head_height) || (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);