From 80a4567bc2d3ad7a11fc875a15a30c205aa9be26 Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Wed, 5 Mar 2003 23:19:45 +0000 Subject: [PATCH] Port wrap dialog to the new scheme. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6357 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/ChangeLog | 5 + src/frontends/Dialogs.h | 3 - src/frontends/controllers/ChangeLog | 2 + src/frontends/controllers/ControlWrap.C | 37 +++-- src/frontends/controllers/ControlWrap.h | 57 ++------ src/frontends/guiapi.C | 6 - src/frontends/guiapi.h | 2 - src/frontends/qt2/ChangeLog | 10 ++ src/frontends/qt2/Dialogs.C | 3 +- src/frontends/qt2/Dialogs2.C | 6 - src/frontends/qt2/Dialogs3.C | 9 +- src/frontends/qt2/Dialogs_impl.h | 7 - src/frontends/qt2/QWrap.C | 18 +-- src/frontends/qt2/QWrap.h | 9 +- src/frontends/xforms/ChangeLog | 11 ++ src/frontends/xforms/Dialogs.C | 3 +- src/frontends/xforms/Dialogs2.C | 6 - src/frontends/xforms/Dialogs3.C | 10 +- src/frontends/xforms/Dialogs_impl.h | 9 -- src/frontends/xforms/FormWrap.C | 25 ++-- src/frontends/xforms/FormWrap.h | 6 +- src/frontends/xforms/forms/form_wrap.fd | 20 +-- src/insets/ChangeLog | 5 + src/insets/insetfloat.h | 3 - src/insets/insetwrap.C | 171 ++++++++++++++++++------ src/insets/insetwrap.h | 54 ++++++-- 26 files changed, 298 insertions(+), 199 deletions(-) diff --git a/src/frontends/ChangeLog b/src/frontends/ChangeLog index e00717299e..86efa68edc 100644 --- a/src/frontends/ChangeLog +++ b/src/frontends/ChangeLog @@ -1,3 +1,8 @@ +2003-03-05 Angus Leeming + + * Dialogs.h: remove showWrap. + * guiapi.[Ch]: remove gui_ShowWrap. + 2003-03-05 Angus Leeming * Dialogs.h: remove showFloat. diff --git a/src/frontends/Dialogs.h b/src/frontends/Dialogs.h index 61bbdadb33..c3971ffda7 100644 --- a/src/frontends/Dialogs.h +++ b/src/frontends/Dialogs.h @@ -23,7 +23,6 @@ class Dialog; class InsetBase; class LyXView; -class InsetWrap; class InsetGraphics; class InsetInfo; class InsetMinipage; @@ -86,8 +85,6 @@ public: void showDocument(); /// show the contents of a file. void showFile(string const &); - /// - void showWrap(InsetWrap *); /// show all forked child processes void showForks(); /// diff --git a/src/frontends/controllers/ChangeLog b/src/frontends/controllers/ChangeLog index 0bc5ce7830..b7bec49a68 100644 --- a/src/frontends/controllers/ChangeLog +++ b/src/frontends/controllers/ChangeLog @@ -1,5 +1,7 @@ 2003-03-05 Angus Leeming + * ControlWrap.[Ch]: rewrite to use the Dialog-based scheme. + * ControlFloat.[Ch]: move insetfloat.h into the .C file. * ControlFloat.[Ch]: rewrite to use the Dialog-based scheme. diff --git a/src/frontends/controllers/ControlWrap.C b/src/frontends/controllers/ControlWrap.C index 6958a76c7c..fee4b5c624 100644 --- a/src/frontends/controllers/ControlWrap.C +++ b/src/frontends/controllers/ControlWrap.C @@ -10,38 +10,33 @@ #include - #include "ControlWrap.h" -#include "BufferView.h" -#include "buffer.h" +#include "funcrequest.h" +#include "lyxlength.h" +#include "insets/insetwrap.h" -ControlWrap::ControlWrap(LyXView & lv, Dialogs & d) - : ControlInset(lv, d) +ControlWrap::ControlWrap(Dialog & parent) + : Dialog::Controller(parent) {} - -void ControlWrap::applyParamsToInset() +void ControlWrap::initialiseParams(string const & data) { - inset()->pageWidth(params().pageWidth); - inset()->placement(params().placement); - bufferview()->updateInset(inset(), true); - + InsetWrapParams params; + InsetWrapMailer::string2params(data, params); + params_.reset(new InsetWrapParams(params)); } -void ControlWrap::applyParamsNoInset() -{} - - -WrapParams const ControlWrap::getParams(InsetWrap const & inset) +void ControlWrap::clearParams() { - return WrapParams(inset); + params_.reset(); } -WrapParams::WrapParams(InsetWrap const & inset) - : pageWidth(inset.pageWidth()), - placement(inset.placement()) -{} +void ControlWrap::dispatchParams() +{ + string const lfun = InsetWrapMailer::params2string("wrap", params()); + kernel().dispatch(FuncRequest(LFUN_INSET_APPLY, lfun)); +} diff --git a/src/frontends/controllers/ControlWrap.h b/src/frontends/controllers/ControlWrap.h index 18decc1aaf..bacfed18a7 100644 --- a/src/frontends/controllers/ControlWrap.h +++ b/src/frontends/controllers/ControlWrap.h @@ -12,58 +12,29 @@ #ifndef CONTROLWRAP_H #define CONTROLWRAP_H +#include "Dialog.h" -#include "ControlInset.h" -#include "lyxlength.h" +class InsetWrapParams; -// needed to instatiate inset->hideDialog in ControlInset -#include "insets/insetwrap.h" - -class InsetWrap; - -/// -struct WrapParams { +class ControlWrap : public Dialog::Controller { +public: /// - WrapParams() {} + ControlWrap(Dialog &); /// - WrapParams(InsetWrap const &); + virtual void initialiseParams(string const & data); + /// clean-up on hide. + virtual void clearParams(); + /// clean-up on hide. + virtual void dispatchParams(); /// - LyXLength pageWidth; + virtual bool isBufferDependent() const { return true; } /// - string placement; -}; - - -inline -bool operator==(WrapParams const & p1, WrapParams const & p2) -{ - return p1.pageWidth == p2.pageWidth && p1.placement == p2.placement; -} - - -inline -bool operator!=(WrapParams const & p1, WrapParams const & p2) -{ - return !(p1 == p2); -} - - -/** A controller for Minipage dialogs. - */ -class ControlWrap : public ControlInset { -public: + InsetWrapParams & params() { return *params_.get(); } /// - ControlWrap(LyXView &, Dialogs &); + InsetWrapParams const & params() const { return *params_.get(); } private: - /// Dispatch the changed parameters to the kernel. - virtual void applyParamsToInset(); /// - virtual void applyParamsNoInset(); - /// get the parameters from the string passed to createInset. - virtual WrapParams const getParams(string const &) - { return WrapParams(); } - /// get the parameters from the inset passed to showInset. - virtual WrapParams const getParams(InsetWrap const &); + boost::scoped_ptr params_; }; #endif diff --git a/src/frontends/guiapi.C b/src/frontends/guiapi.C index 14221f8afc..88bfa5918e 100644 --- a/src/frontends/guiapi.C +++ b/src/frontends/guiapi.C @@ -51,12 +51,6 @@ void gui_ShowFile(string const & f, Dialogs & d) } -void gui_ShowWrap(InsetWrap * iw, Dialogs & d) -{ - d.showWrap(iw); -} - - void gui_ShowForks(Dialogs & d) { d.showForks(); diff --git a/src/frontends/guiapi.h b/src/frontends/guiapi.h index c1dd3cad98..703e8d4ae1 100644 --- a/src/frontends/guiapi.h +++ b/src/frontends/guiapi.h @@ -16,7 +16,6 @@ #include "LString.h" class Dialogs; -class InsetWrap; class InsetGraphics; class InsetMinipage; class InsetTabular; @@ -50,7 +49,6 @@ void gui_ShowTabularCreate(Dialogs &); void gui_ShowTexinfo(Dialogs &); void gui_ShowThesaurus(string const &, Dialogs &); void gui_ShowVCLogFile(Dialogs &); -void gui_ShowWrap(InsetWrap *, Dialogs &); } // extern "C" diff --git a/src/frontends/qt2/ChangeLog b/src/frontends/qt2/ChangeLog index a7c3398c4d..6863a0a15d 100644 --- a/src/frontends/qt2/ChangeLog +++ b/src/frontends/qt2/ChangeLog @@ -1,3 +1,13 @@ +2003-03-05 Angus Leeming + + * QWrap.[Ch]: changes to use the new Dialog-based scheme. + + * Dialogs.C: + * Dialogs2.C: + * Dialogs_impl.h: remove wrap dialog. + + * Dialogs3.C: add wrap dialog. + 2003-03-05 Angus Leeming * QFloat.[Ch]: changes to use the new Dialog-based scheme. diff --git a/src/frontends/qt2/Dialogs.C b/src/frontends/qt2/Dialogs.C index cdd11f9679..6beaf4fcf9 100644 --- a/src/frontends/qt2/Dialogs.C +++ b/src/frontends/qt2/Dialogs.C @@ -48,6 +48,5 @@ Dialogs::Impl::Impl(LyXView & lv, Dialogs & d) thesaurus(lv, d), #endif - vclogfile(lv, d), - wrap(lv, d) + vclogfile(lv, d) {} diff --git a/src/frontends/qt2/Dialogs2.C b/src/frontends/qt2/Dialogs2.C index 9a04b489a7..e06691eb0a 100644 --- a/src/frontends/qt2/Dialogs2.C +++ b/src/frontends/qt2/Dialogs2.C @@ -179,9 +179,3 @@ void Dialogs::showVCLogFile() { pimpl_->vclogfile.controller().show(); } - - -void Dialogs::showWrap(InsetWrap * iw) -{ - pimpl_->wrap.controller().showInset(iw); -} diff --git a/src/frontends/qt2/Dialogs3.C b/src/frontends/qt2/Dialogs3.C index a9fc8d3dba..d524dca92d 100644 --- a/src/frontends/qt2/Dialogs3.C +++ b/src/frontends/qt2/Dialogs3.C @@ -26,6 +26,7 @@ #include "ControlRef.h" #include "ControlToc.h" #include "ControlUrl.h" +#include "ControlWrap.h" #include "QBibitem.h" #include "QBibitemDialog.h" @@ -55,6 +56,8 @@ #include "QTocDialog.h" #include "QURL.h" #include "QURLDialog.h" +#include "QWrap.h" +#include "QWrapDialog.h" #include "Qt2BC.h" #include "ButtonController.h" @@ -78,7 +81,7 @@ namespace { char const * const dialognames[] = { "bibitem", "bibtex", "citation", "error", "ert", "external", "float", "include", "index", "label", "ref", - "toc", "url" }; + "toc", "url", "wrap" }; char const * const * const end_dialognames = dialognames + (sizeof(dialognames) / sizeof(char *)); @@ -166,6 +169,10 @@ Dialog * Dialogs::build(string const & name) dialog->setController(new ControlUrl(*dialog)); dialog->setView(new QURL(*dialog)); dialog->setButtonController(new NoRepeatedApplyReadOnlyBC); + } else if (name == "wrap") { + dialog->setController(new ControlWrap(*dialog)); + dialog->setView(new QWrap(*dialog)); + dialog->setButtonController(new NoRepeatedApplyReadOnlyBC); } return dialog; diff --git a/src/frontends/qt2/Dialogs_impl.h b/src/frontends/qt2/Dialogs_impl.h index c7939f8af6..0fc882c9d0 100644 --- a/src/frontends/qt2/Dialogs_impl.h +++ b/src/frontends/qt2/Dialogs_impl.h @@ -34,7 +34,6 @@ #include "ControlTabular.h" #include "ControlTexinfo.h" #include "ControlVCLog.h" -#include "ControlWrap.h" #include "QAbout.h" #include "QAboutDialog.h" @@ -84,8 +83,6 @@ #include "QVCLog.h" #include "QVCLogDialog.h" -#include "QWrap.h" -#include "QWrapDialog.h" #include "Qt2BC.h" @@ -150,9 +147,6 @@ ThesaurusDialog; typedef GUI VCLogFileDialog; -typedef GUI -WrapDialog; - struct Dialogs::Impl { Impl(LyXView & lv, Dialogs & d); @@ -180,7 +174,6 @@ struct Dialogs::Impl { #endif VCLogFileDialog vclogfile; - WrapDialog wrap; }; #endif // DIALOGS_IMPL_H diff --git a/src/frontends/qt2/QWrap.C b/src/frontends/qt2/QWrap.C index 44f89ae0c0..c6080b7a6b 100644 --- a/src/frontends/qt2/QWrap.C +++ b/src/frontends/qt2/QWrap.C @@ -10,7 +10,6 @@ #include - #include "debug.h" #include "qt_helpers.h" #include "support/lstrings.h" @@ -22,15 +21,18 @@ #include "Qt2BC.h" #include "lengthcombo.h" +#include "insets/insetwrap.h" + #include #include #include -typedef Qt2CB > base_class; + +typedef QController > base_class; -QWrap::QWrap() - : base_class(qt_("LyX: Text-wrapping Settings")) +QWrap::QWrap(Dialog & parent) + : base_class(parent, qt_("LyX: Text-wrapping Settings")) { } @@ -57,9 +59,9 @@ void QWrap::apply() if (dialog_->widthED->text().isEmpty()) unit = LyXLength::UNIT_NONE; - WrapParams & params = controller().params(); + InsetWrapParams & params = controller().params(); - params.pageWidth = LyXLength(value, unit); + params.width = LyXLength(value, unit); switch (dialog_->valignCO->currentItem()) { case 0: @@ -92,9 +94,9 @@ string const numtostr(double val) { void QWrap::update_contents() { - WrapParams & params = controller().params(); + InsetWrapParams & params = controller().params(); - LyXLength len(params.pageWidth); + LyXLength len(params.width); dialog_->widthED->setText(toqstr(numtostr(len.value()))); dialog_->unitsLC->setCurrentItem(len.unit()); diff --git a/src/frontends/qt2/QWrap.h b/src/frontends/qt2/QWrap.h index b664518d13..643c2d0a18 100644 --- a/src/frontends/qt2/QWrap.h +++ b/src/frontends/qt2/QWrap.h @@ -13,19 +13,18 @@ #define QWRAP_H -#include "Qt2Base.h" +#include "QDialogView.h" + class ControlWrap; class QWrapDialog; -class QWrap - : public Qt2CB > -{ +class QWrap : public QController > { public: friend class QWrapDialog; - QWrap(); + QWrap(Dialog &); private: /// Apply changes virtual void apply(); diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index d761b08e8f..8f5308f946 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,14 @@ +2003-03-05 Angus Leeming + + * FormWrap.[Ch]: + * forms/form_wrap.fd: changes to use the new Dialog-based scheme. + + * Dialogs.C: + * Dialogs2.C: + * Dialogs_impl.h: remove wrap dialog. + + * Dialogs3.C: add wrap dialog. + 2003-03-05 Angus Leeming * FormFloat.[Ch]: diff --git a/src/frontends/xforms/Dialogs.C b/src/frontends/xforms/Dialogs.C index 985c3a7dc1..e5f6843a57 100644 --- a/src/frontends/xforms/Dialogs.C +++ b/src/frontends/xforms/Dialogs.C @@ -51,6 +51,5 @@ Dialogs::Impl::Impl(LyXView & lv, Dialogs & d) thesaurus(lv, d), #endif - vclogfile(lv, d), - wrap(lv, d) + vclogfile(lv, d) {} diff --git a/src/frontends/xforms/Dialogs2.C b/src/frontends/xforms/Dialogs2.C index 7fc7aa419e..d911e5d276 100644 --- a/src/frontends/xforms/Dialogs2.C +++ b/src/frontends/xforms/Dialogs2.C @@ -178,9 +178,3 @@ void Dialogs::showVCLogFile() { pimpl_->vclogfile.controller().show(); } - - -void Dialogs::showWrap(InsetWrap * iw) -{ - pimpl_->wrap.controller().showInset(iw); -} diff --git a/src/frontends/xforms/Dialogs3.C b/src/frontends/xforms/Dialogs3.C index f618d1dd53..482c995139 100644 --- a/src/frontends/xforms/Dialogs3.C +++ b/src/frontends/xforms/Dialogs3.C @@ -65,6 +65,10 @@ #include "FormUrl.h" #include "forms/form_url.h" +#include "ControlWrap.h" +#include "FormWrap.h" +#include "forms/form_wrap.h" + #include "xformsBC.h" #include "ButtonController.h" @@ -92,7 +96,7 @@ namespace { char const * const dialognames[] = { "bibitem", "bibtex", "citation", "error", "ert", "external", "float", "include", "index", "label", "ref", - "toc", "url" }; + "toc", "url", "wrap" }; char const * const * const end_dialognames = dialognames + (sizeof(dialognames) / sizeof(char *)); @@ -178,6 +182,10 @@ Dialog * Dialogs::build(string const & name) dialog->setController(new ControlUrl(*dialog)); dialog->setView(new FormUrl(*dialog)); dialog->setButtonController(new NoRepeatedApplyReadOnlyBC); + } else if (name == "wrap") { + dialog->setController(new ControlWrap(*dialog)); + dialog->setView(new FormWrap(*dialog)); + dialog->setButtonController(new NoRepeatedApplyReadOnlyBC); } return dialog; diff --git a/src/frontends/xforms/Dialogs_impl.h b/src/frontends/xforms/Dialogs_impl.h index a46075eab3..5871881734 100644 --- a/src/frontends/xforms/Dialogs_impl.h +++ b/src/frontends/xforms/Dialogs_impl.h @@ -108,11 +108,6 @@ #include "ControlVCLog.h" #include "FormVCLog.h" -#include "ControlWrap.h" -#include "FormWrap.h" -#include "forms/form_wrap.h" - - typedef GUI AboutlyxDialog; @@ -181,9 +176,6 @@ ThesaurusDialog; typedef GUI VCLogFileDialog; -typedef GUI -WrapDialog; - struct Dialogs::Impl { Impl(LyXView & lv, Dialogs & d); @@ -213,7 +205,6 @@ struct Dialogs::Impl { #endif VCLogFileDialog vclogfile; - WrapDialog wrap; }; #endif // DIALOGS_IMPL_H diff --git a/src/frontends/xforms/FormWrap.C b/src/frontends/xforms/FormWrap.C index 3a2c789223..815e609940 100644 --- a/src/frontends/xforms/FormWrap.C +++ b/src/frontends/xforms/FormWrap.C @@ -10,24 +10,24 @@ #include - #include "xformsBC.h" #include "ControlWrap.h" #include "FormWrap.h" #include "forms/form_wrap.h" #include "Tooltips.h" -#include "support/lstrings.h" #include "helper_funcs.h" #include "xforms_helpers.h" #include "checkedwidgets.h" +#include "insets/insetwrap.h" +#include "support/lstrings.h" #include FORMS_H_LOCATION -typedef FormCB > base_class; +typedef FormController > base_class; -FormWrap::FormWrap() - : base_class(_("Wrap Options")) +FormWrap::FormWrap(Dialog & parent) + : base_class(parent, _("Wrap Options")) {} @@ -80,26 +80,29 @@ void FormWrap::build() void FormWrap::apply() { - controller().params().pageWidth = + InsetWrapParams & params = controller().params(); + + params.width = LyXLength(getLengthFromWidgets(dialog_->input_width, dialog_->choice_width_units)); char const c = static_cast(placement_.get()); if (c) - controller().params().placement = c; + params.placement = c; else - controller().params().placement.erase(); // default + params.placement.erase(); // default } void FormWrap::update() { - LyXLength len(controller().params().pageWidth); + InsetWrapParams const & params = controller().params(); + LyXLength len(params.width); fl_set_input(dialog_->input_width, tostr(len.value()).c_str()); fl_set_choice(dialog_->choice_width_units, len.unit() + 1); - if (controller().params().placement.empty()) + if (params.placement.empty()) placement_.set(dialog_->radio_default); // default else - placement_.set(controller().params().placement.c_str()[0]); + placement_.set(params.placement.c_str()[0]); } diff --git a/src/frontends/xforms/FormWrap.h b/src/frontends/xforms/FormWrap.h index be58f55672..86705f724b 100644 --- a/src/frontends/xforms/FormWrap.h +++ b/src/frontends/xforms/FormWrap.h @@ -13,7 +13,7 @@ #define FORMWRAP_H -#include "FormBase.h" +#include "FormDialogView.h" #include "RadioButtonGroup.h" class ControlWrap; @@ -23,10 +23,10 @@ struct FD_wrap; Dialog. */ class FormWrap - : public FormCB > { + : public FormController > { public: /// - FormWrap(); + FormWrap(Dialog &); private: /// Set the Params variable for the Controller. virtual void apply(); diff --git a/src/frontends/xforms/forms/form_wrap.fd b/src/frontends/xforms/forms/form_wrap.fd index 689be37f78..78d443d1b1 100644 --- a/src/frontends/xforms/forms/form_wrap.fd +++ b/src/frontends/xforms/forms/form_wrap.fd @@ -64,7 +64,7 @@ shortcut: resize: FL_RESIZE_X gravity: FL_West FL_NoGravity name: input_width -callback: C_FormBaseInputCB +callback: C_FormDialogView_InputCB argument: 0 -------------------- @@ -82,7 +82,7 @@ shortcut: resize: FL_RESIZE_X gravity: FL_NoGravity FL_NoGravity name: choice_width_units -callback: C_FormBaseInputCB +callback: C_FormDialogView_InputCB argument: 0 -------------------- @@ -118,7 +118,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_NoGravity FL_NoGravity name: radio_left -callback: C_FormBaseInputCB +callback: C_FormDialogView_InputCB argument: 0 -------------------- @@ -136,7 +136,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_NoGravity FL_NoGravity name: radio_right -callback: C_FormBaseInputCB +callback: C_FormDialogView_InputCB argument: 0 -------------------- @@ -154,7 +154,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_NoGravity FL_NoGravity name: radio_outer -callback: C_FormBaseInputCB +callback: C_FormDialogView_InputCB argument: 0 -------------------- @@ -172,7 +172,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_NoGravity FL_NoGravity name: radio_default -callback: C_FormBaseInputCB +callback: C_FormDialogView_InputCB argument: 0 -------------------- @@ -208,7 +208,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_SouthEast FL_SouthEast name: button_close -callback: C_FormBaseCancelCB +callback: C_FormDialogView_CancelCB argument: 0 -------------------- @@ -226,7 +226,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_SouthEast FL_SouthEast name: button_apply -callback: C_FormBaseApplyCB +callback: C_FormDialogView_ApplyCB argument: 0 -------------------- @@ -244,7 +244,7 @@ shortcut: ^M resize: FL_RESIZE_NONE gravity: FL_SouthEast FL_SouthEast name: button_ok -callback: C_FormBaseOKCB +callback: C_FormDialogView_OKCB argument: 0 -------------------- @@ -262,7 +262,7 @@ shortcut: resize: FL_RESIZE_NONE gravity: FL_SouthWest FL_SouthWest name: button_restore -callback: C_FormBaseRestoreCB +callback: C_FormDialogView_RestoreCB argument: 0 ============================== diff --git a/src/insets/ChangeLog b/src/insets/ChangeLog index 1285dcce1b..1c3c455e34 100644 --- a/src/insets/ChangeLog +++ b/src/insets/ChangeLog @@ -1,3 +1,8 @@ +2003-03-05 Angus Leeming + + * insetwrap.[Ch]: define a new class InsetWrapMailer and use + it to communicate with the frontend dialogs. + 2003-03-05 Angus Leeming * insetcollapsable.C (draw): cache the BufferView. diff --git a/src/insets/insetfloat.h b/src/insets/insetfloat.h index bb12e01faf..944f59e2fa 100644 --- a/src/insets/insetfloat.h +++ b/src/insets/insetfloat.h @@ -17,7 +17,6 @@ #include "insetcollapsable.h" #include "toc.h" -class Painter; struct InsetFloatParams { /// @@ -46,10 +45,8 @@ public: InsetFloat(InsetFloat const &, bool same_id = false); /// ~InsetFloat(); - /// virtual dispatch_result localDispatch(FuncRequest const & cmd); - /// void write(Buffer const * buf, std::ostream & os) const; /// diff --git a/src/insets/insetwrap.C b/src/insets/insetwrap.C index b48a1327e4..92bd136ea0 100644 --- a/src/insets/insetwrap.C +++ b/src/insets/insetwrap.C @@ -10,22 +10,25 @@ #include - #include "insetwrap.h" +#include "insettext.h" + +#include "buffer.h" +#include "BufferView.h" +#include "debug.h" +#include "funcrequest.h" +#include "FloatList.h" #include "gettext.h" +#include "LaTeXFeatures.h" #include "lyxfont.h" -#include "BufferView.h" +#include "lyxlex.h" #include "lyxtext.h" -#include "insets/insettext.h" -#include "support/LOstream.h" -#include "support/lstrings.h" -#include "LaTeXFeatures.h" -#include "debug.h" -#include "buffer.h" + #include "frontends/LyXView.h" #include "frontends/Dialogs.h" -#include "lyxlex.h" -#include "FloatList.h" + +#include "support/LOstream.h" +#include "support/lstrings.h" using std::ostream; using std::endl; @@ -49,7 +52,7 @@ string floatname(string const & type, BufferParams const & bp) InsetWrap::InsetWrap(BufferParams const & bp, string const & type) - : InsetCollapsable(bp), width_(50, LyXLength::PCW) + : InsetCollapsable(bp) { string lab(_("wrap: ")); lab += floatname(type, bp); @@ -59,7 +62,8 @@ InsetWrap::InsetWrap(BufferParams const & bp, string const & type) font.decSize(); font.setColor(LColor::collapsable); setLabelFont(font); - Type_ = type; + params_.type = type; + params_.width = LyXLength(50, LyXLength::PCW); setInsetName(type); LyXTextClass const & tclass = bp.getLyXTextClass(); if (tclass.hasLayout(caplayout)) @@ -68,39 +72,61 @@ InsetWrap::InsetWrap(BufferParams const & bp, string const & type) InsetWrap::InsetWrap(InsetWrap const & in, bool same_id) - : InsetCollapsable(in, same_id), Type_(in.Type_), - Placement_(in.Placement_), width_(in.width_) + : InsetCollapsable(in, same_id), params_(in.params_) {} InsetWrap::~InsetWrap() { - hideDialog(); + InsetWrapMailer mailer(*this); + mailer.hideDialog(); } -void InsetWrap::write(Buffer const * buf, ostream & os) const +dispatch_result InsetWrap::localDispatch(FuncRequest const & cmd) { - os << "Wrap " // getInsetName() - << Type_ << '\n'; + Inset::RESULT result = UNDISPATCHED; - if (!Placement_.empty()) { - os << "placement " << Placement_ << "\n"; + switch (cmd.action) { + case LFUN_INSET_MODIFY: { + InsetWrapParams params; + InsetWrapMailer::string2params(cmd.argument, params); + + params_.placement = params.placement; + params_.width = params.width; + + cmd.view()->updateInset(this, true); + result = DISPATCHED; + } + break; + default: + result = InsetCollapsable::localDispatch(cmd); } - os << "width \"" << width_.asString() << "\"\n"; - InsetCollapsable::write(buf, os); + return result; } -void InsetWrap::read(Buffer const * buf, LyXLex & lex) +void InsetWrapParams::write(ostream & os) const +{ + os << "Wrap " // getInsetName() + << type << '\n'; + + if (!placement.empty()) { + os << "placement " << placement << "\n"; + } + os << "width \"" << width.asString() << "\"\n"; +} + + +void InsetWrapParams::read(LyXLex & lex) { if (lex.isOK()) { lex.next(); string token = lex.getString(); if (token == "placement") { lex.next(); - Placement_ = lex.getString(); + placement = lex.getString(); } else { // take countermeasures lex.pushToken(token); @@ -111,7 +137,7 @@ void InsetWrap::read(Buffer const * buf, LyXLex & lex) string token = lex.getString(); if (token == "width") { lex.next(); - width_ = LyXLength(lex.getString()); + width = LyXLength(lex.getString()); } else { lyxerr << "InsetWrap::Read:: Missing 'width'-tag!" << endl; @@ -119,6 +145,19 @@ void InsetWrap::read(Buffer const * buf, LyXLex & lex) lex.pushToken(token); } } +} + + +void InsetWrap::write(Buffer const * buf, ostream & os) const +{ + params_.write(os); + InsetCollapsable::write(buf, os); +} + + +void InsetWrap::read(Buffer const * buf, LyXLex & lex) +{ + params_.read(lex); InsetCollapsable::read(buf, lex); } @@ -145,24 +184,24 @@ string const InsetWrap::editMessage() const int InsetWrap::latex(Buffer const * buf, ostream & os, bool fragile, bool fp) const { - os << "\\begin{floating" << Type_ << '}'; - if (!Placement_.empty()) { - os << '[' << Placement_ << ']'; + os << "\\begin{floating" << params_.type << '}'; + if (!params_.placement.empty()) { + os << '[' << params_.placement << ']'; } - os << '{' << width_.asLatexString() << "}%\n"; + os << '{' << params_.width.asLatexString() << "}%\n"; int const i = inset.latex(buf, os, fragile, fp); - os << "\\end{floating" << Type_ << "}%\n"; + os << "\\end{floating" << params_.type << "}%\n"; return i + 2; } int InsetWrap::docbook(Buffer const * buf, ostream & os, bool mixcont) const { - os << '<' << Type_ << '>'; + os << '<' << params_.type << '>'; int const i = inset.docbook(buf, os, mixcont); - os << "'; + os << "'; return i; } @@ -188,7 +227,7 @@ int InsetWrap::getMaxWidth(BufferView * bv, UpdatableInset const * inset) static_cast(owner())->getMaxWidth(bv, inset) < 0) { return -1; } - if (!width_.zero()) { + if (!params_.width.zero()) { int const ww1 = latexTextWidth(bv); int const ww2 = InsetCollapsable::getMaxWidth(bv, inset); if (ww2 > 0 && ww2 < ww1) { @@ -203,26 +242,26 @@ int InsetWrap::getMaxWidth(BufferView * bv, UpdatableInset const * inset) int InsetWrap::latexTextWidth(BufferView * bv) const { - return width_.inPixels(InsetCollapsable::latexTextWidth(bv)); + return params_.width.inPixels(InsetCollapsable::latexTextWidth(bv)); } string const & InsetWrap::type() const { - return Type_; + return params_.type; } LyXLength const & InsetWrap::pageWidth() const { - return width_; + return params_.width; } void InsetWrap::pageWidth(LyXLength const & ll) { - if (ll != width_) { - width_ = ll; + if (ll != params_.width) { + params_.width = ll; need_update = FULL; } } @@ -230,20 +269,22 @@ void InsetWrap::pageWidth(LyXLength const & ll) void InsetWrap::placement(string const & p) { - Placement_ = p; + params_.placement = p; } string const & InsetWrap::placement() const { - return Placement_; + return params_.placement; } bool InsetWrap::showInsetDialog(BufferView * bv) const { if (!inset.showInsetDialog(bv)) { - bv->owner()->getDialogs().showWrap(const_cast(this)); + InsetWrap * tmp = const_cast(this); + InsetWrapMailer mailer(*tmp); + mailer.showDialog(); } return true; } @@ -267,3 +308,51 @@ void InsetWrap::addToToc(toc::TocList & toclist, Buffer const * buf) const tmp = tmp->next(); } } + + +InsetWrapMailer::InsetWrapMailer(InsetWrap & inset) + : name_("wrap"), inset_(inset) +{} + + +string const InsetWrapMailer::inset2string() const +{ + return params2string(name(), inset_.params()); +} + + +void InsetWrapMailer::string2params(string const & in, + InsetWrapParams & params) +{ + params = InsetWrapParams(); + + string name; + string body = split(in, name, ' '); + + if (name != "wrap" || body.empty()) + return; + + // This is part of the inset proper that is usually swallowed + // by Buffer::readInset + body = split(body, name, '\n'); + if (!prefixIs(name, "Wrap ")) + return; + + istringstream data(body); + LyXLex lex(0,0); + lex.setStream(data); + + params.read(lex); +} + + +string const +InsetWrapMailer::params2string(string const & name, + InsetWrapParams const & params) +{ + ostringstream data; + data << name << ' '; + params.write(data); + + return data.str(); +} diff --git a/src/insets/insetwrap.h b/src/insets/insetwrap.h index 2724d8e957..b4525707f0 100644 --- a/src/insets/insetwrap.h +++ b/src/insets/insetwrap.h @@ -16,13 +16,24 @@ #include "toc.h" #include "lyxlength.h" -#include -class Painter; +struct InsetWrapParams { + /// + void write(std::ostream &) const; + /// + void read(LyXLex &); + + /// + string type; + /// + string placement; + /// + LyXLength width; +}; -/** The wrap inset -*/ +/** The wrap inset + */ class InsetWrap : public InsetCollapsable { public: /// @@ -32,6 +43,8 @@ public: /// ~InsetWrap(); /// + virtual dispatch_result localDispatch(FuncRequest const & cmd); + /// void write(Buffer const * buf, std::ostream & os) const; /// void read(Buffer const * buf, LyXLex & lex); @@ -66,16 +79,39 @@ public: /// bool showInsetDialog(BufferView *) const; /// - boost::signal0 hideDialog; - /// int latexTextWidth(BufferView *) const; + /// + InsetWrapParams const & params() const { return params_; } private: /// - string Type_; + InsetWrapParams params_; +}; + + + +#include "mailinset.h" + + +class InsetWrapMailer : public MailInset { +public: + /// + InsetWrapMailer(InsetWrap & inset); + /// + virtual Inset & inset() const { return inset_; } + /// + virtual string const & name() const { return name_; } + /// + virtual string const inset2string() const; + /// + static void string2params(string const &, InsetWrapParams &); + /// + static string const params2string(string const & name, + InsetWrapParams const &); +private: /// - string Placement_; + string const name_; /// - LyXLength width_; + InsetWrap & inset_; }; #endif -- 2.39.2