]> git.lyx.org Git - lyx.git/blob - src/frontends/xforms/FormTabular.C
some formatting changes some simplifications and removal of dead code
[lyx.git] / src / frontends / xforms / FormTabular.C
1 // -*- C++ -*-
2 /* This file is part of
3  * ======================================================
4  * 
5  *           LyX, The Document Processor
6  *       
7  *          Copyright 1995 Matthias Ettrich
8  *          Copyright 1995-2000 The LyX Team.
9  *
10  *======================================================*/
11 /* FormTabular.C
12  * FormTabular Interface Class Implementation
13  */
14
15 #include <config.h>
16
17 #include "FormTabular.h"
18 #include "form_tabular.h"
19 #include "LyXView.h"
20 #include "Dialogs.h"
21 #include "insets/insettabular.h"
22 #include "buffer.h"
23
24
25 FormTabular::FormTabular(LyXView * lv, Dialogs * d)
26         : FormInset( lv, d, _("Tabular Layout") ),
27           dialog_(0), tabular_options_(0), column_options_(0),
28           cell_options_(0), longtable_options_(0),
29           inset_(0), actCell_(-1)
30 {
31         // let the dialog be shown
32         // This is a permanent connection so we won't bother
33         // storing a copy because we won't be disconnecting.
34         d->showTabular.connect(slot(this, &FormTabular::showInset));
35         d->updateTabular.connect(slot(this, &FormTabular::updateInset));
36 }
37
38
39 FormTabular::~FormTabular()
40 {
41         delete dialog_;
42         delete tabular_options_;
43         delete column_options_;
44         delete cell_options_;
45         delete longtable_options_;
46 }
47
48
49 FL_FORM * FormTabular::form() const
50 {
51         if (dialog_ ) return dialog_->form;
52         return 0;
53 }
54
55
56 void FormTabular::disconnect()
57 {
58         inset_ = 0;
59         FormInset::disconnect();
60 }
61
62
63 void FormTabular::showInset( InsetTabular * inset )
64 {
65         if (inset == 0) return;
66
67         // If connected to another inset, disconnect from it.
68         if (inset_ != inset) {
69                 ih_.disconnect();
70                 ih_ = inset->hideDialog.connect(slot(this, &FormTabular::hide));
71                 inset_ = inset;
72         }
73
74         show();
75 }
76
77
78 void FormTabular::updateInset( InsetTabular * inset )
79 {
80         if (inset == 0 || inset_ == 0) return;
81
82         // If connected to another inset, disconnect from it.
83         if (inset_ != inset) {
84                 ih_.disconnect();
85                 ih_ = inset->hideDialog.connect(slot(this, &FormTabular::hide));
86                 inset_ = inset;
87         }
88
89         update();
90 }
91
92
93 void FormTabular::build()
94 {
95         dialog_ = build_tabular();
96         tabular_options_ = build_tabular_options();
97         column_options_ = build_column_options();
98         cell_options_ = build_cell_options();
99         longtable_options_ = build_longtable_options();
100
101         // Workaround dumb xforms sizing bug
102         minw_ = form()->w;
103         minh_ = form()->h;
104
105         fl_set_input_return(column_options_->input_column_width,
106                             FL_RETURN_END);
107         fl_set_input_return(column_options_->input_special_alignment,
108                             FL_RETURN_CHANGED);
109         fl_set_input_return(cell_options_->input_mcolumn_width,
110                             FL_RETURN_CHANGED);
111         fl_set_input_return(cell_options_->input_special_multialign,
112                             FL_RETURN_CHANGED);
113
114         fl_addto_tabfolder(dialog_->tabFolder, _("Tabular"),
115                            tabular_options_->form);
116         fl_addto_tabfolder(dialog_->tabFolder, _("Column/Row"),
117                            column_options_->form);
118         fl_addto_tabfolder(dialog_->tabFolder, _("Cell"),
119                            cell_options_->form);
120         fl_addto_tabfolder(dialog_->tabFolder, _("LongTable"),
121                            longtable_options_->form);
122 }
123
124
125 void FormTabular::update()
126 {
127         if (!inset_ || !inset_->tabular)
128                 return;
129
130         LyXTabular
131                 * tabular = inset_->tabular;
132         int
133                 align,
134                 cell,
135                 column,row;
136         char
137                 buf[12];
138         string
139                 pwidth, special;
140
141         actCell_ = cell = inset_->GetActCell();
142         column = tabular->column_of_cell(cell)+1;
143         fl_set_object_label(dialog_->text_warning,"");
144         fl_activate_object(column_options_->input_special_alignment);
145         fl_activate_object(cell_options_->input_special_multialign);
146         fl_activate_object(column_options_->input_column_width);
147         sprintf(buf,"%d",column);
148         fl_set_input(dialog_->input_tabular_column, buf);
149         fl_deactivate_object(dialog_->input_tabular_column);
150         row = tabular->row_of_cell(cell)+1;
151         sprintf(buf,"%d",row);
152         fl_set_input(dialog_->input_tabular_row, buf);
153         fl_deactivate_object(dialog_->input_tabular_row);
154         if (tabular->IsMultiColumn(cell)) {
155                 fl_set_button(cell_options_->radio_multicolumn, 1);
156                 fl_set_button(cell_options_->radio_border_top,
157                               tabular->TopLine(cell)?1:0);
158                 fl_activate_object(cell_options_->radio_border_top);
159                 fl_set_object_lcol(cell_options_->radio_border_top, FL_BLACK);
160                 fl_set_button(cell_options_->radio_border_bottom,
161                               tabular->BottomLine(cell)?1:0);
162                 fl_activate_object(cell_options_->radio_border_bottom);
163                 fl_set_object_lcol(cell_options_->radio_border_bottom, FL_BLACK);
164                 fl_set_button(cell_options_->radio_border_left,
165                               tabular->LeftLine(cell)?1:0);
166                 fl_activate_object(cell_options_->radio_border_left);
167                 fl_set_object_lcol(cell_options_->radio_border_left, FL_BLACK);
168                 fl_set_button(cell_options_->radio_border_right,
169                               tabular->RightLine(cell)?1:0);
170                 fl_activate_object(cell_options_->radio_border_right);
171                 fl_set_object_lcol(cell_options_->radio_border_right, FL_BLACK);
172                 pwidth = tabular->GetMColumnPWidth(cell);
173                 align = tabular->GetAlignment(cell);
174                 if (!pwidth.empty() || (align == LYX_ALIGN_LEFT))
175                         fl_set_button(cell_options_->radio_align_left, 1);
176                 else if (align == LYX_ALIGN_RIGHT)
177                         fl_set_button(cell_options_->radio_align_right, 1);
178                 else
179                         fl_set_button(cell_options_->radio_align_center, 1);
180                 fl_activate_object(cell_options_->radio_align_left);
181                 fl_set_object_lcol(cell_options_->radio_align_left, FL_BLACK);
182                 fl_activate_object(cell_options_->radio_align_right);
183                 fl_set_object_lcol(cell_options_->radio_align_right, FL_BLACK);
184                 fl_activate_object(cell_options_->radio_align_center);
185                 fl_set_object_lcol(cell_options_->radio_align_center, FL_BLACK);
186                 align = tabular->GetVAlignment(cell);
187                 fl_set_button(cell_options_->radio_valign_top, 0);
188                 fl_set_button(cell_options_->radio_valign_bottom, 0);
189                 fl_set_button(cell_options_->radio_valign_center, 0);
190                 if (pwidth.empty() || (align == LyXTabular::LYX_VALIGN_CENTER))
191                         fl_set_button(cell_options_->radio_valign_center, 1);
192                 else if (align == LyXTabular::LYX_VALIGN_BOTTOM)
193                         fl_set_button(cell_options_->radio_valign_bottom, 1);
194                 else
195                         fl_set_button(cell_options_->radio_valign_top, 1);
196                 fl_activate_object(cell_options_->radio_valign_top);
197                 fl_set_object_lcol(cell_options_->radio_valign_top, FL_BLACK);
198                 fl_activate_object(cell_options_->radio_valign_bottom);
199                 fl_set_object_lcol(cell_options_->radio_valign_bottom, FL_BLACK);
200                 fl_activate_object(cell_options_->radio_valign_center);
201                 fl_set_object_lcol(cell_options_->radio_valign_center, FL_BLACK);
202                 special = tabular->GetAlignSpecial(cell,LyXTabular::SET_SPECIAL_MULTI);
203                 fl_set_input(cell_options_->input_special_multialign, special.c_str());
204                 fl_set_input(cell_options_->input_mcolumn_width,pwidth.c_str());
205                 if (!lv_->buffer()->isReadonly()) {
206                         fl_activate_object(cell_options_->input_special_multialign);
207                         fl_set_object_lcol(cell_options_->input_special_multialign,
208                                            FL_BLACK);
209                         fl_activate_object(cell_options_->input_mcolumn_width);
210                         fl_set_object_lcol(cell_options_->input_mcolumn_width, FL_BLACK);
211                 }
212                 if (!pwidth.empty()) {
213                         fl_deactivate_object(cell_options_->radio_align_left);
214                         fl_deactivate_object(cell_options_->radio_align_right);
215                         fl_deactivate_object(cell_options_->radio_align_center);
216                         fl_set_object_lcol(cell_options_->radio_align_left, FL_INACTIVE);
217                         fl_set_object_lcol(cell_options_->radio_align_right, FL_INACTIVE);
218                         fl_set_object_lcol(cell_options_->radio_align_center, FL_INACTIVE);
219                         fl_activate_object(cell_options_->radio_valign_top);
220                         fl_activate_object(cell_options_->radio_valign_bottom);
221                         fl_activate_object(cell_options_->radio_valign_center);
222                         fl_set_object_lcol(cell_options_->radio_valign_top, FL_BLACK);
223                         fl_set_object_lcol(cell_options_->radio_valign_bottom, FL_BLACK);
224                         fl_set_object_lcol(cell_options_->radio_valign_center, FL_BLACK);
225                 } else {
226                         fl_activate_object(cell_options_->radio_align_left);
227                         fl_activate_object(cell_options_->radio_align_right);
228                         fl_activate_object(cell_options_->radio_align_center);
229                         fl_set_object_lcol(cell_options_->radio_align_left, FL_BLACK);
230                         fl_set_object_lcol(cell_options_->radio_align_right, FL_BLACK);
231                         fl_set_object_lcol(cell_options_->radio_align_center, FL_BLACK);
232                         fl_deactivate_object(cell_options_->radio_valign_top);
233                         fl_deactivate_object(cell_options_->radio_valign_bottom);
234                         fl_deactivate_object(cell_options_->radio_valign_center);
235                         fl_set_object_lcol(cell_options_->radio_valign_top, FL_INACTIVE);
236                         fl_set_object_lcol(cell_options_->radio_valign_bottom,FL_INACTIVE);
237                         fl_set_object_lcol(cell_options_->radio_valign_center,FL_INACTIVE);
238                 }
239         } else {
240                 fl_set_button(cell_options_->radio_multicolumn, 0);
241                 fl_set_button(cell_options_->radio_border_top, 0);
242                 fl_deactivate_object(cell_options_->radio_border_top);
243                 fl_set_object_lcol(cell_options_->radio_border_top, FL_INACTIVE);
244                 fl_set_button(cell_options_->radio_border_bottom, 0);
245                 fl_deactivate_object(cell_options_->radio_border_bottom);
246                 fl_set_object_lcol(cell_options_->radio_border_bottom, FL_INACTIVE);
247                 fl_set_button(cell_options_->radio_border_left, 0);
248                 fl_deactivate_object(cell_options_->radio_border_left);
249                 fl_set_object_lcol(cell_options_->radio_border_left, FL_INACTIVE);
250                 fl_set_button(cell_options_->radio_border_right, 0);
251                 fl_deactivate_object(cell_options_->radio_border_right);
252                 fl_set_object_lcol(cell_options_->radio_border_right, FL_INACTIVE);
253                 fl_set_button(cell_options_->radio_align_left, 0);
254                 fl_deactivate_object(cell_options_->radio_align_left);
255                 fl_set_object_lcol(cell_options_->radio_align_left, FL_INACTIVE);
256                 fl_set_button(cell_options_->radio_align_right, 0);
257                 fl_deactivate_object(cell_options_->radio_align_right);
258                 fl_set_object_lcol(cell_options_->radio_align_right, FL_INACTIVE);
259                 fl_set_button(cell_options_->radio_align_center, 0);
260                 fl_deactivate_object(cell_options_->radio_align_center);
261                 fl_set_object_lcol(cell_options_->radio_align_center, FL_INACTIVE);
262                 fl_set_button(cell_options_->radio_valign_top, 0);
263                 fl_deactivate_object(cell_options_->radio_valign_top);
264                 fl_set_object_lcol(cell_options_->radio_valign_top, FL_INACTIVE);
265                 fl_set_button(cell_options_->radio_valign_bottom, 0);
266                 fl_deactivate_object(cell_options_->radio_valign_bottom);
267                 fl_set_object_lcol(cell_options_->radio_valign_bottom, FL_INACTIVE);
268                 fl_set_button(cell_options_->radio_valign_center, 0);
269                 fl_deactivate_object(cell_options_->radio_valign_center);
270                 fl_set_object_lcol(cell_options_->radio_valign_center, FL_INACTIVE);
271                 fl_set_input(cell_options_->input_special_multialign, "");
272                 fl_deactivate_object(cell_options_->input_special_multialign);
273                 fl_set_object_lcol(cell_options_->input_special_multialign, FL_INACTIVE);
274                 fl_set_input(cell_options_->input_mcolumn_width,"");
275                 fl_deactivate_object(cell_options_->input_mcolumn_width);
276                 fl_set_object_lcol(cell_options_->input_mcolumn_width, FL_INACTIVE);
277         }
278         if (tabular->GetRotateCell(cell))
279                 fl_set_button(cell_options_->radio_rotate_cell, 1);
280         else
281                 fl_set_button(cell_options_->radio_rotate_cell, 0);
282         if (tabular->TopLine(cell, true))
283                 fl_set_button(column_options_->radio_border_top, 1);
284         else
285                 fl_set_button(column_options_->radio_border_top, 0);
286         if (tabular->BottomLine(cell, true))
287                 fl_set_button(column_options_->radio_border_bottom, 1);
288         else
289                 fl_set_button(column_options_->radio_border_bottom, 0);
290         if (tabular->LeftLine(cell, true))
291                 fl_set_button(column_options_->radio_border_left, 1);
292         else
293                 fl_set_button(column_options_->radio_border_left, 0);
294         if (tabular->RightLine(cell, true))
295                 fl_set_button(column_options_->radio_border_right, 1);
296         else
297                 fl_set_button(column_options_->radio_border_right, 0);
298         special = tabular->GetAlignSpecial(cell,LyXTabular::SET_SPECIAL_COLUMN);
299         fl_set_input(column_options_->input_special_alignment, special.c_str());
300         if (lv_->buffer()->isReadonly()) 
301                 fl_deactivate_object(column_options_->input_special_alignment);
302         else
303                 fl_activate_object(column_options_->input_special_alignment);
304         pwidth = tabular->GetColumnPWidth(cell);
305         fl_set_input(column_options_->input_column_width,pwidth.c_str());
306         if (lv_->buffer()->isReadonly()) {
307                 fl_deactivate_object(column_options_->input_column_width);
308         } else {
309                 fl_activate_object(column_options_->input_column_width);
310         }
311         if (!pwidth.empty()) {
312                 fl_activate_object(cell_options_->radio_useminipage);
313                 fl_set_object_lcol(cell_options_->radio_useminipage, FL_BLACK);
314                 if (tabular->GetUsebox(cell) == 2)
315                         fl_set_button(cell_options_->radio_useminipage, 1);
316                 else
317                         fl_set_button(cell_options_->radio_useminipage, 0);
318         } else {
319                 fl_deactivate_object(cell_options_->radio_useminipage);
320                 fl_set_object_lcol(cell_options_->radio_useminipage, FL_INACTIVE);
321                 fl_set_button(cell_options_->radio_useminipage,0);
322         }
323         align = tabular->GetAlignment(cell, true);
324         fl_set_button(column_options_->radio_align_left, 0);
325         fl_set_button(column_options_->radio_align_right, 0);
326         fl_set_button(column_options_->radio_align_center, 0);
327         if (!pwidth.empty() || (align == LYX_ALIGN_LEFT))
328                 fl_set_button(column_options_->radio_align_left, 1);
329         else if (align == LYX_ALIGN_RIGHT)
330                 fl_set_button(column_options_->radio_align_right, 1);
331         else
332                 fl_set_button(column_options_->radio_align_center, 1);
333         align = tabular->GetVAlignment(cell, true);
334         fl_set_button(column_options_->radio_valign_top, 0);
335         fl_set_button(column_options_->radio_valign_bottom, 0);
336         fl_set_button(column_options_->radio_valign_center, 0);
337         if (pwidth.empty() || (align == LyXTabular::LYX_VALIGN_CENTER))
338                 fl_set_button(column_options_->radio_valign_center, 1);
339         else if (align == LyXTabular::LYX_VALIGN_BOTTOM)
340                 fl_set_button(column_options_->radio_valign_bottom, 1);
341         else
342                 fl_set_button(column_options_->radio_valign_top, 1);
343         if (!pwidth.empty()) {
344                 fl_deactivate_object(column_options_->radio_align_left);
345                 fl_deactivate_object(column_options_->radio_align_right);
346                 fl_deactivate_object(column_options_->radio_align_center);
347                 fl_set_object_lcol(column_options_->radio_align_left, FL_INACTIVE);
348                 fl_set_object_lcol(column_options_->radio_align_right, FL_INACTIVE);
349                 fl_set_object_lcol(column_options_->radio_align_center, FL_INACTIVE);
350                 fl_activate_object(column_options_->radio_valign_top);
351                 fl_activate_object(column_options_->radio_valign_bottom);
352                 fl_activate_object(column_options_->radio_valign_center);
353                 fl_set_object_lcol(column_options_->radio_valign_top, FL_BLACK);
354                 fl_set_object_lcol(column_options_->radio_valign_bottom, FL_BLACK);
355                 fl_set_object_lcol(column_options_->radio_valign_center, FL_BLACK);
356         } else {
357                 fl_activate_object(column_options_->radio_align_left);
358                 fl_activate_object(column_options_->radio_align_right);
359                 fl_activate_object(column_options_->radio_align_center);
360                 fl_set_object_lcol(column_options_->radio_align_left, FL_BLACK);
361                 fl_set_object_lcol(column_options_->radio_align_right, FL_BLACK);
362                 fl_set_object_lcol(column_options_->radio_align_center, FL_BLACK);
363                 fl_deactivate_object(column_options_->radio_valign_top);
364                 fl_deactivate_object(column_options_->radio_valign_bottom);
365                 fl_deactivate_object(column_options_->radio_valign_center);
366                 fl_set_object_lcol(column_options_->radio_valign_top, FL_INACTIVE);
367                 fl_set_object_lcol(column_options_->radio_valign_bottom, FL_INACTIVE);
368                 fl_set_object_lcol(column_options_->radio_valign_center, FL_INACTIVE);
369         }
370         fl_set_button(tabular_options_->radio_longtable,
371                       tabular->IsLongTabular());
372         if (tabular->IsLongTabular()) {
373                 fl_activate_object(longtable_options_->radio_lt_firsthead);
374                 fl_activate_object(longtable_options_->radio_lt_head);
375                 fl_activate_object(longtable_options_->radio_lt_foot);
376                 fl_activate_object(longtable_options_->radio_lt_lastfoot);
377                 fl_activate_object(longtable_options_->radio_lt_newpage);
378                 fl_set_object_lcol(longtable_options_->radio_lt_firsthead, FL_BLACK);
379                 fl_set_object_lcol(longtable_options_->radio_lt_head, FL_BLACK);
380                 fl_set_object_lcol(longtable_options_->radio_lt_foot, FL_BLACK);
381                 fl_set_object_lcol(longtable_options_->radio_lt_lastfoot, FL_BLACK);
382                 fl_set_object_lcol(longtable_options_->radio_lt_newpage, FL_BLACK);
383                 int dummy;
384                 fl_set_button(longtable_options_->radio_lt_firsthead,
385                               tabular->GetRowOfLTFirstHead(cell, dummy));
386                 fl_set_button(longtable_options_->radio_lt_head,
387                               tabular->GetRowOfLTHead(cell, dummy));
388                 fl_set_button(longtable_options_->radio_lt_foot,
389                               tabular->GetRowOfLTFoot(cell, dummy));
390                 fl_set_button(longtable_options_->radio_lt_lastfoot,
391                               tabular->GetRowOfLTLastFoot(cell, dummy));
392                 fl_set_button(longtable_options_->radio_lt_newpage,
393                               tabular->GetLTNewPage(cell));
394         } else {
395                 fl_deactivate_object(longtable_options_->radio_lt_firsthead);
396                 fl_deactivate_object(longtable_options_->radio_lt_head);
397                 fl_deactivate_object(longtable_options_->radio_lt_foot);
398                 fl_deactivate_object(longtable_options_->radio_lt_lastfoot);
399                 fl_deactivate_object(longtable_options_->radio_lt_newpage);
400                 fl_set_button(longtable_options_->radio_lt_firsthead,0);
401                 fl_set_button(longtable_options_->radio_lt_head,0);
402                 fl_set_button(longtable_options_->radio_lt_foot,0);
403                 fl_set_button(longtable_options_->radio_lt_lastfoot,0);
404                 fl_set_button(longtable_options_->radio_lt_newpage,0);
405                 fl_set_object_lcol(longtable_options_->radio_lt_firsthead,FL_INACTIVE);
406                 fl_set_object_lcol(longtable_options_->radio_lt_head, FL_INACTIVE);
407                 fl_set_object_lcol(longtable_options_->radio_lt_foot, FL_INACTIVE);
408                 fl_set_object_lcol(longtable_options_->radio_lt_lastfoot, FL_INACTIVE);
409                 fl_set_object_lcol(longtable_options_->radio_lt_newpage, FL_INACTIVE);
410         }
411         fl_set_button(tabular_options_->radio_rotate_tabular,
412                       tabular->GetRotateTabular());
413 }
414
415 bool FormTabular::input(FL_OBJECT * ob, long)
416 {
417     if (!inset_)
418         return false;
419
420     LyXTabular
421         * tabular = inset_->tabular;
422     int
423         cell,
424         s;
425     LyXTabular::Feature
426         num = LyXTabular::LAST_ACTION;
427     string
428         special,
429         str;
430
431     cell = inset_->GetActCell();
432     if (actCell_ != cell) {
433         update();
434         fl_set_object_label(dialog_->text_warning,
435                      _("Warning: Wrong Cursor position, updated window"));
436         fl_show_object(dialog_->text_warning);
437         return false;
438     }
439     // No point in processing directives that you can't do anything with
440     // anyhow, so exit now if the buffer is read-only.
441     if (lv_->buffer()->isReadonly()) {
442       update();
443       return false;
444     }
445     if (ob == column_options_->input_column_width) {
446         string
447             str;
448         str = fl_get_input(ob);
449         if (!str.empty() && !isValidLength(str)) {
450             fl_set_object_label(dialog_->text_warning,
451                  _("Warning: Invalid Length (valid example: 10mm)"));
452             fl_show_object(dialog_->text_warning);
453             return false;
454         }
455         inset_->TabularFeatures(lv_->view(), LyXTabular::SET_PWIDTH,str);
456         update(); // update for alignment
457         return true;
458     }
459     if (ob == cell_options_->input_mcolumn_width) {
460         string
461             str;
462         str = fl_get_input(ob);
463         if (!str.empty() && !isValidLength(str)) {
464             fl_set_object_label(dialog_->text_warning,
465                  _("Warning: Invalid Length (valid example: 10mm)"));
466             fl_show_object(dialog_->text_warning);
467             return false;
468         }
469         inset_->TabularFeatures(lv_->view(), LyXTabular::SET_MPWIDTH,str);
470         update(); // update for alignment
471         return true;
472     }
473     str = fl_get_input(column_options_->input_column_width);
474     if (!str.empty() && !isValidLength(str)) {
475         fl_set_object_label(
476             dialog_->text_warning,
477             _("Warning: Invalid Length (valid example: 10mm)"));
478         fl_show_object(dialog_->text_warning);
479         return false;
480     }
481     if (ob == tabular_options_->button_append_row)
482         num = LyXTabular::APPEND_ROW;
483     else if (ob == tabular_options_->button_append_column)
484         num = LyXTabular::APPEND_COLUMN;
485     else if (ob == tabular_options_->button_delete_row)
486         num = LyXTabular::DELETE_ROW;
487     else if (ob == tabular_options_->button_delete_column)
488         num = LyXTabular::DELETE_COLUMN;
489     else if (ob == tabular_options_->button_set_borders)
490         num = LyXTabular::SET_ALL_LINES;
491     else if (ob == tabular_options_->button_unset_borders)
492         num = LyXTabular::UNSET_ALL_LINES;
493     else if (ob == column_options_->radio_border_top)
494         num = LyXTabular::TOGGLE_LINE_TOP;
495     else if (ob == column_options_->radio_border_bottom)
496         num = LyXTabular::TOGGLE_LINE_BOTTOM;
497     else if (ob == column_options_->radio_border_left)
498         num = LyXTabular::TOGGLE_LINE_LEFT;
499     else if (ob == column_options_->radio_border_right)
500         num = LyXTabular::TOGGLE_LINE_RIGHT;
501     else if (ob == column_options_->radio_align_left)
502         num = LyXTabular::ALIGN_LEFT;
503     else if (ob == column_options_->radio_align_right)
504         num = LyXTabular::ALIGN_RIGHT;
505     else if (ob == column_options_->radio_align_center)
506         num = LyXTabular::ALIGN_CENTER;
507     else if (ob == column_options_->radio_valign_top)
508         num = LyXTabular::VALIGN_TOP;
509     else if (ob == column_options_->radio_valign_bottom)
510         num = LyXTabular::VALIGN_BOTTOM;
511     else if (ob == column_options_->radio_valign_center)
512         num = LyXTabular::VALIGN_CENTER;
513     else if (ob == cell_options_->radio_multicolumn)
514         num = LyXTabular::MULTICOLUMN;
515     else if (ob == tabular_options_->radio_longtable) {
516         s=fl_get_button(tabular_options_->radio_longtable);
517         if (s) {
518             num = LyXTabular::SET_LONGTABULAR;
519             fl_activate_object(longtable_options_->radio_lt_firsthead);
520             fl_activate_object(longtable_options_->radio_lt_head);
521             fl_activate_object(longtable_options_->radio_lt_foot);
522             fl_activate_object(longtable_options_->radio_lt_lastfoot);
523             fl_activate_object(longtable_options_->radio_lt_newpage);
524             int dummy;
525             fl_set_button(longtable_options_->radio_lt_firsthead,
526                           tabular->GetRowOfLTFirstHead(cell, dummy));
527             fl_set_button(longtable_options_->radio_lt_head,
528                           tabular->GetRowOfLTHead(cell, dummy));
529             fl_set_button(longtable_options_->radio_lt_foot,
530                           tabular->GetRowOfLTFoot(cell, dummy));
531             fl_set_button(longtable_options_->radio_lt_lastfoot,
532                           tabular->GetRowOfLTLastFoot(cell, dummy));
533             fl_set_button(longtable_options_->radio_lt_firsthead,
534                           tabular->GetLTNewPage(cell));
535         } else {
536             num = LyXTabular::UNSET_LONGTABULAR;
537             fl_deactivate_object(longtable_options_->radio_lt_firsthead);
538             fl_deactivate_object(longtable_options_->radio_lt_head);
539             fl_deactivate_object(longtable_options_->radio_lt_foot);
540             fl_deactivate_object(longtable_options_->radio_lt_lastfoot);
541             fl_deactivate_object(longtable_options_->radio_lt_newpage);
542             fl_set_button(longtable_options_->radio_lt_firsthead,0);
543             fl_set_button(longtable_options_->radio_lt_head,0);
544             fl_set_button(longtable_options_->radio_lt_foot,0);
545             fl_set_button(longtable_options_->radio_lt_lastfoot,0);
546             fl_set_button(longtable_options_->radio_lt_newpage,0);
547             fl_set_object_lcol(longtable_options_->radio_lt_firsthead,
548                                FL_INACTIVE);
549             fl_set_object_lcol(longtable_options_->radio_lt_head, FL_INACTIVE);
550             fl_set_object_lcol(longtable_options_->radio_lt_foot, FL_INACTIVE);
551             fl_set_object_lcol(longtable_options_->radio_lt_lastfoot,
552                                FL_INACTIVE);
553             fl_set_object_lcol(longtable_options_->radio_lt_newpage,
554                                FL_INACTIVE);
555         }
556     } else if (ob == tabular_options_->radio_rotate_tabular) {
557         s=fl_get_button(tabular_options_->radio_rotate_tabular);
558         if (s)
559             num = LyXTabular::SET_ROTATE_TABULAR;
560         else
561             num = LyXTabular::UNSET_ROTATE_TABULAR;
562     } else if (ob == cell_options_->radio_rotate_cell) {
563         s=fl_get_button(cell_options_->radio_rotate_cell);
564         if (s)
565             num = LyXTabular::SET_ROTATE_CELL;
566         else
567             num = LyXTabular::UNSET_ROTATE_CELL;
568     } else if (ob == cell_options_->radio_useminipage) {
569         num = LyXTabular::SET_USEBOX;
570         special = "2";
571     } else if (ob == longtable_options_->radio_lt_firsthead) {
572         num = LyXTabular::SET_LTFIRSTHEAD;
573     } else if (ob == longtable_options_->radio_lt_head) {
574         num = LyXTabular::SET_LTHEAD;
575     } else if (ob == longtable_options_->radio_lt_foot) {
576         num = LyXTabular::SET_LTFOOT;
577     } else if (ob == longtable_options_->radio_lt_lastfoot) {
578         num = LyXTabular::SET_LTLASTFOOT;
579     } else if (ob == longtable_options_->radio_lt_newpage) {
580         num = LyXTabular::SET_LTNEWPAGE;
581     } else if (ob == column_options_->input_special_alignment) {
582         special = fl_get_input(column_options_->input_special_alignment);
583         num = LyXTabular::SET_SPECIAL_COLUMN;
584     } else if (ob == cell_options_->input_special_multialign) {
585         special = fl_get_input(cell_options_->input_special_multialign);
586         num = LyXTabular::SET_SPECIAL_MULTI;
587     } else if (ob == cell_options_->radio_border_top)
588         num = LyXTabular::M_TOGGLE_LINE_TOP;
589     else if (ob == cell_options_->radio_border_bottom)
590         num = LyXTabular::M_TOGGLE_LINE_BOTTOM;
591     else if (ob == cell_options_->radio_border_left)
592         num = LyXTabular::M_TOGGLE_LINE_LEFT;
593     else if (ob == cell_options_->radio_border_right)
594         num = LyXTabular::M_TOGGLE_LINE_RIGHT;
595     else if (ob == cell_options_->radio_align_left)
596         num = LyXTabular::M_ALIGN_LEFT;
597     else if (ob == cell_options_->radio_align_right)
598         num = LyXTabular::M_ALIGN_RIGHT;
599     else if (ob == cell_options_->radio_align_center)
600         num = LyXTabular::M_ALIGN_CENTER;
601     else if (ob == cell_options_->radio_valign_top)
602         num = LyXTabular::M_VALIGN_TOP;
603     else if (ob == cell_options_->radio_valign_bottom)
604         num = LyXTabular::M_VALIGN_BOTTOM;
605     else if (ob == cell_options_->radio_valign_center)
606         num = LyXTabular::M_VALIGN_CENTER;
607     else
608         return false;
609     
610     inset_->TabularFeatures(lv_->view(), num, special);
611     update();
612
613     return true;
614 }