Added support for vertical aligment (using array-package) and also better

support for setting header/footer in longtables. The Inset-Tabular-Layout
is now fully functionall!


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@889 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jürgen Vigna 2000-07-17 14:31:07 +00:00
parent 92682d84a4
commit 9e7821d35b
13 changed files with 692 additions and 247 deletions

View File

@ -1,3 +1,12 @@
2000-07-17 Juergen Vigna <jug@sad.it>
* src/tabular.C (Validate): check if array-package is needed.
(SetVAlignment): added support for vertical alignment.
(SetLTFoot): better support for longtable header/footers
(Latex): modified to support added features.
* src/LaTeXFeatures.[Ch]: added array-package.
2000-07-17 R. Lahaye <lahaye@postech.ac.kr> 2000-07-17 R. Lahaye <lahaye@postech.ac.kr>
* src/lyx_gui.C (LyXGUI): make sure that the height is large * src/lyx_gui.C (LyXGUI): make sure that the height is large

View File

@ -209,6 +209,7 @@
%%% Packages %%% Packages
\TestPackage{a4} \TestPackage{a4}
\TestPackage{a4wide} \TestPackage{a4wide}
\TestPackage{array}
\TestPackage{babel} \TestPackage{babel}
\TestPackage{color} % this one should be there if graphics.sty is there. \TestPackage{color} % this one should be there if graphics.sty is there.
\TestPackage{fancyhdr} \TestPackage{fancyhdr}

View File

@ -1056,6 +1056,21 @@ a4
Other packages Other packages
\layout Subsection \layout Subsection
array
\layout Description
Found: @chk_array@
\layout Description
CTAN:
\family typewriter
macros/latex/required/tools/array.dtx
\layout Description
Notes: The package array is needed by LyX to be able to output vertical
alignment other then ''top'' for tabulars.
\layout Subsection
algorithm algorithm
\layout Description \layout Description

View File

@ -33,6 +33,11 @@ src/frontends/xforms/FormPreferences.C
src/frontends/xforms/form_preferences.C src/frontends/xforms/form_preferences.C
src/frontends/xforms/FormPrint.C src/frontends/xforms/FormPrint.C
src/frontends/xforms/form_print.C src/frontends/xforms/form_print.C
src/frontends/xforms/forms/form_citation.C
src/frontends/xforms/forms/form_copyright.C
src/frontends/xforms/forms/form_preferences.C
src/frontends/xforms/forms/form_print.C
src/frontends/xforms/forms/form_tabular.C
src/frontends/xforms/FormTabular.C src/frontends/xforms/FormTabular.C
src/frontends/xforms/form_tabular.C src/frontends/xforms/form_tabular.C
src/gettext.h src/gettext.h

View File

