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