\r
#include "GuiBox.h"\r
#include "GuiBranch.h"\r
+#include "GuiBibitem.h"\r
#include "GuiERT.h"\r
+#include "GuiHSpace.h"\r
+#include "GuiHyperlink.h"\r
#include "GuiInfo.h"\r
+#include "GuiLabel.h"\r
+#include "GuiLine.h"\r
+#include "GuiNomenclature.h"\r
+#include "GuiPrintNomencl.h"\r
#include "GuiTabular.h"\r
#include "GuiVSpace.h"\r
#include "FloatPlacement.h"\r
\r
struct InsetParamsDialog::Private\r
{\r
+ Private() : widget_(0), inset_(0), changed_(false) {}\r
///\r
InsetParamsWidget * widget_;\r
+ /// The inset that was used at last Restore or Apply operation.\r
+ Inset const * inset_;\r
+ /// Set to true whenever the dialog is changed and set back to\r
+ /// false when the dialog is applied or restored.\r
+ bool changed_;\r
};\r
\r
/////////////////////////////////////////////////////////////////\r
setInsetParamsWidget(widget);\r
synchronizedViewCB->setChecked(false);\r
on_synchronizedViewCB_stateChanged(false);\r
+ setFocusProxy(widget);\r
}\r
\r
InsetParamsDialog::~InsetParamsDialog()\r
}\r
\r
\r
-bool InsetParamsDialog::initialiseParams(std::string const &)\r
+bool InsetParamsDialog::initialiseParams(std::string const & data)\r
{\r
- on_restorePB_clicked();\r
+ if (!d->widget_->initialiseParams(data))\r
+ on_restorePB_clicked();\r
return true;\r
}\r
\r
+\r
void InsetParamsDialog::setInsetParamsWidget(InsetParamsWidget * widget)\r
{\r
d->widget_ = widget;\r
{\r
updateView(true);\r
restorePB->setEnabled(false);\r
+ d->changed_ = false;\r
+ d->inset_ = inset(d->widget_->insetCode());\r
}\r
\r
\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
+ bool const can_be_restored = !synchronized_view && !read_only\r
+ && ins && (ins != d->inset_ || d->changed_);\r
+ restorePB->setEnabled(can_be_restored);\r
applyPB->setEnabled(lfun_ok && widget_ok && !read_only && valid_argument);\r
d->widget_->setEnabled(!read_only);\r
return argument;\r
\r
void InsetParamsDialog::onWidget_changed()\r
{\r
+ d->changed_ = true;\r
docstring const argument = checkWidgets(synchronizedViewCB->isChecked());\r
if (synchronizedViewCB->isChecked())\r
dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));\r
{\r
docstring const argument = checkWidgets(synchronizedViewCB->isChecked());\r
dispatch(FuncRequest(LFUN_INSET_MODIFY, argument));\r
+ d->changed_ = false;\r
+ d->inset_ = inset(d->widget_->insetCode());\r
+ updateView(true);\r
}\r
\r
\r
case FLOAT_CODE:\r
widget = new FloatPlacement(true);\r
break;\r
+ case BIBITEM_CODE:\r
+ widget = new GuiBibitem;\r
+ break;\r
case BRANCH_CODE:\r
widget = new GuiBranch;\r
break;\r
case BOX_CODE:\r
widget = new GuiBox;\r
break;\r
+ case HYPERLINK_CODE:\r
+ widget = new GuiHyperlink;\r
+ break;\r
case INFO_CODE:\r
widget = new GuiInfo;\r
break;\r
+ case LABEL_CODE:\r
+ widget = new GuiLabel;\r
+ break;\r
+ case LINE_CODE:\r
+ widget = new GuiLine;\r
+ break;\r
+ case MATH_SPACE_CODE:\r
+ widget = new GuiHSpace(true);\r
+ break;\r
+ case NOMENCL_CODE:\r
+ widget = new GuiNomenclature;\r
+ break;\r
+ case NOMENCL_PRINT_CODE:\r
+ widget = new GuiPrintNomencl;\r
+ break;\r
+ case SPACE_CODE:\r
+ widget = new GuiHSpace(false);\r
+ break;\r
case TABULAR_CODE:\r
widget = new GuiTabular;\r
break;\r