3 * \file ControlTabular.C
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS
14 #include "ControlTabular.h"
15 #include "funcrequest.h"
17 #include "insets/insettabular.h"
18 #include "support/LAssert.h"
20 using namespace lyx::support;
23 ControlTabular::ControlTabular(Dialog & parent)
24 : Dialog::Controller(parent), active_cell_(-1)
28 bool ControlTabular::initialiseParams(string const & data)
30 Buffer * buffer = kernel().buffer();
34 InsetTabular tmp(*buffer);
35 int cell = InsetTabularMailer::string2params(data, tmp);
37 params_.reset(new LyXTabular(tmp.tabular));
44 void ControlTabular::clearParams()
51 int ControlTabular::getActiveCell() const
57 LyXTabular const & ControlTabular::tabular() const
59 Assert(params_.get());
60 return *params_.get();
64 void ControlTabular::set(LyXTabular::Feature f, string const & arg)
66 string const data = featureAsString(f) + ' ' + arg;
67 kernel().dispatch(FuncRequest(LFUN_TABULAR_FEATURE, data));
71 bool ControlTabular::useMetricUnits() const
73 return lyxrc.default_papersize > BufferParams::PAPER_EXECUTIVEPAPER;
77 void ControlTabular::toggleTopLine()
79 if (tabular().isMultiColumn(getActiveCell()))
80 set(LyXTabular::M_TOGGLE_LINE_TOP);
82 set(LyXTabular::TOGGLE_LINE_TOP);
86 void ControlTabular::toggleBottomLine()
88 if (tabular().isMultiColumn(getActiveCell()))
89 set(LyXTabular::M_TOGGLE_LINE_BOTTOM);
91 set(LyXTabular::TOGGLE_LINE_BOTTOM);
95 void ControlTabular::toggleLeftLine()
97 if (tabular().isMultiColumn(getActiveCell()))
98 set(LyXTabular::M_TOGGLE_LINE_LEFT);
100 set(LyXTabular::TOGGLE_LINE_LEFT);
104 void ControlTabular::toggleRightLine()
106 if (tabular().isMultiColumn(getActiveCell()))
107 set(LyXTabular::M_TOGGLE_LINE_RIGHT);
109 set(LyXTabular::TOGGLE_LINE_RIGHT);
113 void ControlTabular::setSpecial(string const & special)
115 if (tabular().isMultiColumn(getActiveCell()))
116 set(LyXTabular::SET_SPECIAL_MULTI, special);
118 set(LyXTabular::SET_SPECIAL_COLUMN, special);
122 void ControlTabular::setWidth(string const & width)
124 if (tabular().isMultiColumn(getActiveCell()))
125 set(LyXTabular::SET_MPWIDTH, width);
127 set(LyXTabular::SET_PWIDTH, width);
129 dialog().view().update();
133 void ControlTabular::toggleMultiColumn()
135 set(LyXTabular::MULTICOLUMN);
136 dialog().view().update();
140 void ControlTabular::rotateTabular(bool yes)
143 set(LyXTabular::SET_ROTATE_TABULAR);
145 set(LyXTabular::UNSET_ROTATE_TABULAR);
149 void ControlTabular::rotateCell(bool yes)
152 set(LyXTabular::SET_ROTATE_CELL);
154 set(LyXTabular::UNSET_ROTATE_CELL);
158 void ControlTabular::halign(ControlTabular::HALIGN h)
160 LyXTabular::Feature num = LyXTabular::ALIGN_LEFT;
161 LyXTabular::Feature multi_num = LyXTabular::M_ALIGN_LEFT;
165 num = LyXTabular::ALIGN_LEFT;
166 multi_num = LyXTabular::M_ALIGN_LEFT;
169 num = LyXTabular::ALIGN_CENTER;
170 multi_num = LyXTabular::M_ALIGN_CENTER;
173 num = LyXTabular::ALIGN_RIGHT;
174 multi_num = LyXTabular::M_ALIGN_RIGHT;
177 num = LyXTabular::ALIGN_BLOCK;
178 //multi_num: no equivalent
182 if (tabular().isMultiColumn(getActiveCell()))
189 void ControlTabular::valign(ControlTabular::VALIGN v)
191 LyXTabular::Feature num = LyXTabular::VALIGN_CENTER;
192 LyXTabular::Feature multi_num = LyXTabular::M_VALIGN_CENTER;
196 num = LyXTabular::VALIGN_TOP;
197 multi_num = LyXTabular::M_VALIGN_TOP;
200 num = LyXTabular::VALIGN_CENTER;
201 multi_num = LyXTabular::M_VALIGN_CENTER;
204 num = LyXTabular::VALIGN_BOTTOM;
205 multi_num = LyXTabular::M_VALIGN_BOTTOM;
209 if (tabular().isMultiColumn(getActiveCell()))
216 void ControlTabular::longTabular(bool yes)
219 set(LyXTabular::SET_LONGTABULAR);
221 set(LyXTabular::UNSET_LONGTABULAR);