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 "GParagraph.h"
16 #include "ControlParagraph.h"
17 #include "controllers/helper_funcs.h"
19 #include "ParagraphParameters.h"
21 #include "support/lstrings.h"
22 #include "support/tostr.h"
35 GParagraph::GParagraph(Dialog & parent)
36 : GViewCB<ControlParagraph, GViewGladeB>(parent, _("Paragraph Settings"), false)
39 void GParagraph::doBuild()
41 string const gladeName = findGladeFile("paragraph");
42 xml_ = Gnome::Glade::Xml::create(gladeName);
44 xml_->get_widget("LineSpacing", spacingspin_);
45 xml_->get_widget("DefaultLineSpacing", defaultspacingcheck_);
46 xml_->get_widget("MaxLabelWidth", maxlabelwidthentry_);
47 xml_->get_widget("Indent", indentcheck_);
48 xml_->get_widget("AlignBlock", blockradio_);
49 xml_->get_widget("AlignLeft", leftradio_);
50 xml_->get_widget("AlignRight", rightradio_);
51 xml_->get_widget("AlignCenter", centerradio_);
53 // Manage the Close button
55 xml_->get_widget("Close", button);
58 // Make the main hbox sensitive to readonly
59 Gtk::HBox * controlbox;
60 xml_->get_widget("ControlBox", controlbox);
61 bcview().addReadOnly(controlbox);
63 spacingadj_ = spacingspin_->get_adjustment();
65 defaultspacingcheck_->signal_toggled().connect(
66 sigc::mem_fun(*this, &GParagraph::onDefaultSpacingToggled));
67 indentcheck_->signal_toggled().connect(
68 sigc::mem_fun(*this, &GParagraph::onIndentToggled));
69 spacingadj_->signal_value_changed().connect(
70 sigc::mem_fun(*this, &GParagraph::onSpacingChanged));
71 maxlabelwidthentry_->signal_changed().connect(
72 sigc::mem_fun(*this, &GParagraph::onMaxLabelWidthChanged));
74 blockradio_->signal_toggled().connect(
75 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
76 leftradio_->signal_toggled().connect(
77 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
78 rightradio_->signal_toggled().connect(
79 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
80 centerradio_->signal_toggled().connect(
81 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
85 void GParagraph::update()
88 string const labelwidth = controller().params().labelWidthString();
89 maxlabelwidthentry_->set_text(labelwidth);
90 maxlabelwidthentry_->set_sensitive(
91 labelwidth != _("Senseless with this layout!"));
94 LyXAlignment const current_alignment = controller().params().align();
95 switch (current_alignment) {
97 blockradio_->set_active(true);
100 leftradio_->set_active(true);
102 case LYX_ALIGN_RIGHT:
103 rightradio_->set_active(true);
105 case LYX_ALIGN_CENTER:
106 centerradio_->set_active(true);
109 // LYX_ALIGN_SPECIAL or so? Don't ask, don't tell.
110 centerradio_->set_active(false);
111 blockradio_->set_active(false);
112 rightradio_->set_active(false);
113 leftradio_->set_active(false);
116 // Find out which alignments options are available
117 LyXAlignment alignpos = controller().alignPossible();
118 blockradio_->set_sensitive(bool(alignpos & LYX_ALIGN_BLOCK));
119 centerradio_->set_sensitive(bool(alignpos & LYX_ALIGN_CENTER));
120 leftradio_->set_sensitive(bool(alignpos & LYX_ALIGN_LEFT));
121 rightradio_->set_sensitive(bool(alignpos & LYX_ALIGN_RIGHT));
123 // We give the user a checkbox with an affirmative description, so
124 // invert the setting
125 indentcheck_->set_active(!controller().params().noindent());
128 Spacing const space = controller().params().spacing();
130 // This emits the toggled signal, setting up sensitivities
131 defaultspacingcheck_->set_active(
132 space.getSpace() == Spacing::Default);
134 spacingadj_->set_value(space.getValue());
138 void GParagraph::onDefaultSpacingToggled()
140 if (defaultspacingcheck_->get_active()) {
141 spacingspin_->set_sensitive(false);
142 Spacing const spacing(Spacing::Default, spacingadj_->get_value());
143 controller().params().spacing(spacing);
145 spacingspin_->set_sensitive(true);
146 Spacing const spacing(Spacing::Other, spacingadj_->get_value());
147 controller().params().spacing(spacing);
149 controller().dispatchParams();
153 void GParagraph::onIndentToggled()
155 controller().params().noindent(!indentcheck_->get_active());
156 controller().dispatchParams();
160 void GParagraph::onSpacingChanged()
162 Spacing const spacing(Spacing::Other, spacingadj_->get_value());
163 controller().params().spacing(spacing);
164 controller().dispatchParams();
168 void GParagraph::onMaxLabelWidthChanged()
170 controller().params().labelWidthString(
171 maxlabelwidthentry_->get_text());
172 controller().dispatchParams();
176 void GParagraph::onAlignToggled()
178 if (blockradio_->get_active())
179 controller().params().align(LYX_ALIGN_BLOCK);
180 else if (leftradio_->get_active())
181 controller().params().align(LYX_ALIGN_LEFT);
182 else if (rightradio_->get_active())
183 controller().params().align(LYX_ALIGN_RIGHT);
184 else if (centerradio_->get_active())
185 controller().params().align(LYX_ALIGN_CENTER);
187 controller().dispatchParams();
191 } // namespace frontend