X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiDialog.cpp;h=7d4bf582116f11ddffcabfd8692db2870270ee27;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=a46c9ce1eaded75f3b491b79fea5914093a39429;hpb=9a95d2a936748c057db94a3083c4b9e6587eea0b;p=lyx.git diff --git a/src/frontends/qt4/GuiDialog.cpp b/src/frontends/qt4/GuiDialog.cpp index a46c9ce1ea..7d4bf58211 100644 --- a/src/frontends/qt4/GuiDialog.cpp +++ b/src/frontends/qt4/GuiDialog.cpp @@ -11,111 +11,114 @@ #include #include "GuiDialog.h" -#include "debug.h" +#include "GuiView.h" +#include "qt_helpers.h" +#include "FuncRequest.h" + +#include "support/debug.h" + +#include + +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), updating_(false), + 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::slotAutoApply() +{ + apply(); + bc().autoApply(); +} + + +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() { - bc().setReadOnly(kernel().isBufferReadonly()); + if (updating_) + return; + bc().setValid(isValid()); } -void GuiDialog::postShow() +void GuiDialog::enableView(bool enable) { - // The widgets may not be valid, so refresh the button controller - bc().refresh(); + if (!enable) { + bc().setReadOnly(true); + bc().setValid(false); + } + Dialog::enableView(enable); } -void GuiDialog::preUpdate() +void GuiDialog::updateView() { - bc().setReadOnly(kernel().isBufferReadonly()); -} + setUpdatesEnabled(false); - -void GuiDialog::postUpdate() -{ + 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(); -} - -void GuiDialog::checkStatus() -{ - // buffer independant dialogs are always active. - // This check allows us leave canApply unimplemented for some dialogs. - if (!controller().isBufferDependent()) - 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); - } + setUpdatesEnabled(true); } } // namespace frontend } // namespace lyx + +#include "moc_GuiDialog.cpp"