]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GParagraph.C
Change glob() API to accept a dir parameter.
[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 // Too hard to make concept checks work with this file
14 #ifdef _GLIBCPP_CONCEPT_CHECKS
15 #undef _GLIBCPP_CONCEPT_CHECKS
16 #endif
17
18 #include "GParagraph.h"
19 #include "ghelpers.h"
20
21 #include "ControlParagraph.h"
22 #include "controllers/helper_funcs.h"
23
24 #include "ParagraphParameters.h"
25 #include "Spacing.h"
26 #include "support/lstrings.h"
27 #include "support/tostr.h"
28
29 using std::string;
30
31 namespace lyx {
32
33 namespace frontend {
34
35 namespace {
36
37 } // namespace anon
38
39
40 GParagraph::GParagraph(Dialog & parent)
41         : GViewCB<ControlParagraph, GViewGladeB>(parent, _("Paragraph Settings"), false)
42 {}
43
44 void GParagraph::doBuild()
45 {
46         string const gladeName = findGladeFile("paragraph");
47         xml_ = Gnome::Glade::Xml::create(gladeName);
48
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_);
57
58         // Manage the Close button
59         Gtk::Button * button;
60         xml_->get_widget("Close", button);
61         setCancel(button);
62
63         // Make the main hbox sensitive to readonly
64         Gtk::HBox * controlbox;
65         xml_->get_widget("ControlBox", controlbox);
66         bcview().addReadOnly(controlbox);
67
68         spacingadj_ = spacingspin_->get_adjustment();
69
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));
78
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));
87 }
88
89
90 void GParagraph::update()
91 {
92         // label width
93         string const labelwidth = controller().params().labelWidthString();
94         maxlabelwidthentry_->set_text(labelwidth);
95         maxlabelwidthentry_->set_sensitive(
96                 labelwidth != _("Senseless with this layout!"));
97
98         // alignment
99         LyXAlignment const current_alignment = controller().params().align();
100         switch (current_alignment) {
101                 case LYX_ALIGN_BLOCK:
102                         blockradio_->set_active(true);
103                         break;
104                 case LYX_ALIGN_LEFT:
105                         leftradio_->set_active(true);
106                         break;
107                 case LYX_ALIGN_RIGHT:
108                         rightradio_->set_active(true);
109                         break;
110                 case LYX_ALIGN_CENTER:
111                         centerradio_->set_active(true);
112                         break;
113                 default:
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);
119         }
120
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));
127
128         // We give the user a checkbox with an affirmative description, so
129         // invert the setting
130         indentcheck_->set_active(!controller().params().noindent());
131
132         // linespacing
133         Spacing const space = controller().params().spacing();
134
135         // This emits the toggled signal, setting up sensitivities
136         defaultspacingcheck_->set_active(
137                 space.getSpace() == Spacing::Default);
138
139         spacingadj_->set_value(space.getValue());
140 }
141
142
143 void GParagraph::onDefaultSpacingToggled()
144 {
145         if (defaultspacingcheck_->get_active()) {
146                 spacingspin_->set_sensitive(false);
147                 Spacing const spacing(Spacing::Default, spacingadj_->get_value());
148                 controller().params().spacing(spacing);
149         }       else {
150                 spacingspin_->set_sensitive(true);
151                 Spacing const spacing(Spacing::Other, spacingadj_->get_value());
152                 controller().params().spacing(spacing);
153         }
154         controller().dispatchParams();
155 }
156
157
158 void GParagraph::onIndentToggled()
159 {
160         controller().params().noindent(!indentcheck_->get_active());
161         controller().dispatchParams();
162 }
163
164
165 void GParagraph::onSpacingChanged()
166 {
167         Spacing const spacing(Spacing::Other, spacingadj_->get_value());
168         controller().params().spacing(spacing);
169         controller().dispatchParams();
170 }
171
172
173 void GParagraph::onMaxLabelWidthChanged()
174 {
175         controller().params().labelWidthString(
176                 maxlabelwidthentry_->get_text());
177         controller().dispatchParams();
178 }
179
180
181 void GParagraph::onAlignToggled()
182 {
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);
191
192         controller().dispatchParams();
193 }
194
195
196 } // namespace frontend
197 } // namespace lyx