Skip to content

Commit 3f082c4

Browse files
committed
[FEATURE] If RichHeader has been deleted, remove the tab
1 parent 6751e66 commit 3f082c4

File tree

4 files changed

+48
-13
lines changed

4 files changed

+48
-13
lines changed

pe-bear/gui/DetailsTab.cpp

+31-8
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ DetailsTab::DetailsTab(PeHandler *peHndl, QWidget *parent)
8282
fileHdrTree(this), optionalHdrTree(this), disasmView(this),
8383
hdrsSplitter(this), secHdrTreeView(&hdrsSplitter), secDiagramSplitter(&hdrsSplitter),
8484
fileHdrModel(NULL), optHdrModel(NULL), secHdrsModel(NULL), importsModel(NULL), exportsModel(NULL), expFuncModel(NULL),
85-
secDiagramModel(NULL), disasmModel(NULL), resourcesModel(NULL), clrModel(NULL)
85+
secDiagramModel(NULL), disasmModel(NULL), resourcesModel(NULL), clrModel(NULL),
86+
cRichHdrTab(-1)
8687
{
8788
for (int i = 0; i < pe::DIR_ENTRIES_COUNT; i++) {
8889
dirSplitters[i] = NULL;
@@ -199,17 +200,15 @@ DetailsTab::DetailsTab(PeHandler *peHndl, QWidget *parent)
199200
cStringsTab = addTab(&stringsBrowseWindow, tr("Strings"));
200201

201202
cDOSHdrTab = addTab(&dosHdrTree, tr("DOS Hdr"));
202-
if (peHndl && peHndl->getPe() && peHndl->getPe()->getRichHeaderSign()) {
203-
cRichHdrTab = addTab(&richHdrTree, tr("Rich Hdr"));
204-
}
203+
cRichHdrTab = addTab(&richHdrTree, tr("Rich Hdr"));
205204
cFileHdrsTab = addTab(&fileHdrTree, tr("File Hdr"));
206205
cOptHdrsTab = addTab(&optionalHdrTree, tr("Optional Hdr"));
207206
cSecHdrsTab = addTab(&hdrsSplitter, tr("Section Hdrs"));
208207

209208
setScaledIcons();
210-
reloadDirView();
209+
reloadTabsView();
211210

212-
connect(this->myPeHndl, SIGNAL(modified()), this, SLOT(reloadDirView()) );
211+
connect(this->myPeHndl, SIGNAL(modified()), this, SLOT(reloadTabsView()) );
213212
connect(this->myPeHndl, SIGNAL(pageOffsetModified(offset_t, bufsize_t)), this, SLOT(setDisasmTabText(offset_t)) );
214213
connect(this->myPeHndl, SIGNAL(pageOffsetModified(offset_t, bufsize_t)), disasmModel, SLOT(setShownContent(offset_t, bufsize_t)) );
215214

@@ -468,7 +467,7 @@ void DetailsTab::setDisasmTabText(offset_t raw)
468467
if (sec2Name.size())
469468
secName += " to " + sec2Name;
470469
}
471-
setTabText(this->cDisasmTab, tr( "Disasm") + secName);
470+
setTabText(this->cDisasmTab, tr("Disasm") + secName);
472471
}
473472

474473
void DetailsTab::shirtTabsAfter(pe::dir_entry dirNum, bool toTheLeft)
@@ -533,8 +532,32 @@ void DetailsTab::manageDirTab(pe::dir_entry dirNum)
533532
}
534533
}
535534

536-
void DetailsTab::reloadDirView()
535+
void DetailsTab::manageRichHdrTab()
537536
{
537+
if (!myPeHndl || !m_PE) return;
538+
539+
//add/remove Rich Header tab
540+
if (m_PE->getRichHeaderSign()) {
541+
if (cRichHdrTab == (-1)) {
542+
int lastBefore = this->cDOSHdrTab;
543+
int tabIndex = lastBefore + 1;
544+
cRichHdrTab = this->insertTab(tabIndex, &richHdrTree, tr("Rich Hdr"));
545+
}
546+
}
547+
else {
548+
if (cRichHdrTab != (-1)) {
549+
removeTab(cRichHdrTab);
550+
cRichHdrTab = (-1);
551+
}
552+
}
553+
}
554+
555+
void DetailsTab::reloadTabsView()
556+
{
557+
if (!myPeHndl || !m_PE) return;
558+
559+
manageRichHdrTab();
560+
538561
for (int i = 0; i < pe::DIR_ENTRIES_COUNT; i++) {
539562
manageDirTab(pe::dir_entry(i));
540563
}

pe-bear/gui/DetailsTab.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ protected slots:
4646
void onAutoAddImports();
4747

4848
void setDisasmTabText(offset_t raw);
49-
50-
void reloadDirView();
51-
void manageDirTab(pe::dir_entry dirNum);
49+
void reloadTabsView();
5250

5351
protected:
52+
void manageDirTab(pe::dir_entry dirNum);
53+
void manageRichHdrTab();
5454
void shirtTabsAfter(pe::dir_entry dirNum, bool toTheLeft);
5555
void createModels();
5656
void deleteModels();

pe-bear/gui/ResourceDirSplitter.cpp

+13-2
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ bool ResourcesDirSplitter::displayText(ResourceContentWrapper *resContent)
126126
return true;
127127
}
128128

129+
bool ResourcesDirSplitter::displayResVersion(ResourceVersionWrapper *verContent)
130+
{
131+
if (!verContent) return false;
132+
//TODO: finish this
133+
return false;
134+
}
135+
129136
bool ResourcesDirSplitter::displayResStrings(ResourceStringsWrapper *strContent)
130137
{
131138
if (!strContent) return false;
@@ -320,8 +327,12 @@ void ResourcesDirSplitter::refreshLeafContent()
320327
break;
321328
}
322329
case RESTYPE_STRING: {
323-
ResourceStringsWrapper *strWrapper = dynamic_cast<ResourceStringsWrapper*>(resContent);
324-
isOk = displayResStrings(strWrapper);
330+
isOk = displayResStrings(dynamic_cast<ResourceStringsWrapper*>(resContent));
331+
if (isOk) changeView(RES_VIEW_RAW);
332+
break;
333+
}
334+
case RESTYPE_VERSION: {
335+
isOk = displayResVersion(dynamic_cast<ResourceVersionWrapper*>(resContent));
325336
if (isOk) changeView(RES_VIEW_RAW);
326337
break;
327338
}

pe-bear/gui/ResourceDirSplitter.h

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public slots:
4646

4747
void changeView(res_view_type viewType);
4848
void clearContentDisplay();
49+
bool displayResVersion(ResourceVersionWrapper *resContent);
4950
bool displayResStrings(ResourceStringsWrapper *resContent);
5051
bool displayText(ResourceContentWrapper *resContent);
5152
bool displayBitmap(ResourceContentWrapper *resContent);

0 commit comments

Comments
 (0)