| 343 | |
| 344 | |
| 345 | class FlowGraphLayoutRequest: |
| 346 | def __init__(self, graph, callback=None): |
| 347 | self.on_complete = callback |
| 348 | self._cb = ctypes.CFUNCTYPE(None, ctypes.c_void_p)(self._complete) |
| 349 | self.handle = core.BNStartFlowGraphLayout(graph.handle, None, self._cb) |
| 350 | |
| 351 | def __del__(self): |
| 352 | if core is None: |
| 353 | return |
| 354 | self.abort() |
| 355 | core.BNFreeFlowGraphLayoutRequest(self.handle) |
| 356 | |
| 357 | def _complete(self, ctxt): |
| 358 | try: |
| 359 | if self.on_complete is not None: |
| 360 | self.on_complete() |
| 361 | except: |
| 362 | log_error(traceback.format_exc()) |
| 363 | |
| 364 | @property |
| 365 | def complete(self): |
| 366 | """Whether flow graph layout is complete (read-only)""" |
| 367 | return core.BNIsFlowGraphLayoutRequestComplete(self.handle) |
| 368 | |
| 369 | @property |
| 370 | def graph(self): |
| 371 | """Flow graph that is being processed (read-only)""" |
| 372 | return CoreFlowGraph(core.BNGetGraphForFlowGraphLayoutRequest(self.handle)) |
| 373 | |
| 374 | def abort(self): |
| 375 | core.BNAbortFlowGraphLayoutRequest(self.handle) |
| 376 | self.on_complete = None |
| 377 | |
| 378 | |
| 379 | class FlowGraph: |