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