Inset * inset() const;
private:
- /** These 6 methods are all that the individual daughter classes
+ /** These 7 methods are all that the individual daughter classes
should need to instantiate. */
/// if the inset exists then do this...
/// clean-up any daughter class-particular data on hide().
virtual void clearDaughterParams() {}
+ /** Some dialogs may find it beneficial to disconnect from the inset
+ when the Apply button is pressed. E.g., doing this with the citation
+ dialog allows multiple citiations to be inserted easily. */
+ virtual bool disconnectOnApply() { return false; }
Memory is allocated only whilst the dialog is visible.
*/
Params * params_;
+
+ /// is the dialog built ?
+ bool dialog_built_;
+
};
template <class Inset, class Params>
ControlInset<Inset, Params>::ControlInset(LyXView & lv, Dialogs & d)
: ControlConnectBD(lv, d),
- inset_(0), ih_(0), params_(0)
+ inset_(0), ih_(0), params_(0), dialog_built_(false)
{}
{
connectInset();
- if ( !arg.empty() )
+ if (!arg.empty())
bc().valid(); // so that the user can press Ok
show(getParams(arg));
setDaughterParams();
- static bool isBuilt = false;
- if (!isBuilt) {
- isBuilt = true;
+ if (!dialog_built_) {
view().build();
+ dialog_built_ = true;
}
bc().readOnly(isReadonly());
params_ = new Params();
bc().readOnly(isReadonly());
- // Reset the Button Controller to it's initial state
- bc().invalid();
- bc().restore();
-
view().update();
}
applyParamsToInset();
else
applyParamsNoInset();
+
+ if (disconnectOnApply() && !isClosing()) {
+ *params_ = getParams(string());
+ inset_ = 0;
+ ih_.disconnect();
+
+ view().update();
+ }
}