2 * \file ControlTabular.C
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "ControlTabular.h"
14 #include "funcrequest.h"
16 #include "paragraph.h"
17 #include "insets/insettabular.h"
20 ControlTabular::ControlTabular(Dialog & parent)
21 : Dialog::Controller(parent), active_cell_(-1)
25 bool ControlTabular::initialiseParams(string const & data)
27 Buffer & buffer = kernel().buffer();
29 InsetTabular tmp(buffer);
30 int cell = InsetTabularMailer::string2params(data, tmp);
32 params_.reset(new LyXTabular(tmp.tabular));
39 void ControlTabular::clearParams()
46 int ControlTabular::getActiveCell() const
52 LyXTabular const & ControlTabular::tabular() const
54 BOOST_ASSERT(params_.get());
55 return *params_.get();
59 void ControlTabular::set(LyXTabular::Feature f, string const & arg)
61 string const data = featureAsString(f) + ' ' + arg;
62 kernel().dispatch(FuncRequest(LFUN_TABULAR_FEATURE, data));
66 bool ControlTabular::useMetricUnits() const
68 return lyxrc.default_papersize > PAPER_EXECUTIVEPAPER;
72 void ControlTabular::toggleTopLine()
74 if (tabular().isMultiColumn(getActiveCell()))
75 set(LyXTabular::M_TOGGLE_LINE_TOP);
77 set(LyXTabular::TOGGLE_LINE_TOP);
81 void ControlTabular::toggleBottomLine()
83 if (tabular().isMultiColumn(getActiveCell()))
84 set(LyXTabular::M_TOGGLE_LINE_BOTTOM);
86 set(LyXTabular::TOGGLE_LINE_BOTTOM);
90 void ControlTabular::toggleLeftLine()
92 if (tabular().isMultiColumn(getActiveCell()))
93 set(LyXTabular::M_TOGGLE_LINE_LEFT);
95 set(LyXTabular::TOGGLE_LINE_LEFT);
99 void ControlTabular::toggleRightLine()
101 if (tabular().isMultiColumn(getActiveCell()))
102 set(LyXTabular::M_TOGGLE_LINE_RIGHT);
104 set(LyXTabular::TOGGLE_LINE_RIGHT);
108 void ControlTabular::setSpecial(string const & special)
110 if (tabular().isMultiColumn(getActiveCell()))
111 set(LyXTabular::SET_SPECIAL_MULTI, special);
113 set(LyXTabular::SET_SPECIAL_COLUMN, special);
117 void ControlTabular::setWidth(string const & width)
119 if (tabular().isMultiColumn(getActiveCell()))
120 set(LyXTabular::SET_MPWIDTH, width);
122 set(LyXTabular::SET_PWIDTH, width);
124 dialog().view().update();
128 void ControlTabular::toggleMultiColumn()
130 set(LyXTabular::MULTICOLUMN);
131 dialog().view().update();
135 void ControlTabular::rotateTabular(bool yes)
138 set(LyXTabular::SET_ROTATE_TABULAR);
140 set(LyXTabular::UNSET_ROTATE_TABULAR);
144 void ControlTabular::rotateCell(bool yes)
147 set(LyXTabular::SET_ROTATE_CELL);
149 set(LyXTabular::UNSET_ROTATE_CELL);
153 void ControlTabular::halign(ControlTabular::HALIGN h)
155 LyXTabular::Feature num = LyXTabular::ALIGN_LEFT;
156 LyXTabular::Feature multi_num = LyXTabular::M_ALIGN_LEFT;
160 num = LyXTabular::ALIGN_LEFT;
161 multi_num = LyXTabular::M_ALIGN_LEFT;
164 num = LyXTabular::ALIGN_CENTER;
165 multi_num = LyXTabular::M_ALIGN_CENTER;
168 num = LyXTabular::ALIGN_RIGHT;
169 multi_num = LyXTabular::M_ALIGN_RIGHT;
172 num = LyXTabular::ALIGN_BLOCK;
173 //multi_num: no equivalent
177 if (tabular().isMultiColumn(getActiveCell()))
184 void ControlTabular::valign(ControlTabular::VALIGN v)
186 LyXTabular::Feature num = LyXTabular::VALIGN_MIDDLE;
187 LyXTabular::Feature multi_num = LyXTabular::M_VALIGN_MIDDLE;
191 num = LyXTabular::VALIGN_TOP;
192 multi_num = LyXTabular::M_VALIGN_TOP;
195 num = LyXTabular::VALIGN_MIDDLE;
196 multi_num = LyXTabular::M_VALIGN_MIDDLE;
199 num = LyXTabular::VALIGN_BOTTOM;
200 multi_num = LyXTabular::M_VALIGN_BOTTOM;
204 if (tabular().isMultiColumn(getActiveCell()))
211 void ControlTabular::longTabular(bool yes)
214 set(LyXTabular::SET_LONGTABULAR);
216 set(LyXTabular::UNSET_LONGTABULAR);