From 625e7609f0bb4087f0cd91ae3853beee6c6ba402 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Tue, 19 Apr 2016 15:45:08 +0200 Subject: [PATCH] Cleanup bv-dependent variables in InsetCollapsable It makes sense to group all the variables in a common struct instead of having four maps. --- src/insets/InsetCollapsable.cpp | 50 ++++++++++++++++----------------- src/insets/InsetCollapsable.h | 23 +++++++++------ 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/insets/InsetCollapsable.cpp b/src/insets/InsetCollapsable.cpp index 54e813b1ac..268b8f2043 100644 --- a/src/insets/InsetCollapsable.cpp +++ b/src/insets/InsetCollapsable.cpp @@ -48,22 +48,20 @@ InsetCollapsable::InsetCollapsable(Buffer * buf, InsetText::UsePlain ltype) // The sole purpose of this copy constructor is to make sure -// that the mouse_hover_ map is not copied and remains empty. +// that the view_ map is not copied and remains empty. InsetCollapsable::InsetCollapsable(InsetCollapsable const & rhs) : InsetText(rhs), status_(rhs.status_), - labelstring_(rhs.labelstring_), - button_dim_(rhs.button_dim_), - openinlined_(rhs.openinlined_) + labelstring_(rhs.labelstring_) {} InsetCollapsable::~InsetCollapsable() { - map::iterator it = mouse_hover_.begin(); - map::iterator end = mouse_hover_.end(); + map::iterator it = view_.begin(); + map::iterator end = view_.end(); for (; it != end; ++it) - if (it->second) + if (it->second.mouse_hover_) it->first->clearLastInset(this); } @@ -72,7 +70,7 @@ InsetCollapsable::CollapseStatus InsetCollapsable::status(BufferView const & bv) { if (decoration() == InsetLayout::CONGLOMERATE) return status_; - return auto_open_[&bv] ? Open : status_; + return view_[&bv].auto_open_ ? Open : status_; } @@ -81,7 +79,7 @@ InsetCollapsable::Geometry InsetCollapsable::geometry(BufferView const & bv) con switch (decoration()) { case InsetLayout::CLASSIC: if (status(bv) == Open) - return openinlined_[&bv] ? LeftButton : TopButton; + return view_[&bv].openinlined_ ? LeftButton : TopButton; return ButtonOnly; case InsetLayout::MINIMALISTIC: @@ -155,7 +153,7 @@ Dimension InsetCollapsable::dimensionCollapsed(BufferView const & bv) const void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const { - auto_open_[mi.base.bv] = mi.base.bv->cursor().isInside(this); + view_[mi.base.bv].auto_open_ = mi.base.bv->cursor().isInside(this); FontInfo tmpfont = mi.base.font; mi.base.font = getFont(); @@ -190,7 +188,7 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const case LeftButton: case ButtonOnly: if (hasFixedWidth()){ - int const mindim = button_dim_[&bv].x2 - button_dim_[&bv].x1; + int const mindim = view_[&bv].button_dim_.x2 - view_[&bv].button_dim_.x1; if (mi.base.textwidth < mindim) mi.base.textwidth = mindim; } @@ -198,8 +196,8 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const if (geometry(bv) == TopButton || geometry(bv) == LeftButton) { Dimension textdim; InsetText::metrics(mi, textdim); - openinlined_[&bv] = (textdim.wid + dim.wid) < mi.base.textwidth; - if (openinlined_[&bv]) { + view_[&bv].openinlined_ = (textdim.wid + dim.wid) < mi.base.textwidth; + if (view_[&bv].openinlined_) { // Correct for button width. dim.wid += textdim.wid; dim.des = max(dim.des - textdim.asc + dim.asc, textdim.des); @@ -219,7 +217,7 @@ void InsetCollapsable::metrics(MetricsInfo & mi, Dimension & dim) const bool InsetCollapsable::setMouseHover(BufferView const * bv, bool mouse_hover) const { - mouse_hover_[bv] = mouse_hover; + view_[bv].mouse_hover_ = mouse_hover; return true; } @@ -228,7 +226,7 @@ void InsetCollapsable::draw(PainterInfo & pi, int x, int y) const { BufferView const & bv = *pi.base.bv; - auto_open_[&bv] = bv.cursor().isInside(this); + view_[&bv].auto_open_ = bv.cursor().isInside(this); FontInfo tmpfont = pi.base.font; pi.base.font = getFont(); @@ -240,20 +238,20 @@ void InsetCollapsable::draw(PainterInfo & pi, int x, int y) const if (geometry(bv) == TopButton || geometry(bv) == LeftButton || geometry(bv) == ButtonOnly) { - button_dim_[&bv].x1 = x + 0; - button_dim_[&bv].x2 = x + dimc.width(); - button_dim_[&bv].y1 = y - dimc.asc; - button_dim_[&bv].y2 = y + dimc.des; + view_[&bv].button_dim_.x1 = x + 0; + view_[&bv].button_dim_.x2 = x + dimc.width(); + view_[&bv].button_dim_.y1 = y - dimc.asc; + view_[&bv].button_dim_.y2 = y + dimc.des; FontInfo labelfont = getLabelfont(); labelfont.setColor(labelColor()); pi.pain.buttonText(x, y, buttonLabel(bv), labelfont, - mouse_hover_[&bv]); + view_[&bv].mouse_hover_); } else { - button_dim_[&bv].x1 = 0; - button_dim_[&bv].y1 = 0; - button_dim_[&bv].x2 = 0; - button_dim_[&bv].y2 = 0; + view_[&bv].button_dim_.x1 = 0; + view_[&bv].button_dim_.y1 = 0; + view_[&bv].button_dim_.x2 = 0; + view_[&bv].button_dim_.y2 = 0; } Dimension const textdim = InsetText::dimension(bv); @@ -391,7 +389,7 @@ bool InsetCollapsable::descendable(BufferView const & bv) const bool InsetCollapsable::clickable(BufferView const & bv, int x, int y) const { - return button_dim_[&bv].contains(x, y); + return view_[&bv].button_dim_.contains(x, y); } @@ -428,7 +426,7 @@ Inset * InsetCollapsable::editXY(Cursor & cur, int x, int y) { //lyxerr << "InsetCollapsable: edit xy" << endl; if (geometry(cur.bv()) == ButtonOnly - || (button_dim_[&cur.bv()].contains(x, y) + || (view_[&cur.bv()].button_dim_.contains(x, y) && geometry(cur.bv()) != NoButton)) return this; cur.push(*this); diff --git a/src/insets/InsetCollapsable.h b/src/insets/InsetCollapsable.h index 298c4e14ec..ec23773123 100644 --- a/src/insets/InsetCollapsable.h +++ b/src/insets/InsetCollapsable.h @@ -160,17 +160,22 @@ private: /// docstring labelstring_; - /// FIXME: the variables below should be grouped in a View subclass (as in MVC) + // These variables depend of the view in which the inset is displayed + struct View + { + /// The dimension of the inset button + Box button_dim_; + /// a substatus of the Open status, determined automatically in metrics + bool openinlined_; + /// the inset will automatically open when the cursor is inside. This is + /// dependent on the bufferview, compare with MathMacro::editing_. + bool auto_open_; + /// changes color when mouse enters/leaves this inset + bool mouse_hover_; + }; /// - mutable std::map button_dim_; - /// a substatus of the Open status, determined automatically in metrics - mutable std::map openinlined_; - /// the inset will automatically open when the cursor is inside. This is - /// dependent on the bufferview, compare with MathMacro::editing_. - mutable std::map auto_open_; - /// changes color when mouse enters/leaves this inset - mutable std::map mouse_hover_; + mutable std::map view_; }; } // namespace lyx