]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GVSpace.C
Extracted from r14281
[lyx.git] / src / frontends / gtk / GVSpace.C
1 /**
2  * \file GVSpace.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 _GLIBCXX_CONCEPT_CHECKS
15 #undef _GLIBCXX_CONCEPT_CHECKS
16 #endif
17 #ifdef _GLIBCPP_CONCEPT_CHECKS
18 #undef _GLIBCPP_CONCEPT_CHECKS
19 #endif
20
21 #include "GVSpace.h"
22 #include "ControlVSpace.h"
23 #include "ghelpers.h"
24
25 #include <libglademm.h>
26
27 using std::string;
28 using std::vector;
29
30 namespace lyx {
31 namespace frontend {
32
33 GVSpace::GVSpace(Dialog & parent)
34         : GViewCB<ControlVSpace, GViewGladeB>(parent, _("VSpace Settings"), false)
35 {}
36
37
38 void GVSpace::doBuild()
39 {
40         string const gladeName = findGladeFile("vspace");
41         xml_ = Gnome::Glade::Xml::create(gladeName);
42
43         Gtk::Button * button;
44         xml_->get_widget("Cancel", button);
45         setCancel(button);
46         xml_->get_widget("OK", button);
47         setOK(button);
48
49         xml_->get_widget("Spacing", spacingcombo_);
50         xml_->get_widget_derived("Size", sizelengthentry_);
51         sizelengthentry_->set_relative(false);
52
53         xml_->get_widget("Protect", protectcheck_);
54
55         spacingcombo_->signal_changed().connect(
56                 sigc::mem_fun(*this, &GVSpace::onSpacingComboChanged));
57 }
58
59
60 void GVSpace::update()
61 {
62         VSpace const space = controller().params();
63
64         int pos = 0;
65         switch (space.kind()) {
66         case VSpace::DEFSKIP:
67                 pos = 0;
68                 break;
69         case VSpace::SMALLSKIP:
70                 pos = 1;
71                 break;
72         case VSpace::MEDSKIP:
73                 pos = 2;
74                 break;
75         case VSpace::BIGSKIP:
76                 pos = 3;
77                 break;
78         case VSpace::VFILL:
79                 pos = 4;
80                 break;
81         case VSpace::LENGTH:
82                 pos = 5;
83                 break;
84         }
85
86         spacingcombo_->set_active(pos);
87
88         protectcheck_->set_active(space.keep());
89
90         bool const custom_vspace = space.kind() == VSpace::LENGTH;
91         if (custom_vspace) {
92                 sizelengthentry_->set_length(space.length().len());
93         } else {
94                 sizelengthentry_->set_length("");
95         }
96 }
97
98
99 void GVSpace::apply()
100 {
101         VSpace space;
102         switch (spacingcombo_->get_active_row_number()) {
103         case 0:
104                 space = VSpace(VSpace::DEFSKIP);
105                 break;
106         case 1:
107                 space = VSpace(VSpace::SMALLSKIP);
108                 break;
109         case 2:
110                 space = VSpace(VSpace::MEDSKIP);
111                 break;
112         case 3:
113                 space = VSpace(VSpace::BIGSKIP);
114                 break;
115         case 4:
116                 space = VSpace(VSpace::VFILL);
117                 break;
118         case 5:
119                 space = VSpace(LyXGlueLength(sizelengthentry_->get_length()));
120                 break;
121         }
122
123         space.setKeep(protectcheck_->get_active());
124
125         controller().params() = space;
126 }
127
128
129 void GVSpace::onSpacingComboChanged()
130 {
131         bool const custom = spacingcombo_->get_active_row_number() == 5;
132         sizelengthentry_->set_sensitive(custom);
133 }
134
135 } // namespace frontend
136 } // namespace lyx