summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-03-30 11:10:15 +0000
committerSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-03-30 11:10:15 +0000
commitcdfc75abcb5626b37fe94b4d589adfd658ea7f4f (patch)
tree02fa0a29a6fca74d804d88ffe379f007c17d68b6
parent3f5662407bc39d8913a4a24927cb953e3d57b56c (diff)
downloadpcsxr-cdfc75abcb5626b37fe94b4d589adfd658ea7f4f.tar.gz
Improved cheat file saving in GTK GUI. Extension .cht is now added if filter has it and filename is missing it. Also open cheat filename will be kept in memory.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@83798 e17a0e51-4ae3-4d35-97c3-1a29b211df97
-rwxr-xr-xgui/Cheat.c100
1 files changed, 64 insertions, 36 deletions
diff --git a/gui/Cheat.c b/gui/Cheat.c
index e4f7b076..fdcfb8cf 100755
--- a/gui/Cheat.c
+++ b/gui/Cheat.c
@@ -40,7 +40,7 @@ static void LoadCheatListItems(int index) {
int i;
- widget = gtk_builder_get_object(builder, "GtkCList_Cheat");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "GtkCList_Cheat"));
for (i = 0; i < NumCheats; i++) {
gtk_list_store_append(store, &iter);
@@ -167,7 +167,7 @@ static void OnCheatListDlg_EditClicked(GtkWidget *widget, gpointer user_data) {
char buf[8192];
char *p = buf;
- widget = gtk_builder_get_object(builder, "GtkCList_Cheat");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "GtkCList_Cheat"));
selected = gtk_tree_selection_get_selected(
gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)),
@@ -243,7 +243,7 @@ static void OnCheatListDlg_EditClicked(GtkWidget *widget, gpointer user_data) {
LoadCheatListItems(index);
- free(codetext);
+ free(codetext);
}
gtk_widget_destroy(dlg);
@@ -257,7 +257,7 @@ static void OnCheatListDlg_DelClicked(GtkWidget *widget, gpointer user_data) {
gboolean selected;
int i = -1;
- widget = gtk_builder_get_object(builder, "GtkCList_Cheat");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "GtkCList_Cheat"));
selected = gtk_tree_selection_get_selected(
gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)),
@@ -280,24 +280,30 @@ static void OnCheatListDlg_EnableToggled(GtkCellRendererToggle *cell, gchar *pat
GtkTreeIter iter;
gboolean fixed;
- widget = gtk_builder_get_object (builder, "GtkCList_Cheat");
+ widget = GTK_WIDGET(gtk_builder_get_object (builder, "GtkCList_Cheat"));
model = gtk_tree_view_get_model (GTK_TREE_VIEW(widget));
path = gtk_tree_path_new_from_string (path_str);
-
+
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_model_get (model, &iter, 0, &fixed, -1);
fixed ^= 1;
-
+
int i = atoi(path_str);
assert(i >= 0 && i < NumCheats);
-
+
Cheats[i].Enabled = fixed;
gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, fixed, -1);
gtk_tree_path_free (path);
}
+// last chosen filename is kept in here
+static gchar *lastfilename = NULL;
+
+const gchar* file_filter_all = NULL;
+const gchar* extension_cht="*.cht";
+
static void OnCheatListDlg_OpenClicked(GtkWidget *widget, gpointer user_data) {
GtkWidget *chooser;
gchar *filename;
@@ -310,16 +316,17 @@ static void OnCheatListDlg_OpenClicked(GtkWidget *widget, gpointer user_data) {
filename = g_build_filename(getenv("HOME"), CHEATS_DIR, NULL);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser), filename);
+ //gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(chooser), filename);
g_free(filename);
filter = gtk_file_filter_new ();
- gtk_file_filter_add_pattern (filter, "*.cht");
+ gtk_file_filter_add_pattern (filter, extension_cht);
gtk_file_filter_set_name (filter, _("PCSXR Cheat Code Files (*.cht)"));
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
filter = gtk_file_filter_new ();
gtk_file_filter_add_pattern (filter, "*");
- gtk_file_filter_set_name (filter, _("All Files"));
+ gtk_file_filter_set_name (filter, file_filter_all);
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
if (gtk_dialog_run (GTK_DIALOG (chooser)) == GTK_RESPONSE_OK) {
@@ -334,6 +341,9 @@ static void OnCheatListDlg_OpenClicked(GtkWidget *widget, gpointer user_data) {
LoadCheats(filename);
+ g_free(lastfilename);
+ lastfilename = g_path_get_basename(filename);
+
g_free(filename);
LoadCheatListItems(-1);
@@ -341,7 +351,7 @@ static void OnCheatListDlg_OpenClicked(GtkWidget *widget, gpointer user_data) {
static void OnCheatListDlg_SaveClicked(GtkWidget *widget, gpointer user_data) {
GtkWidget *chooser;
- gchar *filename;
+ gchar *filename, *filename2=NULL;
GtkFileFilter *filter;
chooser = gtk_file_chooser_dialog_new(_("Save Cheat File"),
@@ -350,20 +360,30 @@ static void OnCheatListDlg_SaveClicked(GtkWidget *widget, gpointer user_data) {
filename = g_build_filename(getenv("HOME"), CHEATS_DIR, NULL);
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), filename);
+ /*if (lastfilename)*/gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(chooser), lastfilename);
+
g_free(filename);
filter = gtk_file_filter_new();
- gtk_file_filter_add_pattern(filter, "*.cht");
+ gtk_file_filter_add_pattern(filter, extension_cht);
gtk_file_filter_set_name(filter, _("PCSXR Cheat Code Files (*.cht)"));
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter);
filter = gtk_file_filter_new();
gtk_file_filter_add_pattern(filter, "*");
- gtk_file_filter_set_name(filter, _("All Files (*.*)"));
+ gtk_file_filter_set_name(filter, file_filter_all);
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter);
if (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_OK) {
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+ filename = filename2 = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+ if (!g_str_has_suffix(filename, extension_cht+1) // add extension if cht filter chosen and filename doesn't end with .cht
+ && strcmp(file_filter_all, gtk_file_filter_get_name(
+ gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(chooser)))) != 0) {
+ filename = g_strdup_printf ("%s%s", filename2, extension_cht+1);
+ } else {
+ filename2 = NULL;
+ }
+
gtk_widget_destroy (GTK_WIDGET(chooser));
while (gtk_events_pending()) gtk_main_iteration();
} else {
@@ -374,12 +394,18 @@ static void OnCheatListDlg_SaveClicked(GtkWidget *widget, gpointer user_data) {
SaveCheats(filename);
+ g_free(lastfilename);
+ lastfilename = g_path_get_basename(filename);
+
g_free(filename);
+ g_free(filename2);
}
static void OnCheatListDlg_CloseClicked() {
gtk_widget_destroy(CheatListDlg);
CheatListDlg = NULL;
+ //g_free(lastfilename);
+ //lastfilename = NULL;
}
// run the cheat list dialog
@@ -389,19 +415,21 @@ void RunCheatListDialog() {
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
+ file_filter_all = _("All Files (*.*)");
+
builder = gtk_builder_new();
-
+
if (!gtk_builder_add_from_file(builder, PACKAGE_DATA_DIR "pcsxr.ui", NULL)) {
g_warning("Error: interface could not be loaded!");
return;
}
- CheatListDlg = gtk_builder_get_object(builder, "CheatListDlg");
-
+ CheatListDlg = GTK_WIDGET(gtk_builder_get_object(builder, "CheatListDlg"));
+
gtk_window_set_title(GTK_WINDOW(CheatListDlg), _("Cheat Codes"));
gtk_widget_show (CheatListDlg);
- widget = gtk_builder_get_object(builder, "GtkCList_Cheat");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "GtkCList_Cheat"));
// column for enable
renderer = gtk_cell_renderer_toggle_new();
@@ -425,23 +453,23 @@ void RunCheatListDialog() {
G_CALLBACK (CheatList_TreeSelectionChanged),
NULL, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "addbutton1");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "addbutton1"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatListDlg_AddClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "editbutton1");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "editbutton1"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatListDlg_EditClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "delbutton1");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "delbutton1"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatListDlg_DelClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "loadbutton1");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "loadbutton1"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatListDlg_OpenClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "savebutton1");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "savebutton1"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatListDlg_SaveClicked), builder, NULL, G_CONNECT_AFTER);
@@ -489,7 +517,7 @@ static void UpdateCheatSearchDialog() {
GtkTreeIter iter;
GtkWidget *widget;
- widget = gtk_builder_get_object(builder, "GtkCList_Result");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "GtkCList_Result"));
gtk_combo_box_set_active(GTK_COMBO_BOX(gtk_builder_get_object(builder, "combo_searchfor")), current_search);
gtk_combo_box_set_active(GTK_COMBO_BOX(gtk_builder_get_object(builder, "combo_datatype")), current_searchtype);
@@ -1056,7 +1084,7 @@ static void OnCheatSearchDlg_SearchForChanged(GtkWidget *widget, gpointer user_d
static void OnCheatSearchDlg_DataBaseChanged(GtkWidget *widget, gpointer user_data) {
u32 val;
char buf[256];
-
+
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)) == SEARCHBASE_DEC) {
val = 0;
sscanf(gtk_entry_get_text(GTK_ENTRY(gtk_builder_get_object(builder, "entry_value"))), "%x", &val);
@@ -1102,18 +1130,18 @@ void RunCheatSearchDialog() {
GtkTreeViewColumn *column;
builder = gtk_builder_new();
-
+
if (!gtk_builder_add_from_file(builder, PACKAGE_DATA_DIR "pcsxr.ui", NULL)) {
g_warning("Error: interface could not be loaded!");
return;
}
- CheatSearchDlg = gtk_builder_get_object(builder, "CheatSearchDlg");
-
+ CheatSearchDlg = GTK_WIDGET(gtk_builder_get_object(builder, "CheatSearchDlg"));
+
gtk_window_set_title(GTK_WINDOW(CheatSearchDlg), _("Cheat Search"));
gtk_widget_show (CheatSearchDlg);
- widget = gtk_builder_get_object(builder, "GtkCList_Result");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "GtkCList_Result"));
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes(_("Search Results"),
@@ -1128,31 +1156,31 @@ void RunCheatSearchDialog() {
UpdateCheatSearchDialog();
- widget = gtk_builder_get_object(builder, "btn_freeze");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_freeze"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatSearchDlg_FreezeClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "btn_modify");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_modify"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatSearchDlg_ModifyClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "btn_copy");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_copy"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatSearchDlg_CopyClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "btn_start");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_start"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatSearchDlg_SearchClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "btn_restart");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "btn_restart"));
g_signal_connect_data(G_OBJECT(widget), "clicked",
G_CALLBACK(OnCheatSearchDlg_RestartClicked), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "combo_searchfor");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "combo_searchfor"));
g_signal_connect_data(G_OBJECT(widget), "changed",
G_CALLBACK(OnCheatSearchDlg_SearchForChanged), builder, NULL, G_CONNECT_AFTER);
- widget = gtk_builder_get_object(builder, "combo_database");
+ widget = GTK_WIDGET(gtk_builder_get_object(builder, "combo_database"));
g_signal_connect_data(G_OBJECT(widget), "changed",
G_CALLBACK(OnCheatSearchDlg_DataBaseChanged), builder, NULL, G_CONNECT_AFTER);