#include "support/qstring_helpers.h"
#include "support/Package.h"
+#include <QVector>
#include <QDirIterator>
#include <QTreeWidget>
filter_->setClearButton(true);
filter_->setPlaceholderText(qt_("All available files"));
filter_->setToolTip(qt_("Enter string to filter the list of available files"));
-#if (QT_VERSION < 0x050000)
- connect(filter_, SIGNAL(downPressed()),
- filesLW, SLOT(setFocus()));
-#else
connect(filter_, &FancyLineEdit::downPressed,
filesLW, [this](){ focusAndHighlight(filesLW); });
-#endif
filterBarL->addWidget(filter_, 0);
findKeysLA->setBuddy(filter_);
filesLW->clear();
QIcon user_icon(getPixmap("images/", "lyxfiles-user", "svgz,png"));
QIcon system_icon(getPixmap("images/", "lyxfiles-system", "svgz,png"));
- QIcon folder_icon(getPixmap("images/", "lyxfiles-folder", "svgz,png"));
+ QIcon user_folder_icon(getPixmap("images/", "lyxfiles-user-folder", "svgz,png"));
+ QIcon system_folder_icon(getPixmap("images/", "lyxfiles-system-folder", "svgz,png"));
QStringList cats;
QMap<QString, QString>::const_iterator it = files.constBegin();
QFont capfont;
guiname = qt_("Default Template");
else if (translateName())
guiname = toqstr(translateIfPossible(qstring_to_ucs4(guiString(guiname))));
- QIcon file_icon = (realpath.startsWith(toqstr(package().user_support().absFileName()))) ?
- user_icon : system_icon;
+ bool const user = realpath.startsWith(toqstr(package().user_support().absFileName()));
+ QIcon file_icon = user ? user_icon : system_icon;
item->setIcon(0, file_icon);
item->setData(0, Qt::UserRole, it.key());
item->setData(0, Qt::DisplayRole, guiname);
if (!subcatItem) {
subcatItem = new QTreeWidgetItem();
subcatItem->setText(0, subcat);
- subcatItem->setIcon(0, folder_icon);
+ file_icon = user ? user_folder_icon : system_folder_icon;
+ subcatItem->setIcon(0, file_icon);
cats << catsave;
}
subcatItem->addChild(item);
{
Qt::CaseSensitivity cs = csFindCB->isChecked() ?
Qt::CaseSensitive : Qt::CaseInsensitive;
+ // Collect "active" categories (containing entries
+ // that match the filter)
+ QVector<QTreeWidgetItem*> activeCats;
QTreeWidgetItemIterator it(filesLW);
while (*it) {
- (*it)->setHidden(
- (*it)->childCount() == 0
- && !(*it)->text(0).contains(filter_->text(), cs)
- );
+ if ((*it)->childCount() > 0) {
+ // Unhide parents (will be hidden
+ // below if necessary)
+ (*it)->setHidden(false);
+ ++it;
+ continue;
+ }
+ bool const match = (*it)->text(0).contains(filter_->text(), cs);
+ if (match) {
+ // Register parents of matched entries
+ // so we don't hide those later.
+ QTreeWidgetItem * twi = *it;
+ while (true) {
+ if (!twi->parent())
+ break;
+ activeCats << twi->parent();
+ // ascend further up if possible
+ twi = twi->parent();
+ }
+ }
+ (*it)->setHidden(!match);
+ ++it;
+ }
+ // Iterate through parents once more
+ // to hide empty categories
+ it = QTreeWidgetItemIterator(filesLW);
+ while (*it) {
+ if ((*it)->childCount() == 0) {
+ ++it;
+ continue;
+ }
+ (*it)->setHidden(!activeCats.contains(*it));
++it;
}
}