GUI: fixed some damn ugly casting hacks
This commit is contained in:
parent
c804d267ec
commit
3a0aa8297e
|
@ -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())
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue