]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiDialog.cpp
do what the FIXME suggested
[lyx.git] / src / frontends / qt4 / GuiDialog.cpp
index a46c9ce1eaded75f3b491b79fea5914093a39429..d3f9836c089d43476631262529efc760e03e5fc2 100644 (file)
 #include <config.h>
 
 #include "GuiDialog.h"
-#include "debug.h"
+#include "GuiView.h"
+#include "qt_helpers.h"
+#include "FuncRequest.h"
 
+#include "insets/InsetCommand.h"
+
+#include "support/debug.h"
+
+#include <QCloseEvent>
+#include <QMainWindow>
+#include <QSettings>
+#include <QShowEvent>
+
+using namespace std;
 
 namespace lyx {
 namespace frontend {
 
-GuiDialog::GuiDialog(LyXView & lv, std::string const & name)
-       : Dialog(lv, name)
+GuiDialog::GuiDialog(GuiView & lv, QString const & name, QString const & title)
+       :  QDialog(&lv), Dialog(lv, name, "LyX: " + title), is_closing_(false)
 {}
 
 
+void GuiDialog::closeEvent(QCloseEvent * ev)
+{
+       slotClose();
+       ev->accept();
+}
+
+
 void GuiDialog::setButtonsValid(bool valid)
 {
        bc().setValid(valid);
 }
 
 
-void GuiDialog::ApplyButton()
+void GuiDialog::slotApply()
 {
        apply();
        bc().apply();
 }
 
 
-void GuiDialog::OKButton()
+void GuiDialog::slotOK()
 {
        is_closing_ = true;
        apply();
        is_closing_ = false;
-       hide();
+       hideView();
        bc().ok();
 }
 
 
-void GuiDialog::CancelButton()
+void GuiDialog::slotClose()
 {
-       hide();
+       hideView();
        bc().cancel();
 }
 
 
-void GuiDialog::RestoreButton()
+void GuiDialog::slotRestore()
 {
-       // Tell the kernel that a request to refresh the dialog's contents
-       // has been received. It's up to the kernel to supply the necessary
+       // Tell the controller that a request to refresh the dialog's contents
+       // has been received. It's up to the controller to supply the necessary
        // info by calling GuiDialog::updateView().
-       kernel().updateDialog(name_);
+       updateDialog();
        bc().restore();
 }
 
 
-void GuiDialog::preShow()
+void GuiDialog::changed()
+{
+       if (updating_)
+               return;
+       bc().setValid(isValid());
+}
+
+
+void GuiDialog::enableView(bool enable)
 {
-       bc().setReadOnly(kernel().isBufferReadonly());
+       bc().setReadOnly(!enable);
+       bc().setValid(enable);
+       Dialog::enableView(enable);
 }
 
 
-void GuiDialog::postShow()
+void GuiDialog::updateView()
 {
+       setUpdatesEnabled(false);
+
+       bc().setReadOnly(isBufferReadonly());
+       // protect the BC from unwarranted state transitions
+       updating_ = true;
+       updateContents();
+       updating_ = false;
        // The widgets may not be valid, so refresh the button controller
        bc().refresh();
+
+       setUpdatesEnabled(true);
 }
 
 
-void GuiDialog::preUpdate()
+/////////////////////////////////////////////////////////////////////
+//
+// Command based dialogs
+//
+/////////////////////////////////////////////////////////////////////
+
+
+GuiCommand::GuiCommand(GuiView & lv, QString const & name,
+       QString const & title)
+       : GuiDialog(lv, name, title), params_(insetCode(fromqstr(name))),
+               lfun_name_(fromqstr(name))
 {
-       bc().setReadOnly(kernel().isBufferReadonly());
 }
 
 
-void GuiDialog::postUpdate()
+bool GuiCommand::initialiseParams(string const & data)
 {
-       // The widgets may not be valid, so refresh the button controller
-       bc().refresh();
+       // The name passed with LFUN_INSET_APPLY is also the name
+       // used to identify the mailer.
+       InsetCommandMailer::string2params(lfun_name_, data, params_);
+       return true;
 }
 
 
-void GuiDialog::checkStatus()
+void GuiCommand::dispatchParams()
 {
-       // buffer independant dialogs are always active.
-       // This check allows us leave canApply unimplemented for some dialogs.
-       if (!controller().isBufferDependent())
+       if (lfun_name_.empty())
                return;
 
-       // deactivate the dialog if we have no buffer
-       if (!kernel().isBufferAvailable()) {
-               bc().setReadOnly(true);
-               return;
-       }
-
-       // check whether this dialog may be active
-       if (controller().canApply()) {
-               bool const readonly = kernel().isBufferReadonly();
-               bc().setReadOnly(readonly);
-               // refreshReadOnly() is too generous in _enabling_ widgets
-               // update dialog to disable disabled widgets again
-/*
- *     FIXME:
-               if (!readonly || controller().canApplyToReadOnly())
-                       update();
-*/
-       } else {
-               bc().setReadOnly(true);
-       }       
+       string const lfun = 
+               InsetCommandMailer::params2string(lfun_name_, params_);
+       dispatch(FuncRequest(getLfun(), lfun));
 }
 
 } // namespace frontend
 } // namespace lyx
+
+#include "GuiDialog_moc.cpp"