]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GParagraph.C
Display accelerator (binding) labels in menus.
[lyx.git] / src / frontends / gtk / GParagraph.C
1 /**
2  * \file GParagraph.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author John Spray
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "GParagraph.h"
14 #include "ghelpers.h"
15
16 #include "ControlParagraph.h"
17 #include "controllers/helper_funcs.h"
18
19 #include "ParagraphParameters.h"
20 #include "Spacing.h"
21 #include "support/lstrings.h"
22 #include "support/tostr.h"
23
24 using std::string;
25
26 namespace lyx {
27
28 namespace frontend {
29
30 namespace {
31
32 } // namespace anon
33
34
35 GParagraph::GParagraph(Dialog & parent)
36         : GViewCB<ControlParagraph, GViewGladeB>(parent, _("Paragraph Settings"), false)
37 {}
38
39 void GParagraph::doBuild()
40 {
41         string const gladeName = findGladeFile("paragraph");
42         xml_ = Gnome::Glade::Xml::create(gladeName);
43
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_);
52
53         // Manage the Close button
54         Gtk::Button * button;
55         xml_->get_widget("Close", button);
56         setCancel(button);
57
58         // Make the main hbox sensitive to readonly
59         Gtk::HBox * controlbox;
60         xml_->get_widget("ControlBox", controlbox);
61         bcview().addReadOnly(controlbox);
62
63         spacingadj_ = spacingspin_->get_adjustment();
64
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));
73
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));
82 }
83
84
85 void GParagraph::update()
86 {
87         // label width
88         string const labelwidth = controller().params().labelWidthString();
89         maxlabelwidthentry_->set_text(labelwidth);
90         maxlabelwidthentry_->set_sensitive(
91                 labelwidth != _("Senseless with this layout!"));
92
93         // alignment
94         LyXAlignment const current_alignment = controller().params().align();
95         switch (current_alignment) {
96                 case LYX_ALIGN_BLOCK:
97                         blockradio_->set_active(true);
98                         break;
99                 case LYX_ALIGN_LEFT:
100                         leftradio_->set_active(true);
101                         break;
102                 case LYX_ALIGN_RIGHT:
103                         rightradio_->set_active(true);
104                         break;
105                 case LYX_ALIGN_CENTER:
106                         centerradio_->set_active(true);
107                         break;
108                 default:
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);
114         }
115
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));
122
123         // We give the user a checkbox with an affirmative description, so
124         // invert the setting
125         indentcheck_->set_active(!controller().params().noindent());
126
127         // linespacing
128         Spacing const space = controller().params().spacing();
129
130         // This emits the toggled signal, setting up sensitivities
131         defaultspacingcheck_->set_active(
132                 space.getSpace() == Spacing::Default);
133
134         spacingadj_->set_value(space.getValue());
135 }
136
137
138 void GParagraph::onDefaultSpacingToggled()
139 {
140         if (defaultspacingcheck_->get_active()) {
141                 spacingspin_->set_sensitive(false);
142                 Spacing const spacing(Spacing::Default, spacingadj_->get_value());
143                 controller().params().spacing(spacing);
144         }       else {
145                 spacingspin_->set_sensitive(true);
146                 Spacing const spacing(Spacing::Other, spacingadj_->get_value());
147                 controller().params().spacing(spacing);
148         }
149         controller().dispatchParams();
150 }
151
152
153 void GParagraph::onIndentToggled()
154 {
155         controller().params().noindent(!indentcheck_->get_active());
156         controller().dispatchParams();
157 }
158
159
160 void GParagraph::onSpacingChanged()
161 {
162         Spacing const spacing(Spacing::Other, spacingadj_->get_value());
163         controller().params().spacing(spacing);
164         controller().dispatchParams();
165 }
166
167
168 void GParagraph::onMaxLabelWidthChanged()
169 {
170         controller().params().labelWidthString(
171                 maxlabelwidthentry_->get_text());
172         controller().dispatchParams();
173 }
174
175
176 void GParagraph::onAlignToggled()
177 {
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);
186
187         controller().dispatchParams();
188 }
189
190
191 } // namespace frontend
192 } // namespace lyx