]> git.lyx.org Git - lyx.git/blob - src/frontends/gtk/GVSpace.C
some tabular fixes for the problems reported by Helge
[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("Value", valuespin_);
51         Gtk::VBox * box;
52         xml_->get_widget("ValueUnits", box);
53         box->pack_start(valueunitscombo_, true, true, 0);
54         box->show_all();
55         
56         xml_->get_widget("Protect", protectcheck_);
57
58         populateUnitCombo(valueunitscombo_, false);
59
60         spacingcombo_->signal_changed().connect(
61                 sigc::mem_fun(*this, &GVSpace::onSpacingComboChanged));
62 }
63
64
65 void GVSpace::update()
66 {
67         VSpace const space = controller().params();
68
69         int pos = 0;
70         switch (space.kind()) {
71         case VSpace::DEFSKIP:
72                 pos = 0;
73                 break;
74         case VSpace::SMALLSKIP:
75                 pos = 1;
76                 break;
77         case VSpace::MEDSKIP:
78                 pos = 2;
79                 break;
80         case VSpace::BIGSKIP:
81                 pos = 3;
82                 break;
83         case VSpace::VFILL:
84                 pos = 4;
85                 break;
86         case VSpace::LENGTH:
87                 pos = 5;
88                 break;
89         }
90
91         spacingcombo_->set_active(pos);
92
93         protectcheck_->set_active(space.keep());
94
95         bool const custom_vspace = space.kind() == VSpace::LENGTH;
96         if (custom_vspace) {
97                 setWidgetsFromLength(*valuespin_->get_adjustment(), valueunitscombo_, space.length().len());
98         } else {
99                 setWidgetsFromLength(*valuespin_->get_adjustment(), valueunitscombo_, LyXLength());
100                 
101         }
102 }
103
104
105 void GVSpace::apply()
106 {
107         VSpace space;
108         switch (spacingcombo_->get_active_row_number()) {
109         case 0:
110                 space = VSpace(VSpace::DEFSKIP);
111                 break;
112         case 1:
113                 space = VSpace(VSpace::SMALLSKIP);
114                 break;
115         case 2:
116                 space = VSpace(VSpace::MEDSKIP);
117                 break;
118         case 3:
119                 space = VSpace(VSpace::BIGSKIP);
120                 break;
121         case 4:
122                 space = VSpace(VSpace::VFILL);
123                 break;
124         case 5:
125                 space = VSpace(LyXGlueLength(getLengthFromWidgets(*valuespin_->get_adjustment(), valueunitscombo_)));
126                 break;
127         }
128
129         space.setKeep(protectcheck_->get_active());
130
131         controller().params() = space;
132 }
133
134
135 void GVSpace::onSpacingComboChanged()
136 {
137         bool const custom = spacingcombo_->get_active_row_number() == 5;
138         valueunitscombo_.set_sensitive(custom);
139         valuespin_->set_sensitive(custom);
140 }
141
142 } // namespace frontend
143 } // namespace lyx