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