]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/controllers/ControlDialogs.h
The reference dialog now disconnects from the inset on Apply. Its behaviour
[lyx.git] / src / frontends / controllers / ControlDialogs.h
index 0bfea6048babe9525a998ee093f2b486d4f01599..f7dabe94708329a936b82ed2c797d12608ac96d2 100644 (file)
@@ -1,3 +1,4 @@
+// -*- C++ -*-
 /* This file is part of
  * ====================================================== 
  *
  * \file ControlDialogs.h
  * \author Angus Leeming <a.leeming@ic.ac.uk>
  *
- * ControlDialog is to be used as a parent class for popups that are not
- * Inset-popups. (An ugly description I know, but I hope the meaning is clear!
- * Can anyone do any better?) Examples would be the Document and Paragraph
- * popups.
+ * ControlDialog is to be used as a parent class for dialogs that are not
+ * views onto parameters of insets. (An ugly description I know, but I hope 
+ * the meaning is clear!  * Can anyone do any better?) Examples would be the 
+ * Document and Paragraph dialogs.
  */
 
 #ifndef CONTROLDIALOGS_H
 #define CONTROLDIALOGS_H
 
 #include "ControlConnections.h"
+#include "debug.h"
 
 /** Base class to control connection/disconnection of signals with the LyX
     kernel for dialogs NOT used with insets.
@@ -44,15 +46,18 @@ protected:
        virtual void clearParams() {}
        /// set the params before show or update
        virtual void setParams() {}
+
+private:
+       /// is the dialog built ?
+       bool dialog_built_;
 };
 
 
 #include "LyXView.h"
 
-
 template <class Base>
 ControlDialog<Base>::ControlDialog(LyXView & lv, Dialogs & d)
-       : Base(lv, d)
+       : Base(lv, d), dialog_built_(false)
 {}
 
 
@@ -62,8 +67,15 @@ void ControlDialog<Base>::show()
        if (isBufferDependent() && !lv_.view()->available())
                return;
 
+       connect();
+
        setParams();
 
+       if (!dialog_built_) {
+               view().build();
+               dialog_built_ = true;
+       }
+
        bc().readOnly(isReadonly());
        view().show();
 }
@@ -75,7 +87,7 @@ void ControlDialog<Base>::update()
                return;
 
        setParams();
-       
+
        bc().readOnly(isReadonly());
        view().update();
 }