]> git.lyx.org Git - lyx.git/blob - src/PaperLayout.C
Remove the headers, since I added cheaders/CVS by mistake :(
[lyx.git] / src / PaperLayout.C
1 #include <config.h>
2
3 #include <cstdlib>
4
5 #include "definitions.h"
6 #include FORMS_H_LOCATION
7 #include "layout_forms.h"
8 #include "lyx_main.h"
9 #include "lyxrc.h"
10 #include "LString.h"
11 #include "support/filetools.h"
12 #include "buffer.h"
13 #include "minibuffer.h"
14 #include "vspace.h"
15 #include "lyx_gui_misc.h"
16 #include "BufferView.h"
17 #include "gettext.h"
18
19 extern FD_form_paper *fd_form_paper;
20 extern MiniBuffer *minibuffer;
21 extern BufferView *current_view;
22
23
24 inline void DeactivatePaperButtons ()
25 {
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);
30 }
31
32
33 inline void ActivatePaperButtons ()
34 {
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);
39 }
40
41
42 inline void DisablePaperLayout()
43 {
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);
61 }
62
63
64 inline void EnablePaperLayout()
65 {
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);
83 }
84
85
86 static void checkMarginValues()
87 {
88         int allEmpty;
89     
90         fl_hide_object(fd_form_paper->text_warning);
91         ActivatePaperButtons();
92 #if 0
93         val = fl_get_choice(fd_form_paper->choice_papersize2)-1;
94         if (val == VM_PAPER_DEFAULT)
95                 return;
96 #endif
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)));
106         if (!allEmpty) {
107                 fl_set_button(fd_form_paper->push_use_geometry, 1);
108         }
109 }
110
111
112 bool UpdateLayoutPaper()
113 {
114         bool update = true;
115         if (!current_view->available())
116                 update = false;
117
118         if (update) {
119                 BufferParams * params = &current_view->currentBuffer()->params;
120
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);
131                 else
132                         fl_set_button(fd_form_paper->radio_portrait, 1);
133    
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"
160                                               " permitted."));
161                         fl_show_object(fd_form_paper->text_warning);
162                 } else {
163                         EnablePaperLayout();
164                 }
165         } else if (fd_form_paper->form_paper->visible) {
166                 fl_hide_form(fd_form_paper->form_paper);
167         }
168         return update;
169 }
170
171
172 void MenuLayoutPaper()
173 {
174         if (UpdateLayoutPaper()) {
175                 if (fd_form_paper->form_paper->visible) {
176                         fl_raise_form(fd_form_paper->form_paper);
177                 } else {
178                         fl_show_form(fd_form_paper->form_paper,
179                                      FL_PLACE_MOUSE
180                                      | FL_FREE_SIZE,FL_FULLBORDER,
181                                      _("Paper Layout"));
182                 }
183         }
184 }
185
186
187 void PaperApplyCB(FL_OBJECT *, long)
188 {
189         if (! current_view->available()) 
190                 return;
191         
192         BufferParams *params = &current_view->currentBuffer()->params;
193         
194         const FD_form_paper* fd = fd_form_paper;
195     
196         params->papersize2 = fl_get_choice(fd->choice_papersize2)-1;
197         params->paperpackage = fl_get_choice(fd->choice_paperpackage)-1;
198         params->use_geometry = fl_get_button(fd_form_paper->push_use_geometry);
199         if (fl_get_button(fd_form_paper->radio_landscape))
200                 params->orientation = ORIENTATION_LANDSCAPE;
201         else
202                 params->orientation = ORIENTATION_PORTRAIT;
203         params->paperwidth = fl_get_input(fd->input_custom_width);
204         params->paperheight = fl_get_input(fd->input_custom_height);
205         params->leftmargin = fl_get_input(fd->input_left_margin);
206         params->topmargin = fl_get_input(fd->input_top_margin);
207         params->rightmargin = fl_get_input(fd->input_right_margin);
208         params->bottommargin = fl_get_input(fd->input_bottom_margin);
209         params->headheight = fl_get_input(fd->input_head_height);
210         params->headsep = fl_get_input(fd->input_head_sep);
211         params->footskip = fl_get_input(fd->input_foot_skip);
212         current_view->currentBuffer()->setPaperStuff();
213         minibuffer->Set(_("Paper layout set"));
214         current_view->currentBuffer()->markDirty();
215         
216         return;
217 }
218
219
220 void PaperCancelCB(FL_OBJECT *, long)
221 {
222         fl_hide_form(fd_form_paper->form_paper);
223 }
224
225
226 void PaperOKCB(FL_OBJECT *ob, long data)
227 {
228         PaperCancelCB(ob,data);
229         PaperApplyCB(ob,data);
230 }
231
232
233 void PaperMarginsCB(FL_OBJECT *ob, long)
234 {
235         const FD_form_paper
236                 *fd = fd_form_paper;
237         string
238                 str;
239         char
240                 val;
241     
242         checkMarginValues();
243         if (ob == fd->choice_papersize2) {
244                 val = fl_get_choice(fd->choice_papersize2)-1;
245                 if (val == VM_PAPER_DEFAULT) {
246                         fl_set_button(fd->push_use_geometry, 0);
247                         checkMarginValues();
248                 } else {
249                         if ((val != VM_PAPER_USLETTER) && (val != VM_PAPER_USLEGAL) &&
250                             (val != VM_PAPER_USEXECUTIVE) && (val != VM_PAPER_A4) &&
251                             (val != VM_PAPER_A5) && (val != VM_PAPER_B5)) {
252                                 fl_set_button(fd->push_use_geometry, 1);
253                         }
254                         fl_set_choice(fd->choice_paperpackage, PACKAGE_NONE + 1);
255                 }
256         } else if (ob == fd->choice_paperpackage) {
257                 val = fl_get_choice(fd->choice_paperpackage)-1;
258                 if (val != PACKAGE_NONE) {
259                         fl_set_choice(fd->choice_papersize2, VM_PAPER_DEFAULT + 1);
260                         fl_set_button(fd->push_use_geometry, 0);
261                 }
262         } else if ((ob==fd->input_custom_width) || (ob==fd->input_custom_height) ||
263                    (ob==fd->input_left_margin) || (ob==fd->input_right_margin) ||
264                    (ob==fd->input_top_margin) || (ob==fd->input_bottom_margin) ||
265                    (ob==fd->input_head_height) || (ob==fd->input_head_sep) ||
266                    (ob==fd->input_foot_skip)) {
267                 str = fl_get_input(ob);
268                 if (!str.empty() && !isValidLength(str)) {
269                         fl_set_object_label(fd_form_paper->text_warning,
270                                             _("Warning: Invalid Length"
271                                               " (valid example: 10mm)"));
272                         fl_show_object(fd_form_paper->text_warning);
273                         DeactivatePaperButtons();
274                 } else if (!str.empty())
275                         fl_set_button(fd->push_use_geometry, 1);
276         }
277         return;
278 }