X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiDialog.cpp;h=7d4bf582116f11ddffcabfd8692db2870270ee27;hb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;hp=44c448de7e78d98021f1636ecd44aa5d32a1bc88;hpb=94e61a3bc9c136554afd8f23fd4d49c2f4e394ba;p=lyx.git diff --git a/src/frontends/qt4/GuiDialog.cpp b/src/frontends/qt4/GuiDialog.cpp index 44c448de7e..7d4bf58211 100644 --- a/src/frontends/qt4/GuiDialog.cpp +++ b/src/frontends/qt4/GuiDialog.cpp @@ -11,140 +11,79 @@ #include #include "GuiDialog.h" -#include "debug.h" + +#include "GuiView.h" #include "qt_helpers.h" -#include "frontends/LyXView.h" +#include "FuncRequest.h" + +#include "support/debug.h" -using std::string; +#include + +using namespace std; namespace lyx { namespace frontend { -GuiDialog::GuiDialog(LyXView & lv, std::string const & name) - : is_closing_(false), name_(name), controller_(0) -{ - lyxview_ = &lv; -} +GuiDialog::GuiDialog(GuiView & lv, QString const & name, QString const & title) + : QDialog(&lv), Dialog(lv, name, "LyX: " + title), updating_(false), + is_closing_(false) +{} -GuiDialog::~GuiDialog() +void GuiDialog::closeEvent(QCloseEvent * ev) { - delete controller_; + slotClose(); + ev->accept(); } -void GuiDialog::setViewTitle(docstring const & title) +void GuiDialog::setButtonsValid(bool valid) { - setWindowTitle("LyX: " + toqstr(title)); + bc().setValid(valid); } -void GuiDialog::setButtonsValid(bool valid) +void GuiDialog::slotApply() { - bc().setValid(valid); + apply(); + bc().apply(); } -void GuiDialog::ApplyButton() +void GuiDialog::slotAutoApply() { apply(); - bc().apply(); + bc().autoApply(); } -void GuiDialog::OKButton() +void GuiDialog::slotOK() { is_closing_ = true; apply(); is_closing_ = false; - QDialog::hide(); + hideView(); bc().ok(); } -void GuiDialog::CancelButton() +void GuiDialog::slotClose() { - QDialog::hide(); + hideView(); bc().cancel(); } -void GuiDialog::RestoreButton() +void GuiDialog::slotRestore() { // 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(). - controller().updateDialog(name_); + updateDialog(); bc().restore(); } -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 (!controller().isBufferAvailable()) { - bc().setReadOnly(true); - return; - } - - // check whether this dialog may be active - if (controller().canApply()) { - bool const readonly = controller().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); - } -} - - -bool GuiDialog::isVisibleView() const -{ - return QDialog::isVisible(); -} - - -bool GuiDialog::readOnly() const -{ - return controller().isBufferReadonly(); -} - - -void GuiDialog::showView() -{ - QSize const hint = sizeHint(); - if (hint.height() >= 0 && hint.width() >= 0) - setMinimumSize(hint); - - updateView(); // make sure its up-to-date - if (controller().exitEarly()) - return; - - if (QWidget::isVisible()) { - raise(); - activateWindow(); - } else { - QWidget::show(); - } - setFocus(); -} - - -void GuiDialog::hideView() -{ - QDialog::hide(); -} - void GuiDialog::changed() { @@ -154,33 +93,13 @@ void GuiDialog::changed() } -void GuiDialog::slotWMHide() -{ - CancelButton(); -} - - -void GuiDialog::slotApply() -{ - ApplyButton(); -} - - -void GuiDialog::slotOK() -{ - OKButton(); -} - - -void GuiDialog::slotClose() -{ - CancelButton(); -} - - -void GuiDialog::slotRestore() +void GuiDialog::enableView(bool enable) { - RestoreButton(); + if (!enable) { + bc().setReadOnly(true); + bc().setValid(false); + } + Dialog::enableView(enable); } @@ -188,93 +107,18 @@ void GuiDialog::updateView() { setUpdatesEnabled(false); + bc().setReadOnly(isBufferReadonly()); // protect the BC from unwarranted state transitions updating_ = true; - update_contents(); + updateContents(); updating_ = false; - - setUpdatesEnabled(true); - QDialog::update(); -} - - -void GuiDialog::showData(string const & data) -{ - if (controller().isBufferDependent() && !controller().isBufferAvailable()) - return; - - if (!controller().initialiseParams(data)) { - lyxerr << "Dialog \"" << name_ - << "\" failed to translate the data " - "string passed to show()" << std::endl; - return; - } - - bc().setReadOnly(controller().isBufferReadonly()); - showView(); - // The widgets may not be valid, so refresh the button controller - bc().refresh(); -} - - -void GuiDialog::updateData(string const & data) -{ - if (controller().isBufferDependent() && !controller().isBufferAvailable()) - return; - - if (!controller().initialiseParams(data)) { - lyxerr << "Dialog \"" << name_ - << "\" could not be initialized" << std::endl; - return; - } - - bc().setReadOnly(controller().isBufferReadonly()); - updateView(); // The widgets may not be valid, so refresh the button controller bc().refresh(); -} - - -void GuiDialog::hide() -{ - if (!isVisibleView()) - return; - - controller().clearParams(); - hideView(); - controller().disconnect(name_); -} - - -void GuiDialog::apply() -{ - if (controller().isBufferDependent()) { - if (!controller().isBufferAvailable() || - (controller().isBufferReadonly() && !controller().canApplyToReadOnly())) - return; - } - - applyView(); - controller().dispatchParams(); - if (controller().disconnectOnApply() && !is_closing_) { - controller().disconnect(name_); - controller().initialiseParams(string()); - updateView(); - } -} - - -void GuiDialog::setController(Controller * controller) -{ - BOOST_ASSERT(controller); - BOOST_ASSERT(!controller_); - controller_ = controller; - controller_->setLyXView(*lyxview_); + setUpdatesEnabled(true); } - } // namespace frontend } // namespace lyx -#include "GuiDialog_moc.cpp" +#include "moc_GuiDialog.cpp"