HAL
layout_locker.cpp
Go to the documentation of this file.
2 #include "gui/gui_globals.h"
4 
5 namespace hal {
6 
7  LayoutLockerManager* LayoutLockerManager::inst = nullptr;
8 
9  LayoutLockerManager::LayoutLockerManager()
10  : mLockCount(0) {;}
11 
12  LayoutLockerManager* LayoutLockerManager::instance()
13  {
14  if (!inst) inst = new LayoutLockerManager;
15  return inst;
16  }
17 
18  void LayoutLockerManager::addLock()
19  {
20  ++mLockCount;
21  }
22 
23  void LayoutLockerManager::removeLock()
24  {
25  --mLockCount;
26 
27  if (mLockCount <= 0 && !mWaitingRoom.isEmpty())
28  {
29  for (u32 ctxId : mWaitingRoom)
30  {
32  if (ctx) ctx->startSceneUpdate();
33  }
34  mWaitingRoom.clear();
35  }
36  }
37 
38  bool LayoutLockerManager::canUpdate(GraphContext* ctx)
39  {
40  if (!ctx) return false;
41  if (mLockCount <= 0) return true;
42  mWaitingRoom.insert(ctx->id());
43  return false;
44  }
45 
46  void LayoutLockerManager::removeWaitingContext(GraphContext* ctx)
47  {
48  auto it = mWaitingRoom.find(ctx->id());
49  if (it != mWaitingRoom.end())
50  mWaitingRoom.erase(it);
51  }
52 
53  LayoutLocker::LayoutLocker()
54  {
55  LayoutLockerManager::instance()->addLock();
56  }
57 
58  LayoutLocker::~LayoutLocker()
59  {
60  LayoutLockerManager::instance()->removeLock();
61  }
62 }
Logical container for modules, gates, and nets.
Definition: graph_context.h:55
GraphContext * getContextById(u32 id) const
GraphContextManager * gGraphContextManager
Definition: plugin_gui.cpp:85
quint32 u32