]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FormBase.h
try this for distinguishing inner and outer tabs
[lyx.git] / src / frontends / xforms / FormBase.h
index 41321d2c4748fc8b8022c2d3171a540645c06974..1cf0f693b1531b3836b376cac5136841247370b0 100644 (file)
 
 #include "DialogBase.h"
 #include "LString.h"
-#include <boost/utility.hpp>
 #include FORMS_H_LOCATION
 #include "ButtonController.h"
 #include "gettext.h"
+#include <sigc++/signal_system.h>
 
+class Buffer;
 class Dialogs;
 class LyXView;
 
@@ -26,33 +27,14 @@ class LyXView;
 #pragma interface
 #endif
 
-#ifdef SIGC_CXX_NAMESPACES
-using SigC::Signal0;
-#endif
-
-/** This class is an XForms GUI base class
+/** This class is an XForms GUI base class.
+    It is meant to be used solely as the parent class to FormBaseBI
+    and FormBaseBD.
     @author Angus Leeming
  */
-class FormBase : public DialogBase, public noncopyable {
-public:
-       ///
-       enum BufferDependency {
-               ///
-               BUFFER_DEPENDENT,
-               ///
-               BUFFER_INDEPENDENT
-       };
-
-       /** Constructor.
-           #FormBase(lv, d, BUFFER_DEPENDENT, _("DialogName"), new ButtonPolicy)#
-        */
-       FormBase(LyXView *, Dialogs *, BufferDependency, string const &,
-                ButtonPolicy * bp = new OkApplyCancelReadOnlyPolicy,
-                char const * close = N_("Close"),
-                char const * cancel = N_("Cancel"));
-       ///
-       virtual ~FormBase();
 
+class FormBase : public DialogBase {
+public:
        /// Callback functions
        static  int WMHideCB(FL_FORM *, void *);
        ///
@@ -66,25 +48,38 @@ public:
        ///
        static void RestoreCB(FL_OBJECT *, long);
 
-protected:
+protected: // methods
+       ///
+       FormBase(LyXView *, Dialogs *, string const &,
+                ButtonPolicy *, char const *, char const *);
+       ///
+       virtual ~FormBase();
+
+       /** Redraw the form (on receipt of a Signal indicating, for example,
+           that the xform colors have been re-mapped).
+           Must be virtual because dialogs with tabbed folders will need to
+           redraw the form for each tab.
+       */
+       virtual void redraw();
+
        /// Create the dialog if necessary, update it and display it.
-       void show();
+       virtual void show();
        /// Hide the dialog.
        virtual void hide();
-       /// Connect signals
+       /// Update the dialog.
+       virtual void update() {}
+       /// Connect signals. Also perform any necessary initialisation.
        virtual void connect();
-       /// Disconnect signals
+       /// Disconnect signals. Also perform any necessary housekeeping.
        virtual void disconnect();
        /// Build the dialog
        virtual void build() = 0;
        /** Filter the inputs on callback from xforms
            Return true if inputs are valid.
         */
-       virtual bool input( long ) {
+       virtual bool input( FL_OBJECT *, long) {
                return true;
        }
-       /// Update dialog before showing it
-       virtual void update() {}
        /// Apply from dialog (modify or create inset)
        virtual void apply() {}
        /// OK from dialog
@@ -100,34 +95,72 @@ protected:
        virtual void restore() {
                update();
        }
-       /// delete derived class variables when hide()ing
-       virtual void clearStore() {}
        /// Pointer to the actual instantiation of xform's form
-       virtual FL_FORM * const form() const = 0;
+       virtual FL_FORM * form() const = 0;
 
-       /// block opening of form twice at the same time
-       bool dialogIsOpen;
        /** Which LyXFunc do we use?
            We could modify Dialogs to have a visible LyXFunc* instead and
            save a couple of bytes per dialog.
        */
        LyXView * lv_;
-       /// Useable even in derived-class's const functions
+       /// Useable even in derived-class's const functions.
        mutable ButtonController bc_;
-
-private:
-       /// Hide signal
-       Signal0<void> * hSignal_;
-       /// Update signal
-       Signal0<void> * uSignal_;
-       /// Update connection.
-       Connection u_;
+       /// Used so we can get at the signals we have to connect to.
+       Dialogs * d_;
        /// Hide connection.
        Connection h_;
+       /// Redraw connection.
+       Connection r_;
        /// dialog title, displayed by WM.
        string title;
+private:
        ///
        ButtonPolicy * bp_;
+public:
+       /// Overcome a dumb xforms sizing bug
+       mutable int minw_;
+       ///
+       mutable int minh_;
+};
+
+
+/** This class is an XForms GUI base class for Buffer Independent dialogs.
+    Such dialogs do not require an update Connection although they may use
+    an update() function which is also supported by restore().
+ */
+class FormBaseBI : public FormBase {
+protected:
+       /// Constructor
+       FormBaseBI(LyXView *, Dialogs *, string const &,
+                  ButtonPolicy * bp,
+                  char const * close = N_("Close"),
+                  char const * cancel = N_("Cancel"));
+
+       /// Connect signals
+       virtual void connect();
+};
+
+
+/** This class is an XForms GUI base class for Buffer Dependent dialogs
+ */
+class FormBaseBD : public FormBase {
+protected:
+       /// Constructor
+       FormBaseBD(LyXView *, Dialogs *, string const &,
+                  ButtonPolicy * bp,
+                  char const * close = N_("Close"),
+                  char const * cancel = N_("Cancel"));
+
+       /// Connect signals
+       virtual void connect();
+       /// Disconnect signals
+       virtual void disconnect();
+       /// bool indicates if a buffer switch took place
+       virtual void updateSlot(bool) { update(); }
+
+       /// Update connection.
+       Connection u_;
 };
 
+
 #endif