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 "insets/insettabular.h"
17 #include "support/LAssert.h"
19 using namespace lyx::support;
22 ControlTabular::ControlTabular(Dialog & parent)
23 : Dialog::Controller(parent), active_cell_(-1)
27 bool ControlTabular::initialiseParams(string const & data)
29 Buffer & buffer = kernel().buffer();
31 InsetTabular tmp(buffer);
32 int cell = InsetTabularMailer::string2params(data, tmp);
34 params_.reset(new LyXTabular(tmp.tabular));
41 void ControlTabular::clearParams()
48 int ControlTabular::getActiveCell() const
54 LyXTabular const & ControlTabular::tabular() const
56 Assert(params_.get());
57 return *params_.get();
61 void ControlTabular::set(LyXTabular::Feature f, string const & arg)
63 string const data = featureAsString(f) + ' ' + arg;
64 kernel().dispatch(FuncRequest(LFUN_TABULAR_FEATURE, data));
68 bool ControlTabular::useMetricUnits() const
70 return lyxrc.default_papersize > PAPER_EXECUTIVEPAPER;
74 void ControlTabular::toggleTopLine()
76 if (tabular().isMultiColumn(getActiveCell()))
77 set(LyXTabular::M_TOGGLE_LINE_TOP);
79 set(LyXTabular::TOGGLE_LINE_TOP);
83 void ControlTabular::toggleBottomLine()
85 if (tabular().isMultiColumn(getActiveCell()))
86 set(LyXTabular::M_TOGGLE_LINE_BOTTOM);
88 set(LyXTabular::TOGGLE_LINE_BOTTOM);
92 void ControlTabular::toggleLeftLine()
94 if (tabular().isMultiColumn(getActiveCell()))
95 set(LyXTabular::M_TOGGLE_LINE_LEFT);
97 set(LyXTabular::TOGGLE_LINE_LEFT);
101 void ControlTabular::toggleRightLine()
103 if (tabular().isMultiColumn(getActiveCell()))
104 set(LyXTabular::M_TOGGLE_LINE_RIGHT);
106 set(LyXTabular::TOGGLE_LINE_RIGHT);
110 void ControlTabular::setSpecial(string const & special)
112 if (tabular().isMultiColumn(getActiveCell()))
113 set(LyXTabular::SET_SPECIAL_MULTI, special);
115 set(LyXTabular::SET_SPECIAL_COLUMN, special);
119 void ControlTabular::setWidth(string const & width)
121 if (tabular().isMultiColumn(getActiveCell()))
122 set(LyXTabular::SET_MPWIDTH, width);
124 set(LyXTabular::SET_PWIDTH, width);
126 dialog().view().update();
130 void ControlTabular::toggleMultiColumn()
132 set(LyXTabular::MULTICOLUMN);
133 dialog().view().update();
137 void ControlTabular::rotateTabular(bool yes)
140 set(LyXTabular::SET_ROTATE_TABULAR);
142 set(LyXTabular::UNSET_ROTATE_TABULAR);
146 void ControlTabular::rotateCell(bool yes)
149 set(LyXTabular::SET_ROTATE_CELL);
151 set(LyXTabular::UNSET_ROTATE_CELL);
155 void ControlTabular::halign(ControlTabular::HALIGN h)
157 LyXTabular::Feature num = LyXTabular::ALIGN_LEFT;
158 LyXTabular::Feature multi_num = LyXTabular::M_ALIGN_LEFT;
162 num = LyXTabular::ALIGN_LEFT;
163 multi_num = LyXTabular::M_ALIGN_LEFT;
166 num = LyXTabular::ALIGN_CENTER;
167 multi_num = LyXTabular::M_ALIGN_CENTER;
170 num = LyXTabular::ALIGN_RIGHT;
171 multi_num = LyXTabular::M_ALIGN_RIGHT;
174 num = LyXTabular::ALIGN_BLOCK;
175 //multi_num: no equivalent
179 if (tabular().isMultiColumn(getActiveCell()))
186 void ControlTabular::valign(ControlTabular::VALIGN v)
188 LyXTabular::Feature num = LyXTabular::VALIGN_MIDDLE;
189 LyXTabular::Feature multi_num = LyXTabular::M_VALIGN_MIDDLE;
193 num = LyXTabular::VALIGN_TOP;
194 multi_num = LyXTabular::M_VALIGN_TOP;
197 num = LyXTabular::VALIGN_MIDDLE;
198 multi_num = LyXTabular::M_VALIGN_MIDDLE;
201 num = LyXTabular::VALIGN_BOTTOM;
202 multi_num = LyXTabular::M_VALIGN_BOTTOM;
206 if (tabular().isMultiColumn(getActiveCell()))
213 void ControlTabular::longTabular(bool yes)
216 set(LyXTabular::SET_LONGTABULAR);
218 set(LyXTabular::UNSET_LONGTABULAR);