mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-25 05:55:34 +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
|
bool InsetMathScript::hasLimits() const
|
||||||
{
|
{
|
||||||
@ -375,8 +389,9 @@ bool InsetMathScript::hasLimits() const
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// we can only display limits if the nucleus wants some
|
// we can only display limits if the nucleus wants some
|
||||||
if (nuc().empty())
|
if (!allowsLimits())
|
||||||
return false;
|
return false;
|
||||||
|
// FIXME: this is some hardcoding done in InsetMathSymbol::metrics.
|
||||||
if (!nuc().back()->isScriptable())
|
if (!nuc().back()->isScriptable())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -735,6 +750,9 @@ void InsetMathScript::doDispatch(Cursor & cur, FuncRequest & cmd)
|
|||||||
//LYXERR("InsetMathScript: request: " << cmd);
|
//LYXERR("InsetMathScript: request: " << cmd);
|
||||||
|
|
||||||
if (cmd.action() == LFUN_MATH_LIMITS) {
|
if (cmd.action() == LFUN_MATH_LIMITS) {
|
||||||
|
// only when nucleus allows this
|
||||||
|
if (!allowsLimits())
|
||||||
|
return;
|
||||||
cur.recordUndoInset();
|
cur.recordUndoInset();
|
||||||
if (!cmd.argument().empty()) {
|
if (!cmd.argument().empty()) {
|
||||||
if (cmd.argument() == "limits")
|
if (cmd.argument() == "limits")
|
||||||
@ -758,15 +776,19 @@ bool InsetMathScript::getStatus(Cursor & cur, FuncRequest const & cmd,
|
|||||||
FuncStatus & flag) const
|
FuncStatus & flag) const
|
||||||
{
|
{
|
||||||
if (cmd.action() == LFUN_MATH_LIMITS) {
|
if (cmd.action() == LFUN_MATH_LIMITS) {
|
||||||
if (!cmd.argument().empty()) {
|
// only when nucleus allows this
|
||||||
if (cmd.argument() == "limits")
|
if (allowsLimits()) {
|
||||||
flag.setOnOff(limits_ == 1);
|
if (!cmd.argument().empty()) {
|
||||||
else if (cmd.argument() == "nolimits")
|
if (cmd.argument() == "limits")
|
||||||
flag.setOnOff(limits_ == -1);
|
flag.setOnOff(limits_ == 1);
|
||||||
else
|
else if (cmd.argument() == "nolimits")
|
||||||
flag.setOnOff(limits_ == 0);
|
flag.setOnOff(limits_ == -1);
|
||||||
}
|
else
|
||||||
flag.setEnabled(true);
|
flag.setOnOff(limits_ == 0);
|
||||||
|
}
|
||||||
|
flag.setEnabled(true);
|
||||||
|
} else
|
||||||
|
flag.setEnabled(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,6 +138,8 @@ private:
|
|||||||
/// shifts the superscript to the right, and a negative value shifts the
|
/// shifts the superscript to the right, and a negative value shifts the
|
||||||
/// subscript to the left.
|
/// subscript to the left.
|
||||||
int nker(BufferView const * bv) const;
|
int nker(BufferView const * bv) const;
|
||||||
|
/// can one change how scripts are drawn?
|
||||||
|
bool allowsLimits() const;
|
||||||
/// where do we have to draw the scripts?
|
/// where do we have to draw the scripts?
|
||||||
bool hasLimits() const;
|
bool hasLimits() const;
|
||||||
/// clean up empty cells and return true if a cell has been deleted.
|
/// clean up empty cells and return true if a cell has been deleted.
|
||||||
|
Loading…
Reference in New Issue
Block a user