]> git.lyx.org Git - lyx.git/blob - src/PaperLayout.C
white-space changes, removed definitions.h several enum changes because of this,...
[lyx.git] / src / PaperLayout.C
1 #include <config.h>
2
3 #include <cstdlib>
4
5 #include FORMS_H_LOCATION
6 #include "layout_forms.h"
7 #include "lyx_main.h"
8 #include "lyxrc.h"
9 #include "LString.h"
10 #include "support/filetools.h"
11 #include "buffer.h"
12 #include "minibuffer.h"
13 #include "vspace.h"
14 #include "lyx_gui_misc.h"
15 #include "BufferView.h"
16 #include "gettext.h"
17
18 extern FD_form_paper * fd_form_paper;
19 extern MiniBuffer * minibuffer;
20 extern BufferView * current_view;
21
22
23 inline void DeactivatePaperButtons ()
24 {
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);
29 }
30
31
32 inline void ActivatePaperButtons ()
33 {
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);
38 }
39
40
41 inline void DisablePaperLayout()
42 {
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);
60 }
61
62
63 inline void EnablePaperLayout()
64 {
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);
82 }
83
84
85 static void checkMarginValues()
86 {
87         int allEmpty;
88     
89         fl_hide_object(fd_form_paper->text_warning);
90         ActivatePaperButtons();
91
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)));
101         if (!allEmpty) {
102                 fl_set_button(fd_form_paper->push_use_geometry, 1);
103         }
104 }
105
106
107 bool UpdateLayoutPaper()
108 {
109         bool update = true;
110         if (!current_view->available())
111                 update = false;
112
113         if (update) {
114                 BufferParams * params = &current_view->buffer()->params;
115
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);
126                 else
127                         fl_set_button(fd_form_paper->radio_portrait, 1);
128    
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"
155                                               " permitted."));
156                         fl_show_object(fd_form_paper->text_warning);
157                 } else {
158                         EnablePaperLayout();
159                 }
160         } else if (fd_form_paper->form_paper->visible) {
161                 fl_hide_form(fd_form_paper->form_paper);
162         }
163         return update;
164 }
165
166
167 void MenuLayoutPaper()
168 {
169         if (UpdateLayoutPaper()) {
170                 if (fd_form_paper->form_paper->visible) {
171                         fl_raise_form(fd_form_paper->form_paper);
172                 } else {
173                         fl_show_form(fd_form_paper->form_paper,
174                                      FL_PLACE_MOUSE, FL_FULLBORDER,
175                                      _("Paper Layout"));
176                 }
177         }
178 }
179
180
181 void PaperApplyCB(FL_OBJECT *, long)
182 {
183         if (! current_view->available()) 
184                 return;
185         
186         BufferParams * params = &current_view->buffer()->params;
187         
188         FD_form_paper const * fd = fd_form_paper;
189     
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;
195         else
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         minibuffer->Set(_("Paper layout set"));
208         current_view->buffer()->markDirty();
209         
210         return;
211 }
212
213
214 void PaperCancelCB(FL_OBJECT *, long)
215 {
216         fl_hide_form(fd_form_paper->form_paper);
217 }
218
219
220 void PaperOKCB(FL_OBJECT * ob, long data)
221 {
222         PaperCancelCB(ob, data);
223         PaperApplyCB(ob, data);
224 }
225
226
227 void PaperMarginsCB(FL_OBJECT * ob, long)
228 {
229         FD_form_paper const * fd = fd_form_paper;
230         string str;
231         char val;
232     
233         checkMarginValues();
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);
238                         checkMarginValues();
239                 } else {
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);
247                         }
248                         fl_set_choice(fd->choice_paperpackage, BufferParams::PACKAGE_NONE + 1);
249                 }
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);
256                 }
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);
275         }
276         return;
277 }