5 #include "definitions.h"
6 #include FORMS_H_LOCATION
7 #include "layout_forms.h"
11 #include "filetools.h"
13 #include "minibuffer.h"
15 #include "lyx_gui_misc.h"
16 #include "BufferView.h"
19 // $Id: PaperLayout.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $
21 #if !defined(lint) && !defined(WITH_WARNINGS)
22 static char vcid[] = "$Id: PaperLayout.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
26 extern FD_form_paper *fd_form_paper;
27 extern MiniBuffer *minibuffer;
28 extern BufferView *current_view;
31 inline void DeactivatePaperButtons ()
33 fl_deactivate_object (fd_form_paper->button_ok);
34 fl_deactivate_object (fd_form_paper->button_apply);
35 fl_set_object_lcol (fd_form_paper->button_ok, FL_INACTIVE);
36 fl_set_object_lcol (fd_form_paper->button_apply, FL_INACTIVE);
40 inline void ActivatePaperButtons ()
42 fl_activate_object (fd_form_paper->button_ok);
43 fl_activate_object (fd_form_paper->button_apply);
44 fl_set_object_lcol (fd_form_paper->button_ok, FL_BLACK);
45 fl_set_object_lcol (fd_form_paper->button_apply, FL_BLACK);
49 inline void DisablePaperLayout()
51 DeactivatePaperButtons();
52 fl_deactivate_object (fd_form_paper->choice_paperpackage);
53 fl_deactivate_object (fd_form_paper->greoup_radio_orientation);
54 fl_deactivate_object (fd_form_paper->radio_portrait);
55 fl_deactivate_object (fd_form_paper->radio_landscape);
56 fl_deactivate_object (fd_form_paper->choice_papersize2);
57 fl_deactivate_object (fd_form_paper->push_use_geometry);
58 fl_deactivate_object (fd_form_paper->input_custom_width);
59 fl_deactivate_object (fd_form_paper->input_custom_height);
60 fl_deactivate_object (fd_form_paper->input_top_margin);
61 fl_deactivate_object (fd_form_paper->input_bottom_margin);
62 fl_deactivate_object (fd_form_paper->input_left_margin);
63 fl_deactivate_object (fd_form_paper->input_right_margin);
64 fl_deactivate_object (fd_form_paper->input_head_height);
65 fl_deactivate_object (fd_form_paper->input_head_sep);
66 fl_deactivate_object (fd_form_paper->input_foot_skip);
67 fl_deactivate_object (fd_form_paper->text_warning);
71 inline void EnablePaperLayout()
73 ActivatePaperButtons();
74 fl_activate_object (fd_form_paper->choice_paperpackage);
75 fl_activate_object (fd_form_paper->greoup_radio_orientation);
76 fl_activate_object (fd_form_paper->radio_portrait);
77 fl_activate_object (fd_form_paper->radio_landscape);
78 fl_activate_object (fd_form_paper->choice_papersize2);
79 fl_activate_object (fd_form_paper->push_use_geometry);
80 fl_activate_object (fd_form_paper->input_custom_width);
81 fl_activate_object (fd_form_paper->input_custom_height);
82 fl_activate_object (fd_form_paper->input_top_margin);
83 fl_activate_object (fd_form_paper->input_bottom_margin);
84 fl_activate_object (fd_form_paper->input_left_margin);
85 fl_activate_object (fd_form_paper->input_right_margin);
86 fl_activate_object (fd_form_paper->input_head_height);
87 fl_activate_object (fd_form_paper->input_head_sep);
88 fl_activate_object (fd_form_paper->input_foot_skip);
89 fl_activate_object (fd_form_paper->text_warning);
93 static void checkMarginValues()
97 fl_hide_object(fd_form_paper->text_warning);
98 ActivatePaperButtons();
100 val = fl_get_choice(fd_form_paper->choice_papersize2)-1;
101 if (val == VM_PAPER_DEFAULT)
104 allEmpty = (!strlen(fl_get_input(fd_form_paper->input_top_margin)) &&
105 !strlen(fl_get_input(fd_form_paper->input_bottom_margin)) &&
106 !strlen(fl_get_input(fd_form_paper->input_left_margin)) &&
107 !strlen(fl_get_input(fd_form_paper->input_right_margin)) &&
108 !strlen(fl_get_input(fd_form_paper->input_head_height)) &&
109 !strlen(fl_get_input(fd_form_paper->input_head_sep)) &&
110 !strlen(fl_get_input(fd_form_paper->input_foot_skip)) &&
111 !strlen(fl_get_input(fd_form_paper->input_custom_width)) &&
112 !strlen(fl_get_input(fd_form_paper->input_custom_height)));
114 fl_set_button(fd_form_paper->push_use_geometry, 1);
119 bool UpdateLayoutPaper()
122 if (!current_view->available())
126 BufferParams * params = ¤t_view->currentBuffer()->params;
128 fl_set_choice(fd_form_paper->choice_papersize2,
129 params->papersize2 + 1);
130 fl_set_choice(fd_form_paper->choice_paperpackage,
131 params->paperpackage + 1);
132 fl_set_button(fd_form_paper->push_use_geometry,
133 params->use_geometry);
134 fl_set_button(fd_form_paper->radio_portrait, 0);
135 fl_set_button(fd_form_paper->radio_landscape, 0);
136 if (params->orientation == ORIENTATION_LANDSCAPE)
137 fl_set_button(fd_form_paper->radio_landscape, 1);
139 fl_set_button(fd_form_paper->radio_portrait, 1);
141 fl_set_input(fd_form_paper->input_custom_width,
142 params->paperwidth.c_str());
143 fl_set_input(fd_form_paper->input_custom_height,
144 params->paperheight.c_str());
145 fl_set_input(fd_form_paper->input_left_margin,
146 params->leftmargin.c_str());
147 fl_set_input(fd_form_paper->input_top_margin,
148 params->topmargin.c_str());
149 fl_set_input(fd_form_paper->input_right_margin,
150 params->rightmargin.c_str());
151 fl_set_input(fd_form_paper->input_bottom_margin,
152 params->bottommargin.c_str());
153 fl_set_input(fd_form_paper->input_head_height,
154 params->headheight.c_str());
155 fl_set_input(fd_form_paper->input_head_sep,
156 params->headsep.c_str());
157 fl_set_input(fd_form_paper->input_foot_skip,
158 params->footskip.c_str());
159 fl_set_focus_object(fd_form_paper->form_paper,
160 fd_form_paper->choice_papersize2);
161 fl_hide_object(fd_form_paper->text_warning);
162 if (current_view->currentBuffer()->isReadonly()) {
163 DisablePaperLayout();
164 fl_set_object_label(fd_form_paper->text_warning,
165 _("Document is read-only."
166 " No changes to layout"
168 fl_show_object(fd_form_paper->text_warning);
172 } else if (fd_form_paper->form_paper->visible) {
173 fl_hide_form(fd_form_paper->form_paper);
179 void MenuLayoutPaper()
181 if (UpdateLayoutPaper()) {
182 if (fd_form_paper->form_paper->visible) {
183 fl_raise_form(fd_form_paper->form_paper);
185 fl_show_form(fd_form_paper->form_paper,
187 | FL_FREE_SIZE,FL_FULLBORDER,
194 void PaperApplyCB(FL_OBJECT *, long)
196 if (! current_view->available())
199 BufferParams *params = ¤t_view->currentBuffer()->params;
201 const FD_form_paper* fd = fd_form_paper;
203 params->papersize2 = fl_get_choice(fd->choice_papersize2)-1;
204 params->paperpackage = fl_get_choice(fd->choice_paperpackage)-1;
205 params->use_geometry = fl_get_button(fd_form_paper->push_use_geometry);
206 if (fl_get_button(fd_form_paper->radio_landscape))
207 params->orientation = ORIENTATION_LANDSCAPE;
209 params->orientation = ORIENTATION_PORTRAIT;
210 params->paperwidth = fl_get_input(fd->input_custom_width);
211 params->paperheight = fl_get_input(fd->input_custom_height);
212 params->leftmargin = fl_get_input(fd->input_left_margin);
213 params->topmargin = fl_get_input(fd->input_top_margin);
214 params->rightmargin = fl_get_input(fd->input_right_margin);
215 params->bottommargin = fl_get_input(fd->input_bottom_margin);
216 params->headheight = fl_get_input(fd->input_head_height);
217 params->headsep = fl_get_input(fd->input_head_sep);
218 params->footskip = fl_get_input(fd->input_foot_skip);
219 current_view->currentBuffer()->setPaperStuff();
220 minibuffer->Set(_("Paper layout set"));
221 current_view->currentBuffer()->markDirty();
227 void PaperCancelCB(FL_OBJECT *, long)
229 fl_hide_form(fd_form_paper->form_paper);
233 void PaperOKCB(FL_OBJECT *ob, long data)
235 PaperCancelCB(ob,data);
236 PaperApplyCB(ob,data);
240 void PaperMarginsCB(FL_OBJECT *ob, long)
250 if (ob == fd->choice_papersize2) {
251 val = fl_get_choice(fd->choice_papersize2)-1;
252 if (val == VM_PAPER_DEFAULT) {
253 fl_set_button(fd->push_use_geometry, 0);
256 if ((val != VM_PAPER_USLETTER) && (val != VM_PAPER_USLEGAL) &&
257 (val != VM_PAPER_USEXECUTIVE) && (val != VM_PAPER_A4) &&
258 (val != VM_PAPER_A5) && (val != VM_PAPER_B5)) {
259 fl_set_button(fd->push_use_geometry, 1);
261 fl_set_choice(fd->choice_paperpackage, PACKAGE_NONE + 1);
263 } else if (ob == fd->choice_paperpackage) {
264 val = fl_get_choice(fd->choice_paperpackage)-1;
265 if (val != PACKAGE_NONE) {
266 fl_set_choice(fd->choice_papersize2, VM_PAPER_DEFAULT + 1);
267 fl_set_button(fd->push_use_geometry, 0);
269 } else if ((ob==fd->input_custom_width) || (ob==fd->input_custom_height) ||
270 (ob==fd->input_left_margin) || (ob==fd->input_right_margin) ||
271 (ob==fd->input_top_margin) || (ob==fd->input_bottom_margin) ||
272 (ob==fd->input_head_height) || (ob==fd->input_head_sep) ||
273 (ob==fd->input_foot_skip)) {
274 str = fl_get_input(ob);
275 if (!str.empty() && !isValidLength(str)) {
276 fl_set_object_label(fd_form_paper->text_warning,
277 _("Warning: Invalid Length"
278 " (valid example: 10mm)"));
279 fl_show_object(fd_form_paper->text_warning);
280 DeactivatePaperButtons();
281 } else if (!str.empty())
282 fl_set_button(fd->push_use_geometry, 1);