X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2FDialogs.C;h=5ea2ef5ad3347dea7fa529b244aa8345e074ac29;hb=e7fc677261bd14fdf159e594fcf422e985c72664;hp=82cac2cb640a12b04ae042691fe7b550ac513b8b;hpb=c516046c9cb6577762bc43bc24b067b5ae9c40ee;p=lyx.git diff --git a/src/frontends/Dialogs.C b/src/frontends/Dialogs.C index 82cac2cb64..5ea2ef5ad3 100644 --- a/src/frontends/Dialogs.C +++ b/src/frontends/Dialogs.C @@ -2,9 +2,10 @@ * \file frontends/Dialogs.C * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. + * * \author Angus Leeming * - * Full author contact details are available in file CREDITS + * Full author contact details are available in file CREDITS. * * Common to all frontends' Dialogs */ @@ -12,11 +13,17 @@ #include #include "Dialogs.h" + #include "controllers/Dialog.h" -#include + +#include #include +using std::string; +using lyx::frontend::Dialog; + + // Note that static boost signals break some compilers, so this wrapper // initialises the signal dynamically when it is first invoked. template @@ -37,16 +44,16 @@ private: }; -boost::signal0 & Dialogs::redrawGUI() +boost::signal & Dialogs::redrawGUI() { - static BugfixSignal > thesignal; + static BugfixSignal > thesignal; return thesignal(); } namespace { -BugfixSignal > hideSignal; +BugfixSignal > hideSignal; } @@ -58,21 +65,15 @@ void Dialogs::hide(string const & name, InsetBase* inset) Dialogs::Dialogs(LyXView & lyxview) - : lyxview_(lyxview) + : lyxview_(lyxview), in_show_(false) { // Connect signals redrawGUI().connect(boost::bind(&Dialogs::redraw, this)); hideSignal().connect(boost::bind(&Dialogs::hideSlot, this, _1, _2)); - - // All this is slated to go - init_pimpl(); - // reduce the number of connections needed in - // dialogs by a simple connection here. - hideAllSignal.connect(hideBufferDependentSignal); } -Dialog * Dialogs::find(string const & name) +Dialog * Dialogs::find_or_build(string const & name) { if (!isValidName(name)) return 0; @@ -80,33 +81,42 @@ Dialog * Dialogs::find(string const & name) std::map::iterator it = dialogs_.find(name); - if (it == dialogs_.end()) { - dialogs_[name] = DialogPtr(build(name)); - return dialogs_[name].get(); - } + if (it != dialogs_.end()) + return it->second.get(); - return it->second.get(); + dialogs_[name] = build(name); + return dialogs_[name].get(); } void Dialogs::show(string const & name, string const & data) { - Dialog * dialog = find(name); - if (!dialog) + if (in_show_) { return; - - dialog->show(data); + } + in_show_ = true; + Dialog * dialog = find_or_build(name); + if (dialog) { + // FIXME! Should check that the dialog is NOT an inset dialog. + dialog->show(data); + } + in_show_ = false; } void Dialogs::show(string const & name, string const & data, InsetBase * inset) { - Dialog * dialog = find(name); - if (!dialog) + if (in_show_) { return; - - dialog->show(data); - open_insets_[name] = inset; + } + in_show_ = true; + Dialog * dialog = find_or_build(name); + if (dialog) { + // FIXME! Should check that the dialog IS an inset dialog. + dialog->show(data); + open_insets_[name] = inset; + } + in_show_ = false; } @@ -122,10 +132,12 @@ bool Dialogs::visible(string const & name) const void Dialogs::update(string const & name, string const & data) { - Dialog * dialog = find(name); - if (!dialog) + std::map::const_iterator it = + dialogs_.find(name); + if (it == dialogs_.end()) return; + Dialog * const dialog = it->second.get(); if (dialog->isVisible()) dialog->update(data); } @@ -133,13 +145,15 @@ void Dialogs::update(string const & name, string const & data) void Dialogs::hideSlot(string const & name, InsetBase * inset) { - Dialog * dialog = find(name); - if (!dialog) + std::map::const_iterator it = + dialogs_.find(name); + if (it == dialogs_.end()) return; if (inset && inset != getOpenInset(name)) return; + Dialog * const dialog = it->second.get(); if (dialog->isVisible()) dialog->hide(); open_insets_[name] = 0; @@ -174,7 +188,6 @@ void Dialogs::hideAll() const for(; it != end; ++it) { it->second->hide(); } - hideAllSignal(); } @@ -188,7 +201,6 @@ void Dialogs::hideBufferDependent() const if (dialog->controller().isBufferDependent()) dialog->hide(); } - hideBufferDependentSignal(); } @@ -208,7 +220,6 @@ void Dialogs::updateBufferDependent(bool switched) const dialog->RestoreButton(); } } - updateBufferDependentSignal(switched); } @@ -221,3 +232,16 @@ void Dialogs::redraw() const it->second->redraw(); } } + + +void Dialogs::checkStatus() +{ + std::map::const_iterator it = dialogs_.begin(); + std::map::const_iterator end = dialogs_.end(); + + for(; it != end; ++it) { + Dialog * const dialog = it->second.get(); + if (dialog->isVisible()) + dialog->checkStatus(); + } +}