using std::ostream;
-void getOutOfInset(LCursor & cur, InsetBase const & in)
+void leaveInset(LCursor & cur, InsetBase const & in)
{
for (unsigned int i = 0; i != cur.size(); ++i) {
if (&cur[i].inset() == &in) {
: InsetText(bp), label("Label"), status_(status), openinlined_(false)
{
setAutoBreakRows(true);
- setDrawFrame(InsetText::ALWAYS);
+ setDrawFrame(true);
setFrameColor(LColor::collapsableframe);
setInsetName("Collapsable");
setButtonLabel();
if (openinlined_)
InsetText::draw(pi, x + dimc.width(),
y - aa + textdim_.asc);
- else
+ else
InsetText::draw(pi, x, dimc.height()
+ y - aa + textdim_.asc);
}
}
-InsetBase * InsetCollapsable::editXY(LCursor & cur, int x, int y)
+InsetBase * InsetCollapsable::editXY(LCursor & cur, int x, int y) const
{
- cur.push(*this);
+ cur.push(const_cast<InsetCollapsable&>(*this));
//lyxerr << "InsetCollapsable: edit xy" << endl;
if (status_ == Collapsed) {
- setStatus(Open);
- // We are not calling editXY() because the row cache of the
- // inset might be invalid. 'Entering from the left' should be
- // ok, though.
- InsetText::edit(cur, true);
- return this;
+ return const_cast<InsetCollapsable*>(this);
}
return InsetText::editXY(cur, x, y);
}
void InsetCollapsable::priv_dispatch(LCursor & cur, FuncRequest & cmd)
{
- //lyxerr << "\nInsetCollapsable::priv_dispatch (begin): cmd: " << cmd
- // << " button y: " << button_dim.y2 << endl;
+// lyxerr << "InsetCollapsable::priv_dispatch (begin): cmd: " << cmd
+// << " button y: " << button_dim.y2
+// << " coll/inline/open: " << status_ << endl;
+
+ lyxerr << "InsetCollapsable::priv_dispatch (begin): cmd: " << cmd
+ << " cur: " << cur << " bvcur: " << cur.bv().cursor() << endl;
+
switch (cmd.action) {
case LFUN_MOUSE_PRESS:
if (status_ == Inlined)
InsetText::priv_dispatch(cur, cmd);
else if (status_ == Open && !hitButton(cmd))
InsetText::priv_dispatch(cur, cmd);
+ else
+ cur.noUpdate();
break;
case LFUN_MOUSE_MOTION:
lyxerr << "InsetCollapsable::lfunMouseRelease 1" << endl;
setStatus(Open);
edit(cur, true);
+ cur.bv().cursor() = cur;
break;
case Open: {
- FuncRequest cmd1 = cmd;
- if (hitButton(cmd1)) {
+ if (hitButton(cmd)) {
lyxerr << "InsetCollapsable::lfunMouseRelease 2" << endl;
setStatus(Collapsed);
- cur.undispatched();
- cmd = FuncRequest(LFUN_FINISHED_RIGHT);
+ leaveInset(cur, *this);
+ cur.bv().cursor() = cur;
} else {
lyxerr << "InsetCollapsable::lfunMouseRelease 3" << endl;
InsetText::priv_dispatch(cur, cmd);
setStatus(Open);
else if (cmd.argument == "close") {
setStatus(Collapsed);
- getOutOfInset(cur, *this);
+ leaveInset(cur, *this);
} else if (cmd.argument == "toggle"
|| cmd.argument.empty()) {
if (isOpen()) {
setStatus(Collapsed);
- getOutOfInset(cur, *this);
+ leaveInset(cur, *this);
} else
setStatus(Open);
- }
+ } else // if assign or anything else
+ cur.undispatched();
cur.dispatched();
break;