+/**\r
+ * \file InsetParamsDialog.cpp\r
+ * This file is part of LyX, the document processor.\r
+ * Licence details can be found in the file COPYING.\r
+ *\r
+ * \author Abdelrazak Younes\r
+ *\r
+ * Full author contact details are available in file CREDITS.\r
+ */\r
+\r
+#include <config.h>\r
+\r
+#include "InsetParamsDialog.h"\r
+\r
+#include "GuiBox.h"\r
+#include "GuiERT.h"\r
+#include "GuiInfo.h"\r
+#include "GuiVSpace.h"\r
+#include "FloatPlacement.h"\r
+\r
+#include "InsetParamsWidget.h"\r
+#include "qt_helpers.h"\r
+\r
+#include "Buffer.h"\r
+#include "buffer_funcs.h"\r
+#include "BufferParams.h"\r
+#include "BufferView.h"\r
+#include "Cursor.h"\r
+#include "FuncRequest.h"\r
+#include "FuncStatus.h"\r
+#include "LyX.h"\r
+\r
+#include "support/debug.h"\r
+#include "support/lstrings.h"\r
+\r
+using namespace std;\r
+using namespace lyx::support;\r
+\r
+namespace lyx {\r
+namespace frontend {\r
+\r
+/////////////////////////////////////////////////////////////////\r
+//\r
+// InsetParamsDialog::Private\r
+//\r
+/////////////////////////////////////////////////////////////////\r
+\r
+struct InsetParamsDialog::Private\r
+{\r
+ ///\r
+ InsetParamsWidget * widget_;\r
+};\r
+\r
+/////////////////////////////////////////////////////////////////\r
+//\r
+// InsetParamsDialog\r
+//\r
+/////////////////////////////////////////////////////////////////\r
+\r
+InsetParamsDialog::InsetParamsDialog(GuiView & lv, InsetParamsWidget * widget)\r
+ : DialogView(lv, toqstr(insetName(widget->insetCode())),\r
+ toqstr(insetName(widget->insetCode()))), d(new Private)\r
+{\r
+ setupUi(this);\r
+ setInsetParamsWidget(widget);\r
+ synchronizedViewCB->setChecked(false);\r
+ on_synchronizedViewCB_stateChanged(false);\r
+}\r
+\r
+InsetParamsDialog::~InsetParamsDialog()\r
+{\r
+ delete d;\r
+}\r
+\r
+\r
+void InsetParamsDialog::setInsetParamsWidget(InsetParamsWidget * widget)\r
+{\r
+ d->widget_ = widget;\r
+ stackedWidget->addWidget(widget);\r
+ stackedWidget->setCurrentWidget(widget);\r
+}\r
+\r
+\r
+void InsetParamsDialog::on_restorePB_clicked()\r
+{\r
+ updateView();\r
+}\r
+\r
+\r
+void InsetParamsDialog::on_okPB_clicked()\r
+{\r
+ applyView();\r
+ hide();\r
+}\r
+\r
+\r
+void InsetParamsDialog::on_applyPB_clicked()\r
+{\r
+ if (synchronizedViewCB->isChecked()) {\r
+ docstring const argument = d->widget_->dialogToParams();\r
+ dispatch(FuncRequest(d->widget_->creationCode(), argument));\r
+ } else {\r
+ applyView();\r
+ }\r
+}\r
+\r
+\r
+void InsetParamsDialog::on_closePB_clicked()\r
+{\r
+ hide();\r
+}\r
+\r
+\r
+void InsetParamsDialog::on_synchronizedViewCB_stateChanged(int state)\r
+{\r
+ bool const sync = (state == Qt::Checked);\r
+ QString const label = sync ? qt_("&New") : qt_("&Apply");\r
+ applyPB->setText(label);\r
+ okPB->setEnabled(!sync);\r
+ restorePB->setEnabled(!sync);\r
+ if (sync)\r
+ connect(d->widget_, SIGNAL(changed()), this, SLOT(applyView()));\r
+ else\r
+ QObject::disconnect(d->widget_, SIGNAL(changed()), this, SLOT(applyView()));\r
+}\r
+\r
+\r
+void InsetParamsDialog::applyView()\r
+{\r
+ if (!d->widget_->checkWidgets())\r
+ return;\r
+\r
+ Inset const * i = inset(d->widget_->insetCode());\r
+ if (!i)\r
+ return;\r
+ \r
+ docstring const argument = d->widget_->dialogToParams();\r
+\r
+ if (argument.empty() || !i->validateModifyArgument(argument)) {\r
+ //FIXME: newPB is not accessible\r
+ //newPB->setEnabled(false);\r
+ return;\r
+ }\r
+ //FIXME: newPB is not accessible\r
+ //newPB->setEnabled(true);\r
+ dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));\r
+}\r
+\r
+\r
+void InsetParamsDialog::updateView()\r
+{\r
+ Inset const * i = inset(d->widget_->insetCode());\r
+ if (i)\r
+ d->widget_->paramsToDialog(i);\r
+ else\r
+ d->widget_->setEnabled(false);\r
+\r
+ docstring const argument = d->widget_->dialogToParams();\r
+ FuncCode const code = synchronizedViewCB->isChecked()\r
+ ? d->widget_->creationCode() : LFUN_INSET_MODIFY;\r
+ applyPB->setEnabled(\r
+ lyx::getStatus(FuncRequest(code, argument)).enabled());\r
+}\r
+\r
+\r
+Dialog * createDialog(GuiView & lv, InsetCode code)\r
+{\r
+ InsetParamsWidget * widget;\r
+ switch (code) {\r
+ case ERT_CODE:\r
+ widget = new GuiERT;\r
+ break;\r
+ case FLOAT_CODE:\r
+ widget = new FloatPlacement(true);\r
+ break;\r
+ case BOX_CODE:\r
+ widget = new GuiBox;\r
+ break;\r
+ case INFO_CODE:\r
+ widget = new GuiInfo;\r
+ break;\r
+ case VSPACE_CODE:\r
+ widget = new GuiVSpace;\r
+ break;\r
+ default: return 0;\r
+ }\r
+ InsetParamsDialog * dialog = new InsetParamsDialog(lv, widget);\r
+ return dialog;\r
+}\r
+\r
+\r
+Dialog * createDialog(GuiView & lv, string const & name)\r
+{\r
+ return createDialog(lv, insetCode(name));\r
+}\r
+\r
+} // namespace frontend\r
+} // namespace lyx\r
+\r
+#include "moc_InsetParamsDialog.cpp"\r