@ -29,6 +29,7 @@ LaTeXFeatures::LaTeXFeatures(BufferParams const & p, int n)
: layout(n, false), params(p) : layout(n, false), params(p)
{ {
// packages // packages
array = false;
color = false; color = false;
graphics = false; graphics = false;
setspace = false; setspace = false;
@ -73,7 +74,9 @@ LaTeXFeatures::LaTeXFeatures(BufferParams const & p, int n)
} }
void LaTeXFeatures::require(string const & name) { void LaTeXFeatures::require(string const & name) {
if (name == "color") { if (name == "array") {
array = true;
} else if (name == "color") {
color = true; color = true;
} else if (name == "graphics") { } else if (name == "graphics") {
#ifdef USE_GRAPHICX #ifdef USE_GRAPHICX
@ -126,6 +129,10 @@ string LaTeXFeatures::getPackages()
LyXTextClass const & tclass = LyXTextClass const & tclass =
textclasslist.TextClass(params.textclass); textclasslist.TextClass(params.textclass);
// array-package
if (array)
packages += "\\usepackage{array}\n";
// color.sty // color.sty
if (color) { if (color) {
if (params.graphicsDriver == "default") if (params.graphicsDriver == "default")

View File

@ -55,6 +55,8 @@ struct LaTeXFeatures {
//@Man: Packages //@Man: Packages
//@{ //@{
/// ///
bool array;
///
bool color; // color.sty bool color; // color.sty
#ifdef USE_GRAPHICX #ifdef USE_GRAPHICX
/// ///

View File

@ -220,7 +220,7 @@ void FormTabular::InputCB(FL_OBJECT * ob, long l)
} }
bool FormTabular::local_update(bool flag) bool FormTabular::local_update(bool)
{ {
if (!inset_ || !inset_->tabular) if (!inset_ || !inset_->tabular)
return false; return false;
@ -249,48 +249,158 @@ bool FormTabular::local_update(bool flag)
sprintf(buf,"%d",row); sprintf(buf,"%d",row);
fl_set_input(dialog_->input_tabular_row, buf); fl_set_input(dialog_->input_tabular_row, buf);
fl_deactivate_object(dialog_->input_tabular_row); fl_deactivate_object(dialog_->input_tabular_row);
if (tabular->IsMultiColumn(cell)) if (tabular->IsMultiColumn(cell)) {
fl_set_button(cell_options_->radio_multicolumn, 1); fl_set_button(cell_options_->radio_multicolumn, 1);
else fl_set_button(cell_options_->radio_border_top,
tabular->TopLine(cell)?1:0);
fl_activate_object(cell_options_->radio_border_top);
fl_set_object_lcol(cell_options_->radio_border_top, FL_BLACK);
fl_set_button(cell_options_->radio_border_bottom,
tabular->BottomLine(cell)?1:0);
fl_activate_object(cell_options_->radio_border_bottom);
fl_set_object_lcol(cell_options_->radio_border_bottom, FL_BLACK);
fl_set_button(cell_options_->radio_border_left,
tabular->LeftLine(cell)?1:0);
fl_activate_object(cell_options_->radio_border_left);
fl_set_object_lcol(cell_options_->radio_border_left, FL_BLACK);
fl_set_button(cell_options_->radio_border_right,
tabular->RightLine(cell)?1:0);
fl_activate_object(cell_options_->radio_border_right);
fl_set_object_lcol(cell_options_->radio_border_right, FL_BLACK);
pwidth = tabular->GetMColumnPWidth(cell);
align = tabular->GetAlignment(cell);
if (!pwidth.empty() || (align == LYX_ALIGN_LEFT))
fl_set_button(cell_options_->radio_align_left, 1);
else if (align == LYX_ALIGN_RIGHT)
fl_set_button(cell_options_->radio_align_right, 1);
else
fl_set_button(cell_options_->radio_align_center, 1);
fl_activate_object(cell_options_->radio_align_left);
fl_set_object_lcol(cell_options_->radio_align_left, FL_BLACK);
fl_activate_object(cell_options_->radio_align_right);
fl_set_object_lcol(cell_options_->radio_align_right, FL_BLACK);
fl_activate_object(cell_options_->radio_align_center);
fl_set_object_lcol(cell_options_->radio_align_center, FL_BLACK);
align = tabular->GetVAlignment(cell);
fl_set_button(cell_options_->radio_valign_top, 0);
fl_set_button(cell_options_->radio_valign_bottom, 0);
fl_set_button(cell_options_->radio_valign_center, 0);
if (pwidth.empty() || (align == LyXTabular::LYX_VALIGN_CENTER))
fl_set_button(cell_options_->radio_valign_center, 1);
else if (align == LyXTabular::LYX_VALIGN_BOTTOM)
fl_set_button(cell_options_->radio_valign_bottom, 1);
else
fl_set_button(cell_options_->radio_valign_top, 1);
fl_activate_object(cell_options_->radio_valign_top);
fl_set_object_lcol(cell_options_->radio_valign_top, FL_BLACK);
fl_activate_object(cell_options_->radio_valign_bottom);
fl_set_object_lcol(cell_options_->radio_valign_bottom, FL_BLACK);
fl_activate_object(cell_options_->radio_valign_center);
fl_set_object_lcol(cell_options_->radio_valign_center, FL_BLACK);
special = tabular->GetAlignSpecial(cell,LyXTabular::SET_SPECIAL_MULTI);
fl_set_input(cell_options_->input_special_multialign, special.c_str());
fl_set_input(cell_options_->input_mcolumn_width,pwidth.c_str());
if (!lv_->buffer()->isReadonly()) {
fl_activate_object(cell_options_->input_special_multialign);
fl_set_object_lcol(cell_options_->input_special_multialign,
FL_BLACK);
fl_activate_object(cell_options_->input_mcolumn_width);
fl_set_object_lcol(cell_options_->input_mcolumn_width, FL_BLACK);
}
if (!pwidth.empty()) {
fl_deactivate_object(cell_options_->radio_align_left);
fl_deactivate_object(cell_options_->radio_align_right);
fl_deactivate_object(cell_options_->radio_align_center);
fl_set_object_lcol(cell_options_->radio_align_left, FL_INACTIVE);
fl_set_object_lcol(cell_options_->radio_align_right, FL_INACTIVE);
fl_set_object_lcol(cell_options_->radio_align_center, FL_INACTIVE);
fl_activate_object(cell_options_->radio_valign_top);
fl_activate_object(cell_options_->radio_valign_bottom);
fl_activate_object(cell_options_->radio_valign_center);
fl_set_object_lcol(cell_options_->radio_valign_top, FL_BLACK);
fl_set_object_lcol(cell_options_->radio_valign_bottom, FL_BLACK);
fl_set_object_lcol(cell_options_->radio_valign_center, FL_BLACK);
} else {
fl_activate_object(cell_options_->radio_align_left);
fl_activate_object(cell_options_->radio_align_right);
fl_activate_object(cell_options_->radio_align_center);
fl_set_object_lcol(cell_options_->radio_align_left, FL_BLACK);
fl_set_object_lcol(cell_options_->radio_align_right, FL_BLACK);
fl_set_object_lcol(cell_options_->radio_align_center, FL_BLACK);
fl_deactivate_object(cell_options_->radio_valign_top);
fl_deactivate_object(cell_options_->radio_valign_bottom);
fl_deactivate_object(cell_options_->radio_valign_center);
fl_set_object_lcol(cell_options_->radio_valign_top, FL_INACTIVE);
fl_set_object_lcol(cell_options_->radio_valign_bottom,FL_INACTIVE);
fl_set_object_lcol(cell_options_->radio_valign_center,FL_INACTIVE);
}
} else {
fl_set_button(cell_options_->radio_multicolumn, 0); fl_set_button(cell_options_->radio_multicolumn, 0);
fl_set_button(cell_options_->radio_border_top, 0);
fl_deactivate_object(cell_options_->radio_border_top);
fl_set_object_lcol(cell_options_->radio_border_top, FL_INACTIVE);
fl_set_button(cell_options_->radio_border_bottom, 0);
fl_deactivate_object(cell_options_->radio_border_bottom);
fl_set_object_lcol(cell_options_->radio_border_bottom, FL_INACTIVE);
fl_set_button(cell_options_->radio_border_left, 0);
fl_deactivate_object(cell_options_->radio_border_left);
fl_set_object_lcol(cell_options_->radio_border_left, FL_INACTIVE);
fl_set_button(cell_options_->radio_border_right, 0);
fl_deactivate_object(cell_options_->radio_border_right);
fl_set_object_lcol(cell_options_->radio_border_right, FL_INACTIVE);
fl_set_button(cell_options_->radio_align_left, 0);
fl_deactivate_object(cell_options_->radio_align_left);
fl_set_object_lcol(cell_options_->radio_align_left, FL_INACTIVE);
fl_set_button(cell_options_->radio_align_right, 0);
fl_deactivate_object(cell_options_->radio_align_right);
fl_set_object_lcol(cell_options_->radio_align_right, FL_INACTIVE);
fl_set_button(cell_options_->radio_align_center, 0);
fl_deactivate_object(cell_options_->radio_align_center);
fl_set_object_lcol(cell_options_->radio_align_center, FL_INACTIVE);
fl_set_button(cell_options_->radio_valign_top, 0);
fl_deactivate_object(cell_options_->radio_valign_top);
fl_set_object_lcol(cell_options_->radio_valign_top, FL_INACTIVE);
fl_set_button(cell_options_->radio_valign_bottom, 0);
fl_deactivate_object(cell_options_->radio_valign_bottom);
fl_set_object_lcol(cell_options_->radio_valign_bottom, FL_INACTIVE);
fl_set_button(cell_options_->radio_valign_center, 0);
fl_deactivate_object(cell_options_->radio_valign_center);
fl_set_object_lcol(cell_options_->radio_valign_center, FL_INACTIVE);
fl_set_input(cell_options_->input_special_multialign, "");
fl_deactivate_object(cell_options_->input_special_multialign);
fl_set_object_lcol(cell_options_->input_special_multialign, FL_INACTIVE);
fl_set_input(cell_options_->input_mcolumn_width,"");
fl_deactivate_object(cell_options_->input_mcolumn_width);
fl_set_object_lcol(cell_options_->input_mcolumn_width, FL_INACTIVE);
}
if (tabular->GetRotateCell(cell)) if (tabular->GetRotateCell(cell))
fl_set_button(cell_options_->radio_rotate_cell, 1); fl_set_button(cell_options_->radio_rotate_cell, 1);
else else
fl_set_button(cell_options_->radio_rotate_cell, 0); fl_set_button(cell_options_->radio_rotate_cell, 0);
if (tabular->TopLine(cell)) if (tabular->TopLine(cell, true))
fl_set_button(column_options_->radio_border_top, 1); fl_set_button(column_options_->radio_border_top, 1);
else else
fl_set_button(column_options_->radio_border_top, 0); fl_set_button(column_options_->radio_border_top, 0);
if (tabular->BottomLine(cell)) if (tabular->BottomLine(cell, true))
fl_set_button(column_options_->radio_border_bottom, 1); fl_set_button(column_options_->radio_border_bottom, 1);
else else
fl_set_button(column_options_->radio_border_bottom, 0); fl_set_button(column_options_->radio_border_bottom, 0);
if (tabular->LeftLine(cell)) if (tabular->LeftLine(cell, true))
fl_set_button(column_options_->radio_border_left, 1); fl_set_button(column_options_->radio_border_left, 1);
else else
fl_set_button(column_options_->radio_border_left, 0); fl_set_button(column_options_->radio_border_left, 0);
if (tabular->RightLine(cell)) if (tabular->RightLine(cell, true))
fl_set_button(column_options_->radio_border_right, 1); fl_set_button(column_options_->radio_border_right, 1);
else else
fl_set_button(column_options_->radio_border_right, 0); fl_set_button(column_options_->radio_border_right, 0);
align = tabular->GetAlignment(cell);
fl_set_button(column_options_->radio_align_left, 0);
fl_set_button(column_options_->radio_align_right, 0);
fl_set_button(column_options_->radio_align_center, 0);
special = tabular->GetAlignSpecial(cell,LyXTabular::SET_SPECIAL_COLUMN); special = tabular->GetAlignSpecial(cell,LyXTabular::SET_SPECIAL_COLUMN);
if (flag) fl_set_input(column_options_->input_special_alignment, special.c_str());
fl_set_input(column_options_->input_special_alignment,
special.c_str());
if (lv_->buffer()->isReadonly()) if (lv_->buffer()->isReadonly())
fl_deactivate_object(column_options_->input_special_alignment); fl_deactivate_object(column_options_->input_special_alignment);
special = tabular->GetAlignSpecial(cell,LyXTabular::SET_SPECIAL_MULTI); else
if (flag) fl_activate_object(column_options_->input_special_alignment);
fl_set_input(cell_options_->input_special_multialign, special.c_str()); pwidth = tabular->GetColumnPWidth(cell);
if (lv_->buffer()->isReadonly()) fl_set_input(column_options_->input_column_width,pwidth.c_str());
fl_deactivate_object(cell_options_->input_special_multialign);
pwidth = tabular->GetPWidth(cell);
if (flag)
fl_set_input(column_options_->input_column_width,pwidth.c_str());
if (lv_->buffer()->isReadonly()) { if (lv_->buffer()->isReadonly()) {
fl_deactivate_object(column_options_->input_column_width); fl_deactivate_object(column_options_->input_column_width);
} else { } else {
@ -306,20 +416,39 @@ bool FormTabular::local_update(bool flag)
fl_set_object_lcol(cell_options_->radio_linebreak_cell, FL_INACTIVE); fl_set_object_lcol(cell_options_->radio_linebreak_cell, FL_INACTIVE);
fl_set_button(cell_options_->radio_linebreak_cell,0); fl_set_button(cell_options_->radio_linebreak_cell,0);
} }
if ((!pwidth.empty() && !tabular->IsMultiColumn(cell)) || align = tabular->GetAlignment(cell, true);
(align == LYX_ALIGN_LEFT)) fl_set_button(column_options_->radio_align_left, 0);
fl_set_button(column_options_->radio_align_right, 0);
fl_set_button(column_options_->radio_align_center, 0);
if (!pwidth.empty() || (align == LYX_ALIGN_LEFT))
fl_set_button(column_options_->radio_align_left, 1); fl_set_button(column_options_->radio_align_left, 1);
else if (align == LYX_ALIGN_RIGHT) else if (align == LYX_ALIGN_RIGHT)
fl_set_button(column_options_->radio_align_right, 1); fl_set_button(column_options_->radio_align_right, 1);
else else
fl_set_button(column_options_->radio_align_center, 1); fl_set_button(column_options_->radio_align_center, 1);
if (!pwidth.empty() && !tabular->IsMultiColumn(cell)) { align = tabular->GetVAlignment(cell, true);
fl_set_button(column_options_->radio_valign_top, 0);
fl_set_button(column_options_->radio_valign_bottom, 0);
fl_set_button(column_options_->radio_valign_center, 0);
if (pwidth.empty() || (align == LyXTabular::LYX_VALIGN_CENTER))
fl_set_button(column_options_->radio_valign_center, 1);
else if (align == LyXTabular::LYX_VALIGN_BOTTOM)
fl_set_button(column_options_->radio_valign_bottom, 1);
else
fl_set_button(column_options_->radio_valign_top, 1);
if (!pwidth.empty()) {
fl_deactivate_object(column_options_->radio_align_left); fl_deactivate_object(column_options_->radio_align_left);
fl_deactivate_object(column_options_->radio_align_right); fl_deactivate_object(column_options_->radio_align_right);
fl_deactivate_object(column_options_->radio_align_center); fl_deactivate_object(column_options_->radio_align_center);
fl_set_object_lcol(column_options_->radio_align_left, FL_INACTIVE); fl_set_object_lcol(column_options_->radio_align_left, FL_INACTIVE);
fl_set_object_lcol(column_options_->radio_align_right, FL_INACTIVE); fl_set_object_lcol(column_options_->radio_align_right, FL_INACTIVE);
fl_set_object_lcol(column_options_->radio_align_center, FL_INACTIVE); fl_set_object_lcol(column_options_->radio_align_center, FL_INACTIVE);
fl_activate_object(column_options_->radio_valign_top);
fl_activate_object(column_options_->radio_valign_bottom);
fl_activate_object(column_options_->radio_valign_center);
fl_set_object_lcol(column_options_->radio_valign_top, FL_BLACK);
fl_set_object_lcol(column_options_->radio_valign_bottom, FL_BLACK);
fl_set_object_lcol(column_options_->radio_valign_center, FL_BLACK);
} else { } else {
fl_activate_object(column_options_->radio_align_left); fl_activate_object(column_options_->radio_align_left);
fl_activate_object(column_options_->radio_align_right); fl_activate_object(column_options_->radio_align_right);
@ -327,6 +456,12 @@ bool FormTabular::local_update(bool flag)
fl_set_object_lcol(column_options_->radio_align_left, FL_BLACK); fl_set_object_lcol(column_options_->radio_align_left, FL_BLACK);
fl_set_object_lcol(column_options_->radio_align_right, FL_BLACK); fl_set_object_lcol(column_options_->radio_align_right, FL_BLACK);
fl_set_object_lcol(column_options_->radio_align_center, FL_BLACK); fl_set_object_lcol(column_options_->radio_align_center, FL_BLACK);
fl_deactivate_object(column_options_->radio_valign_top);
fl_deactivate_object(column_options_->radio_valign_bottom);
fl_deactivate_object(column_options_->radio_valign_center);
fl_set_object_lcol(column_options_->radio_valign_top, FL_INACTIVE);
fl_set_object_lcol(column_options_->radio_valign_bottom, FL_INACTIVE);
fl_set_object_lcol(column_options_->radio_valign_center, FL_INACTIVE);
} }
fl_set_button(tabular_options_->radio_longtable, fl_set_button(tabular_options_->radio_longtable,
tabular->IsLongTabular()); tabular->IsLongTabular());
@ -341,14 +476,15 @@ bool FormTabular::local_update(bool flag)
fl_set_object_lcol(longtable_options_->radio_lt_foot, FL_BLACK); fl_set_object_lcol(longtable_options_->radio_lt_foot, FL_BLACK);
fl_set_object_lcol(longtable_options_->radio_lt_lastfoot, FL_BLACK); fl_set_object_lcol(longtable_options_->radio_lt_lastfoot, FL_BLACK);
fl_set_object_lcol(longtable_options_->radio_lt_newpage, FL_BLACK); fl_set_object_lcol(longtable_options_->radio_lt_newpage, FL_BLACK);
int dummy;
fl_set_button(longtable_options_->radio_lt_firsthead, fl_set_button(longtable_options_->radio_lt_firsthead,
tabular->GetRowOfLTFirstHead(cell)); tabular->GetRowOfLTFirstHead(cell, dummy));
fl_set_button(longtable_options_->radio_lt_head, fl_set_button(longtable_options_->radio_lt_head,
tabular->GetRowOfLTHead(cell)); tabular->GetRowOfLTHead(cell, dummy));
fl_set_button(longtable_options_->radio_lt_foot, fl_set_button(longtable_options_->radio_lt_foot,
tabular->GetRowOfLTFoot(cell)); tabular->GetRowOfLTFoot(cell, dummy));
fl_set_button(longtable_options_->radio_lt_lastfoot, fl_set_button(longtable_options_->radio_lt_lastfoot,
tabular->GetRowOfLTLastFoot(cell)); tabular->GetRowOfLTLastFoot(cell, dummy));
fl_set_button(longtable_options_->radio_lt_newpage, fl_set_button(longtable_options_->radio_lt_newpage,
tabular->GetLTNewPage(cell)); tabular->GetLTNewPage(cell));
} else { } else {
@ -416,6 +552,20 @@ void FormTabular::SetTabularOptions(FL_OBJECT * ob, long)
local_update(false); // update for alignment local_update(false); // update for alignment
return; return;
} }
if (ob == cell_options_->input_mcolumn_width) {
string
str;
str = fl_get_input(ob);
if (!str.empty() && !isValidLength(str)) {
fl_set_object_label(dialog_->text_warning,
_("Warning: Invalid Length (valid example: 10mm)"));
fl_show_object(dialog_->text_warning);
return;
}
inset_->TabularFeatures(lv_->view(), LyXTabular::SET_MPWIDTH,str);
local_update(false); // update for alignment
return;
}
str = fl_get_input(column_options_->input_column_width); str = fl_get_input(column_options_->input_column_width);
if (!str.empty() && !isValidLength(str)) { if (!str.empty() && !isValidLength(str)) {
fl_set_object_label( fl_set_object_label(
@ -450,6 +600,12 @@ void FormTabular::SetTabularOptions(FL_OBJECT * ob, long)
num = LyXTabular::ALIGN_RIGHT; num = LyXTabular::ALIGN_RIGHT;
else if (ob == column_options_->radio_align_center) else if (ob == column_options_->radio_align_center)
num = LyXTabular::ALIGN_CENTER; num = LyXTabular::ALIGN_CENTER;
else if (ob == column_options_->radio_valign_top)
num = LyXTabular::VALIGN_TOP;
else if (ob == column_options_->radio_valign_bottom)
num = LyXTabular::VALIGN_BOTTOM;
else if (ob == column_options_->radio_valign_center)
num = LyXTabular::VALIGN_CENTER;
else if (ob == cell_options_->radio_multicolumn) else if (ob == cell_options_->radio_multicolumn)
num = LyXTabular::MULTICOLUMN; num = LyXTabular::MULTICOLUMN;
else if (ob == tabular_options_->radio_longtable) { else if (ob == tabular_options_->radio_longtable) {
@ -461,14 +617,15 @@ void FormTabular::SetTabularOptions(FL_OBJECT * ob, long)
fl_activate_object(longtable_options_->radio_lt_foot); fl_activate_object(longtable_options_->radio_lt_foot);
fl_activate_object(longtable_options_->radio_lt_lastfoot); fl_activate_object(longtable_options_->radio_lt_lastfoot);
fl_activate_object(longtable_options_->radio_lt_newpage); fl_activate_object(longtable_options_->radio_lt_newpage);
int dummy;
fl_set_button(longtable_options_->radio_lt_firsthead, fl_set_button(longtable_options_->radio_lt_firsthead,
tabular->GetRowOfLTFirstHead(cell)); tabular->GetRowOfLTFirstHead(cell, dummy));
fl_set_button(longtable_options_->radio_lt_head, fl_set_button(longtable_options_->radio_lt_head,
tabular->GetRowOfLTHead(cell)); tabular->GetRowOfLTHead(cell, dummy));
fl_set_button(longtable_options_->radio_lt_foot, fl_set_button(longtable_options_->radio_lt_foot,
tabular->GetRowOfLTFoot(cell)); tabular->GetRowOfLTFoot(cell, dummy));
fl_set_button(longtable_options_->radio_lt_lastfoot, fl_set_button(longtable_options_->radio_lt_lastfoot,
tabular->GetRowOfLTLastFoot(cell)); tabular->GetRowOfLTLastFoot(cell, dummy));
fl_set_button(longtable_options_->radio_lt_firsthead, fl_set_button(longtable_options_->radio_lt_firsthead,
tabular->GetLTNewPage(cell)); tabular->GetLTNewPage(cell));
} else { } else {
@ -522,7 +679,27 @@ void FormTabular::SetTabularOptions(FL_OBJECT * ob, long)
} else if (ob == cell_options_->input_special_multialign) { } else if (ob == cell_options_->input_special_multialign) {
special = fl_get_input(cell_options_->input_special_multialign); special = fl_get_input(cell_options_->input_special_multialign);
num = LyXTabular::SET_SPECIAL_MULTI; num = LyXTabular::SET_SPECIAL_MULTI;
} else } else if (ob == cell_options_->radio_border_top)
num = LyXTabular::M_TOGGLE_LINE_TOP;
else if (ob == cell_options_->radio_border_bottom)
num = LyXTabular::M_TOGGLE_LINE_BOTTOM;
else if (ob == cell_options_->radio_border_left)
num = LyXTabular::M_TOGGLE_LINE_LEFT;
else if (ob == cell_options_->radio_border_right)
num = LyXTabular::M_TOGGLE_LINE_RIGHT;
else if (ob == cell_options_->radio_align_left)
num = LyXTabular::M_ALIGN_LEFT;
else if (ob == cell_options_->radio_align_right)
num = LyXTabular::M_ALIGN_RIGHT;
else if (ob == cell_options_->radio_align_center)
num = LyXTabular::M_ALIGN_CENTER;
else if (ob == cell_options_->radio_valign_top)
num = LyXTabular::M_VALIGN_TOP;
else if (ob == cell_options_->radio_valign_bottom)
num = LyXTabular::M_VALIGN_BOTTOM;
else if (ob == cell_options_->radio_valign_center)
num = LyXTabular::M_VALIGN_CENTER;
else
return; return;
inset_->TabularFeatures(lv_->view(), num, special); inset_->TabularFeatures(lv_->view(), num, special);

View File

@ -23,10 +23,10 @@ FD_form_tabular * FormTabular::build_tabular()
fdui->button_close = obj = fl_add_button(FL_NORMAL_BUTTON, 415, 250, 90, 30, idex(_("Close|#C")));fl_set_button_shortcut(obj, scex(_("Close|#C")), 1); fdui->button_close = obj = fl_add_button(FL_NORMAL_BUTTON, 415, 250, 90, 30, idex(_("Close|#C")));fl_set_button_shortcut(obj, scex(_("Close|#C")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularCloseCB, 0); fl_set_object_callback(obj, C_FormTabularCloseCB, 0);
fdui->input_tabular_column = obj = fl_add_input(FL_NORMAL_INPUT, 5, 250, 60, 30, ""); fdui->input_tabular_column = obj = fl_add_input(FL_NORMAL_INPUT, 64, 250, 60, 30, "");
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT); fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
fdui->input_tabular_row = obj = fl_add_input(FL_NORMAL_INPUT, 65, 250, 60, 30, ""); fdui->input_tabular_row = obj = fl_add_input(FL_NORMAL_INPUT, 5, 250, 60, 30, "");
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT); fl_set_object_lalign(obj, FL_ALIGN_TOP_LEFT);
fdui->text_warning = obj = fl_add_text(FL_NORMAL_TEXT, 125, 250, 290, 30, ""); fdui->text_warning = obj = fl_add_text(FL_NORMAL_TEXT, 125, 250, 290, 30, "");
@ -125,10 +125,10 @@ FD_form_column_options * FormTabular::build_column_options()
fdui->radio_align_left = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 205, 30, 110, 25, idex(_("Left|#e")));fl_set_button_shortcut(obj, scex(_("Left|#e")), 1); fdui->radio_align_left = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 205, 30, 110, 25, idex(_("Left|#e")));fl_set_button_shortcut(obj, scex(_("Left|#e")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_align_right = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 205, 55, 115, 25, idex(_("Right|#i")));fl_set_button_shortcut(obj, scex(_("Right|#i")), 1); fdui->radio_align_right = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 205, 80, 115, 25, idex(_("Right|#i")));fl_set_button_shortcut(obj, scex(_("Right|#i")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_align_center = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 205, 80, 115, 25, idex(_("Center|#c")));fl_set_button_shortcut(obj, scex(_("Center|#c")), 1); fdui->radio_align_center = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 205, 55, 115, 25, idex(_("Center|#c")));fl_set_button_shortcut(obj, scex(_("Center|#c")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->input_column_width = obj = fl_add_input(FL_NORMAL_INPUT, 375, 150, 95, 30, _("Width of column:")); fdui->input_column_width = obj = fl_add_input(FL_NORMAL_INPUT, 375, 150, 95, 30, _("Width of column:"));
@ -136,15 +136,6 @@ FD_form_column_options * FormTabular::build_column_options()
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
obj = fl_add_frame(FL_ENGRAVED_FRAME, 340, 20, 130, 105, ""); obj = fl_add_frame(FL_ENGRAVED_FRAME, 340, 20, 130, 105, "");
fl_set_object_color(obj, FL_COL1, FL_COL1); fl_set_object_color(obj, FL_COL1, FL_COL1);
fdui->radio_valign_top = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 345, 30, 110, 25, idex(_("Top|#p")));fl_set_button_shortcut(obj, scex(_("Top|#p")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_valign_center = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 345, 55, 115, 25, idex(_("Center|#n")));fl_set_button_shortcut(obj, scex(_("Center|#n")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_valign_bottom = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 345, 80, 115, 25, idex(_("Bottom|#o")));fl_set_button_shortcut(obj, scex(_("Bottom|#o")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0);
obj = fl_add_text(FL_NORMAL_TEXT, 345, 10, 115, 20, _("V. Alignment")); obj = fl_add_text(FL_NORMAL_TEXT, 345, 10, 115, 20, _("V. Alignment"));
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE); fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
@ -159,6 +150,15 @@ FD_form_column_options * FormTabular::build_column_options()
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE); fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
fl_set_object_lstyle(obj, FL_BOLD_STYLE); fl_set_object_lstyle(obj, FL_BOLD_STYLE);
fdui->radio_valign_top = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 345, 30, 125, 25, idex(_("Top|#p")));fl_set_button_shortcut(obj, scex(_("Top|#p")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_valign_center = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 345, 55, 125, 25, idex(_("Center|#n")));fl_set_button_shortcut(obj, scex(_("Center|#n")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_valign_bottom = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 345, 80, 120, 25, idex(_("Bottom|#o")));fl_set_button_shortcut(obj, scex(_("Bottom|#o")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fl_end_form(); fl_end_form();
fdui->form_column_options->fdui = fdui; fdui->form_column_options->fdui = fdui;
@ -175,6 +175,7 @@ FD_form_cell_options * FormTabular::build_cell_options()
fdui->form_cell_options = fl_bgn_form(FL_NO_BOX, 505, 227); fdui->form_cell_options = fl_bgn_form(FL_NO_BOX, 505, 227);
fdui->form_cell_options->u_vdata = this; fdui->form_cell_options->u_vdata = this;
obj = fl_add_box(FL_UP_BOX, 0, 0, 505, 227, ""); obj = fl_add_box(FL_UP_BOX, 0, 0, 505, 227, "");
obj = fl_add_frame(FL_ENGRAVED_FRAME, 335, 110, 155, 100, "");
obj = fl_add_frame(FL_ENGRAVED_FRAME, 10, 110, 180, 100, ""); obj = fl_add_frame(FL_ENGRAVED_FRAME, 10, 110, 180, 100, "");
fl_set_object_color(obj, FL_COL1, FL_COL1); fl_set_object_color(obj, FL_COL1, FL_COL1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
@ -188,8 +189,6 @@ FD_form_cell_options * FormTabular::build_cell_options()
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE); fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
fl_set_object_lstyle(obj, FL_BOLD_STYLE); fl_set_object_lstyle(obj, FL_BOLD_STYLE);
obj = fl_add_frame(FL_ENGRAVED_FRAME, 340, 110, 130, 100, "");
fl_set_object_color(obj, FL_COL1, FL_COL1);
obj = fl_add_text(FL_NORMAL_TEXT, 345, 100, 115, 20, _("V. Alignment")); obj = fl_add_text(FL_NORMAL_TEXT, 345, 100, 115, 20, _("V. Alignment"));
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE); fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
@ -205,17 +204,17 @@ FD_form_cell_options * FormTabular::build_cell_options()
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_rotate_cell = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 10, 75, 145, 25, _("Rotate 90°")); fdui->radio_rotate_cell = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 10, 75, 145, 25, _("Rotate 90°"));
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
obj = fl_add_frame(FL_ENGRAVED_FRAME, 165, 15, 305, 85, ""); obj = fl_add_frame(FL_ENGRAVED_FRAME, 165, 15, 325, 85, "");
fl_set_object_color(obj, FL_COL1, FL_COL1); fl_set_object_color(obj, FL_COL1, FL_COL1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fdui->input_special_multialign = obj = fl_add_input(FL_NORMAL_INPUT, 175, 30, 280, 30, ""); fdui->input_special_multialign = obj = fl_add_input(FL_NORMAL_INPUT, 175, 30, 310, 30, "");
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
obj = fl_add_text(FL_NORMAL_TEXT, 170, 5, 290, 20, _("Special Multicolumn Alignment")); obj = fl_add_text(FL_NORMAL_TEXT, 170, 5, 290, 20, _("Special Multicolumn Alignment"));
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE); fl_set_object_lalign(obj, FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
fl_set_object_lstyle(obj, FL_BOLD_STYLE); fl_set_object_lstyle(obj, FL_BOLD_STYLE);
fdui->input_mcolumn_width = obj = fl_add_input(FL_NORMAL_INPUT, 360, 65, 95, 30, _("Width of multi-column:")); fdui->input_mcolumn_width = obj = fl_add_input(FL_NORMAL_INPUT, 360, 65, 125, 30, _("Width of multi-column:"));
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_border_top = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 75, 135, 25, 25, idex(_("Top|#t")));fl_set_button_shortcut(obj, scex(_("Top|#t")), 1); fdui->radio_border_top = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 75, 135, 25, 25, idex(_("Top|#t")));fl_set_button_shortcut(obj, scex(_("Top|#t")), 1);
@ -237,19 +236,19 @@ FD_form_cell_options * FormTabular::build_cell_options()
fdui->radio_align_left = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 195, 120, 110, 25, idex(_("Left|#e")));fl_set_button_shortcut(obj, scex(_("Left|#e")), 1); fdui->radio_align_left = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 195, 120, 110, 25, idex(_("Left|#e")));fl_set_button_shortcut(obj, scex(_("Left|#e")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_align_right = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 195, 145, 115, 25, idex(_("Right|#i")));fl_set_button_shortcut(obj, scex(_("Right|#i")), 1); fdui->radio_align_right = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 195, 170, 115, 25, idex(_("Right|#i")));fl_set_button_shortcut(obj, scex(_("Right|#i")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_align_center = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 195, 170, 115, 25, idex(_("Center|#c")));fl_set_button_shortcut(obj, scex(_("Center|#c")), 1); fdui->radio_align_center = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 195, 145, 115, 25, idex(_("Center|#c")));fl_set_button_shortcut(obj, scex(_("Center|#c")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_valign_top = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 340, 120, 110, 25, idex(_("Top|#p")));fl_set_button_shortcut(obj, scex(_("Top|#p")), 1); fdui->radio_valign_top = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 345, 120, 140, 25, idex(_("Top|#p")));fl_set_button_shortcut(obj, scex(_("Top|#p")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_valign_center = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 340, 145, 115, 25, idex(_("Center|#n")));fl_set_button_shortcut(obj, scex(_("Center|#n")), 1); fdui->radio_valign_center = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 345, 145, 140, 25, idex(_("Center|#n")));fl_set_button_shortcut(obj, scex(_("Center|#n")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fdui->radio_valign_bottom = obj = fl_add_checkbutton(FL_RADIO_BUTTON, 340, 170, 115, 25, idex(_("Bottom|#o")));fl_set_button_shortcut(obj, scex(_("Bottom|#o")), 1); fdui->radio_valign_bottom = obj = fl_add_checkbutton(FL_PUSH_BUTTON, 345, 170, 140, 25, idex(_("Bottom|#o")));fl_set_button_shortcut(obj, scex(_("Bottom|#o")), 1);
fl_set_object_lsize(obj, FL_NORMAL_SIZE); fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_callback(obj, C_FormTabularInputCB, 0); fl_set_object_callback(obj, C_FormTabularInputCB, 0);
fl_end_form(); fl_end_form();

View File

@ -1,4 +1,4 @@
/** Header file generated with fdesign on Fri Jul 14 15:53:33 2000.**/ /** Header file generated with fdesign on Mon Jul 17 13:48:45 2000.**/
#ifndef FD_form_tabular_h_ #ifndef FD_form_tabular_h_
#define FD_form_tabular_h_ #define FD_form_tabular_h_
@ -52,10 +52,10 @@ struct FD_form_column_options {
FL_OBJECT *radio_align_right; FL_OBJECT *radio_align_right;
FL_OBJECT *radio_align_center; FL_OBJECT *radio_align_center;
FL_OBJECT *input_column_width; FL_OBJECT *input_column_width;
FL_OBJECT *input_special_alignment;
FL_OBJECT *radio_valign_top; FL_OBJECT *radio_valign_top;
FL_OBJECT *radio_valign_center; FL_OBJECT *radio_valign_center;
FL_OBJECT *radio_valign_bottom; FL_OBJECT *radio_valign_bottom;
FL_OBJECT *input_special_alignment;
}; };
struct FD_form_cell_options { struct FD_form_cell_options {

View File

@ -514,7 +514,7 @@ argument: 0
-------------------- --------------------
class: FL_CHECKBUTTON class: FL_CHECKBUTTON
type: RADIO_BUTTON type: RADIO_BUTTON
box: 205 55 115 25 box: 205 80 115 25
boxtype: FL_NO_BOX boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER alignment: FL_ALIGN_CENTER
@ -532,7 +532,7 @@ argument: 0
-------------------- --------------------
class: FL_CHECKBUTTON class: FL_CHECKBUTTON
type: RADIO_BUTTON type: RADIO_BUTTON
box: 205 80 115 25 box: 205 55 115 25
boxtype: FL_NO_BOX boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER alignment: FL_ALIGN_CENTER
@ -583,60 +583,6 @@ name:
callback: callback:
argument: argument:
--------------------
class: FL_CHECKBUTTON
type: RADIO_BUTTON
box: 345 30 110 25
boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER
style: FL_NORMAL_STYLE
size: FL_NORMAL_SIZE
lcol: FL_BLACK
label: Top|#p
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
name: radio_valign_top
callback: C_FormTabularInputCB
argument: 0
--------------------
class: FL_CHECKBUTTON
type: RADIO_BUTTON
box: 345 55 115 25
boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER
style: FL_NORMAL_STYLE
size: FL_NORMAL_SIZE
lcol: FL_BLACK
label: Center|#n
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
name: radio_valign_center
callback: C_FormTabularInputCB
argument: 0
--------------------
class: FL_CHECKBUTTON
type: RADIO_BUTTON
box: 345 80 115 25
boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER
style: FL_NORMAL_STYLE
size: FL_NORMAL_SIZE
lcol: FL_BLACK
label: Bottom|#o
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
name: radio_valign_bottom
callback: C_FormTabularInputCB
argument: 0
-------------------- --------------------
class: FL_TEXT class: FL_TEXT
type: NORMAL_TEXT type: NORMAL_TEXT
@ -709,6 +655,60 @@ name:
callback: callback:
argument: argument:
--------------------
class: FL_CHECKBUTTON
type: PUSH_BUTTON
box: 345 30 125 25
boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER
style: FL_NORMAL_STYLE
size: FL_NORMAL_SIZE
lcol: FL_BLACK
label: Top|#p
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
name: radio_valign_top
callback: C_FormTabularInputCB
argument: 0
--------------------
class: FL_CHECKBUTTON
type: PUSH_BUTTON
box: 345 55 125 25
boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER
style: FL_NORMAL_STYLE
size: FL_NORMAL_SIZE
lcol: FL_BLACK
label: Center|#n
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
name: radio_valign_center
callback: C_FormTabularInputCB
argument: 0
--------------------
class: FL_CHECKBUTTON
type: PUSH_BUTTON
box: 345 80 120 25
boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER
style: FL_NORMAL_STYLE
size: FL_NORMAL_SIZE
lcol: FL_BLACK
label: Bottom|#o
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
name: radio_valign_bottom
callback: C_FormTabularInputCB
argument: 0
=============== FORM =============== =============== FORM ===============
Name: form_cell_options Name: form_cell_options
Width: 505 Width: 505
@ -733,6 +733,24 @@ name:
callback: callback:
argument: argument:
--------------------
class: FL_FRAME
type: ENGRAVED_FRAME
box: 335 110 155 100
boxtype: FL_NO_BOX
colors: FL_BLACK FL_COL1
alignment: FL_ALIGN_CENTER
style: FL_NORMAL_STYLE
size: FL_DEFAULT_SIZE
lcol: FL_BLACK
label:
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
name:
callback:
argument:
-------------------- --------------------
class: FL_FRAME class: FL_FRAME
type: ENGRAVED_FRAME type: ENGRAVED_FRAME
@ -805,24 +823,6 @@ name:
callback: callback:
argument: argument:
--------------------
class: FL_FRAME
type: ENGRAVED_FRAME
box: 340 110 130 100
boxtype: FL_NO_BOX
colors: FL_COL1 FL_COL1
alignment: FL_ALIGN_CENTER
style: FL_NORMAL_STYLE
size: FL_DEFAULT_SIZE
lcol: FL_BLACK
label:
shortcut:
resize: FL_RESIZE_ALL
gravity: FL_NoGravity FL_NoGravity
name:
callback:
argument:
-------------------- --------------------
class: FL_TEXT class: FL_TEXT
type: NORMAL_TEXT type: NORMAL_TEXT
@ -934,7 +934,7 @@ argument: 0
-------------------- --------------------
class: FL_FRAME class: FL_FRAME
type: ENGRAVED_FRAME type: ENGRAVED_FRAME
box: 165 15 305 85 box: 165 15 325 85
boxtype: FL_NO_BOX boxtype: FL_NO_BOX
colors: FL_COL1 FL_COL1 colors: FL_COL1 FL_COL1
alignment: FL_ALIGN_CENTER alignment: FL_ALIGN_CENTER
@ -952,7 +952,7 @@ argument:
-------------------- --------------------
class: FL_INPUT class: FL_INPUT
type: NORMAL_INPUT type: NORMAL_INPUT
box: 175 30 280 30 box: 175 30 310 30
boxtype: FL_DOWN_BOX boxtype: FL_DOWN_BOX
colors: FL_COL1 FL_MCOL colors: FL_COL1 FL_MCOL
alignment: FL_ALIGN_LEFT alignment: FL_ALIGN_LEFT
@ -988,7 +988,7 @@ argument:
-------------------- --------------------
class: FL_INPUT class: FL_INPUT
type: NORMAL_INPUT type: NORMAL_INPUT
box: 360 65 95 30 box: 360 65 125 30
boxtype: FL_DOWN_BOX boxtype: FL_DOWN_BOX
colors: FL_COL1 FL_MCOL colors: FL_COL1 FL_MCOL
alignment: FL_ALIGN_LEFT alignment: FL_ALIGN_LEFT
@ -1096,7 +1096,7 @@ argument: 0
-------------------- --------------------
class: FL_CHECKBUTTON class: FL_CHECKBUTTON
type: RADIO_BUTTON type: RADIO_BUTTON
box: 195 145 115 25 box: 195 170 115 25
boxtype: FL_NO_BOX boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER alignment: FL_ALIGN_CENTER
@ -1114,7 +1114,7 @@ argument: 0
-------------------- --------------------
class: FL_CHECKBUTTON class: FL_CHECKBUTTON
type: RADIO_BUTTON type: RADIO_BUTTON
box: 195 170 115 25 box: 195 145 115 25
boxtype: FL_NO_BOX boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER alignment: FL_ALIGN_CENTER
@ -1131,8 +1131,8 @@ argument: 0
-------------------- --------------------
class: FL_CHECKBUTTON class: FL_CHECKBUTTON
type: RADIO_BUTTON type: PUSH_BUTTON
box: 340 120 110 25 box: 345 120 140 25
boxtype: FL_NO_BOX boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER alignment: FL_ALIGN_CENTER
@ -1149,8 +1149,8 @@ argument: 0
-------------------- --------------------
class: FL_CHECKBUTTON class: FL_CHECKBUTTON
type: RADIO_BUTTON type: PUSH_BUTTON
box: 340 145 115 25 box: 345 145 140 25
boxtype: FL_NO_BOX boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER alignment: FL_ALIGN_CENTER
@ -1167,8 +1167,8 @@ argument: 0
-------------------- --------------------
class: FL_CHECKBUTTON class: FL_CHECKBUTTON
type: RADIO_BUTTON type: PUSH_BUTTON
box: 340 170 115 25 box: 345 170 140 25
boxtype: FL_NO_BOX boxtype: FL_NO_BOX
colors: FL_COL1 FL_YELLOW colors: FL_COL1 FL_YELLOW
alignment: FL_ALIGN_CENTER alignment: FL_ALIGN_CENTER

View File

@ -1038,15 +1038,30 @@ void InsetTabular::TabularFeatures(BufferView * bv, int feature, string val)
what; what;
switch (feature) { switch (feature) {
case LyXTabular::M_ALIGN_LEFT:
case LyXTabular::ALIGN_LEFT: case LyXTabular::ALIGN_LEFT:
setAlign=LYX_ALIGN_LEFT; setAlign=LYX_ALIGN_LEFT;
break; break;
case LyXTabular::M_ALIGN_RIGHT:
case LyXTabular::ALIGN_RIGHT: case LyXTabular::ALIGN_RIGHT:
setAlign=LYX_ALIGN_RIGHT; setAlign=LYX_ALIGN_RIGHT;
break; break;
case LyXTabular::M_ALIGN_CENTER:
case LyXTabular::ALIGN_CENTER: case LyXTabular::ALIGN_CENTER:
setAlign=LYX_ALIGN_CENTER; setAlign=LYX_ALIGN_CENTER;
break; break;
case LyXTabular::M_VALIGN_TOP:
case LyXTabular::VALIGN_TOP:
setAlign=LyXTabular::LYX_VALIGN_TOP;
break;
case LyXTabular::M_VALIGN_BOTTOM:
case LyXTabular::VALIGN_BOTTOM:
setAlign=LyXTabular::LYX_VALIGN_BOTTOM;
break;
case LyXTabular::M_VALIGN_CENTER:
case LyXTabular::VALIGN_CENTER:
setAlign=LyXTabular::LYX_VALIGN_CENTER;
break;
default: default:
break; break;
} }
@ -1078,16 +1093,30 @@ void InsetTabular::TabularFeatures(BufferView * bv, int feature, string val)
int row = tabular->row_of_cell(actcell); int row = tabular->row_of_cell(actcell);
int column = tabular->column_of_cell(actcell); int column = tabular->column_of_cell(actcell);
bool flag = true;
switch (feature) { switch (feature) {
case LyXTabular::SET_PWIDTH: case LyXTabular::SET_PWIDTH:
{ {
bool update = (tabular->GetPWidth(actcell) != val); bool update = (tabular->GetColumnPWidth(actcell) != val);
tabular->SetPWidth(actcell,val); tabular->SetColumnPWidth(actcell,val);
if (update) { if (update) {
for (int i=0; i < tabular->rows(); ++i) { for (int i=0; i < tabular->rows(); ++i) {
tabular->GetCellInset(tabular->GetCellNumber(i, column))-> tabular->GetCellInset(tabular->GetCellNumber(i, column))->
deleteLyXText(bv); resizeLyXText(bv);
}
UpdateLocal(bv, INIT, true);
}
}
break;
case LyXTabular::SET_MPWIDTH:
{
bool update = (tabular->GetPWidth(actcell) != val);
tabular->SetMColumnPWidth(actcell,val);
if (update) {
for (int i=0; i < tabular->rows(); ++i) {
tabular->GetCellInset(tabular->GetCellNumber(i, column))->
resizeLyXText(bv);
} }
UpdateLocal(bv, INIT, true); UpdateLocal(bv, INIT, true);
} }
@ -1123,43 +1152,75 @@ void InsetTabular::TabularFeatures(BufferView * bv, int feature, string val)
actcell = tabular->GetCellNumber(row, column); actcell = tabular->GetCellNumber(row, column);
UpdateLocal(bv, INIT, true); UpdateLocal(bv, INIT, true);
break; break;
case LyXTabular::M_TOGGLE_LINE_TOP:
flag = false;
case LyXTabular::TOGGLE_LINE_TOP: case LyXTabular::TOGGLE_LINE_TOP:
lineSet = !tabular->TopLine(actcell); lineSet = !tabular->TopLine(actcell, flag);
for(i=sel_row_start; i<=sel_row_end; ++i) for(i=sel_row_start; i<=sel_row_end; ++i)
for(j=sel_col_start; j<=sel_col_end; ++j) for(j=sel_col_start; j<=sel_col_end; ++j)
tabular->SetTopLine(tabular->GetCellNumber(i,j),lineSet); tabular->SetTopLine(tabular->GetCellNumber(i,j),lineSet, flag);
UpdateLocal(bv, INIT, true); UpdateLocal(bv, INIT, true);
break; break;
case LyXTabular::M_TOGGLE_LINE_BOTTOM:
flag = false;
case LyXTabular::TOGGLE_LINE_BOTTOM: case LyXTabular::TOGGLE_LINE_BOTTOM:
lineSet = !tabular->BottomLine(actcell); lineSet = !tabular->BottomLine(actcell, flag);
for(i=sel_row_start; i<=sel_row_end; ++i) for(i=sel_row_start; i<=sel_row_end; ++i)
for(j=sel_col_start; j<=sel_col_end; ++j) for(j=sel_col_start; j<=sel_col_end; ++j)
tabular->SetBottomLine(tabular->GetCellNumber(i,j),lineSet); tabular->SetBottomLine(tabular->GetCellNumber(i,j),lineSet,
flag);
UpdateLocal(bv, INIT, true); UpdateLocal(bv, INIT, true);
break; break;
case LyXTabular::M_TOGGLE_LINE_LEFT:
flag = false;
case LyXTabular::TOGGLE_LINE_LEFT: case LyXTabular::TOGGLE_LINE_LEFT:
lineSet = !tabular->LeftLine(actcell); lineSet = !tabular->LeftLine(actcell, flag);
for(i=sel_row_start; i<=sel_row_end; ++i) for(i=sel_row_start; i<=sel_row_end; ++i)
for(j=sel_col_start; j<=sel_col_end; ++j) for(j=sel_col_start; j<=sel_col_end; ++j)
tabular->SetLeftLine(tabular->GetCellNumber(i,j),lineSet); tabular->SetLeftLine(tabular->GetCellNumber(i,j),lineSet,
flag);
UpdateLocal(bv, INIT, true); UpdateLocal(bv, INIT, true);
break; break;
case LyXTabular::M_TOGGLE_LINE_RIGHT:
flag = false;
case LyXTabular::TOGGLE_LINE_RIGHT: case LyXTabular::TOGGLE_LINE_RIGHT:
lineSet = !tabular->RightLine(actcell); lineSet = !tabular->RightLine(actcell, flag);
for(i=sel_row_start; i<=sel_row_end; ++i) for(i=sel_row_start; i<=sel_row_end; ++i)
for(j=sel_col_start; j<=sel_col_end; ++j) for(j=sel_col_start; j<=sel_col_end; ++j)
tabular->SetRightLine(tabular->GetCellNumber(i,j),lineSet); tabular->SetRightLine(tabular->GetCellNumber(i,j),lineSet,
flag);
UpdateLocal(bv, INIT, true); UpdateLocal(bv, INIT, true);
break; break;
case LyXTabular::M_ALIGN_LEFT:
case LyXTabular::M_ALIGN_RIGHT:
case LyXTabular::M_ALIGN_CENTER:
flag = false;
case LyXTabular::ALIGN_LEFT: case LyXTabular::ALIGN_LEFT:
case LyXTabular::ALIGN_RIGHT: case LyXTabular::ALIGN_RIGHT:
case LyXTabular::ALIGN_CENTER: case LyXTabular::ALIGN_CENTER:
for(i=sel_row_start; i<=sel_row_end; ++i) for(i=sel_row_start; i<=sel_row_end; ++i)
for(j=sel_col_start; j<=sel_col_end; ++j) for(j=sel_col_start; j<=sel_col_end; ++j)
tabular->SetAlignment(tabular->GetCellNumber(i,j),setAlign); tabular->SetAlignment(tabular->GetCellNumber(i,j),setAlign,
flag);
if (hasSelection())
UpdateLocal(bv, INIT, true);
else
UpdateLocal(bv, CELL, true);
break;
case LyXTabular::M_VALIGN_TOP:
case LyXTabular::M_VALIGN_BOTTOM:
case LyXTabular::M_VALIGN_CENTER:
flag = false;
case LyXTabular::VALIGN_TOP:
case LyXTabular::VALIGN_BOTTOM:
case LyXTabular::VALIGN_CENTER:
for(i=sel_row_start; i<=sel_row_end; ++i)
for(j=sel_col_start; j<=sel_col_end; ++j)
tabular->SetVAlignment(tabular->GetCellNumber(i,j), setAlign,
flag);
if (hasSelection()) if (hasSelection())
UpdateLocal(bv, INIT, true); UpdateLocal(bv, INIT, true);
else else

View File

@ -187,10 +187,10 @@ void LyXTabular::Init(int rows_arg, int columns_arg)
set_row_column_number_info(); set_row_column_number_info();
is_long_tabular = false; is_long_tabular = false;
rotate = 0; rotate = 0;
endhead = -1; endhead = 0;
endfirsthead = -1; endfirsthead = 0;
endfoot = -1; endfoot = 0;
endlastfoot = -1; endlastfoot = 0;
} }
@ -380,36 +380,40 @@ int LyXTabular::NumberOfCellsInRow(int cell) const
/* returns 1 if there is a topline, returns 0 if not */ /* returns 1 if there is a topline, returns 0 if not */
bool LyXTabular::TopLine(int cell) const bool LyXTabular::TopLine(int cell, bool onlycolumn) const
{ {
int row = row_of_cell(cell); int row = row_of_cell(cell);
if (IsMultiColumn(cell)) if (!onlycolumn && IsMultiColumn(cell))
return cellinfo_of_cell(cell)->top_line; return cellinfo_of_cell(cell)->top_line;
return row_info[row].top_line; return row_info[row].top_line;
} }
bool LyXTabular::BottomLine(int cell) const bool LyXTabular::BottomLine(int cell, bool onlycolumn) const
{ {
//no bottom line underneath non-existent cells if you please //no bottom line underneath non-existent cells if you please
if(cell >= numberofcells) if(cell >= numberofcells)
return false; return false;
if (IsMultiColumn(cell)) if (!onlycolumn && IsMultiColumn(cell))
return cellinfo_of_cell(cell)->bottom_line; return cellinfo_of_cell(cell)->bottom_line;
return row_info[row_of_cell(cell)].bottom_line; return row_info[row_of_cell(cell)].bottom_line;
} }
bool LyXTabular::LeftLine(int cell) const bool LyXTabular::LeftLine(int cell, bool onlycolumn) const
{ {
if (!onlycolumn && IsMultiColumn(cell))
return cellinfo_of_cell(cell)->left_line;
return column_info[column_of_cell(cell)].left_line; return column_info[column_of_cell(cell)].left_line;
} }
bool LyXTabular::RightLine(int cell) const bool LyXTabular::RightLine(int cell, bool onlycolumn) const
{ {
if (!onlycolumn && IsMultiColumn(cell))
return cellinfo_of_cell(cell)->right_line;
return column_info[right_column_of_cell(cell)].right_line; return column_info[right_column_of_cell(cell)].right_line;
} }
@ -604,38 +608,57 @@ bool LyXTabular::SetWidthOfCell(int cell, int new_width)
} }
bool LyXTabular::SetAlignment(int cell, char align) bool LyXTabular::SetAlignment(int cell, char align, bool onlycolumn)
{ {
if (!IsMultiColumn(cell)) if (!IsMultiColumn(cell) || onlycolumn)
column_info[column_of_cell(cell)].alignment = align; column_info[column_of_cell(cell)].alignment = align;
cellinfo_of_cell(cell)->alignment = align; if (!onlycolumn)
cellinfo_of_cell(cell)->alignment = align;
return true; return true;
} }
bool LyXTabular::SetPWidth(int cell, string const & width) bool LyXTabular::SetVAlignment(int cell, char align, bool onlycolumn)
{
if (!IsMultiColumn(cell) || onlycolumn)
column_info[column_of_cell(cell)].valignment = align;
if (!onlycolumn)
cellinfo_of_cell(cell)->valignment = align;
return true;
}
bool LyXTabular::SetColumnPWidth(int cell, string const & width)
{ {
bool flag = !width.empty(); bool flag = !width.empty();
if (IsMultiColumn(cell)) { int j = column_of_cell(cell);
cellinfo_of_cell(cell)->p_width = width; int c;
GetCellInset(cell)->SetAutoBreakRows(flag); column_info[j].p_width = width;
} else { if (flag) // do this only if there is a width
int j = column_of_cell(cell); SetAlignment(cell, LYX_ALIGN_LEFT);
int c; for(int i=0; i < rows_; ++i) {
column_info[j].p_width = width; c = GetCellNumber(i, j);
if (flag) // do this only if there is a width flag = !GetPWidth(c).empty(); // because of multicolumns!
SetAlignment(cell, LYX_ALIGN_LEFT); GetCellInset(c)->SetAutoBreakRows(flag);
for(int i=0; i < rows_; ++i) {
c = GetCellNumber(i, j);
flag = !GetPWidth(c).empty(); // because of multicolumns!
GetCellInset(c)->SetAutoBreakRows(flag);
}
} }
return true; return true;
} }
bool LyXTabular::SetMColumnPWidth(int cell, string const & width)
{
bool flag = !width.empty();
cellinfo_of_cell(cell)->p_width = width;
if (IsMultiColumn(cell)) {
GetCellInset(cell)->SetAutoBreakRows(flag);
return true;
}
return false;
}
bool LyXTabular::SetAlignSpecial(int cell, string const & special, int what) bool LyXTabular::SetAlignSpecial(int cell, string const & special, int what)
{ {
if (what == SET_SPECIAL_MULTI) if (what == SET_SPECIAL_MULTI)
@ -656,11 +679,11 @@ bool LyXTabular::SetAllLines(int cell, bool line)
} }
bool LyXTabular::SetTopLine(int cell, bool line) bool LyXTabular::SetTopLine(int cell, bool line, bool onlycolumn)
{ {
int row = row_of_cell(cell); int row = row_of_cell(cell);
if (!IsMultiColumn(cell)) if (onlycolumn || !IsMultiColumn(cell))
row_info[row].top_line = line; row_info[row].top_line = line;
else else
cellinfo_of_cell(cell)->top_line = line; cellinfo_of_cell(cell)->top_line = line;
@ -668,9 +691,9 @@ bool LyXTabular::SetTopLine(int cell, bool line)
} }
bool LyXTabular::SetBottomLine(int cell, bool line) bool LyXTabular::SetBottomLine(int cell, bool line, bool onlycolumn)
{ {
if (!IsMultiColumn(cell)) if (onlycolumn || !IsMultiColumn(cell))
row_info[row_of_cell(cell)].bottom_line = line; row_info[row_of_cell(cell)].bottom_line = line;
else else
cellinfo_of_cell(cell)->bottom_line = line; cellinfo_of_cell(cell)->bottom_line = line;
@ -678,29 +701,44 @@ bool LyXTabular::SetBottomLine(int cell, bool line)
} }
bool LyXTabular::SetLeftLine(int cell, bool line) bool LyXTabular::SetLeftLine(int cell, bool line, bool onlycolumn)
{ {
column_info[column_of_cell(cell)].left_line = line; if (onlycolumn || !IsMultiColumn(cell))
column_info[column_of_cell(cell)].left_line = line;
else
cellinfo_of_cell(cell)->left_line = line;
return true; return true;
} }
bool LyXTabular::SetRightLine(int cell, bool line) bool LyXTabular::SetRightLine(int cell, bool line, bool onlycolumn)
{ {
column_info[right_column_of_cell(cell)].right_line = line; if (onlycolumn || !IsMultiColumn(cell))
column_info[right_column_of_cell(cell)].right_line = line;
else
cellinfo_of_cell(cell)->right_line = line;
return true; return true;
} }
char LyXTabular::GetAlignment(int cell) const char LyXTabular::GetAlignment(int cell, bool onlycolumn) const
{ {
if (IsMultiColumn(cell)) if (!onlycolumn && IsMultiColumn(cell))
return cellinfo_of_cell(cell)->alignment; return cellinfo_of_cell(cell)->alignment;
else else
return column_info[column_of_cell(cell)].alignment; return column_info[column_of_cell(cell)].alignment;
} }
char LyXTabular::GetVAlignment(int cell, bool onlycolumn) const
{
if (!onlycolumn && IsMultiColumn(cell))
return cellinfo_of_cell(cell)->valignment;
else
return column_info[column_of_cell(cell)].valignment;
}
string LyXTabular::GetPWidth(int cell) const string LyXTabular::GetPWidth(int cell) const
{ {
if (IsMultiColumn(cell)) if (IsMultiColumn(cell))
@ -709,6 +747,20 @@ string LyXTabular::GetPWidth(int cell) const
} }
string LyXTabular::GetColumnPWidth(int cell) const
{
return column_info[column_of_cell(cell)].p_width;
}
string LyXTabular::GetMColumnPWidth(int cell) const
{
if (IsMultiColumn(cell))
return cellinfo_of_cell(cell)->p_width;
return string();
}
string LyXTabular::GetAlignSpecial(int cell, int what) const string LyXTabular::GetAlignSpecial(int cell, int what) const
{ {
if (what == SET_SPECIAL_MULTI) if (what == SET_SPECIAL_MULTI)
@ -871,6 +923,7 @@ void LyXTabular::Write(Buffer const * buf, ostream & os) const
for (j = 0; j < columns_; ++j) { for (j = 0; j < columns_; ++j) {
if (!i) { if (!i) {
os << "<Column alignment=" << column_info[j].alignment << os << "<Column alignment=" << column_info[j].alignment <<
" valignment=" << column_info[j].valignment <<
" leftline=" << column_info[j].left_line << " leftline=" << column_info[j].left_line <<
" rightline=" << column_info[j].right_line << " rightline=" << column_info[j].right_line <<
" width=\"" << VSpace(column_info[j].p_width).asLyXCommand() << " width=\"" << VSpace(column_info[j].p_width).asLyXCommand() <<
@ -881,8 +934,11 @@ void LyXTabular::Write(Buffer const * buf, ostream & os) const
} }
os << "<Cell multicolumn=" << cell_info[i][j].multicolumn << os << "<Cell multicolumn=" << cell_info[i][j].multicolumn <<
" alignment=" << cell_info[i][j].alignment << " alignment=" << cell_info[i][j].alignment <<
" valignment=" << cell_info[i][j].valignment <<
" topline=" << cell_info[i][j].top_line << " topline=" << cell_info[i][j].top_line <<
" bottomline=" << cell_info[i][j].bottom_line << " bottomline=" << cell_info[i][j].bottom_line <<
" leftline=" << cell_info[i][j].left_line <<
" rightline=" << cell_info[i][j].right_line <<
" rotate=" << cell_info[i][j].rotate << " rotate=" << cell_info[i][j].rotate <<
" linebreaks=" << cell_info[i][j].linebreaks << " linebreaks=" << cell_info[i][j].linebreaks <<
" width=\"" << cell_info[i][j].p_width << " width=\"" << cell_info[i][j].p_width <<
@ -1034,6 +1090,7 @@ void LyXTabular::Read(Buffer const * buf, LyXLex & lex)
} }
if (!i) { if (!i) {
(void)getTokenValue(line, "alignment", column_info[j].alignment); (void)getTokenValue(line, "alignment", column_info[j].alignment);
(void)getTokenValue(line, "valignment", column_info[j].valignment);
(void)getTokenValue(line, "leftline", column_info[j].left_line); (void)getTokenValue(line, "leftline", column_info[j].left_line);
(void)getTokenValue(line, "rightline", column_info[j].right_line); (void)getTokenValue(line, "rightline", column_info[j].right_line);
(void)getTokenValue(line, "width", column_info[j].p_width); (void)getTokenValue(line, "width", column_info[j].p_width);
@ -1047,8 +1104,11 @@ void LyXTabular::Read(Buffer const * buf, LyXLex & lex)
} }
(void)getTokenValue(line, "multicolumn", cell_info[i][j].multicolumn); (void)getTokenValue(line, "multicolumn", cell_info[i][j].multicolumn);
(void)getTokenValue(line, "alignment", cell_info[i][j].alignment); (void)getTokenValue(line, "alignment", cell_info[i][j].alignment);
(void)getTokenValue(line, "valignment", cell_info[i][j].valignment);
(void)getTokenValue(line, "topline", cell_info[i][j].top_line); (void)getTokenValue(line, "topline", cell_info[i][j].top_line);
(void)getTokenValue(line, "bottomline", cell_info[i][j].bottom_line); (void)getTokenValue(line, "bottomline", cell_info[i][j].bottom_line);
(void)getTokenValue(line, "leftline", cell_info[i][j].left_line);
(void)getTokenValue(line, "rightline", cell_info[i][j].right_line);
(void)getTokenValue(line, "rotate", cell_info[i][j].rotate); (void)getTokenValue(line, "rotate", cell_info[i][j].rotate);
(void)getTokenValue(line, "linebreaks", cell_info[i][j].linebreaks); (void)getTokenValue(line, "linebreaks", cell_info[i][j].linebreaks);
(void)getTokenValue(line, "width", cell_info[i][j].p_width); (void)getTokenValue(line, "width", cell_info[i][j].p_width);
@ -1636,67 +1696,73 @@ bool LyXTabular::GetLinebreaks(int cell) const
void LyXTabular::SetLTHead(int cell, bool first) void LyXTabular::SetLTHead(int cell, bool first)
{ {
int row = row_of_cell(cell); int row = row_of_cell(cell);
int val = (row+1) * (column_of_cell(cell)? 1:-1);
if (first) { if (first) {
if (row == endfirsthead) if (endfirsthead == val)
endfirsthead = -1; endfirsthead = 0;
else else
endfirsthead = row; endfirsthead = val;
} else { } else {
if (row == endhead) if (endhead == val)
endhead = -1; endhead = 0;
else else
endhead = row; endhead = val;
} }
} }
bool LyXTabular::GetRowOfLTHead(int cell) const bool LyXTabular::GetRowOfLTHead(int cell, int & row) const
{ {
if ((endhead+1) > rows_) row = endhead;
if (abs(endhead) > rows_)
return false; return false;
return (row_of_cell(cell) == endhead); return (row_of_cell(cell) == (abs(endhead)-1));
} }
bool LyXTabular::GetRowOfLTFirstHead(int cell) const bool LyXTabular::GetRowOfLTFirstHead(int cell, int & row) const
{ {
if ((endfirsthead+1) > rows_) row = endfirsthead;
if (abs(endfirsthead) > rows_)
return false; return false;
return (row_of_cell(cell) == endfirsthead); return (row_of_cell(cell) == (abs(endfirsthead)-1));
} }
void LyXTabular::SetLTFoot(int cell, bool last) void LyXTabular::SetLTFoot(int cell, bool last)
{ {
int row = row_of_cell(cell); int row = row_of_cell(cell);
int val = (row + 1) * (column_of_cell(cell)? 1:-1);
if (last) { if (last) {
if (row == endlastfoot) if (endlastfoot == val)
endlastfoot = -1; endlastfoot = 0;
else else
endlastfoot = row; endlastfoot = val;
} else { } else {
if (row == endfoot) if (endfoot == val)
endfoot = -1; endfoot = 0;
else else
endfoot = row; endfoot = val;
} }
} }
bool LyXTabular::GetRowOfLTFoot(int cell) const bool LyXTabular::GetRowOfLTFoot(int cell, int & row) const
{ {
row = endfoot;
if ((endfoot+1) > rows_) if ((endfoot+1) > rows_)
return false; return false;
return (row_of_cell(cell) == endfoot); return (row_of_cell(cell) == (abs(endfoot)-1));
} }
bool LyXTabular::GetRowOfLTLastFoot(int cell) const bool LyXTabular::GetRowOfLTLastFoot(int cell, int & row) const
{ {
if ((endlastfoot+1) > rows_) row = endlastfoot;
if (abs(endlastfoot) > rows_)
return false; return false;
return (row_of_cell(cell) == endlastfoot); return (row_of_cell(cell) == (abs(endlastfoot)-1));
} }
@ -1845,7 +1911,18 @@ int LyXTabular::TeXCellPreamble(ostream & os, int cell) const
if (LeftLine(cell)) if (LeftLine(cell))
os << '|'; os << '|';
if (!GetPWidth(cell).empty()) { if (!GetPWidth(cell).empty()) {
os << "p{" << GetPWidth(cell) << '}'; switch(GetVAlignment(cell)) {
case LYX_VALIGN_TOP:
os << "p";
break;
case LYX_VALIGN_CENTER:
os << "m";
break;
case LYX_VALIGN_BOTTOM:
os << "b";
break;
}
os << "{" << GetPWidth(cell) << '}';
} else { } else {
switch (GetAlignment(cell)) { switch (GetAlignment(cell)) {
case LYX_ALIGN_LEFT: case LYX_ALIGN_LEFT:
@ -1868,7 +1945,19 @@ int LyXTabular::TeXCellPreamble(ostream & os, int cell) const
} }
} }
if (GetLinebreaks(cell)) { if (GetLinebreaks(cell)) {
os << "\\parbox[t]{" << GetPWidth(cell) << "}{\\smallskip{}"; os << "\\parbox[";
switch(GetVAlignment(cell)) {
case LYX_VALIGN_TOP:
os << "t";
break;
case LYX_VALIGN_CENTER:
os << "c";
break;
case LYX_VALIGN_BOTTOM:
os << "b";
break;
}
os << "]{" << GetPWidth(cell) << "}{\\smallskip{}";
} }
return ret; return ret;
} }
@ -1916,7 +2005,18 @@ int LyXTabular::Latex(Buffer const * buf, ostream & os, bool fragile, bool fp) c
if (!column_info[i].align_special.empty()) { if (!column_info[i].align_special.empty()) {
os << column_info[i].align_special; os << column_info[i].align_special;
} else if (!column_info[i].p_width.empty()) { } else if (!column_info[i].p_width.empty()) {
os << "p{" switch(column_info[i].valignment) {
case LYX_VALIGN_TOP:
os << "p";
break;
case LYX_VALIGN_CENTER:
os << "m";
break;
case LYX_VALIGN_BOTTOM:
os << "b";
break;
}
os << "{"
<< column_info[i].p_width << column_info[i].p_width
<< '}'; << '}';
} else { } else {
@ -1942,8 +2042,33 @@ int LyXTabular::Latex(Buffer const * buf, ostream & os, bool fragile, bool fp) c
//+ the single row and columns (cells) + //+ the single row and columns (cells) +
//+--------------------------------------------------------------------- //+---------------------------------------------------------------------
int bret;
for(i=0; i < rows_; ++i) { for(i=0; i < rows_; ++i) {
ret += TeXTopHLine(os, i); ret += TeXTopHLine(os, i);
bret = ret;
if (IsLongTabular()) {
if ((endhead < 0) && (i == (abs(endhead)-1))) {
os << "\\endhead\n";
++ret;
}
if ((endfirsthead < 0) && (i == (abs(endfirsthead)-1))) {
os << "\\endfirsthead\n";
++ret;
}
if ((endfoot < 0) && (i == (abs(endfoot)-1))) {
os << "\\endfoot\n";
++ret;
}
if ((endlastfoot < 0) && (i == (abs(endlastfoot)-1))) {
os << "\\endlastfoot\n";
++ret;
}
}
if (ret > bret) {
if (i > 0)
ret += TeXBottomHLine(os, i-1);
ret += TeXTopHLine(os, i);
}
for(j=0; j < columns_; ++j) { for(j=0; j < columns_; ++j) {
if (IsPartOfMultiColumn(i,j)) if (IsPartOfMultiColumn(i,j))
continue; continue;
@ -1958,23 +2083,26 @@ int LyXTabular::Latex(Buffer const * buf, ostream & os, bool fragile, bool fp) c
} }
os << "\\\\" << endl; os << "\\\\" << endl;
ret += TeXBottomHLine(os, i); ret += TeXBottomHLine(os, i);
bret = ret;
if (IsLongTabular()) { if (IsLongTabular()) {
if (i == endhead) { if ((endhead > 0) && (i == (endhead-1))) {
os << "\\endhead\n"; os << "\\endhead\n";
++ret; ++ret;
} }
if (i == endfirsthead) { if ((endfirsthead > 0) && (i == (endfirsthead-1))) {
os << "\\endfirsthead\n"; os << "\\endfirsthead\n";
++ret; ++ret;
} }
if (i == endfoot) { if ((endfoot > 0) && (i == (endfoot-1))) {
os << "\\endfoot\n"; os << "\\endfoot\n";
++ret; ++ret;
} }
if (i == endlastfoot) { if ((endlastfoot > 0) && (i == (endlastfoot-1))) {
os << "\\endlastfoot\n"; os << "\\endlastfoot\n";
++ret; ++ret;
} }
if (ret > bret)
ret += TeXBottomHLine(os, i);
if (row_info[i].newpage) { if (row_info[i].newpage) {
os << "\\newpage\n"; os << "\\newpage\n";
++ret; ++ret;
@ -2010,6 +2138,9 @@ void LyXTabular::Validate(LaTeXFeatures & features) const
features.longtable = true; features.longtable = true;
if (NeedRotating()) if (NeedRotating())
features.rotating = true; features.rotating = true;
for(int cell = 0; cell < numberofcells; ++cell) for(int cell = 0; cell < numberofcells; ++cell) {
if (GetVAlignment(cell) != LYX_VALIGN_TOP)
features.array = true;
GetCellInset(cell)->Validate(features); GetCellInset(cell)->Validate(features);
}
} }

View File

@ -30,7 +30,7 @@ class Buffer;
/// ///
class LyXTabular { class LyXTabular {
public: public:
// Are the values of these enums important? (Lgb)
enum { enum {
APPEND_ROW = 0, APPEND_ROW = 0,
APPEND_COLUMN, APPEND_COLUMN,
@ -40,9 +40,22 @@ public:
TOGGLE_LINE_BOTTOM, TOGGLE_LINE_BOTTOM,
TOGGLE_LINE_LEFT, TOGGLE_LINE_LEFT,
TOGGLE_LINE_RIGHT, TOGGLE_LINE_RIGHT,
ALIGN_LEFT, // what are these alignment enums used for? ALIGN_LEFT,
ALIGN_RIGHT, ALIGN_RIGHT,
ALIGN_CENTER, ALIGN_CENTER,
VALIGN_TOP,
VALIGN_BOTTOM,
VALIGN_CENTER,
M_TOGGLE_LINE_TOP,
M_TOGGLE_LINE_BOTTOM,
M_TOGGLE_LINE_LEFT,
M_TOGGLE_LINE_RIGHT,
M_ALIGN_LEFT,
M_ALIGN_RIGHT,
M_ALIGN_CENTER,
M_VALIGN_TOP,
M_VALIGN_BOTTOM,
M_VALIGN_CENTER,
DELETE_TABULAR, DELETE_TABULAR,
MULTICOLUMN, MULTICOLUMN,
SET_ALL_LINES, SET_ALL_LINES,
@ -50,6 +63,7 @@ public:
SET_LONGTABULAR, SET_LONGTABULAR,
UNSET_LONGTABULAR, UNSET_LONGTABULAR,
SET_PWIDTH, SET_PWIDTH,
SET_MPWIDTH,
SET_ROTATE_TABULAR, SET_ROTATE_TABULAR,
UNSET_ROTATE_TABULAR, UNSET_ROTATE_TABULAR,
SET_ROTATE_CELL, SET_ROTATE_CELL,
@ -69,6 +83,17 @@ public:
CELL_BEGIN_OF_MULTICOLUMN, CELL_BEGIN_OF_MULTICOLUMN,
CELL_PART_OF_MULTICOLUMN CELL_PART_OF_MULTICOLUMN
}; };
///
enum VAlignment {
///
LYX_VALIGN_TOP = 0,
///
LYX_VALIGN_BOTTOM = 1,
///
LYX_VALIGN_CENTER = 2
};
/* konstruktor */ /* konstruktor */
/// ///
LyXTabular(InsetTabular *, int columns_arg, int rows_arg); LyXTabular(InsetTabular *, int columns_arg, int rows_arg);
@ -86,13 +111,13 @@ public:
LyXTabular * Clone(InsetTabular *); LyXTabular * Clone(InsetTabular *);
/// Returns true if there is a topline, returns false if not /// Returns true if there is a topline, returns false if not
bool TopLine(int cell) const; bool TopLine(int cell, bool onlycolumn=false) const;
/// Returns true if there is a topline, returns false if not /// Returns true if there is a topline, returns false if not
bool BottomLine(int cell) const; bool BottomLine(int cell, bool onlycolumn=false) const;
/// Returns true if there is a topline, returns false if not /// Returns true if there is a topline, returns false if not
bool LeftLine(int cell) const; bool LeftLine(int cell, bool onlycolumn=false) const;
/// Returns true if there is a topline, returns false if not /// Returns true if there is a topline, returns false if not
bool RightLine(int cell) const; bool RightLine(int cell, bool onlycolumn=false) const;
/// ///
bool TopAlreadyDrawed(int cell) const; bool TopAlreadyDrawed(int cell) const;
@ -126,24 +151,34 @@ public:
/// Returns true if a complete update is necessary, otherwise false /// Returns true if a complete update is necessary, otherwise false
bool SetAllLines(int cell, bool line); bool SetAllLines(int cell, bool line);
/// Returns true if a complete update is necessary, otherwise false /// Returns true if a complete update is necessary, otherwise false
bool SetTopLine(int cell, bool line); bool SetTopLine(int cell, bool line, bool onlycolumn=false);
/// Returns true if a complete update is necessary, otherwise false /// Returns true if a complete update is necessary, otherwise false
bool SetBottomLine(int cell, bool line); bool SetBottomLine(int cell, bool line, bool onlycolumn=false);
/// Returns true if a complete update is necessary, otherwise false /// Returns true if a complete update is necessary, otherwise false
bool SetLeftLine(int cell, bool line); bool SetLeftLine(int cell, bool line, bool onlycolumn=false);
/// Returns true if a complete update is necessary, otherwise false /// Returns true if a complete update is necessary, otherwise false
bool SetRightLine(int cell, bool line); bool SetRightLine(int cell, bool line, bool onlycolumn=false);
/// Returns true if a complete update is necessary, otherwise false /// Returns true if a complete update is necessary, otherwise false
bool SetAlignment(int cell, char align); bool SetAlignment(int cell, char align, bool onlycolumn = false);
/// Returns true if a complete update is necessary, otherwise false
bool SetVAlignment(int cell, char align, bool onlycolumn = false);
/// ///
bool SetPWidth(int cell, string const & width); bool SetColumnPWidth(int cell, string const & width);
///
bool SetMColumnPWidth(int cell, string const & width);
/// ///
bool SetAlignSpecial(int cell, string const & special, int what); bool SetAlignSpecial(int cell, string const & special, int what);
/// ///
char GetAlignment(int cell) const; // add approp. signedness char GetAlignment(int cell, bool onlycolumn = false) const;
///
char GetVAlignment(int cell, bool onlycolumn = false) const;
/// ///
string GetPWidth(int cell) const; string GetPWidth(int cell) const;
/// ///
string GetColumnPWidth(int cell) const;
///
string GetMColumnPWidth(int cell) const;
///
string GetAlignSpecial(int cell, int what) const; string GetAlignSpecial(int cell, int what) const;
/// ///
int GetWidthOfCell(int cell) const; int GetWidthOfCell(int cell) const;
@ -242,15 +277,15 @@ public:
/// ///
void SetLTHead(int cell, bool first); void SetLTHead(int cell, bool first);
/// ///
bool GetRowOfLTHead(int cell) const; bool GetRowOfLTHead(int cell, int & row) const;
/// ///
bool GetRowOfLTFirstHead(int cell) const; bool GetRowOfLTFirstHead(int cell, int & row) const;
/// ///
void SetLTFoot(int cell, bool last); void SetLTFoot(int cell, bool last);
/// ///
bool GetRowOfLTFoot(int cell) const; bool GetRowOfLTFoot(int cell, int & row) const;
/// ///
bool GetRowOfLTLastFoot(int cell) const; bool GetRowOfLTLastFoot(int cell, int & row) const;
/// ///
void SetLTNewPage(int cell, bool what); void SetLTNewPage(int cell, bool what);
/// ///
@ -284,9 +319,11 @@ private: //////////////////////////////////////////////////////////////////
/// ///
int width_of_cell; int width_of_cell;
/// ///
int multicolumn; // add approp. signedness int multicolumn;
/// ///
int alignment; // add approp. signedness int alignment;
///
int valignment;
/// ///
bool top_line; bool top_line;
/// ///
@ -336,7 +373,8 @@ private: //////////////////////////////////////////////////////////////////
/// ///
//columnstruct & operator=(columnstruct const &); //columnstruct & operator=(columnstruct const &);
/// ///
int alignment; // add approp. signedness int alignment;
int valignment;
bool left_line; bool left_line;
bool right_line; bool right_line;
int width_of_column; int width_of_column;