-/**\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 "GuiTabular.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
- connect(d->widget_, SIGNAL(changed()), this, SLOT(onWidget_changed()));\r
-}\r
-\r
-\r
-void InsetParamsDialog::on_restorePB_clicked()\r
-{\r
- updateView(true);\r
- restorePB->setEnabled(false);\r
-}\r
-\r
-\r
-void InsetParamsDialog::on_okPB_clicked()\r
-{\r
- Inset const * i = inset(d->widget_->insetCode());\r
- if (i)\r
- applyView();\r
- else\r
- newInset();\r
- hide();\r
-}\r
-\r
-\r
-void InsetParamsDialog::newInset()\r
-{\r
- docstring const argument = d->widget_->dialogToParams();\r
- dispatch(FuncRequest(d->widget_->creationCode(), argument));\r
-}\r
-\r
-\r
-void InsetParamsDialog::on_applyPB_clicked()\r
-{\r
- if (synchronizedViewCB->isChecked())\r
- newInset();\r
- else\r
- applyView();\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
- checkWidgets(sync);\r
-}\r
-\r
-\r
-docstring InsetParamsDialog::checkWidgets(bool synchronized_view)\r
-{\r
- bool const widget_ok = d->widget_->checkWidgets();\r
- Inset const * ins = inset(d->widget_->insetCode());\r
- docstring const argument = d->widget_->dialogToParams();\r
- bool valid_argument = !argument.empty();\r
- if (ins)\r
- valid_argument &= ins->validateModifyArgument(argument);\r
- FuncCode const code = synchronized_view\r
- ? d->widget_->creationCode() : LFUN_INSET_MODIFY;\r
- bool const lfun_ok = lyx::getStatus(FuncRequest(code, argument)).enabled();\r
- bool const read_only = buffer().isReadonly();\r
-\r
- okPB->setEnabled(!synchronized_view && widget_ok && !read_only && valid_argument);\r
- restorePB->setEnabled(!synchronized_view && ins && !read_only);\r
- applyPB->setEnabled(lfun_ok && widget_ok && !read_only && valid_argument);\r
- d->widget_->setEnabled(!read_only);\r
- return argument;\r
-}\r
-\r
-\r
-void InsetParamsDialog::onWidget_changed()\r
-{\r
- docstring const argument = checkWidgets(synchronizedViewCB->isChecked());\r
- if (synchronizedViewCB->isChecked())\r
- dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));\r
-}\r
-\r
-\r
-void InsetParamsDialog::applyView()\r
-{\r
- docstring const argument = checkWidgets(synchronizedViewCB->isChecked());\r
- dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));\r
-}\r
-\r
-\r
-void InsetParamsDialog::updateView(bool update_widget)\r
-{\r
- if (update_widget) {\r
- Inset const * i = inset(d->widget_->insetCode());\r
- if (i) {\r
- d->widget_->blockSignals(true);\r
- d->widget_->paramsToDialog(i);\r
- d->widget_->blockSignals(false);\r
- }\r
- }\r
- checkWidgets(synchronizedViewCB->isChecked());\r
-}\r
-\r
-\r
-void InsetParamsDialog::updateView()\r
-{\r
- updateView(synchronizedViewCB->isChecked());\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 TABULAR_CODE:\r
- widget = new GuiTabular;\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
+/**
+ * \file InsetParamsDialog.cpp
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Abdelrazak Younes
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include <config.h>
+
+#include "InsetParamsDialog.h"
+
+#include "GuiBox.h"
+#include "GuiBranch.h"
+#include "GuiBibitem.h"
+#include "GuiERT.h"
+#include "GuiHSpace.h"
+#include "GuiHyperlink.h"
+#include "GuiInfo.h"
+#include "GuiLabel.h"
+#include "GuiLine.h"
+#include "GuiNomenclature.h"
+#include "GuiPrintNomencl.h"
+#include "GuiTabular.h"
+#include "GuiVSpace.h"
+#include "FloatPlacement.h"
+
+#include "InsetParamsWidget.h"
+#include "qt_helpers.h"
+
+#include "Buffer.h"
+#include "buffer_funcs.h"
+#include "BufferParams.h"
+#include "BufferView.h"
+#include "Cursor.h"
+#include "FuncRequest.h"
+#include "FuncStatus.h"
+#include "LyX.h"
+
+#include "support/debug.h"
+#include "support/lstrings.h"
+
+using namespace std;
+using namespace lyx::support;
+
+namespace lyx {
+namespace frontend {
+
+/////////////////////////////////////////////////////////////////
+//
+// InsetParamsDialog::Private
+//
+/////////////////////////////////////////////////////////////////
+
+struct InsetParamsDialog::Private
+{
+ Private() : widget_(0), inset_(0), changed_(false) {}
+ ///
+ InsetParamsWidget * widget_;
+ /// The inset that was used at last Restore or Apply operation.
+ Inset const * inset_;
+ /// Set to true whenever the dialog is changed and set back to
+ /// false when the dialog is applied or restored.
+ bool changed_;
+};
+
+/////////////////////////////////////////////////////////////////
+//
+// InsetParamsDialog
+//
+/////////////////////////////////////////////////////////////////
+
+InsetParamsDialog::InsetParamsDialog(GuiView & lv, InsetParamsWidget * widget)
+ : DialogView(lv, toqstr(insetName(widget->insetCode())),
+ widget->dialogTitle()), d(new Private)
+{
+ setupUi(this);
+ setInsetParamsWidget(widget);
+ immediateApplyCB->setChecked(false);
+ synchronizedCB->setChecked(true);
+ on_immediateApplyCB_stateChanged(false);
+ setFocusProxy(widget);
+}
+
+InsetParamsDialog::~InsetParamsDialog()
+{
+ delete d;
+}
+
+
+bool InsetParamsDialog::initialiseParams(std::string const & data)
+{
+ if (!d->widget_->initialiseParams(data))
+ on_restorePB_clicked();
+ return true;
+}
+
+
+void InsetParamsDialog::setInsetParamsWidget(InsetParamsWidget * widget)
+{
+ d->widget_ = widget;
+ stackedWidget->addWidget(widget);
+ stackedWidget->setCurrentWidget(widget);
+ connect(d->widget_, SIGNAL(changed()), this, SLOT(onWidget_changed()));
+}
+
+
+void InsetParamsDialog::on_restorePB_clicked()
+{
+ updateView(true);
+ restorePB->setEnabled(false);
+ d->changed_ = false;
+ d->inset_ = inset(d->widget_->insetCode());
+}
+
+
+void InsetParamsDialog::on_okPB_clicked()
+{
+ Inset const * i = inset(d->widget_->insetCode());
+ if (i)
+ applyView();
+ else
+ newInset();
+ hide();
+}
+
+
+void InsetParamsDialog::newInset()
+{
+ docstring const argument = d->widget_->dialogToParams();
+ dispatch(FuncRequest(d->widget_->creationCode(), argument));
+}
+
+
+void InsetParamsDialog::on_newPB_clicked()
+{
+ newInset();
+}
+
+
+void InsetParamsDialog::on_applyPB_clicked()
+{
+ applyView();
+}
+
+
+void InsetParamsDialog::on_closePB_clicked()
+{
+ hide();
+}
+
+
+void InsetParamsDialog::on_immediateApplyCB_stateChanged(int state)
+{
+ checkWidgets(state == Qt::Checked);
+}
+
+
+void InsetParamsDialog::on_synchronizedCB_stateChanged(int)
+{
+ checkWidgets(false);
+}
+
+
+docstring InsetParamsDialog::checkWidgets(bool immediate)
+{
+ bool const read_only = buffer().isReadonly();
+ bool const widget_ok = d->widget_->checkWidgets(read_only);
+ Inset const * ins = inset(d->widget_->insetCode());
+ docstring const argument = d->widget_->dialogToParams();
+ bool valid_argument = !argument.empty();
+ if (ins)
+ valid_argument &= ins->validateModifyArgument(argument);
+ FuncCode const code = immediate
+ ? d->widget_->creationCode() : LFUN_INSET_MODIFY;
+ bool const lfun_ok = lyx::getStatus(FuncRequest(code, argument)).enabled();
+
+ okPB->setEnabled(!immediate && widget_ok && !read_only && valid_argument);
+ bool const can_be_restored = !immediate && !read_only
+ && ins && (ins != d->inset_ || d->changed_);
+ restorePB->setEnabled(can_be_restored);
+ applyPB->setEnabled(ins && !immediate && lfun_ok && widget_ok && !read_only && valid_argument);
+ newPB->setEnabled(widget_ok && !read_only && valid_argument);
+ synchronizedCB->setEnabled(!immediate);
+ return argument;
+}
+
+
+void InsetParamsDialog::onWidget_changed()
+{
+ d->changed_ = true;
+ docstring const argument = checkWidgets(immediateApplyCB->isChecked());
+ if (immediateApplyCB->isChecked()
+ && d->widget_->checkWidgets(buffer().isReadonly()))
+ dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));
+}
+
+
+void InsetParamsDialog::applyView()
+{
+ docstring const argument = checkWidgets(immediateApplyCB->isChecked());
+ dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));
+ d->changed_ = false;
+ d->inset_ = inset(d->widget_->insetCode());
+ updateView(true);
+}
+
+
+void InsetParamsDialog::updateView(bool update_widget)
+{
+ if (update_widget) {
+ Inset const * i = inset(d->widget_->insetCode());
+ if (i) {
+ d->widget_->blockSignals(true);
+ d->widget_->paramsToDialog(i);
+ d->widget_->blockSignals(false);
+ }
+ }
+ checkWidgets(immediateApplyCB->isChecked());
+}
+
+
+void InsetParamsDialog::updateView()
+{
+ bool const update_widget =
+ (synchronizedCB->isChecked() || immediateApplyCB->isChecked());
+ updateView(update_widget);
+}
+
+
+Dialog * createDialog(GuiView & lv, InsetCode code)
+{
+ InsetParamsWidget * widget;
+ switch (code) {
+ case ERT_CODE:
+ widget = new GuiERT;
+ break;
+ case FLOAT_CODE:
+ widget = new FloatPlacement(true);
+ break;
+ case BIBITEM_CODE:
+ widget = new GuiBibitem;
+ break;
+ case BRANCH_CODE:
+ widget = new GuiBranch;
+ break;
+ case BOX_CODE:
+ widget = new GuiBox;
+ break;
+ case HYPERLINK_CODE:
+ widget = new GuiHyperlink;
+ break;
+ case INFO_CODE:
+ widget = new GuiInfo;
+ break;
+ case LABEL_CODE:
+ widget = new GuiLabel;
+ break;
+ case LINE_CODE:
+ widget = new GuiLine;
+ break;
+ case MATH_SPACE_CODE:
+ widget = new GuiHSpace(true);
+ break;
+ case NOMENCL_CODE:
+ widget = new GuiNomenclature;
+ break;
+ case NOMENCL_PRINT_CODE:
+ widget = new GuiPrintNomencl;
+ break;
+ case SPACE_CODE:
+ widget = new GuiHSpace(false);
+ break;
+ case TABULAR_CODE:
+ widget = new GuiTabular;
+ break;
+ case VSPACE_CODE:
+ widget = new GuiVSpace;
+ break;
+ default: return 0;
+ }
+ InsetParamsDialog * dialog = new InsetParamsDialog(lv, widget);
+ return dialog;
+}
+
+
+Dialog * createDialog(GuiView & lv, string const & name)
+{
+ return createDialog(lv, insetCode(name));
+}
+
+} // namespace frontend
+} // namespace lyx
+
+#include "moc_InsetParamsDialog.cpp"