MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / initImageTable

Method initImageTable

view/kernelcache/ui/kctriage.cpp:129–283  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

127
128
129QWidget* KCTriageView::initImageTable()
130{
131 m_imageTable = new FilterableTableView(this);
132
133 m_imageModel = new QStandardItemModel(0, 3, m_imageTable);
134 m_imageModel->setHorizontalHeaderLabels({"VM Address", "Loaded", "Name"});
135
136 // Apply custom column styling
137 m_imageTable->setItemDelegateForColumn(0, new AddressColorDelegate(m_imageTable));
138 m_imageTable->setItemDelegateForColumn(1, new LoadedDelegate(m_imageTable));
139
140 // Context menu
141 m_imageTable->setContextMenuPolicy(Qt::CustomContextMenu);
142 connect(m_imageTable, &QWidget::customContextMenuRequested, [this](const QPoint &pos) {
143 QMenu contextMenu(tr("Load Image Actions"), m_imageTable);
144
145 // Get number of selected images
146 auto selected = m_imageTable->selectionModel()->selectedRows();
147 int selectedCount = 0;
148 std::vector<uint64_t> addresses;
149 for (const auto& idx : selected)
150 {
151 // Skip rows hidden by the filter
152 if (m_imageTable->isRowHidden(idx.row()))
153 continue;
154 addresses.push_back(idx.data().toString().toULongLong(nullptr, 16));
155 selectedCount++;
156 }
157
158 QAction noSelectionAction("No Images Selected", m_imageTable);
159 QAction loadImagesAction("", m_imageTable);
160 if (selectedCount == 0)
161 {
162 noSelectionAction.setEnabled(false);
163 contextMenu.addAction(&noSelectionAction);
164 }
165 else
166 {
167 // Format action text for loading selected images
168 QString loadActionText = (selectedCount == 1) ? "Load Selected Image" : QString("Load %1 Selected Images").arg(selectedCount);
169 loadImagesAction.setText(loadActionText);
170 connect(&loadImagesAction, &QAction::triggered, [this, addresses]() {
171 loadImagesWithAddr(addresses);
172 });
173 contextMenu.addAction(&loadImagesAction);
174 }
175
176 contextMenu.exec(m_imageTable->viewport()->mapToGlobal(pos));
177 });
178
179 BackgroundThread::create(m_imageTable)->thenBackground([this](const QVariant var) {
180 QVariantList rows;
181
182 auto images = m_cache->GetImages();
183
184 auto newHeaders = std::make_shared<std::vector<KernelCacheMachOHeader>>();
185 newHeaders->reserve(images.size());
186

Callers

nothing calls this directly

Calls 13

connectFunction · 0.85
push_backMethod · 0.80
textMethod · 0.80
dataMethod · 0.45
startMethod · 0.45
GetImagesMethod · 0.45
sizeMethod · 0.45
swapMethod · 0.45
rowCountMethod · 0.45
appendMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected