#include "support/qstring_helpers.h"
#include "support/Package.h"
+#include <QVector>
#include <QDirIterator>
#include <QTreeWidget>
++i;
}
setLanguage();
- languageLA->setText(qt_("Preferred &Language:"));
return result;
}
// The filter bar
filter_ = new FancyLineEdit(this);
- filter_->setButtonPixmap(FancyLineEdit::Right, getPixmap("images/", "editclear", "svgz,png"));
- filter_->setButtonVisible(FancyLineEdit::Right, true);
- filter_->setButtonToolTip(FancyLineEdit::Right, qt_("Clear text"));
- filter_->setAutoHideButton(FancyLineEdit::Right, true);
+ 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_);
languageCO->addItem(i.value(), i.key());
++i;
}
- languageLA->setText(qt_("File &Language:"));
- languageCO->setToolTip(qt_("All available languages of the selected file are displayed here.\n"
- "The selected language version will be opened."));
setLanguage();
QString const realpath = getRealPath();
filesLW->currentItem()->setData(0, Qt::ToolTipRole, realpath);
void GuiLyXFiles::setLanguage()
{
// Enable language selection only if there is a selection.
- languageCO->setEnabled(languageCO->count() > 1);
- languageLA->setEnabled(languageCO->count() > 1);
+ bool const item_selected = filesLW->currentItem();
+ bool const language_alternatives = languageCO->count() > 1;
+ languageCO->setEnabled(item_selected && language_alternatives);
+ languageLA->setEnabled(item_selected && language_alternatives);
+ if (item_selected && language_alternatives)
+ languageCO->setToolTip(qt_("All available languages of the selected file are displayed here.\n"
+ "The selected language version will be opened."));
+ else if (item_selected)
+ languageCO->setToolTip(qt_("No alternative language versions available for the selected file."));
+ else
+ languageCO->setToolTip(qt_("If alternative languages are available for a given file,\n"
+ "they can be chosen here if a file is selected."));
// first try last setting
if (!savelang_.isEmpty()) {
int index = languageCO->findData(savelang_);
filesLW->clear();
QIcon user_icon(getPixmap("images/", "lyxfiles-user", "svgz,png"));
QIcon system_icon(getPixmap("images/", "lyxfiles-system", "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);
+ file_icon = user ? user_folder_icon : system_folder_icon;
subcatItem->setIcon(0, file_icon);
cats << catsave;
}
{
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;
}
}