From 5be41ce49384e75c5deb03a6af6205bc1a7c2c1a Mon Sep 17 00:00:00 2001 From: Alf Gaida Date: Sat, 3 Oct 2015 20:07:36 +0200 Subject: [PATCH] Cherry-picking upstream version 0.9.0+20150929. New symbol added Added a filterbar + Handle virtually hidden files --- debian/changelog | 8 +- debian/libfm-qt5-2.symbols | 11 +- debian/rules | 1 - libfm-qt/proxyfoldermodel.cpp | 4 + libfm-qt/proxyfoldermodel.h | 3 +- libfm-qt/translations/libfm-qt_ru.ts | 251 +++++++++++++-- libfm-qt/translations/libfm-qt_ru_RU.ts | 251 +++++++++++++-- pcmanfm/main-win.ui | 34 ++- pcmanfm/mainwindow.cpp | 26 +- pcmanfm/mainwindow.h | 2 + pcmanfm/tabpage.cpp | 61 +++- pcmanfm/tabpage.h | 39 ++- pcmanfm/translations/pcmanfm-qt_ru.ts | 364 +++++++++++----------- pcmanfm/translations/pcmanfm-qt_ru_RU.ts | 374 ++++++++++++----------- 14 files changed, 988 insertions(+), 441 deletions(-) diff --git a/debian/changelog b/debian/changelog index 5326f25..ce00ec1 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,13 @@ -pcmanfm-qt (0.9.0+20150927-1) experimental; urgency=medium +pcmanfm-qt (0.9.0+20150929-1) experimental; urgency=medium - * Cherry-picked upstream version 0.9.0+20150927. + * Cherry-picked upstream version 0.9.0+20150929. + * New symbol added * This snapshot contain: - apply button for desktop preferences - fix for incidental closing the desktop paint process + - Added a filterbar + Handle virtually hidden files - -- Alf Gaida Mon, 28 Sep 2015 00:25:42 +0200 + -- Alf Gaida Sat, 03 Oct 2015 20:02:52 +0200 pcmanfm-qt (0.9.0+20150925-1) experimental; urgency=medium diff --git a/debian/libfm-qt5-2.symbols b/debian/libfm-qt5-2.symbols index d3f237c..ff2835a 100644 --- a/debian/libfm-qt5-2.symbols +++ b/debian/libfm-qt5-2.symbols @@ -40,8 +40,8 @@ libfm-qt5.so.2 libfm-qt5-2 #MINVER# (c++)"Fm::BookmarkAction::BookmarkAction(_FmBookmarkItem*, QObject*)@Base" 0.9.0+20150903 (c++)"Fm::BrowseHistory::add(_FmPath*, int)@Base" 0.9.0+20150903 (c++)"Fm::BrowseHistory::backward()@Base" 0.9.0+20150903 - (c++)"Fm::BrowseHistory::~BrowseHistory()@Base" 0.9.0+20150903 (c++)"Fm::BrowseHistory::BrowseHistory()@Base" 0.9.0+20150903 + (c++)"Fm::BrowseHistory::~BrowseHistory()@Base" 0.9.0+20150903 (c++)"Fm::BrowseHistory::canBackward() const@Base" 0.9.0+20150903 (c++)"Fm::BrowseHistory::canForward() const@Base" 0.9.0+20150903 (c++)"Fm::BrowseHistory::forward()@Base" 0.9.0+20150903 @@ -95,8 +95,8 @@ libfm-qt5.so.2 libfm-qt5-2 #MINVER# (c++)"Fm::DirTreeModelItem::addPlaceHolderChild()@Base" 0.9.0+20150903 (c++)"Fm::DirTreeModelItem::childFromName(char const*, int*)@Base" 0.9.0+20150903 (c++)"Fm::DirTreeModelItem::childFromPath(_FmPath*, bool) const@Base" 0.9.0+20150903 - (c++)"Fm::DirTreeModelItem::~DirTreeModelItem()@Base" 0.9.0+20150903 (c++)"Fm::DirTreeModelItem::DirTreeModelItem()@Base" 0.9.0+20150903 + (c++)"Fm::DirTreeModelItem::~DirTreeModelItem()@Base" 0.9.0+20150903 (c++)"Fm::DirTreeModelItem::DirTreeModelItem(_FmFileInfo*, Fm::DirTreeModel*, Fm::DirTreeModelItem*)@Base" 0.9.0+20150903 (c++)"Fm::DirTreeModelItem::freeFolder()@Base" 0.9.0+20150903 (c++)"Fm::DirTreeModel::itemFromIndex(QModelIndex const&) const@Base" 0.9.0+20150903 @@ -161,8 +161,8 @@ libfm-qt5.so.2 libfm-qt5-2 #MINVER# (c++)"Fm::FileLauncher::ask(char const*, char* const*, int)@Base" 0.9.0+20150903 (c++)"Fm::FileLauncher::error(_GAppLaunchContext*, _GError*, _FmPath*)@Base" 0.9.0+20150903 (c++)"Fm::FileLauncher::execFile(_FmFileInfo*)@Base" 0.9.0+20150903 - (c++)"Fm::FileLauncher::~FileLauncher()@Base" 0.9.0+20150903 (c++)"Fm::FileLauncher::FileLauncher()@Base" 0.9.0+20150903 + (c++)"Fm::FileLauncher::~FileLauncher()@Base" 0.9.0+20150903 (c++)"Fm::FileLauncher::funcs@Base" 0.9.0+20150903 (c++)"Fm::FileLauncher::getApp(_GList*, _FmMimeType*, _GError**)@Base" 0.9.0+20150903 (c++)"Fm::FileLauncher::launchFiles(QWidget*, _GList*)@Base" 0.9.0+20150903 @@ -290,8 +290,8 @@ libfm-qt5.so.2 libfm-qt5-2 #MINVER# (c++)"Fm::FolderModel::findItemByName(char const*, int*)@Base" 0.9.0+20150903 (c++)"Fm::FolderModel::findItemByPath(_FmPath*, int*)@Base" 0.9.0+20150903 (c++)"Fm::FolderModel::flags(QModelIndex const&) const@Base" 0.9.0+20150903 - (c++)"Fm::FolderModel::~FolderModel()@Base" 0.9.0+20150903 (c++)"Fm::FolderModel::FolderModel()@Base" 0.9.0+20150903 + (c++)"Fm::FolderModel::~FolderModel()@Base" 0.9.0+20150903 (c++)"Fm::FolderModel::headerData(int, Qt::Orientation, int) const@Base" 0.9.0+20150903 (c++)"Fm::FolderModel::index(int, int, QModelIndex const&) const@Base" 0.9.0+20150903 (c++)"Fm::FolderModel::insertFiles(int, _FmFileInfoList*)@Base" 0.9.0+20150903 @@ -383,8 +383,8 @@ libfm-qt5.so.2 libfm-qt5-2 #MINVER# (c++)"Fm::IconTheme::icon(_FmIcon*)@Base" 0.9.0+20150903 (c++)"Fm::IconTheme::iconFromNames(char const* const*)@Base" 0.9.0+20150903 (c++)"Fm::IconTheme::icon(_GIcon*)@Base" 0.9.0+20150903 - (c++)"Fm::IconTheme::~IconTheme()@Base" 0.9.0+20150903 (c++)"Fm::IconTheme::IconTheme()@Base" 0.9.0+20150903 + (c++)"Fm::IconTheme::~IconTheme()@Base" 0.9.0+20150903 (c++)"Fm::IconTheme::instance()@Base" 0.9.0+20150903 (c++)"Fm::IconTheme::metaObject() const@Base" 0.9.0+20150903 (c++)"Fm::IconTheme::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.9.0+20150903 @@ -524,6 +524,7 @@ libfm-qt5.so.2 libfm-qt5-2 #MINVER# (c++)"Fm::ProxyFolderModel::sortFilterChanged()@Base" 0.9.0+20150903 (c++)"Fm::ProxyFolderModel::sort(int, Qt::SortOrder)@Base" 0.9.0+20150903 (c++)"Fm::ProxyFolderModel::staticMetaObject@Base" 0.9.0+20150903 + (c++)"Fm::ProxyFolderModel::updateFilters()@Base" 0.9.0+20150929 (c++)"Fm::RenameDialog::accept()@Base" 0.9.0+20150903 (c++)"Fm::RenameDialog::metaObject() const@Base" 0.9.0+20150903 (c++)"Fm::RenameDialog::onFileNameChanged(QString)@Base" 0.9.0+20150903 diff --git a/debian/rules b/debian/rules index f63bd01..58f62ce 100755 --- a/debian/rules +++ b/debian/rules @@ -1,7 +1,6 @@ #!/usr/bin/make -f #DH_VERBOSE = 1 - export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: diff --git a/libfm-qt/proxyfoldermodel.cpp b/libfm-qt/proxyfoldermodel.cpp index ce815c6..4c7538b 100644 --- a/libfm-qt/proxyfoldermodel.cpp +++ b/libfm-qt/proxyfoldermodel.cpp @@ -254,6 +254,10 @@ void ProxyFolderModel::removeFilter(ProxyFolderModelFilter* filter) { Q_EMIT sortFilterChanged(); } +void ProxyFolderModel::updateFilters() { + invalidate(); + Q_EMIT sortFilterChanged(); +} #if 0 void ProxyFolderModel::reloadAllThumbnails() { diff --git a/libfm-qt/proxyfoldermodel.h b/libfm-qt/proxyfoldermodel.h index dc2f6d6..091fda0 100644 --- a/libfm-qt/proxyfoldermodel.h +++ b/libfm-qt/proxyfoldermodel.h @@ -50,7 +50,7 @@ public: virtual void setSourceModel(QAbstractItemModel* model); void setShowHidden(bool show); - bool showHidden() { + bool showHidden() const { return showHidden_; } @@ -81,6 +81,7 @@ public: void addFilter(ProxyFolderModelFilter* filter); void removeFilter(ProxyFolderModelFilter* filter); + void updateFilters(); Q_SIGNALS: void sortFilterChanged(); diff --git a/libfm-qt/translations/libfm-qt_ru.ts b/libfm-qt/translations/libfm-qt_ru.ts index d76bcac..df1d7e2 100644 --- a/libfm-qt/translations/libfm-qt_ru.ts +++ b/libfm-qt/translations/libfm-qt_ru.ts @@ -398,83 +398,83 @@ What do you want to do with it? Fm::FileMenu - + Open Открыть - + Open With... Открыть с помощью... - + Other Applications Другие приложения - + Create &New &Создать - + &Restore &Восстановить - + Cut Вырезать - + Copy Копировать - + Paste Вставить - - + + &Move to Trash &Переместить в корзину - + Rename Переименовать - + Extract to... Распаковать в ... - + Extract Here Распаковать здесь - + Compress Сжать - + Properties Свойства - + Output Вывод - + &Delete &Удалить @@ -636,6 +636,24 @@ Do you want to delete them instead? Применить изменения рекурсивно ко всем файлам и подпапкам? + + Fm::FileSearchDialog + + + Error + Ошибка + + + + You should add at least add one directory to search. + Вы должны добавить не менее одного места для поиска. + + + + Select a folder + Выберите папку + + Fm::FolderMenu @@ -814,53 +832,53 @@ Do you want to delete them instead? Fm::PlacesView - + Empty Trash Очистить корзину - + Open in New Tab Открыть в новой вкладке - + Open in New Window Открыть в новом окне - + Move Bookmark Up Сдвинуть закладку вверх - + Move Bookmark Down Сдвинуть закладку вниз - + Rename Bookmark Переименовать закладку - + Remove Bookmark Удалить закладку - - + + Unmount Отключить - + Mount Подключить - + Eject Извлечь @@ -1079,4 +1097,181 @@ Modified: %3 Запомнить выбор для всех уже существующих файлов + + SearchDialog + + + Search Files + Искать файлы + + + + Name/Location + Имя/Расположение + + + + File Name Patterns: + Шаблоны имени файла: + + + + * + + + + + Case insensitive + Нечувствительный к регистру поиск + + + + Use regular expression + Использовать регулярные выражения + + + + Places to Search: + Места для поиска: + + + + &Add + &Добавить + + + + &Remove + &Удалить + + + + Search in sub directories + Искать в подпапках + + + + Search for hidden files + Искать скрытые файлы + + + + File Type + Тип файла + + + + Only search for files of following types: + Искать файлы только следующих типов: + + + + Text files + Текстовые файлы + + + + Image files + Изображения + + + + Audio files + Аудиофайлы + + + + Video files + Видеофайлы + + + + Documents + Документы + + + + Folders + Папки + + + + Content + Содержание + + + + File contains: + Файл содержит: + + + + Case insensiti&ve + Нечувствительн&ый к регистру поиск + + + + &Use regular expression + &Использовать регулярные выражения + + + + Properties + Свойства + + + + File Size: + Размер файла: + + + + Larger than: + Больше, чем: + + + + + Bytes + Байт + + + + + KiB + КиБ + + + + + MiB + МиБ + + + + + GiB + ГиБ + + + + Smaller than: + Меньше, чем: + + + + Last Modified Time: + Время последнего изменения: + + + + Earlier than: + Раньше, чем: + + + + Later than: + Позже, чем: + + diff --git a/libfm-qt/translations/libfm-qt_ru_RU.ts b/libfm-qt/translations/libfm-qt_ru_RU.ts index 187f3b3..d52c09a 100644 --- a/libfm-qt/translations/libfm-qt_ru_RU.ts +++ b/libfm-qt/translations/libfm-qt_ru_RU.ts @@ -398,83 +398,83 @@ What do you want to do with it? Fm::FileMenu - + Open Открыть - + Open With... Открыть с помощью... - + Other Applications Другие приложения - + Create &New &Создать - + &Restore &Восстановить - + Cut Вырезать - + Copy Копировать - + Paste Вставить - - + + &Move to Trash &Переместить в корзину - + Rename Переименовать - + Extract to... Распаковать в ... - + Extract Here Распаковать здесь - + Compress Сжать - + Properties Свойства - + Output Вывод - + &Delete &Удалить @@ -636,6 +636,24 @@ Do you want to delete them instead? Применить изменения рекурсивно ко всем файлам и подпапкам? + + Fm::FileSearchDialog + + + Error + Ошибка + + + + You should add at least add one directory to search. + Вы должны добавить не менее одного места для поиска. + + + + Select a folder + Выберите папку + + Fm::FolderMenu @@ -814,53 +832,53 @@ Do you want to delete them instead? Fm::PlacesView - + Empty Trash Очистить корзину - + Open in New Tab Открыть в новой вкладке - + Open in New Window Открыть в новом окне - + Move Bookmark Up Сдвинуть закладку вверх - + Move Bookmark Down Сдвинуть закладку вниз - + Rename Bookmark Переименовать закладку - + Remove Bookmark Удалить закладку - - + + Unmount Отключить - + Mount Подключить - + Eject Извлечь @@ -1079,4 +1097,181 @@ Modified: %3 Запомнить выбор для всех уже существующих файлов + + SearchDialog + + + Search Files + Искать файлы + + + + Name/Location + Имя/Расположение + + + + File Name Patterns: + Шаблоны имени файла: + + + + * + + + + + Case insensitive + Нечувствительный к регистру поиск + + + + Use regular expression + Использовать регулярные выражения + + + + Places to Search: + Места для поиска: + + + + &Add + &Добавить + + + + &Remove + &Удалить + + + + Search in sub directories + Искать в подпапках + + + + Search for hidden files + Искать скрытые файлы + + + + File Type + Тип файла + + + + Only search for files of following types: + Искать файлы только следующих типов: + + + + Text files + Текстовые файлы + + + + Image files + Изображения + + + + Audio files + Аудиофайлы + + + + Video files + Видеофайлы + + + + Documents + Документы + + + + Folders + Папки + + + + Content + Содержание + + + + File contains: + Файл содержит: + + + + Case insensiti&ve + Нечувствительн&ый к регистру поиск + + + + &Use regular expression + &Использовать регулярные выражения + + + + Properties + Свойства + + + + File Size: + Размер файла: + + + + Larger than: + Больше, чем: + + + + + Bytes + Байт + + + + + KiB + КиБ + + + + + MiB + МиБ + + + + + GiB + ГиБ + + + + Smaller than: + Меньше, чем: + + + + Last Modified Time: + Время последнего изменения: + + + + Earlier than: + Раньше, чем: + + + + Later than: + Позже, чем: + + diff --git a/pcmanfm/main-win.ui b/pcmanfm/main-win.ui index 408c4a6..df38284 100644 --- a/pcmanfm/main-win.ui +++ b/pcmanfm/main-win.ui @@ -58,13 +58,35 @@ - - - - 0 - 0 - + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 0 + 0 + + + + + + + + Filter by string... + + + true + + + + diff --git a/pcmanfm/mainwindow.cpp b/pcmanfm/mainwindow.cpp index fa8cc21..05e7b1c 100644 --- a/pcmanfm/mainwindow.cpp +++ b/pcmanfm/mainwindow.cpp @@ -96,6 +96,8 @@ MainWindow::MainWindow(FmPath* path): connect(ui.tabBar, &QTabBar::tabMoved, this, &MainWindow::onTabBarTabMoved); connect(ui.stackedWidget, &QStackedWidget::widgetRemoved, this, &MainWindow::onStackedWidgetWidgetRemoved); + connect(ui.filterBar, &QLineEdit::textChanged, this, &MainWindow::onFilterStringChanged); + // side pane ui.sidePane->setIconSize(QSize(settings.sidePaneIconSize(), settings.sidePaneIconSize())); ui.sidePane->setMode(settings.sidePaneMode()); @@ -181,6 +183,12 @@ MainWindow::MainWindow(FmPath* path): shortcut = new QShortcut(QKeySequence(Qt::SHIFT + Qt::Key_Delete), this); connect(shortcut, &QShortcut::activated, this, &MainWindow::on_actionDelete_triggered); + if(QToolButton* clearButton = ui.filterBar->findChild()) { + clearButton->setToolTip(tr("Clear text (Ctrl+K)")); + shortcut = new QShortcut(Qt::CTRL + Qt::Key_K, this); + connect(shortcut, &QShortcut::activated, ui.filterBar, &QLineEdit::clear); + } + if(path) addTab(path); @@ -201,6 +209,7 @@ void MainWindow::chdir(FmPath* path) { TabPage* page = currentPage(); if(page) { + ui.filterBar->clear(); page->chdir(path, true); updateUIForCurrentPage(); } @@ -239,6 +248,7 @@ void MainWindow::on_actionGoUp_triggered() { TabPage* page = currentPage(); if(page) { + ui.filterBar->clear(); page->up(); updateUIForCurrentPage(); } @@ -248,6 +258,7 @@ void MainWindow::on_actionGoBack_triggered() { TabPage* page = currentPage(); if(page) { + ui.filterBar->clear(); page->backward(); updateUIForCurrentPage(); } @@ -257,6 +268,7 @@ void MainWindow::on_actionGoForward_triggered() { TabPage* page = currentPage(); if(page) { + ui.filterBar->clear(); page->forward(); updateUIForCurrentPage(); } @@ -477,6 +489,16 @@ void MainWindow::onTabBarTabMoved(int from, int to) { } } +void MainWindow::onFilterStringChanged(QString str) { + if(TabPage* tabPage = currentPage()) { + // appy filter only if needed (not if tab is changed) + if(str != tabPage->getFilterStr()) { + tabPage->setFilterStr(str); + tabPage->applyFilter(); + } + } +} + void MainWindow::closeTab(int index) { QWidget* page = ui.stackedWidget->widget(index); if(page) { @@ -516,6 +538,8 @@ void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::onTabBarCurrentChanged(int index) { ui.stackedWidget->setCurrentIndex(index); + if(TabPage* page = static_cast(ui.stackedWidget->widget(index))) + ui.filterBar->setText(page->getFilterStr()); updateUIForCurrentPage(); } @@ -605,7 +629,6 @@ void MainWindow::updateUIForCurrentPage() { } } - void MainWindow::onStackedWidgetWidgetRemoved(int index) { // qDebug("onStackedWidgetWidgetRemoved: %d", index); // need to remove associated tab from tabBar @@ -863,6 +886,7 @@ void MainWindow::onBackForwardContextMenu(QPoint pos) { QAction* selectedAction = menu.exec(btn->mapToGlobal(pos)); if(selectedAction) { int index = menu.actions().indexOf(selectedAction); + ui.filterBar->clear(); page->jumpToHistory(index); updateUIForCurrentPage(); } diff --git a/pcmanfm/mainwindow.h b/pcmanfm/mainwindow.h index a36ec93..6b9d792 100644 --- a/pcmanfm/mainwindow.h +++ b/pcmanfm/mainwindow.h @@ -119,6 +119,8 @@ protected Q_SLOTS: void onTabBarCurrentChanged(int index); void onTabBarTabMoved(int from, int to); + void onFilterStringChanged(QString str); + void onShortcutPrevTab(); void onShortcutNextTab(); void onShortcutJumpToTab(); diff --git a/pcmanfm/tabpage.cpp b/pcmanfm/tabpage.cpp index 1cb7ab0..7f56092 100644 --- a/pcmanfm/tabpage.cpp +++ b/pcmanfm/tabpage.cpp @@ -31,11 +31,42 @@ #include "application.h" #include "cachedfoldermodel.h" #include +#include using namespace Fm; namespace PCManFM { +bool ProxyFilter::filterAcceptsRow(const Fm::ProxyFolderModel* model, FmFileInfo* info) const { + if(!model || !info) + return true; + QString baseName(fm_file_info_get_name(info)); + if(!virtHiddenList_.isEmpty() && !model->showHidden() && virtHiddenList_.contains(baseName)) + return false; + if(!filterStr_.isEmpty() && !baseName.contains(filterStr_, Qt::CaseInsensitive)) + return false; + return true; +} + +void ProxyFilter::setVirtHidden(FmFolder* folder) { + virtHiddenList_ = QStringList(); // reset the list + if(!folder) return; + if(FmPath* path = fm_folder_get_path(folder)) { + char* pathStr = fm_path_to_str(path); + if(pathStr) { + QString dotHidden = QString(pathStr) + QString("/.hidden"); + g_free(pathStr); + QFile file(dotHidden); + if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream in(&file); + while(!in.atEnd()) + virtHiddenList_.append(in.readLine()); + file.close(); + } + } + } +} + TabPage::TabPage(FmPath* path, QWidget* parent): QWidget(parent), folder_(NULL), @@ -60,6 +91,9 @@ TabPage::TabPage(FmPath* path, QWidget* parent): connect(folderView_, &View::clickedBack, this, &TabPage::backwardRequested); connect(folderView_, &View::clickedForward, this, &TabPage::forwardRequested); + proxyFilter_ = new ProxyFilter(); + proxyModel_->addFilter(proxyFilter_); + // FIXME: this is very dirty folderView_->setModel(proxyModel_); verticalLayout->addWidget(folderView_); @@ -70,6 +104,8 @@ TabPage::TabPage(FmPath* path, QWidget* parent): TabPage::~TabPage() { qDebug("delete TabPage"); freeFolder(); + if(proxyFilter_) + delete proxyFilter_; if(proxyModel_) delete proxyModel_; if(folderModel_) @@ -319,6 +355,11 @@ void TabPage::chdir(FmPath* newPath, bool addHistory) { g_free(disp_name); folder_ = fm_folder_from_path(newPath); + proxyFilter_->setVirtHidden(folder_); + if(addHistory) { + // add current path to browse history + history_.add(path()); + } g_signal_connect(folder_, "start-loading", G_CALLBACK(onFolderStartLoading), this); g_signal_connect(folder_, "finish-loading", G_CALLBACK(onFolderFinishLoading), this); g_signal_connect(folder_, "error", G_CALLBACK(onFolderError), this); @@ -342,11 +383,6 @@ void TabPage::chdir(FmPath* newPath, bool addHistory) { } else onFolderStartLoading(folder_, this); - - if(addHistory) { - // add current path to browse history - history_.add(path()); - } } void TabPage::selectAll() { @@ -473,4 +509,19 @@ void TabPage::updateFromSettings(Settings& settings) { folderView_->updateFromSettings(settings); } +void TabPage::setShowHidden(bool showHidden) { + if(!proxyModel_ || showHidden == proxyModel_->showHidden()) + return; + proxyModel_->setShowHidden(showHidden); + statusText_[StatusTextNormal] = formatStatusText(); + Q_EMIT statusChanged(StatusTextNormal, statusText_[StatusTextNormal]); +} + +void TabPage:: applyFilter() { + if(!proxyModel_) return; + proxyModel_->updateFilters(); + statusText_[StatusTextNormal] = formatStatusText(); + Q_EMIT statusChanged(StatusTextNormal, statusText_[StatusTextNormal]); +} + }; diff --git a/pcmanfm/tabpage.h b/pcmanfm/tabpage.h index 5d3ab24..199f3bb 100644 --- a/pcmanfm/tabpage.h +++ b/pcmanfm/tabpage.h @@ -40,6 +40,23 @@ namespace PCManFM { class Settings; class Launcher; +class ProxyFilter : public Fm::ProxyFolderModelFilter { +public: + bool filterAcceptsRow(const Fm::ProxyFolderModel* model, FmFileInfo* info) const; + virtual ~ProxyFilter() {} + void setVirtHidden(FmFolder* folder); + QString getFilterStr() { + return filterStr_; + } + void setFilterStr(QString str) { + filterStr_ = str; + } + +private: + QString filterStr_; + QStringList virtHiddenList_; +}; + class TabPage : public QWidget { Q_OBJECT @@ -98,9 +115,7 @@ public: return proxyModel_->showHidden(); } - void setShowHidden(bool showHidden) { - proxyModel_->setShowHidden(showHidden); - } + void setShowHidden(bool showHidden); FmPath* path() { return folder_ ? fm_folder_get_path(folder_) : NULL; @@ -137,8 +152,10 @@ public: void invertSelection(); void reload() { - if(folder_) + if(folder_) { + proxyFilter_->setVirtHidden(folder_); // reread ".hidden" fm_folder_reload(folder_); + } } QString title() const { @@ -177,6 +194,19 @@ public: return folderView_->fileLauncher(); } + QString getFilterStr() { + if(proxyFilter_) + return proxyFilter_->getFilterStr(); + return QString(); + } + + void setFilterStr(QString str) { + if(proxyFilter_) + proxyFilter_->setFilterStr(str); + } + + void applyFilter(); + Q_SIGNALS: void statusChanged(int type, QString statusText); void titleChanged(QString title); @@ -207,6 +237,7 @@ private: View* folderView_; Fm::CachedFolderModel* folderModel_; Fm::ProxyFolderModel* proxyModel_; + ProxyFilter* proxyFilter_; QVBoxLayout* verticalLayout; FmFolder* folder_; QString title_; diff --git a/pcmanfm/translations/pcmanfm-qt_ru.ts b/pcmanfm/translations/pcmanfm-qt_ru.ts index 202dbf6..aea61d8 100644 --- a/pcmanfm/translations/pcmanfm-qt_ru.ts +++ b/pcmanfm/translations/pcmanfm-qt_ru.ts @@ -144,7 +144,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, - + Image file Файл изображения @@ -155,7 +155,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, - + &Browse &Обзор @@ -180,32 +180,32 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, Выбрать шрифт: - + Window Manager Оконный менеджер - + Desktop Рабочий стол - + Desktop folder: Папка рабочего стола: - + Folder path Путь к папке - + Advanced Расширенные - + Show menus provided by window managers when desktop is clicked Показывать меню, предоставляемые оконными менеджерами по клику на рабочий стол @@ -234,13 +234,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, - + Case insensitive Регистрочувствительный - + Use regular expression Использовать регулярные выражения @@ -255,98 +255,98 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, Добавить - + Remove Удалить - + Search in sub directories Искать в подпапках - + Search hidden files Искать скрытые файлы - - + + File Type Тип файла - + Only search for files of following types: Искать только следующие типы файлов: - + Text files Текстовые файлы - + Image files Файлы изображений - + Audio files Аудиофайлы - + Video files Видеофайлы - + Documents Документы - + Content Содержание - + File contains Содержание файла - + Properties Свойства - + File Size Размер файла - + Bigger than: Больше чем: - + Smaller than: Меньше чем: - + Last Modified Time Время последнего изменения - + Earlier than: Раньше чем: - + Later than: Позже чем: @@ -359,417 +359,427 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, Диспетчер файлов - - Folder - Папка - - - + Ctrl+Shift+N - - Blank File - Пустой файл - - - + Ctrl+Alt+N - + &File &Файл - + C&reate New С&оздать новое - + &Help &Справка - + &View &Вид - + &Sorting &Сортировка - + &Edit &Правка - + &Bookmarks &Закладки - + &Go &Перейти - + &Tool &Инструмент - + Main Toolbar Главная панель инструментов - + Go &Up Перейти &вверх - + Go Up Перейти вверх - + Alt+Up - - Home - Домой + + &Home + &Домой - + Alt+Home - + &Reload &Обновить - + F5 - + Go Перейти - + Quit Выйти - + &About &О программе - + &New Window &Новое окно - + New Window Новое окно - + Ctrl+N - + Show &Hidden Показать &скрытые - + Ctrl+H - + &Computer &Компьютер - + &Trash &Корзина - + &Network &Сеть - + &Desktop &Рабочий стол - + &Add to Bookmarks &Добавить в закладки - + &Applications &Приложения - + Reload Обновить - + &Icon View Просмотр &значками - + &Compact View &Компактный просмотр - + &Detailed List Просмотр &подробным списком - + &Thumbnail View Просмотр &эскизами - + Cu&t &Вырезать - + Ctrl+X - + &Copy &Копировать - + Ctrl+C - + &Paste &Вставить - + Ctrl+V - + Select &All Выделить &всё - + Ctrl+A - + Pr&eferences &Настройки - - Ascending - По возрастанию + + &Ascending + По &возрастанию - - Descending - По убыванию + + &Descending + По &убыванию - - By File Name - По имени файла + + &By File Name + &По имени файла - - By Modification Time - По времени изменения + + By &Modification Time + По времени &изменения - - By File Type - По типу файла + + By File &Type + По &типу файла - - By Owner - По владельцу + + By &Owner + По &владельцу - - Folder First - Сначала папки + + &Folder First + Сначала &папки - + + &Case Sensitive + &Регистрочувствительная + + + + By File &Size + По &размеру файла + + + + &Close Window + &Закрыть окно + + + + &Folder + &Папка + + + + &Blank File + &Пустой файл + + + + &Find Files + &Найти файлы + + + + F3 + + + + New &Tab Новая &вкладка - + New Tab Новая вкладка - + Ctrl+T - + Go &Back Перейти &назад - + Go Back Перейти назад - + Alt+Left - + Go &Forward Перейти &вперёд - + Go Forward Перейти вперёд - + Alt+Right - + &Invert Selection &Инвертировать выделение - + &Delete &Удалить - + Del - + &Rename &Переименовать - + F2 - + C&lose Tab &Закрыть вкладку - + Ctrl+W - + File &Properties &Свойства файла - + Alt+Return - + &Folder Properties &Свойства папки - - Case Sensitive - Регистрочувствительная - - - - By File Size - По размеру файла - - - - Close Window - Закрыть окно - - - + Edit Bookmarks Изменить закладки - + Open &Terminal Открыть &терминал - + F4 - + Open as &Root Открыть от имени &суперпользователя - + &Edit Bookmarks &Изменить закладки @@ -777,99 +787,99 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, PCManFM::Application - + Name of configuration profile Имя профиля конфигурации - + PROFILE ПРОФИЛЬ - + Run PCManFM as a daemon Запустить PCManFM как демон - + Quit PCManFM Выйти из PCManFM - + Launch desktop manager Запустить менеджер рабочего стола - + Turn off desktop manager if it's running Отключить менеджер рабочего стола, если он запущен - + Open desktop preference dialog on the page with the specified name Открыть диалог настроек рабочего стола на странице с указанным именем - - + + NAME ИМЯ - + Set desktop wallpaper from image FILE Выбрать обои рабочего стола из ФАЙЛА изображения - + FILE ФАЙЛ - + Set mode of desktop wallpaper. MODE=(color|stretch|fit|center|tile) Выбрать режим обоев рабочего стола. РЕЖИМ=(цвет|растянуть|вместить|по центру|черепицей) - + MODE РЕЖИМ - + Open Preferences dialog on the page with the specified name Открыть диалог настроек на странице с указанным именем - + Open new window Открыть новое окно - + Open Find Files utility Открыть утилиту поиска файлов - + [FILE1, FILE2,...] [ФАЙЛ1, ФАЙЛ2,...] - + Files or directories to open Файлы или папки для открытия - - + + Error Ошибка - + Terminal emulator is not set. Эмулятор терминала не указан. @@ -915,7 +925,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, Плиточное заполнение всего экрана изображением - + Image Files Файлы изображений @@ -936,28 +946,28 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, PCManFM::MainWindow - + Version: %1 Версия: %1 - + &Move to Trash &Переместить в корзину - + &Delete &Удалить - - + + Error Ошибка - + Switch user command is not set. Команда переключения пользователя не задана. diff --git a/pcmanfm/translations/pcmanfm-qt_ru_RU.ts b/pcmanfm/translations/pcmanfm-qt_ru_RU.ts index 66fba5b..5419802 100644 --- a/pcmanfm/translations/pcmanfm-qt_ru_RU.ts +++ b/pcmanfm/translations/pcmanfm-qt_ru_RU.ts @@ -144,7 +144,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, - + Image file Файл изображения @@ -155,7 +155,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, - + &Browse &Обзор @@ -180,32 +180,32 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, Выбрать шрифт: - + Window Manager Оконный менеджер - + Desktop Рабочий стол - + Desktop folder: Папка рабочего стола: - + Folder path Путь к папке - + Advanced Расширенные - + Show menus provided by window managers when desktop is clicked Показывать меню, предоставляемые оконными менеджерами по клику на рабочий стол @@ -234,13 +234,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, - + Case insensitive Регистрочувствительный - + Use regular expression Использовать регулярные выражения @@ -255,98 +255,98 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, Добавить - + Remove Удалить - + Search in sub directories Искать в подпапках - + Search hidden files Искать скрытые файлы - - + + File Type Тип файла - + Only search for files of following types: Искать только следующие типы файлов: - + Text files Текстовые файлы - + Image files Файлы изображений - + Audio files Аудиофайлы - + Video files Видеофайлы - + Documents Документы - + Content Содержание - + File contains Содержание файла - + Properties Свойства - + File Size Размер файла - + Bigger than: Больше чем: - + Smaller than: Меньше чем: - + Last Modified Time Время последнего изменения - + Earlier than: Раньше чем: - + Later than: Позже чем: @@ -359,417 +359,427 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, Диспетчер файлов - - Folder - Папка - - - + Ctrl+Shift+N - - Blank File - Пустой файл - - - + Ctrl+Alt+N - + &File &Файл - + C&reate New С&оздать новое - + &Help &Справка - + &View &Вид - + &Sorting &Сортировка - + &Edit &Правка - + &Bookmarks &Закладки - + &Go &Перейти - + &Tool &Инструмент - + Main Toolbar Главная панель инструментов - + Go &Up Перейти &вверх - + Go Up Перейти вверх - + Alt+Up - - Home - Домой + + &Home + &Домой - + Alt+Home - + &Reload &Обновить - + F5 - + Go Перейти - + Quit Выйти - + &About &О программе - + &New Window &Новое окно - + New Window Новое окно - + Ctrl+N - + Show &Hidden Показать &скрытые - + Ctrl+H - + &Computer &Компьютер - + &Trash &Корзина - + &Network &Сеть - + &Desktop &Рабочий стол - + &Add to Bookmarks &Добавить в закладки - + &Applications &Приложения - + Reload Обновить - + &Icon View Просмотр &значками - + &Compact View &Компактный просмотр - + &Detailed List Просмотр &подробным списком - + &Thumbnail View Просмотр &эскизами - + Cu&t &Вырезать - + Ctrl+X - + &Copy &Копировать - + Ctrl+C - + &Paste &Вставить - + Ctrl+V - + Select &All Выделить &всё - + Ctrl+A - + Pr&eferences &Настройки - - Ascending - По возрастанию + + &Ascending + По &возрастанию - - Descending - По убыванию + + &Descending + По &убыванию - - By File Name - По имени файла + + &By File Name + &По имени файла - - By Modification Time - По времени изменения + + By &Modification Time + По времени &изменения - - By File Type - По типу файла + + By File &Type + По &типу файла - - By Owner - По владельцу + + By &Owner + По &владельцу - - Folder First - Сначала папки + + &Folder First + Сначала &папки - + + &Case Sensitive + &Регистрочувствительная + + + + By File &Size + По &размеру файла + + + + &Close Window + &Закрыть окно + + + + &Folder + &Папка + + + + &Blank File + &Пустой файл + + + + &Find Files + &Найти файлы + + + + F3 + + + + New &Tab Новая &вкладка - + New Tab Новая вкладка - + Ctrl+T - + Go &Back Перейти &назад - + Go Back Перейти назад - + Alt+Left - + Go &Forward Перейти &вперёд - + Go Forward Перейти вперёд - + Alt+Right - + &Invert Selection &Инвертировать выделение - + &Delete &Удалить - + Del - + &Rename &Переименовать - + F2 - + C&lose Tab &Закрыть вкладку - + Ctrl+W - + File &Properties &Свойства файла - + Alt+Return - + &Folder Properties &Свойства папки - - Case Sensitive - Регистрочувствительная - - - - By File Size - По размеру файла - - - - Close Window - Закрыть окно - - - + Edit Bookmarks Изменить закладки - + Open &Terminal Открыть &терминал - + F4 - + Open as &Root Открыть от имени &суперпользователя - + &Edit Bookmarks &Изменить закладки @@ -777,99 +787,99 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, PCManFM::Application - + Name of configuration profile Имя профиля конфигурации - + PROFILE ПРОФИЛЬ - + Run PCManFM as a daemon Запустить PCManFM как демон - + Quit PCManFM Выйти из PCManFM - + Launch desktop manager Запустить менеджер рабочего стола - + Turn off desktop manager if it's running Отключить менеджер рабочего стола, если он запущен - + Open desktop preference dialog on the page with the specified name Открыть диалог настроек рабочего стола на странице с указанным именем - - + + NAME ИМЯ - + Set desktop wallpaper from image FILE Выбрать обои рабочего стола из ФАЙЛА изображения - + FILE ФАЙЛ - + Set mode of desktop wallpaper. MODE=(color|stretch|fit|center|tile) Выбрать режим обоев рабочего стола. РЕЖИМ=(цвет|растянуть|вместить|по центру|черепицей) - + MODE РЕЖИМ - + Open Preferences dialog on the page with the specified name Открыть диалог настроек на странице с указанным именем - + Open new window Открыть новое окно - + Open Find Files utility Открыть утилиту поиска файлов - + [FILE1, FILE2,...] [ФАЙЛ1, ФАЙЛ2,...] - + Files or directories to open Файлы или папки для открытия - - + + Error Ошибка - + Terminal emulator is not set. Эмулятор терминала не указан. @@ -915,7 +925,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, Плиточное заполнение всего экрана изображением - + Image Files Файлы изображений @@ -936,28 +946,28 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, PCManFM::MainWindow - + Version: %1 Версия: %1 - + &Move to Trash &Переместить в корзину - + &Delete &Удалить - - + + Error Ошибка - + Switch user command is not set. Команда переключения пользователя не задана. @@ -988,17 +998,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, PCManFM::TabPage - + Error Ошибка - + Free space: %1 (Total: %2) Свободное место: %1 (всего: %2) - + %n item(s) %n объект @@ -1007,7 +1017,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, - + (%n hidden) (%n скрыт) @@ -1016,7 +1026,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Бостон, MA 02110-1301, - + %1 item(s) selected %1 объекта(ов) выделено