Moved cheat window code to its own file. Created a cheat window class object to better manage multiple instances of the cheat window.
This commit is contained in:
parent
754e621735
commit
309cb00f93
|
@ -8,6 +8,7 @@ Export('env')
|
|||
source_list = Split(
|
||||
"""
|
||||
input.cpp
|
||||
cheat.cpp
|
||||
config.cpp
|
||||
sdl.cpp
|
||||
sdl-joystick.cpp
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
|||
// cheat.h
|
||||
|
||||
void openCheatsWindow(void);
|
|
@ -14,6 +14,7 @@
|
|||
#include "dface.h"
|
||||
#include "input.h"
|
||||
#include "config.h"
|
||||
#include "cheat.h"
|
||||
#include "icon.xpm"
|
||||
|
||||
#ifdef _S9XLUA_H
|
||||
|
@ -63,23 +64,6 @@ bool gtkIsStarted = false;
|
|||
bool menuTogglingEnabled = false;
|
||||
|
||||
static GtkTreeStore *hotkey_store = NULL;
|
||||
//-----------------------------------------
|
||||
// Cheat static variables
|
||||
static GtkTreeStore *actv_cheats_store = NULL;
|
||||
static GtkTreeStore *ram_match_store = NULL;
|
||||
static GtkTreeIter actv_cheats_iter;
|
||||
static GtkTreeIter ram_match_iter;
|
||||
static int cheat_search_known_value = 0;
|
||||
static int cheat_search_neq_value = 0;
|
||||
static int cheat_search_gt_value = 0;
|
||||
static int cheat_search_lt_value = 0;
|
||||
static int new_cheat_addr = -1;
|
||||
static int new_cheat_val = -1;
|
||||
static int new_cheat_cmp = -1;
|
||||
static std::string new_cheat_name;
|
||||
static bool wasPausedByCheats = false;
|
||||
static bool pauseWhileCheatsActv = false;
|
||||
static bool cheatWindowOpen = false;
|
||||
|
||||
//-----------------------------------------
|
||||
// Ram Watch static variables
|
||||
|
@ -1527,892 +1511,6 @@ void toggleAutoResume(GtkCheckMenuItem *item, gpointer user_data)
|
|||
g_config->setOption("SDL.AutoResume", (int)autoResume);
|
||||
AutoResumePlay = autoResume;
|
||||
}
|
||||
//*******************************************************************************************************
|
||||
// Cheat Window
|
||||
//*******************************************************************************************************
|
||||
|
||||
static int ShowCheatSearchResultsCallB(uint32 a, uint8 last, uint8 current)
|
||||
{
|
||||
char addrStr[32], lastStr[32], curStr[32];
|
||||
|
||||
sprintf( addrStr, "0x%04X ", a );
|
||||
sprintf( lastStr, " 0x%02X ", last );
|
||||
sprintf( curStr, " 0x%02X ", current );
|
||||
|
||||
gtk_tree_store_append( ram_match_store, &ram_match_iter, NULL); // aquire iter
|
||||
|
||||
gtk_tree_store_set(ram_match_store, &ram_match_iter,
|
||||
0, addrStr, 1, lastStr, 2, curStr,
|
||||
-1);
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void showCheatSearchResults(void)
|
||||
{
|
||||
int total_matches = 0;
|
||||
|
||||
gtk_tree_store_clear(ram_match_store);
|
||||
|
||||
total_matches = FCEUI_CheatSearchGetCount();
|
||||
|
||||
printf("Cheat Search Matches: %i \n", total_matches );
|
||||
|
||||
FCEUI_CheatSearchGetRange( 0, total_matches, ShowCheatSearchResultsCallB );
|
||||
}
|
||||
|
||||
static void cheatSearchReset( GtkButton *button,
|
||||
gpointer user_data)
|
||||
{
|
||||
printf("Cheat Search Reset!\n");
|
||||
|
||||
//cheat_search_known_value = 0;
|
||||
//cheat_search_neq_value = 0;
|
||||
//cheat_search_gt_value = 0;
|
||||
//cheat_search_lt_value = 0;
|
||||
|
||||
FCEUI_CheatSearchBegin();
|
||||
showCheatSearchResults();
|
||||
// Enable Cheat Search Buttons - Change Sensitivity
|
||||
}
|
||||
|
||||
static void cheatSearchKnown( GtkButton *button,
|
||||
gpointer user_data)
|
||||
{
|
||||
//printf("Cheat Search Known!\n");
|
||||
|
||||
FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_KNOWN, cheat_search_known_value, 0);
|
||||
showCheatSearchResults();
|
||||
}
|
||||
|
||||
static void cheatSearchEqual( GtkButton *button,
|
||||
gpointer user_data)
|
||||
{
|
||||
//printf("Cheat Search Equal !\n");
|
||||
|
||||
FCEUI_CheatSearchEnd(FCEU_SEARCH_PUERLY_RELATIVE_CHANGE, 0, 0);
|
||||
showCheatSearchResults();
|
||||
}
|
||||
|
||||
static void cheatSearchNotEqual( GtkButton *button,
|
||||
GtkToggleButton *chkbox )
|
||||
{
|
||||
int checked = gtk_toggle_button_get_active(chkbox);
|
||||
|
||||
//printf("Cheat Search NotEqual %i!\n", checked);
|
||||
|
||||
if ( checked ){
|
||||
FCEUI_CheatSearchEnd(FCEU_SEARCH_PUERLY_RELATIVE_CHANGE, 0, cheat_search_neq_value);
|
||||
} else {
|
||||
FCEUI_CheatSearchEnd(FCEU_SEARCH_ANY_CHANGE, 0, 0);
|
||||
}
|
||||
showCheatSearchResults();
|
||||
}
|
||||
|
||||
static void cheatSearchGreaterThan( GtkButton *button,
|
||||
GtkToggleButton *chkbox )
|
||||
{
|
||||
int checked = gtk_toggle_button_get_active(chkbox);
|
||||
|
||||
//printf("Cheat Search GreaterThan %i!\n", checked);
|
||||
|
||||
if ( checked ){
|
||||
FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_GT_KNOWN, 0, cheat_search_gt_value);
|
||||
} else {
|
||||
FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_GT, 0, 0);
|
||||
}
|
||||
showCheatSearchResults();
|
||||
}
|
||||
|
||||
static void cheatSearchLessThan( GtkButton *button,
|
||||
GtkToggleButton *chkbox )
|
||||
{
|
||||
int checked = gtk_toggle_button_get_active(chkbox);
|
||||
|
||||
//printf("Cheat Search LessThan %i!\n", checked);
|
||||
|
||||
if ( checked ){
|
||||
FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_LT_KNOWN, 0, cheat_search_lt_value);
|
||||
} else {
|
||||
FCEUI_CheatSearchEnd(FCEU_SEARCH_NEWVAL_LT, 0, 0);
|
||||
}
|
||||
showCheatSearchResults();
|
||||
}
|
||||
|
||||
static void pauseDuringCheatWinActvCB( GtkToggleButton *button,
|
||||
void *userData )
|
||||
{
|
||||
pauseWhileCheatsActv = gtk_toggle_button_get_active(button);
|
||||
|
||||
if ( pauseWhileCheatsActv )
|
||||
{
|
||||
if ( EmulationPaused == 0 )
|
||||
{
|
||||
EmulationPaused = 1;
|
||||
wasPausedByCheats = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( EmulationPaused && wasPausedByCheats )
|
||||
{
|
||||
EmulationPaused = 0;
|
||||
}
|
||||
wasPausedByCheats = false;
|
||||
}
|
||||
FCEU_printf("Emulation paused: %d\n", EmulationPaused);
|
||||
}
|
||||
|
||||
static void cheatSearchValueEntryCB( GtkWidget *widget,
|
||||
void *userData )
|
||||
{
|
||||
long value;
|
||||
const gchar *entry_text;
|
||||
entry_text = gtk_entry_get_text (GTK_ENTRY (widget));
|
||||
|
||||
value = strtol( entry_text, NULL, 16 );
|
||||
|
||||
switch ( (long)userData )
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
|
||||
break;
|
||||
case 1:
|
||||
cheat_search_known_value = value;
|
||||
break;
|
||||
case 2:
|
||||
cheat_search_neq_value = value;
|
||||
break;
|
||||
case 3:
|
||||
cheat_search_gt_value = value;
|
||||
break;
|
||||
case 4:
|
||||
cheat_search_lt_value = value;
|
||||
break;
|
||||
}
|
||||
|
||||
//printf("Cheat Value Entry contents: '%s' Value: 0x%02lx\n", entry_text, value);
|
||||
}
|
||||
|
||||
static int activeCheatListCB(char *name, uint32 a, uint8 v, int c, int s, int type, void* data)
|
||||
{
|
||||
long int reset;
|
||||
char addrStr[32], valStr[16], cmpStr[16];
|
||||
//printf("Cheat Name:'%s' Addr:0x%04x Val:0x%02x \n", name, a, v );
|
||||
//
|
||||
reset = (long)data;
|
||||
|
||||
if ( reset )
|
||||
{
|
||||
gtk_tree_store_append( actv_cheats_store, &actv_cheats_iter, NULL); // aquire iter
|
||||
}
|
||||
|
||||
sprintf( addrStr, "0x%04X ", a );
|
||||
sprintf( valStr, " 0x%02X ", v );
|
||||
|
||||
if ( c >= 0 ){
|
||||
sprintf( cmpStr, " 0x%02X ", c );
|
||||
} else {
|
||||
strcpy( cmpStr, " 0xFF ");
|
||||
}
|
||||
|
||||
gtk_tree_store_set(actv_cheats_store, &actv_cheats_iter,
|
||||
0, s, 1, addrStr, 2, valStr, 3, cmpStr, 4, name,
|
||||
-1);
|
||||
|
||||
if ( !reset )
|
||||
{
|
||||
if ( !gtk_tree_model_iter_next( GTK_TREE_MODEL(actv_cheats_store), &actv_cheats_iter ) )
|
||||
{
|
||||
gtk_tree_store_append( actv_cheats_store, &actv_cheats_iter, NULL); // aquire iter
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void showActiveCheatList( long int reset )
|
||||
{
|
||||
if ( reset )
|
||||
{
|
||||
gtk_tree_store_clear(actv_cheats_store);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !gtk_tree_model_get_iter_first( GTK_TREE_MODEL(actv_cheats_store), &actv_cheats_iter ) )
|
||||
{
|
||||
printf("No Tree Entries Loaded.\n");
|
||||
reset = 1;
|
||||
}
|
||||
}
|
||||
|
||||
FCEUI_ListCheats( activeCheatListCB, (void*)reset );
|
||||
}
|
||||
|
||||
static void cheatListEnableToggle( GtkCellRendererToggle *renderer,
|
||||
gchar *pathStr,
|
||||
GtkTreeView *tree )
|
||||
{
|
||||
GtkTreePath *path;
|
||||
int depth;
|
||||
int *indexArray;
|
||||
|
||||
path = gtk_tree_path_new_from_string( pathStr );
|
||||
|
||||
if ( path == NULL ){
|
||||
printf("Error: gtk_tree_path_new_from_string failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
depth = gtk_tree_path_get_depth(path);
|
||||
indexArray = gtk_tree_path_get_indices(path);
|
||||
|
||||
if ( depth > 0 )
|
||||
{
|
||||
//printf("Toggle: %i\n", indexArray[0] );
|
||||
FCEUI_ToggleCheat( indexArray[0] );
|
||||
}
|
||||
|
||||
gtk_tree_path_free( path );
|
||||
|
||||
showActiveCheatList(0);
|
||||
|
||||
}
|
||||
|
||||
static void openCheatFile( GtkWidget *widget,
|
||||
void *userData )
|
||||
{
|
||||
GtkWidget* fileChooser;
|
||||
GtkFileFilter* filterCht;
|
||||
GtkFileFilter* filterAll;
|
||||
|
||||
filterCht = gtk_file_filter_new();
|
||||
filterAll = gtk_file_filter_new();
|
||||
|
||||
gtk_file_filter_add_pattern(filterCht, "*.cht");
|
||||
gtk_file_filter_add_pattern(filterAll, "*");
|
||||
|
||||
gtk_file_filter_set_name(filterCht, "*.cht");
|
||||
gtk_file_filter_set_name(filterAll, "All Files");
|
||||
|
||||
fileChooser = gtk_file_chooser_dialog_new ("Open Cheat", GTK_WINDOW(MainWindow),
|
||||
GTK_FILE_CHOOSER_ACTION_OPEN, "_Cancel", GTK_RESPONSE_CANCEL,
|
||||
"_Open", GTK_RESPONSE_ACCEPT, NULL);
|
||||
const char* last_dir;
|
||||
g_config->getOption("SDL.LastOpenFile", &last_dir);
|
||||
gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(fileChooser), last_dir);
|
||||
|
||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fileChooser), filterCht);
|
||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fileChooser), filterAll);
|
||||
|
||||
if (gtk_dialog_run (GTK_DIALOG (fileChooser)) ==GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
FILE *fp;
|
||||
char* filename;
|
||||
|
||||
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fileChooser));
|
||||
gtk_widget_destroy (fileChooser);
|
||||
|
||||
fp = fopen( filename, "r");
|
||||
|
||||
if ( fp != NULL )
|
||||
{
|
||||
FCEU_LoadGameCheats( fp, 0 );
|
||||
fclose(fp);
|
||||
}
|
||||
//g_config->setOption("SDL.LastOpenFile", filename);
|
||||
// Error dialog no longer required with GTK implementation of FCEUD_PrintError()
|
||||
|
||||
resizeGtkWindow();
|
||||
g_free( filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_destroy (fileChooser);
|
||||
}
|
||||
|
||||
showActiveCheatList(1);
|
||||
}
|
||||
|
||||
static void newCheatEntryCB( GtkWidget *widget,
|
||||
void *userData )
|
||||
{
|
||||
const gchar *entry_text;
|
||||
entry_text = gtk_entry_get_text (GTK_ENTRY (widget));
|
||||
|
||||
switch ( (long)userData )
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
if ( entry_text[0] == 0 )
|
||||
{
|
||||
new_cheat_addr = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
new_cheat_addr = strtol( entry_text, NULL, 16 );
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if ( entry_text[0] == 0 )
|
||||
{
|
||||
new_cheat_val = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
new_cheat_val = strtol( entry_text, NULL, 16 );
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
if ( entry_text[0] == 0 )
|
||||
{
|
||||
new_cheat_cmp = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
new_cheat_cmp = strtol( entry_text, NULL, 16 );
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
new_cheat_name.assign( entry_text );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void addCheat2Active( GtkWidget *widget,
|
||||
void *userData )
|
||||
{
|
||||
|
||||
if ( (new_cheat_addr >= 0) && (new_cheat_val >= 0) )
|
||||
{
|
||||
if ( FCEUI_AddCheat( new_cheat_name.c_str(), new_cheat_addr, new_cheat_val, new_cheat_cmp, 1) )
|
||||
{
|
||||
showActiveCheatList(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void removeCheatFromActive( GtkWidget *widget,
|
||||
GtkTreeView *tree )
|
||||
{
|
||||
int numListRows;
|
||||
GList *selListRows, *tmpList;
|
||||
GtkTreeModel *model = NULL;
|
||||
GtkTreeSelection *treeSel = gtk_tree_view_get_selection(tree);
|
||||
|
||||
numListRows = gtk_tree_selection_count_selected_rows( treeSel );
|
||||
|
||||
if ( numListRows == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
//printf("Number of Rows Selected: %i\n", numListRows );
|
||||
|
||||
selListRows = gtk_tree_selection_get_selected_rows( treeSel, &model );
|
||||
|
||||
tmpList = selListRows;
|
||||
|
||||
while ( tmpList )
|
||||
{
|
||||
int depth;
|
||||
int *indexArray;
|
||||
GtkTreePath *path = (GtkTreePath*)tmpList->data;
|
||||
|
||||
depth = gtk_tree_path_get_depth(path);
|
||||
indexArray = gtk_tree_path_get_indices(path);
|
||||
|
||||
if ( depth > 0 )
|
||||
{
|
||||
//GtkTreeIter iter;
|
||||
FCEUI_DelCheat( indexArray[0] );
|
||||
|
||||
//if ( gtk_tree_model_get_iter ( model, &iter, path ) )
|
||||
//{
|
||||
// gtk_tree_store_remove( actv_cheats_store, &iter );
|
||||
//}
|
||||
}
|
||||
|
||||
tmpList = tmpList->next;
|
||||
}
|
||||
|
||||
g_list_free_full(selListRows, (GDestroyNotify) gtk_tree_path_free);
|
||||
|
||||
showActiveCheatList(1);
|
||||
}
|
||||
|
||||
static void updateCheatList( GtkWidget *widget,
|
||||
GtkTreeView *tree )
|
||||
{
|
||||
int numListRows;
|
||||
GList *selListRows, *tmpList;
|
||||
GtkTreeModel *model = NULL;
|
||||
GtkTreeSelection *treeSel = gtk_tree_view_get_selection(tree);
|
||||
|
||||
numListRows = gtk_tree_selection_count_selected_rows( treeSel );
|
||||
|
||||
if ( numListRows == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
//printf("Number of Rows Selected: %i\n", numListRows );
|
||||
|
||||
selListRows = gtk_tree_selection_get_selected_rows( treeSel, &model );
|
||||
|
||||
tmpList = selListRows;
|
||||
|
||||
while ( tmpList )
|
||||
{
|
||||
int depth;
|
||||
int *indexArray;
|
||||
GtkTreePath *path = (GtkTreePath*)tmpList->data;
|
||||
|
||||
depth = gtk_tree_path_get_depth(path);
|
||||
indexArray = gtk_tree_path_get_indices(path);
|
||||
|
||||
if ( depth > 0 )
|
||||
{
|
||||
uint32 a; uint8 v;
|
||||
int c, s, type;
|
||||
const char *name = NULL;
|
||||
if ( FCEUI_GetCheat( indexArray[0], NULL, &a, &v, &c, &s, &type) )
|
||||
{
|
||||
if ( new_cheat_addr >= 0 ){
|
||||
a = new_cheat_addr;
|
||||
}
|
||||
if ( new_cheat_val >= 0 ){
|
||||
v = new_cheat_val;
|
||||
}
|
||||
if ( new_cheat_cmp >= 0 ){
|
||||
c = new_cheat_cmp;
|
||||
}
|
||||
if ( new_cheat_name.size() )
|
||||
{
|
||||
name = new_cheat_name.c_str();
|
||||
}
|
||||
FCEUI_SetCheat( indexArray[0], name, a, v, c, s, type );
|
||||
}
|
||||
}
|
||||
//printf("Depth: %i \n", depth );
|
||||
|
||||
//for (int i=0; i<depth; i++)
|
||||
//{
|
||||
// printf("%i: %i\n", i, indexArray[i] );
|
||||
//}
|
||||
tmpList = tmpList->next;
|
||||
}
|
||||
|
||||
g_list_free_full(selListRows, (GDestroyNotify) gtk_tree_path_free);
|
||||
|
||||
showActiveCheatList(0);
|
||||
}
|
||||
|
||||
static void cheat_cell_edited_cb (GtkCellRendererText *cell,
|
||||
gchar *path_string,
|
||||
gchar *new_text,
|
||||
gpointer user_data)
|
||||
{
|
||||
long int row_idx = -1, column_idx;
|
||||
|
||||
//printf("'%s'\n", path_string );
|
||||
//printf("'%s'\n", new_text );
|
||||
//printf("%p\n", user_data );
|
||||
|
||||
column_idx = (long)user_data;
|
||||
|
||||
if ( isdigit(path_string[0]) )
|
||||
{
|
||||
row_idx = atoi(path_string);
|
||||
}
|
||||
|
||||
if ( row_idx >= 0 )
|
||||
{
|
||||
uint32 a; uint8 v;
|
||||
int c, s, type;
|
||||
const char *name = NULL;
|
||||
if ( FCEUI_GetCheat( row_idx, NULL, &a, &v, &c, &s, &type) )
|
||||
{
|
||||
switch ( column_idx )
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
|
||||
break;
|
||||
case 1:
|
||||
a = strtol( new_text, NULL, 0 );
|
||||
break;
|
||||
case 2:
|
||||
v = strtol( new_text, NULL, 0 );
|
||||
break;
|
||||
case 3:
|
||||
c = strtol( new_text, NULL, 0 );
|
||||
break;
|
||||
case 4:
|
||||
name = new_text;
|
||||
break;
|
||||
}
|
||||
FCEUI_SetCheat( row_idx, name, a, v, c, s, type );
|
||||
showActiveCheatList(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void closeCheatDialog(GtkWidget* w, GdkEvent* e, gpointer p)
|
||||
{
|
||||
if ( EmulationPaused && wasPausedByCheats )
|
||||
{
|
||||
EmulationPaused = 0;
|
||||
}
|
||||
wasPausedByCheats = false;
|
||||
pauseWhileCheatsActv = false;
|
||||
cheatWindowOpen = false;
|
||||
|
||||
cheat_search_known_value = 0;
|
||||
cheat_search_neq_value = 0;
|
||||
cheat_search_gt_value = 0;
|
||||
cheat_search_lt_value = 0;
|
||||
new_cheat_addr = -1;
|
||||
new_cheat_val = -1;
|
||||
new_cheat_cmp = -1;
|
||||
|
||||
gtk_widget_destroy(w);
|
||||
}
|
||||
|
||||
// creates and opens cheats window
|
||||
static void openCheatsWindow(void)
|
||||
{
|
||||
GtkWidget* win;
|
||||
GtkWidget* main_hbox;
|
||||
GtkWidget* hbox;
|
||||
GtkWidget* vbox, *prev_cmp_vbox;
|
||||
GtkWidget* frame;
|
||||
GtkWidget* label, *txt_entry;
|
||||
GtkWidget* button, *chkbutton;
|
||||
GtkWidget *tree;
|
||||
GtkWidget *scroll;
|
||||
|
||||
if ( cheatWindowOpen ){
|
||||
return; // Only allow one cheat window to be open per gui.
|
||||
}
|
||||
|
||||
win = gtk_dialog_new_with_buttons("Cheats",
|
||||
GTK_WINDOW(MainWindow), (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT),
|
||||
"_Close",
|
||||
GTK_RESPONSE_OK,
|
||||
NULL);
|
||||
gtk_window_set_default_size(GTK_WINDOW(win), 600, 600);
|
||||
|
||||
main_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
|
||||
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
|
||||
frame = gtk_frame_new("Active Cheats");
|
||||
|
||||
actv_cheats_store = gtk_tree_store_new( 5, G_TYPE_BOOLEAN,
|
||||
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING );
|
||||
|
||||
tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(actv_cheats_store));
|
||||
|
||||
GtkCellRenderer *renderer;
|
||||
GtkCellRenderer *chkbox_renderer;
|
||||
GtkTreeViewColumn* column;
|
||||
|
||||
gtk_tree_view_set_grid_lines( GTK_TREE_VIEW(tree), GTK_TREE_VIEW_GRID_LINES_VERTICAL );
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
g_object_set(renderer, "editable", TRUE, NULL);
|
||||
g_signal_connect(renderer, "edited", (GCallback) cheat_cell_edited_cb, NULL);
|
||||
|
||||
chkbox_renderer = gtk_cell_renderer_toggle_new();
|
||||
gtk_cell_renderer_toggle_set_activatable( (GtkCellRendererToggle*)chkbox_renderer, TRUE );
|
||||
column = gtk_tree_view_column_new_with_attributes("Ena", chkbox_renderer, "active", 0, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
g_object_set(renderer, "family", "MonoSpace", NULL);
|
||||
g_object_set(renderer, "editable", TRUE, NULL);
|
||||
g_signal_connect(renderer, "edited", (GCallback) cheat_cell_edited_cb, (gpointer)1);
|
||||
column = gtk_tree_view_column_new_with_attributes("Addr", renderer, "text", 1, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
g_object_set(renderer, "family", "MonoSpace", NULL);
|
||||
g_object_set(renderer, "editable", TRUE, NULL);
|
||||
g_signal_connect(renderer, "edited", (GCallback) cheat_cell_edited_cb, (gpointer)2);
|
||||
column = gtk_tree_view_column_new_with_attributes("Val", renderer, "text", 2, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
g_object_set(renderer, "family", "MonoSpace", NULL);
|
||||
g_object_set(renderer, "editable", TRUE, NULL);
|
||||
g_signal_connect(renderer, "edited", (GCallback) cheat_cell_edited_cb, (gpointer)3);
|
||||
column = gtk_tree_view_column_new_with_attributes("Cmp", renderer, "text", 3, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
g_object_set(renderer, "editable", TRUE, NULL);
|
||||
g_signal_connect(renderer, "edited", (GCallback) cheat_cell_edited_cb, (gpointer)4);
|
||||
column = gtk_tree_view_column_new_with_attributes("Desc", renderer, "text", 4, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
g_signal_connect( chkbox_renderer, "toggled",
|
||||
G_CALLBACK(cheatListEnableToggle), (void*)tree );
|
||||
|
||||
showActiveCheatList(1);
|
||||
|
||||
scroll = gtk_scrolled_window_new(NULL, NULL);
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_NEVER,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_container_add(GTK_CONTAINER(scroll), tree);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 1);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
|
||||
label = gtk_label_new("Name:");
|
||||
txt_entry = gtk_entry_new();
|
||||
|
||||
g_signal_connect( txt_entry, "activate",
|
||||
G_CALLBACK(newCheatEntryCB), (void*)3L );
|
||||
g_signal_connect( txt_entry, "changed",
|
||||
G_CALLBACK(newCheatEntryCB), (void*)3L );
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 1);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), txt_entry, TRUE, TRUE, 1);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 1);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
label = gtk_label_new("Addr:");
|
||||
txt_entry = gtk_entry_new();
|
||||
gtk_entry_set_max_length( GTK_ENTRY(txt_entry), 4 );
|
||||
gtk_entry_set_width_chars( GTK_ENTRY(txt_entry), 4 );
|
||||
|
||||
g_signal_connect( txt_entry, "activate",
|
||||
G_CALLBACK(newCheatEntryCB), (void*)0L );
|
||||
g_signal_connect( txt_entry, "changed",
|
||||
G_CALLBACK(newCheatEntryCB), (void*)0L );
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 1);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), txt_entry, TRUE, TRUE, 1);
|
||||
|
||||
label = gtk_label_new("Val:");
|
||||
txt_entry = gtk_entry_new();
|
||||
gtk_entry_set_max_length( GTK_ENTRY(txt_entry), 2 );
|
||||
gtk_entry_set_width_chars( GTK_ENTRY(txt_entry), 2 );
|
||||
|
||||
g_signal_connect( txt_entry, "activate",
|
||||
G_CALLBACK(newCheatEntryCB), (void*)1L );
|
||||
g_signal_connect( txt_entry, "changed",
|
||||
G_CALLBACK(newCheatEntryCB), (void*)1L );
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 1);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), txt_entry, TRUE, TRUE, 1);
|
||||
|
||||
label = gtk_label_new("Cmp:");
|
||||
txt_entry = gtk_entry_new();
|
||||
gtk_entry_set_max_length( GTK_ENTRY(txt_entry), 2 );
|
||||
gtk_entry_set_width_chars( GTK_ENTRY(txt_entry), 2 );
|
||||
|
||||
g_signal_connect( txt_entry, "activate",
|
||||
G_CALLBACK(newCheatEntryCB), (void*)2L );
|
||||
g_signal_connect( txt_entry, "changed",
|
||||
G_CALLBACK(newCheatEntryCB), (void*)2L );
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 1);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), txt_entry, TRUE, TRUE, 1);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 1);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
|
||||
button = gtk_button_new_with_label("Add");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 1);
|
||||
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (addCheat2Active), (gpointer) NULL );
|
||||
|
||||
button = gtk_button_new_with_label("Delete");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 1);
|
||||
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (removeCheatFromActive), (gpointer) tree );
|
||||
|
||||
button = gtk_button_new_with_label("Update");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 1);
|
||||
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (updateCheatList), (gpointer) tree );
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 1);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
|
||||
button = gtk_button_new_with_label("Add from CHT file...");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 1);
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (openCheatFile), (gpointer) NULL );
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 1);
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
//
|
||||
gtk_box_pack_start(GTK_BOX(main_hbox), frame, TRUE, TRUE, 1);
|
||||
|
||||
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
|
||||
button = gtk_button_new_with_label("Reset");
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (cheatSearchReset), (gpointer) NULL );
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3);
|
||||
button = gtk_button_new_with_label("Known Value:");
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (cheatSearchKnown), (gpointer) NULL );
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5);
|
||||
label = gtk_label_new("0x");
|
||||
txt_entry = gtk_entry_new();
|
||||
gtk_entry_set_max_length( GTK_ENTRY(txt_entry), 2 );
|
||||
gtk_entry_set_width_chars( GTK_ENTRY(txt_entry), 2 );
|
||||
|
||||
g_signal_connect( txt_entry, "activate",
|
||||
G_CALLBACK(cheatSearchValueEntryCB), (void*)1L );
|
||||
g_signal_connect( txt_entry, "changed",
|
||||
G_CALLBACK(cheatSearchValueEntryCB), (void*)1L );
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), txt_entry, FALSE, FALSE, 5);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
|
||||
|
||||
frame = gtk_frame_new("Previous Compare");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);
|
||||
button = gtk_check_button_new_with_label("Pause emulation when this window is active");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 5);
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (pauseDuringCheatWinActvCB), (gpointer) NULL );
|
||||
|
||||
prev_cmp_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
|
||||
gtk_container_add(GTK_CONTAINER(frame), prev_cmp_vbox);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
|
||||
button = gtk_button_new_with_label("Equal");
|
||||
//gtk_widget_set_halign( button, GTK_ALIGN_BASELINE);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 5);
|
||||
gtk_box_pack_start(GTK_BOX(prev_cmp_vbox), hbox, FALSE, FALSE, 5);
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (cheatSearchEqual), (gpointer) NULL );
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4);
|
||||
button = gtk_button_new_with_label("Not Equal");
|
||||
//gtk_widget_set_halign( button, GTK_ALIGN_BASELINE);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 5);
|
||||
chkbutton = gtk_check_button_new();
|
||||
gtk_box_pack_start(GTK_BOX(hbox), chkbutton, FALSE, FALSE, 5);
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (cheatSearchNotEqual), (gpointer) chkbutton );
|
||||
label = gtk_label_new("By: 0x");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
|
||||
txt_entry = gtk_entry_new();
|
||||
gtk_entry_set_max_length( GTK_ENTRY(txt_entry), 2 );
|
||||
gtk_entry_set_width_chars( GTK_ENTRY(txt_entry), 2 );
|
||||
g_signal_connect( txt_entry, "activate",
|
||||
G_CALLBACK(cheatSearchValueEntryCB), (void*)2L );
|
||||
g_signal_connect( txt_entry, "changed",
|
||||
G_CALLBACK(cheatSearchValueEntryCB), (void*)2L );
|
||||
gtk_box_pack_start(GTK_BOX(hbox), txt_entry, FALSE, FALSE, 5);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(prev_cmp_vbox), hbox, FALSE, FALSE, 5);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4);
|
||||
button = gtk_button_new_with_label("Greater Than");
|
||||
//gtk_widget_set_halign( button, GTK_ALIGN_BASELINE);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 5);
|
||||
chkbutton = gtk_check_button_new();
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (cheatSearchGreaterThan), (gpointer) chkbutton );
|
||||
gtk_box_pack_start(GTK_BOX(hbox), chkbutton, FALSE, FALSE, 5);
|
||||
label = gtk_label_new("By: 0x");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
|
||||
txt_entry = gtk_entry_new();
|
||||
gtk_entry_set_max_length( GTK_ENTRY(txt_entry), 2 );
|
||||
gtk_entry_set_width_chars( GTK_ENTRY(txt_entry), 2 );
|
||||
g_signal_connect( txt_entry, "activate",
|
||||
G_CALLBACK(cheatSearchValueEntryCB), (void*)3L );
|
||||
g_signal_connect( txt_entry, "changed",
|
||||
G_CALLBACK(cheatSearchValueEntryCB), (void*)3L );
|
||||
gtk_box_pack_start(GTK_BOX(hbox), txt_entry, FALSE, FALSE, 5);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(prev_cmp_vbox), hbox, FALSE, FALSE, 5);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4);
|
||||
button = gtk_button_new_with_label("Less Than");
|
||||
//gtk_widget_set_halign( button, GTK_ALIGN_BASELINE);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 5);
|
||||
chkbutton = gtk_check_button_new();
|
||||
g_signal_connect( button, "clicked",
|
||||
G_CALLBACK (cheatSearchLessThan), (gpointer) chkbutton );
|
||||
gtk_box_pack_start(GTK_BOX(hbox), chkbutton, FALSE, FALSE, 5);
|
||||
label = gtk_label_new("By: 0x");
|
||||
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
|
||||
txt_entry = gtk_entry_new();
|
||||
gtk_entry_set_max_length( GTK_ENTRY(txt_entry), 2 );
|
||||
gtk_entry_set_width_chars( GTK_ENTRY(txt_entry), 2 );
|
||||
g_signal_connect( txt_entry, "activate",
|
||||
G_CALLBACK(cheatSearchValueEntryCB), (void*)4L );
|
||||
g_signal_connect( txt_entry, "changed",
|
||||
G_CALLBACK(cheatSearchValueEntryCB), (void*)4L );
|
||||
gtk_box_pack_start(GTK_BOX(hbox), txt_entry, FALSE, FALSE, 5);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(prev_cmp_vbox), hbox, FALSE, FALSE, 1);
|
||||
|
||||
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 1);
|
||||
|
||||
frame = gtk_frame_new("Cheat Search");
|
||||
gtk_container_add(GTK_CONTAINER(frame), hbox);
|
||||
gtk_box_pack_start(GTK_BOX(main_hbox), frame, TRUE, TRUE, 5);
|
||||
|
||||
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
|
||||
//hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1);
|
||||
|
||||
ram_match_store = gtk_tree_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
|
||||
|
||||
tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ram_match_store));
|
||||
|
||||
gtk_tree_view_set_grid_lines( GTK_TREE_VIEW(tree), GTK_TREE_VIEW_GRID_LINES_VERTICAL );
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
g_object_set(renderer, "family", "MonoSpace", NULL);
|
||||
column = gtk_tree_view_column_new_with_attributes("Addr", renderer, "text", 0, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
column = gtk_tree_view_column_new_with_attributes("Last", renderer, "text", 1, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
column = gtk_tree_view_column_new_with_attributes("Curr", renderer, "text", 2, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
scroll = gtk_scrolled_window_new(NULL, NULL);
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_NEVER,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_container_add(GTK_CONTAINER(scroll), tree);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 5);
|
||||
|
||||
frame = gtk_frame_new("");
|
||||
gtk_container_add(GTK_CONTAINER(frame), vbox);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 5);
|
||||
|
||||
gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(win))), main_hbox, TRUE, TRUE, 0);
|
||||
|
||||
g_signal_connect(win, "delete-event", G_CALLBACK(closeCheatDialog), NULL);
|
||||
g_signal_connect(win, "response", G_CALLBACK(closeCheatDialog), NULL);
|
||||
|
||||
gtk_widget_show_all(win);
|
||||
|
||||
cheatWindowOpen = true;
|
||||
}
|
||||
|
||||
//*******************************************************************************************************
|
||||
// Ram Watch Window
|
||||
|
|
Loading…
Reference in New Issue