]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/InsetParamsDialog.cpp
aa5850677d11aa76cb85db912baeba48d3963f8c
[lyx.git] / src / frontends / qt4 / InsetParamsDialog.cpp
1 /**\r
2  * \file InsetParamsDialog.cpp\r
3  * This file is part of LyX, the document processor.\r
4  * Licence details can be found in the file COPYING.\r
5  *\r
6  * \author Abdelrazak Younes\r
7  *\r
8  * Full author contact details are available in file CREDITS.\r
9  */\r
10 \r
11 #include <config.h>\r
12 \r
13 #include "InsetParamsDialog.h"\r
14 \r
15 #include "GuiBox.h"\r
16 #include "GuiBranch.h"\r
17 #include "GuiERT.h"\r
18 #include "GuiInfo.h"\r
19 #include "GuiHSpace.h"\r
20 #include "GuiTabular.h"\r
21 #include "GuiVSpace.h"\r
22 #include "FloatPlacement.h"\r
23 \r
24 #include "InsetParamsWidget.h"\r
25 #include "qt_helpers.h"\r
26 \r
27 #include "Buffer.h"\r
28 #include "buffer_funcs.h"\r
29 #include "BufferParams.h"\r
30 #include "BufferView.h"\r
31 #include "Cursor.h"\r
32 #include "FuncRequest.h"\r
33 #include "FuncStatus.h"\r
34 #include "LyX.h"\r
35 \r
36 #include "support/debug.h"\r
37 #include "support/lstrings.h"\r
38 \r
39 using namespace std;\r
40 using namespace lyx::support;\r
41 \r
42 namespace lyx {\r
43 namespace frontend {\r
44 \r
45 /////////////////////////////////////////////////////////////////\r
46 //\r
47 // InsetParamsDialog::Private\r
48 //\r
49 /////////////////////////////////////////////////////////////////\r
50 \r
51 struct InsetParamsDialog::Private\r
52 {\r
53         ///\r
54         InsetParamsWidget * widget_;\r
55 };\r
56 \r
57 /////////////////////////////////////////////////////////////////\r
58 //\r
59 // InsetParamsDialog\r
60 //\r
61 /////////////////////////////////////////////////////////////////\r
62 \r
63 InsetParamsDialog::InsetParamsDialog(GuiView & lv, InsetParamsWidget * widget)\r
64         : DialogView(lv, toqstr(insetName(widget->insetCode())),\r
65         toqstr(insetName(widget->insetCode()))), d(new Private)\r
66 {\r
67         setupUi(this);\r
68         setInsetParamsWidget(widget);\r
69         synchronizedViewCB->setChecked(false);\r
70         on_synchronizedViewCB_stateChanged(false);\r
71 }\r
72 \r
73 InsetParamsDialog::~InsetParamsDialog()\r
74 {\r
75         delete d;\r
76 }\r
77 \r
78 \r
79 bool InsetParamsDialog::initialiseParams(std::string const &)\r
80 {\r
81         on_restorePB_clicked();\r
82         return true;\r
83 }\r
84 \r
85 void InsetParamsDialog::setInsetParamsWidget(InsetParamsWidget * widget)\r
86 {\r
87         d->widget_ = widget;\r
88         stackedWidget->addWidget(widget);\r
89         stackedWidget->setCurrentWidget(widget);\r
90         connect(d->widget_, SIGNAL(changed()), this, SLOT(onWidget_changed()));\r
91 }\r
92 \r
93 \r
94 void InsetParamsDialog::on_restorePB_clicked()\r
95 {\r
96         updateView(true);\r
97         restorePB->setEnabled(false);\r
98 }\r
99 \r
100 \r
101 void InsetParamsDialog::on_okPB_clicked()\r
102 {\r
103         Inset const * i = inset(d->widget_->insetCode());\r
104         if (i)\r
105                 applyView();\r
106         else\r
107                 newInset();\r
108         hide();\r
109 }\r
110 \r
111 \r
112 void InsetParamsDialog::newInset()\r
113 {\r
114         docstring const argument = d->widget_->dialogToParams();\r
115         dispatch(FuncRequest(d->widget_->creationCode(), argument));\r
116 }\r
117 \r
118 \r
119 void InsetParamsDialog::on_newPB_clicked()\r
120 {\r
121         newInset();\r
122 }\r
123 \r
124 \r
125 void InsetParamsDialog::on_applyPB_clicked()\r
126 {\r
127         applyView();\r
128 }\r
129 \r
130 \r
131 void InsetParamsDialog::on_closePB_clicked()\r
132 {\r
133         hide();\r
134 }\r
135 \r
136 \r
137 void InsetParamsDialog::on_synchronizedViewCB_stateChanged(int state)\r
138 {\r
139         checkWidgets(state == Qt::Checked);\r
140 }\r
141 \r
142 \r
143 docstring InsetParamsDialog::checkWidgets(bool synchronized_view)\r
144 {\r
145         bool const widget_ok = d->widget_->checkWidgets();\r
146         Inset const * ins = inset(d->widget_->insetCode());\r
147         docstring const argument = d->widget_->dialogToParams();\r
148         bool valid_argument = !argument.empty();\r
149         if (ins)\r
150                 valid_argument &= ins->validateModifyArgument(argument);\r
151         FuncCode const code = synchronized_view\r
152                 ? d->widget_->creationCode() : LFUN_INSET_MODIFY;\r
153         bool const lfun_ok = lyx::getStatus(FuncRequest(code, argument)).enabled();\r
154         bool const read_only = buffer().isReadonly();\r
155 \r
156         okPB->setEnabled(!synchronized_view && widget_ok && !read_only && valid_argument);\r
157         restorePB->setEnabled(!synchronized_view && ins && !read_only);\r
158         applyPB->setEnabled(lfun_ok && widget_ok && !read_only && valid_argument);\r
159         d->widget_->setEnabled(!read_only);\r
160         return argument;\r
161 }\r
162 \r
163 \r
164 void InsetParamsDialog::onWidget_changed()\r
165 {\r
166         docstring const argument = checkWidgets(synchronizedViewCB->isChecked());\r
167         if (synchronizedViewCB->isChecked())\r
168                 dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));\r
169 }\r
170 \r
171 \r
172 void InsetParamsDialog::applyView()\r
173 {\r
174         docstring const argument = checkWidgets(synchronizedViewCB->isChecked());\r
175         dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));\r
176 }\r
177 \r
178 \r
179 void InsetParamsDialog::updateView(bool update_widget)\r
180 {\r
181         if (update_widget) {\r
182                 Inset const * i = inset(d->widget_->insetCode());\r
183                 if (i) {\r
184                         d->widget_->blockSignals(true);\r
185                         d->widget_->paramsToDialog(i);\r
186                         d->widget_->blockSignals(false);\r
187                 }\r
188         }\r
189         checkWidgets(synchronizedViewCB->isChecked());\r
190 }\r
191 \r
192 \r
193 void InsetParamsDialog::updateView()\r
194 {\r
195         updateView(synchronizedViewCB->isChecked());\r
196 }\r
197 \r
198 \r
199 Dialog * createDialog(GuiView & lv, InsetCode code)\r
200 {\r
201         InsetParamsWidget * widget;\r
202         switch (code) {\r
203         case ERT_CODE:\r
204                 widget = new GuiERT;\r
205                 break;\r
206         case FLOAT_CODE:\r
207                 widget = new FloatPlacement(true);\r
208                 break;\r
209         case BRANCH_CODE:\r
210                 widget = new GuiBranch;\r
211                 break;\r
212         case BOX_CODE:\r
213                 widget = new GuiBox;\r
214                 break;\r
215         case INFO_CODE:\r
216                 widget = new GuiInfo;\r
217                 break;\r
218         case MATH_SPACE_CODE:\r
219                 widget = new GuiHSpace(true);\r
220                 break;\r
221         case SPACE_CODE:\r
222                 widget = new GuiHSpace(false);\r
223                 break;\r
224         case TABULAR_CODE:\r
225                 widget = new GuiTabular;\r
226                 break;\r
227         case VSPACE_CODE:\r
228                 widget = new GuiVSpace;\r
229                 break;\r
230         default: return 0;\r
231         }\r
232         InsetParamsDialog * dialog = new InsetParamsDialog(lv, widget);\r
233         return dialog;\r
234 }\r
235 \r
236 \r
237 Dialog * createDialog(GuiView & lv, string const & name)\r
238 {\r
239         return createDialog(lv, insetCode(name));\r
240 }\r
241 \r
242 } // namespace frontend\r
243 } // namespace lyx\r
244 \r
245 #include "moc_InsetParamsDialog.cpp"\r