gui: lock arch when accessing/building treemodel
This commit is contained in:
parent
9fb9eab6c9
commit
f9d30bcdea
@ -215,7 +215,11 @@ void DesignWidget::newContext(Context *ctx)
|
||||
|
||||
highlightSelected.clear();
|
||||
this->ctx = ctx;
|
||||
treeModel->loadContext(ctx);
|
||||
{
|
||||
std::lock_guard<std::mutex> lock_ui(ctx->ui_mutex);
|
||||
std::lock_guard<std::mutex> lock(ctx->mutex);
|
||||
treeModel->loadContext(ctx);
|
||||
}
|
||||
updateTree();
|
||||
}
|
||||
|
||||
@ -235,7 +239,11 @@ void DesignWidget::updateTree()
|
||||
}
|
||||
}
|
||||
|
||||
treeModel->updateCellsNets(ctx);
|
||||
{
|
||||
std::lock_guard<std::mutex> lock_ui(ctx->ui_mutex);
|
||||
std::lock_guard<std::mutex> lock(ctx->mutex);
|
||||
treeModel->updateCellsNets(ctx);
|
||||
}
|
||||
}
|
||||
QtProperty *DesignWidget::addTopLevelProperty(const QString &id)
|
||||
{
|
||||
@ -735,6 +743,9 @@ void DesignWidget::onSearchInserted()
|
||||
if (currentIndex >= currentSearchIndexes.size())
|
||||
currentIndex = 0;
|
||||
} else {
|
||||
std::lock_guard<std::mutex> lock_ui(ctx->ui_mutex);
|
||||
std::lock_guard<std::mutex> lock(ctx->mutex);
|
||||
|
||||
currentSearch = searchEdit->text();
|
||||
currentSearchIndexes = treeModel->search(searchEdit->text());
|
||||
currentIndex = 0;
|
||||
|
@ -146,6 +146,7 @@ void Model::loadContext(Context *ctx)
|
||||
{
|
||||
if (!ctx)
|
||||
return;
|
||||
ctx_ = ctx;
|
||||
|
||||
beginResetModel();
|
||||
|
||||
@ -273,6 +274,12 @@ Qt::ItemFlags Model::flags(const QModelIndex &index) const
|
||||
|
||||
void Model::fetchMore(const QModelIndex &parent)
|
||||
{
|
||||
if (ctx_ == nullptr)
|
||||
return;
|
||||
|
||||
std::lock_guard<std::mutex> lock_ui(ctx_->ui_mutex);
|
||||
std::lock_guard<std::mutex> lock(ctx_->mutex);
|
||||
|
||||
nodeFromIndex(parent)->fetchMore();
|
||||
}
|
||||
|
||||
@ -284,7 +291,6 @@ bool Model::canFetchMore(const QModelIndex &parent) const
|
||||
QList<QModelIndex> Model::search(QString text)
|
||||
{
|
||||
const int limit = 500;
|
||||
|
||||
QList<Item*> list;
|
||||
cell_root_->search(list, text, limit);
|
||||
net_root_->search(list, text, limit);
|
||||
|
@ -355,6 +355,9 @@ class ElementXYRoot : public Item
|
||||
|
||||
class Model : public QAbstractItemModel
|
||||
{
|
||||
private:
|
||||
Context *ctx_ = nullptr;
|
||||
|
||||
public:
|
||||
using BelXYRoot = ElementXYRoot<BelId>;
|
||||
using WireXYRoot = ElementXYRoot<WireId>;
|
||||
|
Loading…
Reference in New Issue
Block a user