]> git.lyx.org Git - features.git/blob - src/PaperLayout.C
Initial revision
[features.git] / src / PaperLayout.C
1 #include <config.h>
2
3 #include <stdlib.h>
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 "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 //      $Id: PaperLayout.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $       
20
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 $";
23 #endif /* lint */
24
25 /* Prototypes */
26 extern FD_form_paper *fd_form_paper;
27 extern MiniBuffer *minibuffer;
28 extern BufferView *current_view;
29
30
31 inline void DeactivatePaperButtons ()
32 {
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);
37 }
38
39
40 inline void ActivatePaperButtons ()
41 {
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);
46 }
47
48
49 inline void DisablePaperLayout()
50 {
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);
68 }
69
70
71 inline void EnablePaperLayout()
72 {
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);
90 }
91
92
93 static void checkMarginValues()
94 {
95         int allEmpty;
96     
97         fl_hide_object(fd_form_paper->text_warning);
98         ActivatePaperButtons();
99 #if 0
100         val = fl_get_choice(fd_form_paper->choice_papersize2)-1;
101         if (val == VM_PAPER_DEFAULT)
102                 return;
103 #endif
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)));
113         if (!allEmpty) {
114                 fl_set_button(fd_form_paper->push_use_geometry, 1);
115         }
116 }
117
118
119 bool UpdateLayoutPaper()
120 {
121         bool update = true;
122         if (!current_view->available())
123                 update = false;
124
125         if (update) {
126                 BufferParams * params = &current_view->currentBuffer()->params;
127
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);
138                 else
139                         fl_set_button(fd_form_paper->radio_portrait, 1);
140    
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"
167                                               " permitted."));
168                         fl_show_object(fd_form_paper->text_warning);
169                 } else {
170                         EnablePaperLayout();
171                 }
172         } else if (fd_form_paper->form_paper->visible) {
173                 fl_hide_form(fd_form_paper->form_paper);
174         }
175         return update;
176 }
177
178
179 void MenuLayoutPaper()
180 {
181         if (UpdateLayoutPaper()) {
182                 if (fd_form_paper->form_paper->visible) {
183                         fl_raise_form(fd_form_paper->form_paper);
184                 } else {
185                         fl_show_form(fd_form_paper->form_paper,
186                                      FL_PLACE_MOUSE
187                                      | FL_FREE_SIZE,FL_FULLBORDER,
188                                      _("Paper Layout"));
189                 }
190         }
191 }
192
193
194 void PaperApplyCB(FL_OBJECT *, long)
195 {
196         if (! current_view->available()) 
197                 return;
198         
199         BufferParams *params = &current_view->currentBuffer()->params;
200         
201         const FD_form_paper* fd = fd_form_paper;
202     
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;
208         else
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();
222         
223         return;
224 }
225
226
227 void PaperCancelCB(FL_OBJECT *, long)
228 {
229         fl_hide_form(fd_form_paper->form_paper);
230 }
231
232
233 void PaperOKCB(FL_OBJECT *ob, long data)
234 {
235         PaperCancelCB(ob,data);
236         PaperApplyCB(ob,data);
237 }
238
239
240 void PaperMarginsCB(FL_OBJECT *ob, long)
241 {
242         const FD_form_paper
243                 *fd = fd_form_paper;
244         LString
245                 str;
246         char
247                 val;
248     
249         checkMarginValues();
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);
254                         checkMarginValues();
255                 } else {
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);
260                         }
261                         fl_set_choice(fd->choice_paperpackage, PACKAGE_NONE + 1);
262                 }
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);
268                 }
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);
283         }
284         return;
285 }