GUI: Gui(Un)RegisterScriptLanguage + normalize variable names
This commit is contained in:
parent
d078c80314
commit
a6e658c61b
|
|
@ -1250,10 +1250,19 @@ BRIDGE_IMPEXP void GuiDumpAtN(duint va, int index)
|
|||
_gui_sendmessage(GUI_DUMP_AT_N, (void*)va, (void*)index);
|
||||
}
|
||||
|
||||
|
||||
BRIDGE_IMPEXP void GuiDisplayWarning(const char* title, const char* text)
|
||||
{
|
||||
_gui_sendmessage(GUI_DISPLAY_WARNING, (void*) title, (void*) text);
|
||||
_gui_sendmessage(GUI_DISPLAY_WARNING, (void*)title, (void*)text);
|
||||
}
|
||||
|
||||
BRIDGE_IMPEXP void GuiRegisterScriptLanguage(SCRIPTTYPEINFO* info)
|
||||
{
|
||||
_gui_sendmessage(GUI_REGISTER_SCRIPT_LANG, (void*)info, nullptr);
|
||||
}
|
||||
|
||||
BRIDGE_IMPEXP void GuiUnregisterScriptLanguage(int id)
|
||||
{
|
||||
_gui_sendmessage(GUI_UNREGISTER_SCRIPT_LANG, (void*)id, nullptr);
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||
|
|
|
|||
|
|
@ -789,11 +789,15 @@ typedef enum
|
|||
GUI_SET_DEBUGGEE_NOTES, // param1=const char* text, param2=unused
|
||||
GUI_GET_DEBUGGEE_NOTES, // param1=char** text, param2=unused
|
||||
GUI_DUMP_AT_N, // param1=int index, param2=duint va
|
||||
GUI_DISPLAY_WARNING // param1=const char *text, param2=unused
|
||||
GUI_DISPLAY_WARNING, // param1=const char *text, param2=unused
|
||||
GUI_REGISTER_SCRIPT_LANG, // param1=SCRIPTTYPEINFO* info, param2=unused
|
||||
GUI_UNREGISTER_SCRIPT_LANG // param1=int id, param2=unused
|
||||
} GUIMSG;
|
||||
|
||||
//GUI Typedefs
|
||||
typedef void (*GUICALLBACK)();
|
||||
typedef bool (*GUISCRIPTEXECUTE)(const char* text);
|
||||
typedef void (*GUISCRIPTCOMPLETER)(const char* text, char** entries, int* entryCount);
|
||||
|
||||
//GUI structures
|
||||
typedef struct
|
||||
|
|
@ -815,6 +819,14 @@ typedef struct
|
|||
duint size;
|
||||
} ICONDATA;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char name[64];
|
||||
int id;
|
||||
GUISCRIPTEXECUTE execute;
|
||||
GUISCRIPTCOMPLETER completeCommand;
|
||||
} SCRIPTTYPEINFO;
|
||||
|
||||
//GUI functions
|
||||
BRIDGE_IMPEXP void GuiDisasmAt(duint addr, duint cip);
|
||||
BRIDGE_IMPEXP void GuiSetDebugState(DBGSTATE state);
|
||||
|
|
@ -890,6 +902,8 @@ BRIDGE_IMPEXP void GuiSetDebuggeeNotes(const char* text);
|
|||
BRIDGE_IMPEXP void GuiGetDebuggeeNotes(char** text);
|
||||
BRIDGE_IMPEXP void GuiDumpAtN(duint va, int index);
|
||||
BRIDGE_IMPEXP void GuiDisplayWarning(const char* title, const char* text);
|
||||
BRIDGE_IMPEXP void GuiRegisterScriptLanguage(SCRIPTTYPEINFO* info);
|
||||
BRIDGE_IMPEXP void GuiUnregisterScriptLanguage(int id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
|
|
@ -524,10 +524,8 @@ void* Bridge::processMessage(GUIMSG type, void* param1, void* param2)
|
|||
break;
|
||||
|
||||
case GUI_DUMP_AT_N:
|
||||
{
|
||||
emit dumpAtN((duint)param1, (int)param2);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case GUI_DISPLAY_WARNING:
|
||||
{
|
||||
|
|
@ -536,6 +534,18 @@ void* Bridge::processMessage(GUIMSG type, void* param1, void* param2)
|
|||
emit displayWarning(title, text);
|
||||
}
|
||||
break;
|
||||
|
||||
case GUI_REGISTER_SCRIPT_LANG:
|
||||
{
|
||||
BridgeResult result;
|
||||
emit registerScriptLang((SCRIPTTYPEINFO*)param1);
|
||||
result.Wait();
|
||||
}
|
||||
break;
|
||||
|
||||
case GUI_UNREGISTER_SCRIPT_LANG:
|
||||
emit unregisterScriptLang((int)param1);
|
||||
break;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,6 +116,8 @@ signals:
|
|||
void getDebuggeeNotes(void* text);
|
||||
void dumpAtN(duint va, int index);
|
||||
void displayWarning(QString title, QString text);
|
||||
void registerScriptLang(SCRIPTTYPEINFO* info);
|
||||
void unregisterScriptLang(int id);
|
||||
|
||||
private:
|
||||
QMutex* mBridgeMutex;
|
||||
|
|
|
|||
|
|
@ -14,11 +14,11 @@ CommandLineEdit::CommandLineEdit(QWidget* parent) : HistoryLineEdit(parent)
|
|||
this->setCompleter(mCompleter);
|
||||
|
||||
// Initialize default script execute function
|
||||
GUI_SCRIPT_INFO info;
|
||||
info.DisplayName = "Default";
|
||||
info.AssignedId = 0;
|
||||
info.Execute = DbgCmdExec;
|
||||
info.CompleteCommand = nullptr;
|
||||
SCRIPTTYPEINFO info;
|
||||
strcpy(info.name, "Default");
|
||||
info.id = 0;
|
||||
info.execute = DbgCmdExec;
|
||||
info.completeCommand = nullptr;
|
||||
registerScriptType(&info);
|
||||
|
||||
//Setup signals & slots
|
||||
|
|
@ -27,6 +27,8 @@ CommandLineEdit::CommandLineEdit(QWidget* parent) : HistoryLineEdit(parent)
|
|||
connect(Bridge::getBridge(), SIGNAL(autoCompleteAddCmd(QString)), this, SLOT(autoCompleteAddCmd(QString)));
|
||||
connect(Bridge::getBridge(), SIGNAL(autoCompleteDelCmd(QString)), this, SLOT(autoCompleteDelCmd(QString)));
|
||||
connect(Bridge::getBridge(), SIGNAL(autoCompleteClearAll()), this, SLOT(autoCompleteClearAll()));
|
||||
connect(Bridge::getBridge(), SIGNAL(registerScriptLang(SCRIPTTYPEINFO*)), this, SLOT(registerScriptType(SCRIPTTYPEINFO*)));
|
||||
connect(Bridge::getBridge(), SIGNAL(unregisterScriptLang(SCRIPTTYPEINFO*)), this, SLOT(unregisterScriptType(SCRIPTTYPEINFO*)));
|
||||
connect(mCmdScriptType, SIGNAL(currentIndexChanged(int)), this, SLOT(scriptTypeChanged(int)));
|
||||
}
|
||||
|
||||
|
|
@ -80,6 +82,27 @@ bool CommandLineEdit::focusNextPrevChild(bool next)
|
|||
return false;
|
||||
}
|
||||
|
||||
void CommandLineEdit::execute()
|
||||
{
|
||||
GUISCRIPTEXECUTE exec = mScriptInfo[mCurrentScriptIndex].execute;
|
||||
const QString & cmd = text();
|
||||
|
||||
if(exec)
|
||||
{
|
||||
// Send this string directly to the user
|
||||
exec(cmd.toUtf8().constData());
|
||||
}
|
||||
|
||||
// Add this line to the history and clear text, regardless if it was executed
|
||||
addLineToHistory(cmd);
|
||||
setText("");
|
||||
}
|
||||
|
||||
QWidget* CommandLineEdit::selectorWidget()
|
||||
{
|
||||
return mCmdScriptType;
|
||||
}
|
||||
|
||||
void CommandLineEdit::autoCompleteUpdate(const QString text)
|
||||
{
|
||||
// No command, no completer
|
||||
|
|
@ -93,7 +116,7 @@ void CommandLineEdit::autoCompleteUpdate(const QString text)
|
|||
QModelIndex modelIndex = mCompleter->popup()->currentIndex();
|
||||
|
||||
// User supplied callback
|
||||
SCRIPTCOMPLETER complete = mScriptInfo[mCurrentScriptIndex].CompleteCommand;
|
||||
GUISCRIPTCOMPLETER complete = mScriptInfo[mCurrentScriptIndex].completeCommand;
|
||||
|
||||
if(complete)
|
||||
{
|
||||
|
|
@ -154,38 +177,38 @@ void CommandLineEdit::autoCompleteClearAll()
|
|||
mDefaultCompletions.clear();
|
||||
}
|
||||
|
||||
void CommandLineEdit::scriptTypeChanged(int index)
|
||||
{
|
||||
mCurrentScriptIndex = index;
|
||||
}
|
||||
|
||||
void CommandLineEdit::registerScriptType(GUI_SCRIPT_INFO* info)
|
||||
void CommandLineEdit::registerScriptType(SCRIPTTYPEINFO* info)
|
||||
{
|
||||
// Must be valid pointer
|
||||
if(!info)
|
||||
{
|
||||
Bridge::getBridge()->setResult(0);
|
||||
return;
|
||||
}
|
||||
|
||||
// Insert
|
||||
info->AssignedId = mScriptInfo.size();
|
||||
info->id = mScriptInfo.size();
|
||||
mScriptInfo.push_back(*info);
|
||||
|
||||
// Update
|
||||
mCmdScriptType->addItem(info->DisplayName);
|
||||
mCmdScriptType->addItem(info->name);
|
||||
|
||||
if(info->AssignedId == 0)
|
||||
if(info->id == 0)
|
||||
mCurrentScriptIndex = 0;
|
||||
|
||||
Bridge::getBridge()->setResult(1);
|
||||
}
|
||||
|
||||
void CommandLineEdit::unregisterScriptType(int Id)
|
||||
void CommandLineEdit::unregisterScriptType(int id)
|
||||
{
|
||||
// The default script type can't be unregistered
|
||||
if(Id <= 0)
|
||||
if(id <= 0)
|
||||
return;
|
||||
|
||||
// Loop through the vector and invalidate entry (validate id)
|
||||
for(int i = 0; i < mScriptInfo.size(); i++)
|
||||
{
|
||||
if(mScriptInfo[i].AssignedId == Id)
|
||||
if(mScriptInfo[i].id == id)
|
||||
{
|
||||
mScriptInfo.removeAt(i);
|
||||
mCmdScriptType->removeItem(i);
|
||||
|
|
@ -200,23 +223,7 @@ void CommandLineEdit::unregisterScriptType(int Id)
|
|||
mCmdScriptType->setCurrentIndex(mCurrentScriptIndex);
|
||||
}
|
||||
|
||||
void CommandLineEdit::execute()
|
||||
void CommandLineEdit::scriptTypeChanged(int index)
|
||||
{
|
||||
SCRIPTEXECUTE exec = mScriptInfo[mCurrentScriptIndex].Execute;
|
||||
const QString & cmd = text();
|
||||
|
||||
if(exec)
|
||||
{
|
||||
// Send this string directly to the user
|
||||
exec(cmd.toUtf8().constData());
|
||||
}
|
||||
|
||||
// Add this line to the history and clear text, regardless if it was executed
|
||||
addLineToHistory(cmd);
|
||||
setText("");
|
||||
}
|
||||
|
||||
QWidget* CommandLineEdit::selectorWidget()
|
||||
{
|
||||
return mCmdScriptType;
|
||||
mCurrentScriptIndex = index;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,13 @@
|
|||
#ifndef COMMANDLINEEDIT_H
|
||||
#define COMMANDLINEEDIT_H
|
||||
|
||||
#include "Bridge/bridgemain.h"
|
||||
#include "HistoryLineEdit.h"
|
||||
#include <QAbstractItemView>
|
||||
#include <QCompleter>
|
||||
#include <QComboBox>
|
||||
#include <QStringListModel>
|
||||
|
||||
typedef bool (* SCRIPTEXECUTE)(const char* Text);
|
||||
typedef void (* SCRIPTCOMPLETER)(const char* Text, char** Entries, int* EntryCount);
|
||||
|
||||
struct GUI_SCRIPT_INFO
|
||||
{
|
||||
const char* DisplayName;
|
||||
int AssignedId;
|
||||
SCRIPTEXECUTE Execute;
|
||||
SCRIPTCOMPLETER CompleteCommand;
|
||||
};
|
||||
|
||||
class CommandLineEdit : public HistoryLineEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
|
|
@ -27,10 +17,7 @@ public:
|
|||
void keyPressEvent(QKeyEvent* event);
|
||||
bool focusNextPrevChild(bool next);
|
||||
|
||||
void registerScriptType(GUI_SCRIPT_INFO* info);
|
||||
void unregisterScriptType(int Id);
|
||||
void execute();
|
||||
|
||||
QWidget* selectorWidget();
|
||||
|
||||
public slots:
|
||||
|
|
@ -38,13 +25,15 @@ public slots:
|
|||
void autoCompleteAddCmd(const QString cmd);
|
||||
void autoCompleteDelCmd(const QString cmd);
|
||||
void autoCompleteClearAll();
|
||||
void registerScriptType(SCRIPTTYPEINFO* info);
|
||||
void unregisterScriptType(int id);
|
||||
void scriptTypeChanged(int index);
|
||||
|
||||
private:
|
||||
QComboBox* mCmdScriptType;
|
||||
QCompleter* mCompleter;
|
||||
QStringListModel* mCompleterModel;
|
||||
QList<GUI_SCRIPT_INFO> mScriptInfo;
|
||||
QList<SCRIPTTYPEINFO> mScriptInfo;
|
||||
QStringList mDefaultCompletions;
|
||||
int mCurrentScriptIndex;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue