1
0
Fork 0

GUI: fixed some damn ugly casting hacks

This commit is contained in:
mrexodia 2016-10-28 00:14:18 +02:00
parent c804d267ec
commit 3a0aa8297e
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
5 changed files with 53 additions and 42 deletions

View File

@ -9,61 +9,61 @@ CustomizeMenuDialog::CustomizeMenuDialog(QWidget* parent) :
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint | Qt::MSWindowsFixedSizeDialogHint);
ui->setupUi(this);
for(const auto & i : Config()->NamedMenuBuilders)
for(const Configuration::MenuMap & i : Config()->NamedMenuBuilders)
{
QString viewName;
MenuBuilder* builder = nullptr;
QList<QAction*>* mainMenuList = nullptr;
const char* id;
if(std::get<1>(i) == 1)
QString id;
if(i.type == 1)
{
mainMenuList = reinterpret_cast<QList<QAction*>*>(std::get<0>(i));
id = reinterpret_cast<const char*>(mainMenuList->first());
mainMenuList = i.mainMenuList;
id = mainMenuList->first()->text();
}
else if(std::get<1>(i) == 0)
else if(i.type == 0)
{
builder = reinterpret_cast<MenuBuilder*>(std::get<0>(i));
builder = i.builder;
id = builder->getId();
}
else
continue;
if(strcmp(id, "CPUDisassembly") == 0)
if(id == "CPUDisassembly")
viewName = tr("Disassembler");
else if(strcmp(id, "CPUDump") == 0)
else if(id == "CPUDump")
viewName = tr("Dump");
else if(strcmp(id, "WatchView") == 0)
else if(id == "WatchView")
viewName = tr("Watch");
else if(strcmp(id, "CallStackView") == 0)
else if(id == "CallStackView")
viewName = tr("Call Stack");
else if(strcmp(id, "ThreadView") == 0)
else if(id == "ThreadView")
viewName = tr("Threads");
else if(strcmp(id, "DisassemblerGraphView") == 0)
else if(id == "DisassemblerGraphView")
viewName = tr("Graph");
else if(strcmp(id, "CPUStack") == 0)
else if(id == "CPUStack")
viewName = tr("Stack");
else if(strcmp(id, "File") == 0)
else if(id == "File")
viewName = tr("File");
else if(strcmp(id, "Debug") == 0)
else if(id == "Debug")
viewName = tr("Debug");
else if(strcmp(id, "Option") == 0)
else if(id == "Option")
viewName = tr("Option");
else if(strcmp(id, "Favourite") == 0)
else if(id == "Favourite")
viewName = tr("Favourite");
else if(strcmp(id, "Help") == 0)
else if(id == "Help")
viewName = tr("Help");
else if(strcmp(id, "View") == 0)
else if(id == "View")
viewName = tr("View");
else
continue;
QTreeWidgetItem* parentItem = new QTreeWidgetItem(ui->treeWidget);
parentItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
parentItem->setText(0, viewName);
for(size_t j = 0; j < std::get<2>(i); j++)
for(size_t j = 0; j < i.count; j++)
{
QString text;
if(std::get<1>(i) == 0)
if(i.type == 0)
text = builder->getText(j);
else if(std::get<1>(i) == 1)
else if(i.type == 1)
text = mainMenuList->at(j + 1)->text();
if(!text.isEmpty())
{

View File

@ -1833,15 +1833,15 @@ static void setupMenuCustomizationHelper(QMenu* parentMenu, QList<QAction*> & st
void MainWindow::setupMenuCustomization()
{
mFileMenuStrings.append(reinterpret_cast<QAction* const &>("File"));
mFileMenuStrings.append(new QAction("File", this));
setupMenuCustomizationHelper(ui->menuFile, mFileMenuStrings);
mDebugMenuStrings.append(reinterpret_cast<QAction* const &>("Debug"));
mDebugMenuStrings.append(new QAction("Debug", this));
setupMenuCustomizationHelper(ui->menuDebug, mDebugMenuStrings);
mOptionsMenuStrings.append(reinterpret_cast<QAction* const &>("Option"));
mOptionsMenuStrings.append(new QAction("Option", this));
setupMenuCustomizationHelper(ui->menuOptions, mOptionsMenuStrings);
mHelpMenuStrings.append(reinterpret_cast<QAction* const &>("Help"));
mHelpMenuStrings.append(new QAction("Help", this));
setupMenuCustomizationHelper(ui->menuHelp, mHelpMenuStrings);
mViewMenuStrings.append(reinterpret_cast<QAction* const &>("View"));
mViewMenuStrings.append(new QAction("View", this));
setupMenuCustomizationHelper(ui->menuView, mViewMenuStrings);
onMenuCustomized();
Config()->registerMainMenuStringList(&mFileMenuStrings);

View File

@ -1008,19 +1008,14 @@ bool Configuration::shortcutToConfig(const QString id, const QKeySequence shortc
void Configuration::registerMenuBuilder(MenuBuilder* menu, size_t count)
{
bool exists = false;
const char* id = menu->getId();
QString id = menu->getId();
for(const auto & i : NamedMenuBuilders)
{
MenuBuilder* builder = reinterpret_cast<MenuBuilder*>(std::get<0>(i));
if(std::get<1>(i) == 0 && strcmp(builder->getId() , id) == 0)
exists = true;
}
if(!exists)
NamedMenuBuilders.append(std::make_tuple<void*, int, size_t>((void*)menu, 0, std::move(count)));
if(i.type == 0 && i.builder->getId() == id)
return; //already exists
NamedMenuBuilders.append(MenuMap(menu, count));
}
void Configuration::registerMainMenuStringList(QList<QAction*>* menu)
{
NamedMenuBuilders.append(std::make_tuple<void*, int, size_t>((void*)menu, 1, menu->size() - 1));
NamedMenuBuilders.append(MenuMap(menu, menu->size() - 1));
}

View File

@ -82,7 +82,24 @@ public:
QMap<QString, Shortcut> Shortcuts;
//custom menu maps
QList<std::tuple<void*, int, size_t>> NamedMenuBuilders;
struct MenuMap
{
union
{
QList<QAction*>* mainMenuList;
MenuBuilder* builder;
};
int type;
size_t count;
MenuMap() { }
MenuMap(QList<QAction*>* mainMenuList, size_t count)
: mainMenuList(mainMenuList), type(1), count(count) { }
MenuMap(MenuBuilder* builder, size_t count)
: builder(builder), type(0), count(count) { }
};
QList<MenuMap> NamedMenuBuilders;
static Configuration* mPtr;

View File

@ -16,7 +16,6 @@ public:
inline MenuBuilder(QObject* parent, BuildCallback callback = nullptr)
: QObject(parent),
id(0),
_callback(callback)
{
}
@ -58,7 +57,7 @@ public:
QString getText(size_t id) const;
const char* getId() const
QString getId() const
{
return id;
}
@ -115,7 +114,7 @@ private:
};
BuildCallback _callback;
const char* id;
QString id;
std::vector<Container> _containers;
};