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 _GLIBCPP_CONCEPT_CHECKS
15 #undef _GLIBCPP_CONCEPT_CHECKS
18 #include "GParagraph.h"
21 #include "ControlParagraph.h"
22 #include "controllers/helper_funcs.h"
24 #include "ParagraphParameters.h"
26 #include "support/lstrings.h"
27 #include "support/tostr.h"
40 GParagraph::GParagraph(Dialog & parent)
41 : GViewCB<ControlParagraph, GViewGladeB>(parent, _("Paragraph Settings"), false)
44 void GParagraph::doBuild()
46 string const gladeName = findGladeFile("paragraph");
47 xml_ = Gnome::Glade::Xml::create(gladeName);
49 xml_->get_widget("LineSpacing", spacingspin_);
50 xml_->get_widget("DefaultLineSpacing", defaultspacingcheck_);
51 xml_->get_widget("MaxLabelWidth", maxlabelwidthentry_);
52 xml_->get_widget("Indent", indentcheck_);
53 xml_->get_widget("AlignBlock", blockradio_);
54 xml_->get_widget("AlignLeft", leftradio_);
55 xml_->get_widget("AlignRight", rightradio_);
56 xml_->get_widget("AlignCenter", centerradio_);
58 // Manage the Close button
60 xml_->get_widget("Close", button);
63 // Make the main hbox sensitive to readonly
64 Gtk::HBox * controlbox;
65 xml_->get_widget("ControlBox", controlbox);
66 bcview().addReadOnly(controlbox);
68 spacingadj_ = spacingspin_->get_adjustment();
70 defaultspacingcheck_->signal_toggled().connect(
71 sigc::mem_fun(*this, &GParagraph::onDefaultSpacingToggled));
72 indentcheck_->signal_toggled().connect(
73 sigc::mem_fun(*this, &GParagraph::onIndentToggled));
74 spacingadj_->signal_value_changed().connect(
75 sigc::mem_fun(*this, &GParagraph::onSpacingChanged));
76 maxlabelwidthentry_->signal_changed().connect(
77 sigc::mem_fun(*this, &GParagraph::onMaxLabelWidthChanged));
79 blockradio_->signal_toggled().connect(
80 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
81 leftradio_->signal_toggled().connect(
82 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
83 rightradio_->signal_toggled().connect(
84 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
85 centerradio_->signal_toggled().connect(
86 sigc::mem_fun(*this, &GParagraph::onAlignToggled));
90 void GParagraph::update()
93 string const labelwidth = controller().params().labelWidthString();
94 maxlabelwidthentry_->set_text(labelwidth);
95 maxlabelwidthentry_->set_sensitive(
96 labelwidth != _("Senseless with this layout!"));
99 LyXAlignment const current_alignment = controller().params().align();
100 switch (current_alignment) {
101 case LYX_ALIGN_BLOCK:
102 blockradio_->set_active(true);
105 leftradio_->set_active(true);
107 case LYX_ALIGN_RIGHT:
108 rightradio_->set_active(true);
110 case LYX_ALIGN_CENTER:
111 centerradio_->set_active(true);
114 // LYX_ALIGN_SPECIAL or so? Don't ask, don't tell.
115 centerradio_->set_active(false);
116 blockradio_->set_active(false);
117 rightradio_->set_active(false);
118 leftradio_->set_active(false);
121 // Find out which alignments options are available
122 LyXAlignment alignpos = controller().alignPossible();
123 blockradio_->set_sensitive(bool(alignpos & LYX_ALIGN_BLOCK));
124 centerradio_->set_sensitive(bool(alignpos & LYX_ALIGN_CENTER));
125 leftradio_->set_sensitive(bool(alignpos & LYX_ALIGN_LEFT));
126 rightradio_->set_sensitive(bool(alignpos & LYX_ALIGN_RIGHT));
128 // We give the user a checkbox with an affirmative description, so
129 // invert the setting
130 indentcheck_->set_active(!controller().params().noindent());
133 Spacing const space = controller().params().spacing();
135 // This emits the toggled signal, setting up sensitivities
136 defaultspacingcheck_->set_active(
137 space.getSpace() == Spacing::Default);
139 spacingadj_->set_value(space.getValue());
143 void GParagraph::onDefaultSpacingToggled()
145 if (defaultspacingcheck_->get_active()) {
146 spacingspin_->set_sensitive(false);
147 Spacing const spacing(Spacing::Default, spacingadj_->get_value());
148 controller().params().spacing(spacing);
150 spacingspin_->set_sensitive(true);
151 Spacing const spacing(Spacing::Other, spacingadj_->get_value());
152 controller().params().spacing(spacing);
154 controller().dispatchParams();
158 void GParagraph::onIndentToggled()
160 controller().params().noindent(!indentcheck_->get_active());
161 controller().dispatchParams();
165 void GParagraph::onSpacingChanged()
167 Spacing const spacing(Spacing::Other, spacingadj_->get_value());
168 controller().params().spacing(spacing);
169 controller().dispatchParams();
173 void GParagraph::onMaxLabelWidthChanged()
175 controller().params().labelWidthString(
176 maxlabelwidthentry_->get_text());
177 controller().dispatchParams();
181 void GParagraph::onAlignToggled()
183 if (blockradio_->get_active())
184 controller().params().align(LYX_ALIGN_BLOCK);
185 else if (leftradio_->get_active())
186 controller().params().align(LYX_ALIGN_LEFT);
187 else if (rightradio_->get_active())
188 controller().params().align(LYX_ALIGN_RIGHT);
189 else if (centerradio_->get_active())
190 controller().params().align(LYX_ALIGN_CENTER);
192 controller().dispatchParams();
196 } // namespace frontend