]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/Dialogs.cpp
next one
[lyx.git] / src / frontends / Dialogs.cpp
index a95950c7849126cb24238738bcf8b26a5923e079..9095d9236926810c0d55db67fa47260c91bc48de 100644 (file)
 
 #include "Dialogs.h"
 
-#include "callback.h"
-
 #include "controllers/Dialog.h"
 
 #include <boost/signal.hpp>
 #include <boost/bind.hpp>
 
-
-namespace lyx {
-
-
 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<typename Signal>
-class BugfixSignal {
-public:
-       Signal & operator()() { return thesignal(); }
-       Signal const & operator()() const { return thesignal(); }
-
-private:
-       Signal & thesignal() const
-       {
-               if (!signal_.get())
-                       signal_.reset(new Signal);
-               return *signal_;
-       }
-
-       mutable boost::scoped_ptr<Signal> signal_;
-};
 
+namespace lyx {
 
-namespace {
-
-BugfixSignal<boost::signal<void(string const &, Inset*)> > hideSignal;
-
-}
-
-
-void Dialogs::hide(string const & name, Inset* inset)
-{
-       // Don't send the signal if we are quitting, because on MSVC it is
-       // destructed before the cut stack in CutAndPaste.cpp, and this method
-       // is called from some inset destructor if the cut stack is not empty
-       // on exit.
-       if (!quitting)
-               hideSignal()(name, inset);
-}
+extern bool quitting;
 
+namespace frontend {
 
 Dialogs::Dialogs(LyXView & lyxview)
        : lyxview_(lyxview), in_show_(false)
-{
-       // Connect signals
-       connection_ = hideSignal().connect(boost::bind(&Dialogs::hideSlot, this, _1, _2));
-}
+{}
 
-Dialogs::~Dialogs() 
-{
-       connection_.disconnect();
-}
 
 Dialog * Dialogs::find_or_build(string const & name)
 {
@@ -90,37 +43,22 @@ Dialog * Dialogs::find_or_build(string const & name)
        if (it != dialogs_.end())
                return it->second.get();
 
-       dialogs_[name] = build(name);
+       dialogs_[name].reset(build(name));
        return dialogs_[name].get();
 }
 
 
-void Dialogs::show(string const & name, string const & data)
-{
-       if (in_show_) {
-               return;
-       }
-       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, Inset * inset)
 {
-       if (in_show_) {
+       if (in_show_)
                return;
-       }
+
        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;
+               dialog->showData(data);
+               if (inset)
+                       open_insets_[name] = inset;
        }
        in_show_ = false;
 }
@@ -132,7 +70,7 @@ bool Dialogs::visible(string const & name) const
                dialogs_.find(name);
        if (it == dialogs_.end())
                return false;
-       return it->second.get()->isVisible();
+       return it->second.get()->isVisibleView();
 }
 
 
@@ -144,13 +82,20 @@ void Dialogs::update(string const & name, string const & data)
                return;
 
        Dialog * const dialog = it->second.get();
-       if (dialog->isVisible())
-               dialog->update(data);
+       if (dialog->isVisibleView())
+               dialog->updateData(data);
 }
 
 
-void Dialogs::hideSlot(string const & name, Inset * inset)
+void Dialogs::hide(string const & name, Inset* inset)
 {
+       // Don't send the signal if we are quitting, because on MSVC it is
+       // destructed before the cut stack in CutAndPaste.cpp, and this method
+       // is called from some inset destructor if the cut stack is not empty
+       // on exit.
+       if (quitting)
+               return;
+
        std::map<string, DialogPtr>::const_iterator it =
                dialogs_.find(name);
        if (it == dialogs_.end())
@@ -160,7 +105,7 @@ void Dialogs::hideSlot(string const & name, Inset * inset)
                return;
 
        Dialog * const dialog = it->second.get();
-       if (dialog->isVisible())
+       if (dialog->isVisibleView())
                dialog->hide();
        open_insets_[name] = 0;
 }
@@ -192,9 +137,8 @@ void Dialogs::hideAll() const
        std::map<string, DialogPtr>::const_iterator it  = dialogs_.begin();
        std::map<string, DialogPtr>::const_iterator end = dialogs_.end();
 
-       for(; it != end; ++it) {
+       for(; it != end; ++it)
                it->second->hide();
-       }
 }
 
 
@@ -204,7 +148,7 @@ void Dialogs::hideBufferDependent() const
        std::map<string, DialogPtr>::const_iterator end = dialogs_.end();
 
        for(; it != end; ++it) {
-               Dialog * dialog =  it->second.get();
+               Dialog * dialog = it->second.get();
                if (dialog->controller().isBufferDependent())
                        dialog->hide();
        }
@@ -217,17 +161,17 @@ void Dialogs::updateBufferDependent(bool switched) const
        std::map<string, DialogPtr>::const_iterator end = dialogs_.end();
 
        for(; it != end; ++it) {
-               Dialog * dialog =  it->second.get();
+               Dialog * dialog = it->second.get();
                if (switched && dialog->controller().isBufferDependent()) {
-                       if (dialog->isVisible() && dialog->controller().initialiseParams(""))
-                               dialog->view().update();
+                       if (dialog->isVisibleView() && dialog->controller().initialiseParams(""))
+                               dialog->updateView();
                        else
                                dialog->hide();
                } else {
                        // A bit clunky, but the dialog will request
                        // that the kernel provides it with the necessary
                        // data.
-                       dialog->RestoreButton();
+                       dialog->slotRestore();
                }
        }
 }
@@ -238,9 +182,8 @@ void Dialogs::redraw() const
        std::map<string, DialogPtr>::const_iterator it  = dialogs_.begin();
        std::map<string, DialogPtr>::const_iterator end = dialogs_.end();
 
-       for(; it != end; ++it) {
+       for(; it != end; ++it)
                it->second->redraw();
-       }
 }
 
 
@@ -251,10 +194,10 @@ void Dialogs::checkStatus()
 
        for(; it != end; ++it) {
                Dialog * const dialog = it->second.get();
-               if (dialog->isVisible())
+               if (dialog && dialog->isVisibleView())
                        dialog->checkStatus();
        }
 }
 
-
+} // namespace frontend
 } // namespace lyx