ProjectFilesystemPlugin 1.1.0: pseudo-threaded tree rebuild
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
\"Name\" : \"ProjectFilesystemPlugin\",
|
\"Name\" : \"ProjectFilesystemPlugin\",
|
||||||
\"Version\" : \"1.0.0\",
|
\"Version\" : \"1.1.0\",
|
||||||
\"CompatVersion\" : \"1.0.0\",
|
\"CompatVersion\" : \"1.1.0\",
|
||||||
\"Vendor\" : \"Peri4\",
|
\"Vendor\" : \"Peri4\",
|
||||||
\"Copyright\" : \"(C) Peri4\",
|
\"Copyright\" : \"(C) Peri4\",
|
||||||
\"License\" : \"LGPLv3\",
|
\"License\" : \"LGPLv3\",
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ QFileInfo projectfs_menu_target;
|
|||||||
|
|
||||||
ProjectFilesystemWidget::ProjectFilesystemWidget(QWidget * parent): QWidget(parent) {
|
ProjectFilesystemWidget::ProjectFilesystemWidget(QWidget * parent): QWidget(parent) {
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
|
in_proc = need_rebuild = false;
|
||||||
int is = style()->pixelMetric(QStyle::PM_ButtonIconSize, 0, this);
|
int is = style()->pixelMetric(QStyle::PM_ButtonIconSize, 0, this);
|
||||||
label->setFixedSize(is, is);
|
label->setFixedSize(is, is);
|
||||||
buttonClear->setIcon(Utils::Icons::CLEAN.icon());
|
buttonClear->setIcon(Utils::Icons::CLEAN.icon());
|
||||||
@@ -74,6 +75,7 @@ void ProjectFilesystemWidget::changeEvent(QEvent *e) {
|
|||||||
|
|
||||||
void ProjectFilesystemWidget::createTree(QTreeWidgetItem * ti, const QString & dir) {
|
void ProjectFilesystemWidget::createTree(QTreeWidgetItem * ti, const QString & dir) {
|
||||||
QFileInfoList fl = QDir(dir).entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::LocaleAware | QDir::DirsFirst);
|
QFileInfoList fl = QDir(dir).entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::LocaleAware | QDir::DirsFirst);
|
||||||
|
checkProcEvents();
|
||||||
for (QFileInfo i: fl) {
|
for (QFileInfo i: fl) {
|
||||||
QString nit = i.fileName();
|
QString nit = i.fileName();
|
||||||
if (i.isDir()) {
|
if (i.isDir()) {
|
||||||
@@ -163,7 +165,20 @@ void ProjectFilesystemWidget::setExtVariable() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ProjectFilesystemWidget::checkProcEvents() {
|
||||||
|
if (tm.elapsed() < 10) return;
|
||||||
|
QApplication::processEvents();
|
||||||
|
tm.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ProjectFilesystemWidget::projectsChanged() {
|
void ProjectFilesystemWidget::projectsChanged() {
|
||||||
|
if (in_proc) {
|
||||||
|
need_rebuild = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
in_proc = true;
|
||||||
|
tm.start();
|
||||||
last_expanded.clear();
|
last_expanded.clear();
|
||||||
item_map.clear();
|
item_map.clear();
|
||||||
int spos = tree->verticalScrollBar()->value();
|
int spos = tree->verticalScrollBar()->value();
|
||||||
@@ -192,6 +207,11 @@ void ProjectFilesystemWidget::projectsChanged() {
|
|||||||
QApplication::restoreOverrideCursor();
|
QApplication::restoreOverrideCursor();
|
||||||
qApp->processEvents();
|
qApp->processEvents();
|
||||||
tree->verticalScrollBar()->setValue(spos);
|
tree->verticalScrollBar()->setValue(spos);
|
||||||
|
in_proc = false;
|
||||||
|
if (need_rebuild) {
|
||||||
|
need_rebuild = false;
|
||||||
|
projectsChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <extensionsystem/iplugin.h>
|
#include <extensionsystem/iplugin.h>
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QFileSystemModel>
|
#include <QFileSystemModel>
|
||||||
|
#include <QElapsedTimer>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
|
||||||
extern QFileInfo projectfs_menu_target;
|
extern QFileInfo projectfs_menu_target;
|
||||||
@@ -32,13 +33,16 @@ protected:
|
|||||||
void rememberExpanded(QTreeWidgetItem * ti);
|
void rememberExpanded(QTreeWidgetItem * ti);
|
||||||
void restoreExpanded(QTreeWidgetItem * ti);
|
void restoreExpanded(QTreeWidgetItem * ti);
|
||||||
void setExtVariable();
|
void setExtVariable();
|
||||||
|
void checkProcEvents();
|
||||||
|
|
||||||
|
bool in_proc, need_rebuild;
|
||||||
ExtensionSystem::IPlugin * proj_plug;
|
ExtensionSystem::IPlugin * proj_plug;
|
||||||
QMenu popup_menu;
|
QMenu popup_menu;
|
||||||
QMap<QString, QTreeWidgetItem*> item_map;
|
QMap<QString, QTreeWidgetItem*> item_map;
|
||||||
QSet<QString> last_expanded;
|
QSet<QString> last_expanded;
|
||||||
FilterDialog filter_dialog;
|
FilterDialog filter_dialog;
|
||||||
FilterDialog::Filter cur_filter;
|
FilterDialog::Filter cur_filter;
|
||||||
|
QElapsedTimer tm;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void projectsChanged();
|
void projectsChanged();
|
||||||
|
|||||||
Reference in New Issue
Block a user