FunctionWidget::FunctionWidget(Function* function, Mainwindow* mainwindow)
: function(function)
, mainwindow(mainwindow)
+ , layouted(false)
, logger(log4cxx::Logger::getLogger("gui.Mainwindow")) {
- // CFG
- CFGScene * scene = new CFGScene;
- InformationManager* manager = function->getManager();
-
- BasicBlock * block = manager->getBasicBlock(function->getStartAddress());
- LOG4CXX_DEBUG(logger, "Building widget for functionction " << function->getName());
- for (auto i : function->blocks()) {
- LOG4CXX_DEBUG(logger, "Functionction contains Block " << i.second->getName());
- }
-
- uint64_t start_address(std::numeric_limits<uint64_t>::max());
- for (auto b : function->blocks()) {
- if (b.first < start_address)
- start_address = b.first;
- }
+}
- std::map<uint64_t, BasicBlockWidget*> _blocks;
- local__add_basic_block(block, mainwindow,
- manager, _blocks, scene, 3*start_address, 100);
+void FunctionWidget::showEvent(QShowEvent* event) {
+ if (!layouted) {
+ CFGScene * scene = new CFGScene;
+ InformationManager* manager = function->getManager();
- QGraphicsView * view = new QGraphicsView(scene);
- view->setDragMode(QGraphicsView::ScrollHandDrag);
- addTab(view, "CFG");
+ BasicBlock * block = manager->getBasicBlock(function->getStartAddress());
+ LOG4CXX_DEBUG(logger, "Building widget for functionction " << function->getName());
+ for (auto i : function->blocks()) {
+ LOG4CXX_DEBUG(logger, "Functionction contains Block " << i.second->getName());
+ }
- // Listing
- QTableWidget * t = new QTableWidget();
- t->setColumnCount(3);
- t->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ uint64_t start_address(std::numeric_limits<uint64_t>::max());
+ for (auto b : function->blocks()) {
+ if (b.first < start_address)
+ start_address = b.first;
+ }
- addTab(t, "Listing");
-}
+ std::map<uint64_t, BasicBlockWidget*> _blocks;
+ local__add_basic_block(block, mainwindow,
+ manager, _blocks, scene, 3*start_address, 100);
+ QGraphicsView * view = new QGraphicsView(scene);
+ view->setDragMode(QGraphicsView::ScrollHandDrag);
+ addTab(view, "CFG");
+ // Listing
+ QTableWidget * t = new QTableWidget();
+ t->setColumnCount(3);
+ t->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ addTab(t, "Listing");
+ layouted = true;
+ }
+}
namespace {
BasicBlockWidget *