filesystem watching optimization
This commit is contained in:
@@ -105,7 +105,7 @@ void ProjectFilesystemWidget::setCurrentFilter(const FilterDialog::Filter & v) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ProjectFilesystemWidget::changeEvent(QEvent *e) {
|
void ProjectFilesystemWidget::changeEvent(QEvent * e) {
|
||||||
QWidget::changeEvent(e);
|
QWidget::changeEvent(e);
|
||||||
switch (e->type()) {
|
switch (e->type()) {
|
||||||
case QEvent::LanguageChange:
|
case QEvent::LanguageChange:
|
||||||
@@ -117,6 +117,30 @@ void ProjectFilesystemWidget::changeEvent(QEvent *e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ProjectFilesystemWidget::timerEvent(QTimerEvent * e) {
|
||||||
|
if (timer_fs_changed > 0)
|
||||||
|
killTimer(timer_fs_changed);
|
||||||
|
timer_fs_changed = 0;
|
||||||
|
int spos = tree->verticalScrollBar()->value();
|
||||||
|
last_expanded.clear();
|
||||||
|
rememberExpanded(tree->invisibleRootItem());
|
||||||
|
for (QString path: fs_changed) {
|
||||||
|
QTreeWidgetItem * ti = item_map.value(path);
|
||||||
|
//QMessageBox::information(0, "", "changed " + path + " " + QString::number((qulonglong)ti));
|
||||||
|
if (ti) {
|
||||||
|
createTree(ti, path, false);
|
||||||
|
cleanMappedItems();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
filter();
|
||||||
|
restoreExpanded(tree->invisibleRootItem());
|
||||||
|
fs_changed.clear();
|
||||||
|
currentFileChanged();
|
||||||
|
tree->verticalScrollBar()->setValue(spos);
|
||||||
|
QWidget::timerEvent(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void ProjectFilesystemWidget::projectNameChanged() {
|
void ProjectFilesystemWidget::projectNameChanged() {
|
||||||
for (int i = 0; i < tree->topLevelItemCount(); ++i) {
|
for (int i = 0; i < tree->topLevelItemCount(); ++i) {
|
||||||
ProjectExplorer::Project * p = (ProjectExplorer::Project *)itemProject(tree->topLevelItem(i));
|
ProjectExplorer::Project * p = (ProjectExplorer::Project *)itemProject(tree->topLevelItem(i));
|
||||||
@@ -350,18 +374,10 @@ void ProjectFilesystemWidget::cleanMappedItems() {
|
|||||||
|
|
||||||
|
|
||||||
void ProjectFilesystemWidget::directoryChanged(const QString & path) {
|
void ProjectFilesystemWidget::directoryChanged(const QString & path) {
|
||||||
QTreeWidgetItem * ti = item_map.value(path);
|
if (timer_fs_changed > 0)
|
||||||
//QMessageBox::information(0, "", "changed " + path + " " + QString::number((qulonglong)ti));
|
killTimer(timer_fs_changed);
|
||||||
if (!ti) return;
|
timer_fs_changed = startTimer(500);
|
||||||
int spos = tree->verticalScrollBar()->value();
|
fs_changed << path;
|
||||||
last_expanded.clear();
|
|
||||||
rememberExpanded(tree->invisibleRootItem());
|
|
||||||
createTree(ti, path, false);
|
|
||||||
filter();
|
|
||||||
restoreExpanded(tree->invisibleRootItem());
|
|
||||||
cleanMappedItems();
|
|
||||||
tree->verticalScrollBar()->setValue(spos);
|
|
||||||
currentFileChanged();
|
|
||||||
//QMessageBox::information(0, "", "map " + QString::number(ais.size()));
|
//QMessageBox::information(0, "", "map " + QString::number(ais.size()));
|
||||||
//QMessageBox::information(0, "", "remove " + removed);
|
//QMessageBox::information(0, "", "remove " + removed);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void changeEvent(QEvent * e);
|
void changeEvent(QEvent * e);
|
||||||
|
void timerEvent(QTimerEvent * e);
|
||||||
void createTree(QTreeWidgetItem * ti, const QString & dir, bool proc_events = true);
|
void createTree(QTreeWidgetItem * ti, const QString & dir, bool proc_events = true);
|
||||||
void createProjectTree(void * p);
|
void createProjectTree(void * p);
|
||||||
void projectNameChanged();
|
void projectNameChanged();
|
||||||
@@ -42,11 +43,12 @@ protected:
|
|||||||
void cleanMappedItems();
|
void cleanMappedItems();
|
||||||
|
|
||||||
bool in_proc, need_rebuild;
|
bool in_proc, need_rebuild;
|
||||||
|
int timer_fs_changed = 0;
|
||||||
ExtensionSystem::IPlugin * proj_plug;
|
ExtensionSystem::IPlugin * proj_plug;
|
||||||
QMenu popup_menu;
|
QMenu popup_menu;
|
||||||
QList<QAction*> this_actions;
|
QList<QAction*> this_actions;
|
||||||
QMap<QString, QTreeWidgetItem*> item_map;
|
QMap<QString, QTreeWidgetItem*> item_map;
|
||||||
QSet<QString> last_expanded;
|
QSet<QString> last_expanded, fs_changed;
|
||||||
FilterDialog filter_dialog;
|
FilterDialog filter_dialog;
|
||||||
FilterDialog::Filter cur_filter;
|
FilterDialog::Filter cur_filter;
|
||||||
QElapsedTimer tm;
|
QElapsedTimer tm;
|
||||||
|
|||||||
Reference in New Issue
Block a user