1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 02:36:34 +01:00

Improved version of 'TreeWidget::filterString()'

This commit is contained in:
S. Razi Alavizadeh 2013-03-05 00:04:43 +03:30
parent b9858f98a4
commit a7a4ef87a7
2 changed files with 27 additions and 37 deletions

View File

@ -57,7 +57,7 @@ BrowsingLibrary::BrowsingLibrary(QupZilla* mainClass, QWidget* parent)
ui->tabs->setFocus();
connect(ui->tabs, SIGNAL(CurrentChanged(int)), this, SLOT(currentIndexChanged(int)));
connect(ui->searchLine, SIGNAL(cursorPositionChanged(int, int)), this, SLOT(search()));
connect(ui->searchLine, SIGNAL(textChanged(QString)), this, SLOT(search()));
}
void BrowsingLibrary::currentIndexChanged(int index)

View File

@ -328,49 +328,39 @@ QList<QTreeWidgetItem*> TreeWidget::allItems()
void TreeWidget::filterString(const QString &string)
{
expandAll();
QList<QTreeWidgetItem*> _allItems = allItems();
if (string.isEmpty()) {
foreach(QTreeWidgetItem * item, _allItems)
item->setHidden(false);
for (int i = 0; i < topLevelItemCount(); i++) {
topLevelItem(i)->setHidden(false);
QList<QTreeWidgetItem*> parents;
bool stringIsEmpty = string.isEmpty();
foreach(QTreeWidgetItem * item, _allItems) {
bool containsString = stringIsEmpty || item->text(0).contains(string, Qt::CaseInsensitive);
if (containsString) {
item->setHidden(false);
if (item->parent()) {
if (!parents.contains(item->parent())) {
parents << item->parent();
}
}
}
if (m_showMode == ItemsCollapsed) {
collapseAll();
else {
item->setHidden(true);
if (item->parent()) {
item->parent()->setHidden(true);
}
}
}
else {
foreach(QTreeWidgetItem * item, _allItems) {
item->setHidden(!item->text(0).contains(string, Qt::CaseInsensitive));
item->setExpanded(true);
for(int i = 0; i < parents.size(); ++i) {
QTreeWidgetItem* parentItem = parents.at(i);
parentItem->setHidden(false);
if (stringIsEmpty) {
parentItem->setExpanded(m_showMode == ItemsExpanded);
}
for (int i = 0; i < topLevelItemCount(); i++) {
topLevelItem(i)->setHidden(false);
else {
parentItem->setExpanded(true);
}
QTreeWidgetItem* firstItem = topLevelItem(0);
QTreeWidgetItem* belowItem = itemBelow(firstItem);
int topLvlIndex = 0;
while (firstItem) {
if (firstItem->text(0).contains(string, Qt::CaseInsensitive)) {
firstItem->setHidden(false);
}
else if (!firstItem->parent() && !belowItem) {
firstItem->setHidden(true);
}
else if (!belowItem) {
break;
}
else if (!firstItem->parent() && !belowItem->parent()) {
firstItem->setHidden(true);
}
topLvlIndex++;
firstItem = topLevelItem(topLvlIndex);
belowItem = itemBelow(firstItem);
if (parentItem->parent() && !parents.contains(parentItem->parent())) {
parents << parentItem->parent();
}
}
}