mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
Allow toggling (no)limits only after mathop symbol
In particular, introduce the new InsetMathScript::allowLimits method that checks for that and honor it in getStatus/ddoDispatch.
This commit is contained in:
parent
6014492699
commit
7b7ed64a0e
@ -365,6 +365,20 @@ void InsetMathScript::drawT(TextPainter & pain, int x, int y) const
|
||||
}
|
||||
|
||||
|
||||
// FIXME: See InsetMathSymbol::takesLimits, which seems to attempt the
|
||||
// same in a hardcoded way. takeLimits use is currently commented out in
|
||||
// InsetMathScript::metrics. It seems that the mathop test is general
|
||||
// enough, but only time will tell.
|
||||
bool InsetMathScript::allowsLimits() const
|
||||
{
|
||||
if (nuc().empty())
|
||||
return false;
|
||||
// Only makes sense for insets of mathop class
|
||||
if (nuc().back()->mathClass() != MC_OP)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool InsetMathScript::hasLimits() const
|
||||
{
|
||||
@ -375,8 +389,9 @@ bool InsetMathScript::hasLimits() const
|
||||
return false;
|
||||
|
||||
// we can only display limits if the nucleus wants some
|
||||
if (nuc().empty())
|
||||
if (!allowsLimits())
|
||||
return false;
|
||||
// FIXME: this is some hardcoding done in InsetMathSymbol::metrics.
|
||||
if (!nuc().back()->isScriptable())
|
||||
return false;
|
||||
|
||||
@ -735,6 +750,9 @@ void InsetMathScript::doDispatch(Cursor & cur, FuncRequest & cmd)
|
||||
//LYXERR("InsetMathScript: request: " << cmd);
|
||||
|
||||
if (cmd.action() == LFUN_MATH_LIMITS) {
|
||||
// only when nucleus allows this
|
||||
if (!allowsLimits())
|
||||
return;
|
||||
cur.recordUndoInset();
|
||||
if (!cmd.argument().empty()) {
|
||||
if (cmd.argument() == "limits")
|
||||
@ -758,15 +776,19 @@ bool InsetMathScript::getStatus(Cursor & cur, FuncRequest const & cmd,
|
||||
FuncStatus & flag) const
|
||||
{
|
||||
if (cmd.action() == LFUN_MATH_LIMITS) {
|
||||
if (!cmd.argument().empty()) {
|
||||
if (cmd.argument() == "limits")
|
||||
flag.setOnOff(limits_ == 1);
|
||||
else if (cmd.argument() == "nolimits")
|
||||
flag.setOnOff(limits_ == -1);
|
||||
else
|
||||
flag.setOnOff(limits_ == 0);
|
||||
}
|
||||
flag.setEnabled(true);
|
||||
// only when nucleus allows this
|
||||
if (allowsLimits()) {
|
||||
if (!cmd.argument().empty()) {
|
||||
if (cmd.argument() == "limits")
|
||||
flag.setOnOff(limits_ == 1);
|
||||
else if (cmd.argument() == "nolimits")
|
||||
flag.setOnOff(limits_ == -1);
|
||||
else
|
||||
flag.setOnOff(limits_ == 0);
|
||||
}
|
||||
flag.setEnabled(true);
|
||||
} else
|
||||
flag.setEnabled(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -138,6 +138,8 @@ private:
|
||||
/// shifts the superscript to the right, and a negative value shifts the
|
||||
/// subscript to the left.
|
||||
int nker(BufferView const * bv) const;
|
||||
/// can one change how scripts are drawn?
|
||||
bool allowsLimits() const;
|
||||
/// where do we have to draw the scripts?
|
||||
bool hasLimits() const;
|
||||
/// clean up empty cells and return true if a cell has been deleted.
|
||||
|
Loading…
Reference in New Issue
Block a user