]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/InsetParamsDialog.cpp
Implement proper dialog titles in InsetParamsDialogs
[lyx.git] / src / frontends / qt4 / InsetParamsDialog.cpp
index c262336f82c6983e97378e4264b682177bbb3715..44f49b5a44e01d74c1db0e2b2c7c0c9cf92fea5b 100644 (file)
-/**\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 "GuiBranch.h"\r
-#include "GuiBibitem.h"\r
-#include "GuiERT.h"\r
-#include "GuiHyperlink.h"\r
-#include "GuiInfo.h"\r
-#include "GuiLabel.h"\r
-#include "GuiLine.h"\r
-#include "GuiHSpace.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
-       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
-//\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
-       setFocusProxy(widget);\r
-}\r
-\r
-InsetParamsDialog::~InsetParamsDialog()\r
-{\r
-       delete d;\r
-}\r
-\r
-\r
-bool InsetParamsDialog::initialiseParams(std::string const &)\r
-{\r
-       on_restorePB_clicked();\r
-       return true;\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
-       d->changed_ = false;\r
-       d->inset_ = inset(d->widget_->insetCode());\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_newPB_clicked()\r
-{\r
-       newInset();\r
-}\r
-\r
-\r
-void InsetParamsDialog::on_applyPB_clicked()\r
-{\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
-       checkWidgets(state == Qt::Checked);\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
-       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
-\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
-\r
-\r
-void InsetParamsDialog::applyView()\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
-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 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 SPACE_CODE:\r
-               widget = new GuiHSpace(false);\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"