ProjectFilesystemPlugin 1.1.0: pseudo-threaded tree rebuild
This commit is contained in:
@@ -29,6 +29,7 @@ QFileInfo projectfs_menu_target;
|
||||
|
||||
ProjectFilesystemWidget::ProjectFilesystemWidget(QWidget * parent): QWidget(parent) {
|
||||
setupUi(this);
|
||||
in_proc = need_rebuild = false;
|
||||
int is = style()->pixelMetric(QStyle::PM_ButtonIconSize, 0, this);
|
||||
label->setFixedSize(is, is);
|
||||
buttonClear->setIcon(Utils::Icons::CLEAN.icon());
|
||||
@@ -74,6 +75,7 @@ void ProjectFilesystemWidget::changeEvent(QEvent *e) {
|
||||
|
||||
void ProjectFilesystemWidget::createTree(QTreeWidgetItem * ti, const QString & dir) {
|
||||
QFileInfoList fl = QDir(dir).entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::LocaleAware | QDir::DirsFirst);
|
||||
checkProcEvents();
|
||||
for (QFileInfo i: fl) {
|
||||
QString nit = i.fileName();
|
||||
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() {
|
||||
if (in_proc) {
|
||||
need_rebuild = true;
|
||||
return;
|
||||
}
|
||||
in_proc = true;
|
||||
tm.start();
|
||||
last_expanded.clear();
|
||||
item_map.clear();
|
||||
int spos = tree->verticalScrollBar()->value();
|
||||
@@ -192,6 +207,11 @@ void ProjectFilesystemWidget::projectsChanged() {
|
||||
QApplication::restoreOverrideCursor();
|
||||
qApp->processEvents();
|
||||
tree->verticalScrollBar()->setValue(spos);
|
||||
in_proc = false;
|
||||
if (need_rebuild) {
|
||||
need_rebuild = false;
|
||||
projectsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user