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 // Too hard to make concept checks work with this file
14 #ifdef _GLIBCXX_CONCEPT_CHECKS
15 #undef _GLIBCXX_CONCEPT_CHECKS
17 #ifdef _GLIBCPP_CONCEPT_CHECKS
18 #undef _GLIBCPP_CONCEPT_CHECKS
21 #include "GParagraph.h"
24 #include "ControlParagraph.h"
25 #include "controllers/helper_funcs.h"
27 #include "ParagraphParameters.h"
29 #include "support/lstrings.h"
43 GParagraph::GParagraph(Dialog & parent)
44 : GViewCB<ControlParagraph, GViewGladeB>(parent, lyx::to_utf8(_("Paragraph Settings")), false)
47 void GParagraph::doBuild()
49 string const gladeName = findGladeFile("paragraph");
50 xml_ = Gnome::Glade::Xml::create(gladeName);
52 xml_->get_widget("LineSpacing", spacingspin_);
53 xml_->get_widget("DefaultLineSpacing", defaultspacingcheck_);
54 xml_->get_widget("MaxLabelWidth", maxlabelwidthentry_);
55 xml_->get_widget("Indent", indentcheck_);
56 xml_->get_widget("AlignBlock", blockradio_);
57 xml_->get_widget("AlignLeft", leftradio_);
58 xml_->get_widget("AlignRight", rightradio_);
59 xml_->get_widget("AlignCenter", centerradio_);
61 // Manage the Close button
63 xml_->get_widget("Close", button);
66 // Make the main hbox sensitive to readonly
67 Gtk::Widget * controlbox;
68 xml_->get_widget("ControlBox", controlbox);
69 bcview().addReadOnly(controlbox);
71 spacingadj_ = spacingspin_->get_adjustment();
73 defaultspacingcheck_->signal_toggled().connect(
74 sigc::mem_fun(*this, &GParagraph::onDefaultSpacingToggled));
75 indentcheck_->signal_toggled().connect(
76 sigc::mem_fun(*this, &GParagraph::onIndentToggled));
77 spacingadj_->signal_value_changed().connect(
78 sigc::mem_fun(*this, &GParagraph::onSpacingChanged));
79 maxlabelwidthentry_->signal_changed().connect(
80 sigc::mem_fun(*this, &GParagraph::onMaxLabelWidthChanged));
82 blockradio_->signal_toggled().connect(
83 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
84 leftradio_->signal_toggled().connect(
85 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
86 rightradio_->signal_toggled().connect(
87 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
88 centerradio_->signal_toggled().connect(
89 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
93 void GParagraph::update()
96 string const labelwidth = controller().params().labelWidthString();
97 maxlabelwidthentry_->set_text(labelwidth);
98 maxlabelwidthentry_->set_sensitive(
99 labelwidth != lyx::to_utf8(_("Senseless with this layout!")));
102 LyXAlignment const current_alignment = controller().params().align();
103 switch (current_alignment) {
104 case LYX_ALIGN_BLOCK:
105 blockradio_->set_active(true);
108 leftradio_->set_active(true);
110 case LYX_ALIGN_RIGHT:
111 rightradio_->set_active(true);
113 case LYX_ALIGN_CENTER:
114 centerradio_->set_active(true);
117 // LYX_ALIGN_SPECIAL or so? Don't ask, don't tell.
118 centerradio_->set_active(false);
119 blockradio_->set_active(false);
120 rightradio_->set_active(false);
121 leftradio_->set_active(false);
124 // Find out which alignments options are available
125 LyXAlignment alignpos = controller().alignPossible();
126 blockradio_->set_sensitive(bool(alignpos & LYX_ALIGN_BLOCK));
127 centerradio_->set_sensitive(bool(alignpos & LYX_ALIGN_CENTER));
128 leftradio_->set_sensitive(bool(alignpos & LYX_ALIGN_LEFT));
129 rightradio_->set_sensitive(bool(alignpos & LYX_ALIGN_RIGHT));
131 // We give the user a checkbox with an affirmative description, so
132 // invert the setting
133 indentcheck_->set_active(!controller().params().noindent());
136 Spacing const space = controller().params().spacing();
138 // This emits the toggled signal, setting up sensitivities
139 defaultspacingcheck_->set_active(
140 space.getSpace() == Spacing::Default);
142 spacingadj_->set_value(space.getValue());
146 void GParagraph::onDefaultSpacingToggled()
148 if (defaultspacingcheck_->get_active()) {
149 spacingspin_->set_sensitive(false);
150 Spacing const spacing(Spacing::Default, spacingadj_->get_value());
151 controller().params().spacing(spacing);
153 spacingspin_->set_sensitive(true);
154 Spacing const spacing(Spacing::Other, spacingadj_->get_value());
155 controller().params().spacing(spacing);
157 controller().dispatchParams();
161 void GParagraph::onIndentToggled()
163 controller().params().noindent(!indentcheck_->get_active());
164 controller().dispatchParams();
168 void GParagraph::onSpacingChanged()
170 Spacing const spacing(Spacing::Other, spacingadj_->get_value());
171 controller().params().spacing(spacing);
172 controller().dispatchParams();
176 void GParagraph::onMaxLabelWidthChanged()
178 controller().params().labelWidthString(
179 maxlabelwidthentry_->get_text());
180 controller().dispatchParams();
184 void GParagraph::onAlignToggled()
186 if (blockradio_->get_active())
187 controller().params().align(LYX_ALIGN_BLOCK);
188 else if (leftradio_->get_active())
189 controller().params().align(LYX_ALIGN_LEFT);
190 else if (rightradio_->get_active())
191 controller().params().align(LYX_ALIGN_RIGHT);
192 else if (centerradio_->get_active())
193 controller().params().align(LYX_ALIGN_CENTER);
195 controller().dispatchParams();
199 } // namespace frontend