mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 13:31:49 +00:00
Get rid of unnecessary flickering when clicking in outliner
No need to collapse and re-expand the node where the currently selected item is in.
This commit is contained in:
parent
610e2f501b
commit
ac275a66b5
@ -334,16 +334,20 @@ void TocWidget::on_depthSL_valueChanged(int depth)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TocWidget::setTreeDepth(int depth)
|
void TocWidget::setTreeDepth(int depth, bool const maintain_current)
|
||||||
{
|
{
|
||||||
depth_ = depth;
|
depth_ = depth;
|
||||||
if (!tocTV->model())
|
if (!tocTV->model())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (depth == 0)
|
if (maintain_current)
|
||||||
tocTV->collapseAll();
|
collapseAllOthers(depth);
|
||||||
else
|
else {
|
||||||
tocTV->expandToDepth(depth - 1);
|
if (depth == 0)
|
||||||
|
tocTV->collapseAll();
|
||||||
|
else
|
||||||
|
tocTV->expandToDepth(depth - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -518,7 +522,7 @@ void TocWidget::finishUpdateView()
|
|||||||
// and outweighted by TocModels::reset() anyway.
|
// and outweighted by TocModels::reset() anyway.
|
||||||
if (canNavigate()) {
|
if (canNavigate()) {
|
||||||
if (!persistent_ && !keep_expanded_)
|
if (!persistent_ && !keep_expanded_)
|
||||||
setTreeDepth(depth_);
|
setTreeDepth(depth_, true);
|
||||||
keep_expanded_ = false;
|
keep_expanded_ = false;
|
||||||
persistentCB->setChecked(persistent_);
|
persistentCB->setChecked(persistent_);
|
||||||
// select the item at current cursor location
|
// select the item at current cursor location
|
||||||
@ -573,6 +577,62 @@ void TocWidget::filterContents()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TocWidget::isAncestor(QModelIndex const & ancestor,
|
||||||
|
QModelIndex const & descendant) const
|
||||||
|
{
|
||||||
|
QModelIndex mi = descendant;
|
||||||
|
while (true) {
|
||||||
|
if (ancestor == mi.parent())
|
||||||
|
return true;
|
||||||
|
if (mi == QModelIndex())
|
||||||
|
return false;
|
||||||
|
mi = mi.parent();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QModelIndex TocWidget::getAncestor(QModelIndex const & descendant) const
|
||||||
|
{
|
||||||
|
QModelIndex mi = descendant;
|
||||||
|
while (true) {
|
||||||
|
if (mi.parent() == QModelIndex())
|
||||||
|
return mi;
|
||||||
|
mi = mi.parent();
|
||||||
|
}
|
||||||
|
return mi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TocWidget::collapseAllOthers(int const depth)
|
||||||
|
{
|
||||||
|
if (!tocTV->model())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QModelIndexList indices = tocTV->model()->match(
|
||||||
|
tocTV->model()->index(0, 0),
|
||||||
|
Qt::DisplayRole, ".*", -1,
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
|
||||||
|
Qt::MatchFlags(Qt::MatchRegularExpression|Qt::MatchRecursive));
|
||||||
|
#else
|
||||||
|
// deprecated in Qt 5.15.
|
||||||
|
Qt::MatchFlags(Qt::MatchRegExp|Qt::MatchRecursive));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int size = indices.size();
|
||||||
|
// collapse parents which are not in our ancestry line
|
||||||
|
for (int i = size - 1; i >= 0; i--) {
|
||||||
|
QModelIndex index = indices[i];
|
||||||
|
if (tocTV->isExpanded(index)
|
||||||
|
&& !isAncestor(index, tocTV->currentIndex())) {
|
||||||
|
tocTV->collapse(index);
|
||||||
|
if (depth > 0 && index.parent() == QModelIndex())
|
||||||
|
tocTV->expandRecursively(index, depth - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static QString decodeType(QString const & str)
|
static QString decodeType(QString const & str)
|
||||||
{
|
{
|
||||||
QString type = str;
|
QString type = str;
|
||||||
|
@ -102,8 +102,14 @@ private:
|
|||||||
///
|
///
|
||||||
bool isSortable()
|
bool isSortable()
|
||||||
{ return current_type_ != "tableofcontents"; }
|
{ return current_type_ != "tableofcontents"; }
|
||||||
|
/// \returns the top-most ancestor of \p descendant
|
||||||
|
QModelIndex getAncestor(QModelIndex const & descendant) const;
|
||||||
|
/// \returns \c true if \p ancestor is an ancestor (parent, grandparent, etc.) of \p descendant
|
||||||
|
bool isAncestor(QModelIndex const & ancestor, QModelIndex const & descendant) const;
|
||||||
|
/// collapse all nodes to \c depth except for the branch of the currently active item
|
||||||
|
void collapseAllOthers(int const depth);
|
||||||
///
|
///
|
||||||
void setTreeDepth(int depth);
|
void setTreeDepth(int depth, bool const maintain_current = false);
|
||||||
///
|
///
|
||||||
void outline(FuncCode func_code);
|
void outline(FuncCode func_code);
|
||||||
/// finds the inset that is connected to the current item,
|
/// finds the inset that is connected to the current item,
|
||||||
|
Loading…
Reference in New Issue
Block a user