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