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