]> git.lyx.org Git - features.git/blob - src/frontends/controllers/Dialog.C
3873dbe2085956366a5851d6fe5cffbc800be9a0
[features.git] / src / frontends / controllers / Dialog.C
1 // -*- C++ -*-
2 /**
3  * \file Dialog.C
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Angus Leeming
8  *
9  * Full author contact details are available in file CREDITS
10  */
11
12 #include <config.h>
13
14 #include "Dialog.h"
15
16 #include "ButtonController.h"
17 #include "BCView.h"
18 #include "debug.h"
19 #include "support/LAssert.h"
20
21
22 Dialog::Dialog(LyXView & lv, string const & name)
23         : is_closing_(false), kernel_(lv), name_(name),
24           bc_ptr_(new ButtonController)
25 {}
26
27
28 Dialog::~Dialog()
29 {}
30
31
32 void Dialog::ApplyButton()
33 {
34         apply();
35         bc().apply();
36 }
37
38
39 void Dialog::OKButton()
40 {
41         is_closing_ = true;
42         apply();
43         is_closing_ = false;
44         hide();
45         bc().ok();
46 }
47
48
49 void Dialog::CancelButton()
50 {
51         hide();
52         bc().cancel();
53 }
54
55
56 void Dialog::RestoreButton()
57 {
58         // Tell the kernel that a request to refresh the dialog's contents
59         // has been received. It's up to the kernel to supply the necessary
60         // info by calling Dialog::update().
61         kernel().updateDialog(name_);
62         bc().restore();
63 }
64
65
66 void Dialog::show(string const & data)
67 {
68         if (controller().isBufferDependent() && !kernel().isBufferAvailable())
69                 return;
70
71         if (!controller().initialiseParams(data)) {
72                 lyxerr << "Dialog \"" << name_
73                        << "\" failed to translate the data "
74                         "string passed to show()" << std::endl;
75                 return;
76         }
77
78         bc().readOnly(kernel().isBufferReadonly());
79         view().show();
80
81         // The widgets may not be valid, so refresh the button controller
82         bc().refresh();
83 }
84
85
86 void Dialog::update(string const & data)
87 {
88         if (controller().isBufferDependent() && !kernel().isBufferAvailable())
89                 return;
90
91         if (!controller().initialiseParams(data)) {
92                 lyxerr << "Dialog \"" << name_
93                        << "\" failed to translate the data "
94                         "string passed to update()" << std::endl;
95                 return;
96         }
97
98         bc().readOnly(kernel().isBufferReadonly());
99         view().update();
100
101         // The widgets may not be valid, so refresh the button controller
102         bc().refresh();
103 }
104
105
106 void Dialog::hide()
107 {
108         if (!view().isVisible())
109                 return;
110
111         controller().clearParams();
112         view().hide();
113 }
114
115
116 void Dialog::apply()
117 {
118         if (kernel().isBufferReadonly())
119                 return;
120
121         view().apply();
122         controller().dispatchParams();
123
124         if (controller().disconnectOnApply() && !is_closing_) {
125                 kernel().disconnect(name());
126                 controller().initialiseParams(string());
127                 view().update();
128         }
129 }
130
131
132 bool Dialog::isVisible() const
133 {
134         return view().isVisible();
135 }
136
137
138 void Dialog::redraw()
139 {
140         view().redraw();
141 }
142
143
144 ButtonController & Dialog::bc() const
145 {
146         lyx::Assert(bc_ptr_.get());
147         return *bc_ptr_.get();
148 }
149
150
151 Dialog::Controller & Dialog::controller() const
152 {
153         lyx::Assert(controller_ptr_.get());
154         return *controller_ptr_.get();
155 }
156
157
158 Dialog::View & Dialog::view() const
159 {
160         lyx::Assert(view_ptr_.get());
161         return *view_ptr_.get();
162 }
163
164
165 void Dialog::View::setTitle(string const & newtitle)
166 {
167         title_ = newtitle;
168 }
169
170
171 string const & Dialog::View::getTitle() const
172 {
173         return title_;
174 }
175
176
177 void Dialog::setController(Controller * i)
178 {
179         lyx::Assert(i && !controller_ptr_.get());
180         controller_ptr_.reset(i);
181 }
182
183
184 void Dialog::setView(View * v)
185 {
186         lyx::Assert(v && !view_ptr_.get());
187         view_ptr_.reset(v);
188 }