#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;
#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 *);
///
///
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
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