1
0
Fork 0
x64dbg/src/gui/Src/Gui/CustomizeMenuDialog.cpp

125 lines
4.6 KiB
C++

#include "CustomizeMenuDialog.h"
#include "ui_CustomizeMenuDialog.h"
#include "MenuBuilder.h"
#include "Configuration.h"
CustomizeMenuDialog::CustomizeMenuDialog(QWidget* parent) :
QDialog(parent),
ui(new Ui::CustomizeMenuDialog)
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint | Qt::MSWindowsFixedSizeDialogHint);
ui->setupUi(this);
for(const Configuration::MenuMap & i : Config()->NamedMenuBuilders)
{
QString viewName;
MenuBuilder* builder = nullptr;
QList<QAction*>* mainMenuList = nullptr;
QString id;
if(i.type == 1)
{
mainMenuList = i.mainMenuList;
id = mainMenuList->first()->text();
}
else if(i.type == 0)
{
builder = i.builder;
id = builder->getId();
}
else //invalid or unsupported type.Continue
continue;
//Get localized string for the name of individual views
if(id == "CPUDisassembly")
viewName = tr("Disassembler");
else if(id == "CPUDump")
viewName = tr("Dump");
else if(id == "WatchView")
viewName = tr("Watch");
else if(id == "CallStackView")
viewName = tr("Call Stack");
else if(id == "ThreadView")
viewName = tr("Threads");
else if(id == "DisassemblerGraphView")
viewName = tr("Graph");
else if(id == "XrefBrowseDialog")
viewName = tr("Xref Browser");
else if(id == "StructWidget")
viewName = tr("Struct");
else if(id == "CPUStack")
viewName = tr("Stack");
else if(id == "SourceView")
viewName = tr("Source");
else if(id == "File")
viewName = tr("File");
else if(id == "Debug")
viewName = tr("Debug");
else if(id == "Option")
viewName = tr("Option");
else if(id == "Favourite")
viewName = tr("Favourite");
else if(id == "Help")
viewName = tr("Help");
else if(id == "View")
viewName = tr("View");
else
continue;
// Add Parent Node
QTreeWidgetItem* parentItem = new QTreeWidgetItem(ui->treeWidget);
parentItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
parentItem->setText(0, viewName);
// Add Children nodes
for(size_t j = 0; j < i.count; j++)
{
// Get localized name of menu item by communicating with the menu
QString text;
if(i.type == 0)
text = builder->getText(j);
else if(i.type == 1)
text = mainMenuList->at(int(j + 1))->text();
// Add a child node only if it has a non-empty name
if(!text.isEmpty())
{
QTreeWidgetItem* menuItem = new QTreeWidgetItem(parentItem, 0);
menuItem->setText(0, text.replace(QChar('&'), ""));
QString configString = QString("Menu%1Hidden%2").arg(id).arg(j);
menuItem->setCheckState(0, Config()->getBool("Gui", configString) ? Qt::Checked : Qt::Unchecked);
menuItem->setData(0, Qt::UserRole, QVariant(configString));
menuItem->setFlags(Qt::ItemIsSelectable | Qt::ItemNeverHasChildren | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
}
}
ui->treeWidget->addTopLevelItem(parentItem);
}
connect(ui->btnOk, SIGNAL(clicked()), this, SLOT(onOk()));
connect(ui->btnDisselectAll, SIGNAL(clicked()), this, SLOT(onDisselectAll()));
}
void CustomizeMenuDialog::onOk()
{
for(int i = ui->treeWidget->topLevelItemCount(); i != 0; i--)
{
const QTreeWidgetItem* parentItem = ui->treeWidget->topLevelItem(i - 1);
for(int j = parentItem->childCount(); j != 0; j--)
{
const QTreeWidgetItem* childItem = parentItem->child(j - 1);
Config()->setBool("Gui", childItem->data(0, Qt::UserRole).toString(), childItem->checkState(0) == Qt::Checked);
}
}
emit accept();
}
void CustomizeMenuDialog::onDisselectAll()
{
for(int i = ui->treeWidget->topLevelItemCount(); i != 0; i--)
{
const QTreeWidgetItem* parentItem = ui->treeWidget->topLevelItem(i - 1);
for(int j = parentItem->childCount(); j != 0; j--)
{
parentItem->child(j - 1)->setCheckState(0, Qt::Unchecked);
}
}
}
CustomizeMenuDialog::~CustomizeMenuDialog()
{
delete ui;
}