mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-07 02:28:35 +00:00
Fixup b321bb1a
: set changebar when inset contains changes
Add Paragraph::isChanged() and InetText::isCgchanged() which indicate the presence of a change in the relevant object. Sets Row::needsChangebar() when adding an inset that contains changes. Related to bug #8645.
This commit is contained in:
parent
45f8254cbd
commit
ce950f1ea5
@ -611,6 +611,12 @@ bool Paragraph::isChanged(pos_type start, pos_type end) const
|
||||
}
|
||||
|
||||
|
||||
bool Paragraph::isChanged() const
|
||||
{
|
||||
return d->changes_.isChanged();
|
||||
}
|
||||
|
||||
|
||||
bool Paragraph::isMergedOnEndOfParDeletion(bool trackChanges) const
|
||||
{
|
||||
// keep the logic here in sync with the logic of eraseChars()
|
||||
|
@ -268,6 +268,8 @@ public:
|
||||
bool isChanged(pos_type start, pos_type end) const;
|
||||
/// is there an unchanged char at the given pos ?
|
||||
bool isChanged(pos_type pos) const;
|
||||
/// is there a change in the paragraph ?
|
||||
bool isChanged() const;
|
||||
|
||||
/// is there an insertion at the given pos ?
|
||||
bool isInserted(pos_type pos) const;
|
||||
|
@ -392,6 +392,7 @@ void Row::add(pos_type const pos, Inset const * ins, Dimension const & dim,
|
||||
e.dim = dim;
|
||||
elements_.push_back(e);
|
||||
dim_.wid += dim.wid;
|
||||
changebar_ |= ins->isChanged();
|
||||
}
|
||||
|
||||
|
||||
|
@ -594,6 +594,8 @@ public:
|
||||
*/
|
||||
virtual bool resetFontEdit() const;
|
||||
|
||||
/// does the inset contain changes ?
|
||||
virtual bool isChanged() const { return false; }
|
||||
/// set the change for the entire inset
|
||||
virtual void setChange(Change const &) {}
|
||||
/// accept the changes within the inset
|
||||
|
@ -445,13 +445,9 @@ docstring const InsetCollapsible::getNewLabel(docstring const & l) const
|
||||
pos_type const n = min(max_length, p_siz);
|
||||
pos_type i = 0;
|
||||
pos_type j = 0;
|
||||
bool changed_content = false;
|
||||
for (; i < n && j < p_siz; ++j) {
|
||||
if (paragraphs().begin()->isChanged(j)) {
|
||||
changed_content = true;
|
||||
if (paragraphs().begin()->isDeleted(j))
|
||||
continue;
|
||||
}
|
||||
if (paragraphs().begin()->isDeleted(j))
|
||||
continue;
|
||||
if (paragraphs().begin()->isInset(j)) {
|
||||
if (!paragraphs().begin()->getInset(j)->isChar())
|
||||
continue;
|
||||
@ -463,12 +459,7 @@ docstring const InsetCollapsible::getNewLabel(docstring const & l) const
|
||||
if (paragraphs().size() > 1 || (i > 0 && j < p_siz)) {
|
||||
label << "...";
|
||||
}
|
||||
docstring lbl;
|
||||
// indicate changed content in label (#8645)
|
||||
if (changed_content)
|
||||
lbl = char_type(0x270E);// ✎ U+270E LOWER RIGHT PENCIL
|
||||
lbl += label.str();
|
||||
return lbl.empty() ? l : lbl;
|
||||
return label.str().empty() ? l : label.str();
|
||||
}
|
||||
|
||||
|
||||
@ -668,11 +659,14 @@ docstring InsetCollapsible::getLabel() const
|
||||
|
||||
docstring const InsetCollapsible::buttonLabel(BufferView const & bv) const
|
||||
{
|
||||
// indicate changed content in label (#8645)
|
||||
// ✎ U+270E LOWER RIGHT PENCIL
|
||||
docstring indicator = isChanged() ? docstring(1, 0x270E) : docstring();
|
||||
InsetLayout const & il = getLayout();
|
||||
docstring const label = getLabel();
|
||||
if (!il.contentaslabel() || geometry(bv) != ButtonOnly)
|
||||
return label;
|
||||
return getNewLabel(label);
|
||||
return indicator + label;
|
||||
return indicator + getNewLabel(label);
|
||||
}
|
||||
|
||||
|
||||
|
@ -410,6 +410,18 @@ void InsetText::fixParagraphsFont()
|
||||
}
|
||||
|
||||
|
||||
bool InsetText::isChanged() const
|
||||
{
|
||||
ParagraphList::const_iterator pit = paragraphs().begin();
|
||||
ParagraphList::const_iterator end = paragraphs().end();
|
||||
for (; pit != end; ++pit) {
|
||||
if (pit->isChanged())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void InsetText::setChange(Change const & change)
|
||||
{
|
||||
ParagraphList::iterator pit = paragraphs().begin();
|
||||
@ -1077,7 +1089,6 @@ docstring InsetText::toolTipText(docstring prefix, size_t const len) const
|
||||
ParagraphList::const_iterator end = paragraphs().end();
|
||||
ParagraphList::const_iterator it = beg;
|
||||
bool ref_printed = false;
|
||||
bool changed_content = false;
|
||||
|
||||
for (; it != end; ++it) {
|
||||
if (it != beg)
|
||||
@ -1085,13 +1096,11 @@ docstring InsetText::toolTipText(docstring prefix, size_t const len) const
|
||||
if ((*it).isRTL(buffer().params()))
|
||||
oss << "<div dir=\"rtl\">";
|
||||
writePlaintextParagraph(buffer(), *it, oss, rp, ref_printed, len);
|
||||
if ((*it).isChanged(0, (*it).size()))
|
||||
changed_content = true;
|
||||
if (oss.tellp() >= 0 && size_t(oss.tellp()) > len)
|
||||
break;
|
||||
}
|
||||
docstring str = oss.str();
|
||||
if (changed_content)
|
||||
if (isChanged())
|
||||
str += from_ascii("\n\n") + _("[contains tracked changes]");
|
||||
support::truncateWithEllipsis(str, len);
|
||||
return str;
|
||||
|
@ -124,6 +124,8 @@ public:
|
||||
///
|
||||
void fixParagraphsFont();
|
||||
|
||||
/// does the inset contain changes ?
|
||||
bool isChanged() const;
|
||||
/// set the change for the entire inset
|
||||
void setChange(Change const & change);
|
||||
/// accept the changes within the inset
|
||||
|
Loading…
Reference in New Issue
Block a user