mirror of https://github.com/snes9xgit/snes9x.git
Some cheat dialog QOL improvements.
This commit is contained in:
parent
e7adc334ae
commit
534971722c
|
@ -65,7 +65,7 @@ event_code_toggled (GtkCellRendererToggle *cell_renderer,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
event_row_activated (GtkTreeView *tree_view,
|
event_row_activated (GtkTreeView *tree_view,
|
||||||
GtkTreePath *path,
|
GtkTreePath *path,
|
||||||
GtkTreeViewColumn *column,
|
GtkTreeViewColumn *column,
|
||||||
|
@ -76,6 +76,36 @@ event_row_activated (GtkTreeView *tree_view,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
event_row_inserted (GtkTreeModel *tree_model,
|
||||||
|
GtkTreePath *path,
|
||||||
|
GtkTreeIter *iter,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
int *indices = gtk_tree_path_get_indices (path);
|
||||||
|
((Snes9xCheats *) data)->row_inserted (indices[0]);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
event_row_deleted (GtkTreeModel *tree_model,
|
||||||
|
GtkTreePath *path,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
int *indices = gtk_tree_path_get_indices (path);
|
||||||
|
((Snes9xCheats *) data)->row_deleted (indices[0]);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
event_enabled_column_clicked (GtkTreeViewColumn *treeviewcolumn,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
((Snes9xCheats *) data)->sort_cheats ();
|
||||||
|
}
|
||||||
|
|
||||||
Snes9xCheats::Snes9xCheats (void)
|
Snes9xCheats::Snes9xCheats (void)
|
||||||
: GtkBuilderWindow ("cheat_window")
|
: GtkBuilderWindow ("cheat_window")
|
||||||
{
|
{
|
||||||
|
@ -90,18 +120,25 @@ Snes9xCheats::Snes9xCheats (void)
|
||||||
{ NULL, NULL}
|
{ NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
dst_row = -1;
|
||||||
view = GTK_TREE_VIEW (get_widget ("cheat_treeview"));
|
view = GTK_TREE_VIEW (get_widget ("cheat_treeview"));
|
||||||
|
|
||||||
g_signal_connect (view, "row-activated", G_CALLBACK (event_row_activated), (gpointer) this);
|
g_signal_connect (view, "row-activated", G_CALLBACK (event_row_activated), (gpointer) this);
|
||||||
|
|
||||||
|
gtk_tree_view_set_reorderable (view, TRUE);
|
||||||
|
|
||||||
renderer = gtk_cell_renderer_toggle_new ();
|
renderer = gtk_cell_renderer_toggle_new ();
|
||||||
gtk_cell_renderer_toggle_set_activatable (GTK_CELL_RENDERER_TOGGLE (renderer), TRUE);
|
gtk_cell_renderer_toggle_set_activatable (GTK_CELL_RENDERER_TOGGLE (renderer), TRUE);
|
||||||
gtk_tree_view_insert_column_with_attributes (view,
|
gtk_tree_view_insert_column_with_attributes (view,
|
||||||
-1,
|
-1,
|
||||||
"",
|
"\xe2\x86\x91",
|
||||||
renderer,
|
renderer,
|
||||||
"active", COLUMN_ENABLED,
|
"active", COLUMN_ENABLED,
|
||||||
NULL);
|
NULL);
|
||||||
|
GtkTreeViewColumn *column = gtk_tree_view_get_column (view, 0);
|
||||||
|
gtk_tree_view_column_set_clickable (column, TRUE);
|
||||||
|
gtk_tree_view_column_set_alignment (column, 0.5f);
|
||||||
|
g_signal_connect (column, "clicked", G_CALLBACK (event_enabled_column_clicked), (gpointer) this);
|
||||||
|
|
||||||
g_signal_connect (renderer,
|
g_signal_connect (renderer,
|
||||||
"toggled",
|
"toggled",
|
||||||
|
@ -115,7 +152,7 @@ Snes9xCheats::Snes9xCheats (void)
|
||||||
renderer,
|
renderer,
|
||||||
"text", COLUMN_DESCRIPTION,
|
"text", COLUMN_DESCRIPTION,
|
||||||
NULL);
|
NULL);
|
||||||
GtkTreeViewColumn *column = gtk_tree_view_get_column (view, 1);
|
column = gtk_tree_view_get_column (view, 1);
|
||||||
gtk_tree_view_column_set_resizable (column, TRUE);
|
gtk_tree_view_column_set_resizable (column, TRUE);
|
||||||
|
|
||||||
renderer = gtk_cell_renderer_text_new ();
|
renderer = gtk_cell_renderer_text_new ();
|
||||||
|
@ -135,6 +172,8 @@ Snes9xCheats::Snes9xCheats (void)
|
||||||
G_TYPE_STRING);
|
G_TYPE_STRING);
|
||||||
|
|
||||||
gtk_tree_view_set_model (view, GTK_TREE_MODEL (store));
|
gtk_tree_view_set_model (view, GTK_TREE_MODEL (store));
|
||||||
|
delete_id = g_signal_connect (store, "row-deleted", G_CALLBACK (event_row_deleted), (gpointer) this);
|
||||||
|
insert_id = g_signal_connect (store, "row-inserted", G_CALLBACK (event_row_inserted), (gpointer) this);
|
||||||
|
|
||||||
gtk_widget_realize (window);
|
gtk_widget_realize (window);
|
||||||
|
|
||||||
|
@ -152,6 +191,21 @@ Snes9xCheats::~Snes9xCheats (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Snes9xCheats::enable_dnd (bool enable)
|
||||||
|
{
|
||||||
|
if (enable)
|
||||||
|
{
|
||||||
|
g_signal_handler_unblock (G_OBJECT (store), delete_id);
|
||||||
|
g_signal_handler_unblock (G_OBJECT (store), insert_id);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_signal_handler_block (G_OBJECT (store), delete_id);
|
||||||
|
g_signal_handler_block (G_OBJECT (store), insert_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Snes9xCheats::show (void)
|
Snes9xCheats::show (void)
|
||||||
{
|
{
|
||||||
|
@ -161,6 +215,7 @@ Snes9xCheats::show (void)
|
||||||
top_level->get_window ());
|
top_level->get_window ());
|
||||||
|
|
||||||
refresh_tree_view ();
|
refresh_tree_view ();
|
||||||
|
|
||||||
gtk_dialog_run (GTK_DIALOG (window));
|
gtk_dialog_run (GTK_DIALOG (window));
|
||||||
|
|
||||||
top_level->unpause_from_focus_change ();
|
top_level->unpause_from_focus_change ();
|
||||||
|
@ -168,6 +223,48 @@ Snes9xCheats::show (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cheat_move (int src, int dst)
|
||||||
|
{
|
||||||
|
Cheat.g.insert (Cheat.g.begin() + dst, Cheat.g[src]);
|
||||||
|
|
||||||
|
if (dst < src)
|
||||||
|
src++;
|
||||||
|
Cheat.g.erase (Cheat.g.begin() + src);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cheat_gather_enabled (void)
|
||||||
|
{
|
||||||
|
unsigned int enabled = 0;
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < Cheat.g.size(); i++)
|
||||||
|
{
|
||||||
|
if (Cheat.g[i].enabled && i >= enabled)
|
||||||
|
{
|
||||||
|
cheat_move(i, enabled);
|
||||||
|
enabled++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Snes9xCheats::row_deleted (int src_row)
|
||||||
|
{
|
||||||
|
if (dst_row >= 0)
|
||||||
|
{
|
||||||
|
if (src_row >= dst_row)
|
||||||
|
src_row--;
|
||||||
|
cheat_move (src_row, dst_row);
|
||||||
|
|
||||||
|
dst_row = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Snes9xCheats::row_inserted (int new_row)
|
||||||
|
{
|
||||||
|
dst_row = new_row;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Snes9xCheats::get_selected_index (void)
|
Snes9xCheats::get_selected_index (void)
|
||||||
{
|
{
|
||||||
|
@ -218,6 +315,7 @@ Snes9xCheats::refresh_tree_view (void)
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
unsigned int list_size;
|
unsigned int list_size;
|
||||||
|
|
||||||
|
enable_dnd (false);
|
||||||
list_size = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL);
|
list_size = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL);
|
||||||
|
|
||||||
if (Cheat.g.size () == 0)
|
if (Cheat.g.size () == 0)
|
||||||
|
@ -244,6 +342,7 @@ Snes9xCheats::refresh_tree_view (void)
|
||||||
-1);
|
-1);
|
||||||
delete[] str;
|
delete[] str;
|
||||||
}
|
}
|
||||||
|
enable_dnd (true);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -277,8 +376,10 @@ Snes9xCheats::remove_code (void)
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
enable_dnd (false);
|
||||||
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter, NULL, index);
|
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter, NULL, index);
|
||||||
gtk_list_store_remove (store, &iter);
|
gtk_list_store_remove (store, &iter);
|
||||||
|
enable_dnd (true);
|
||||||
|
|
||||||
S9xDeleteCheatGroup (index);
|
S9xDeleteCheatGroup (index);
|
||||||
|
|
||||||
|
@ -288,8 +389,10 @@ Snes9xCheats::remove_code (void)
|
||||||
void
|
void
|
||||||
Snes9xCheats::delete_all_cheats (void)
|
Snes9xCheats::delete_all_cheats (void)
|
||||||
{
|
{
|
||||||
|
enable_dnd (false);
|
||||||
S9xDeleteCheats ();
|
S9xDeleteCheats ();
|
||||||
gtk_list_store_clear (store);
|
gtk_list_store_clear (store);
|
||||||
|
enable_dnd (true);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -366,6 +469,13 @@ Snes9xCheats::search_database (void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Snes9xCheats::sort_cheats ()
|
||||||
|
{
|
||||||
|
cheat_gather_enabled ();
|
||||||
|
refresh_tree_view ();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Snes9xCheats::row_activated (GtkTreePath *path)
|
Snes9xCheats::row_activated (GtkTreePath *path)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,12 +19,19 @@ class Snes9xCheats : public GtkBuilderWindow
|
||||||
void delete_all_cheats (void);
|
void delete_all_cheats (void);
|
||||||
void toggle_code (const gchar *path, int enabled);
|
void toggle_code (const gchar *path, int enabled);
|
||||||
void row_activated (GtkTreePath *path);
|
void row_activated (GtkTreePath *path);
|
||||||
|
void row_deleted (int src_row);
|
||||||
|
void row_inserted (int row);
|
||||||
|
void enable_dnd (bool);
|
||||||
|
void sort_cheats (void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void refresh_tree_view (void);
|
void refresh_tree_view (void);
|
||||||
int get_selected_index (void);
|
int get_selected_index (void);
|
||||||
int get_index_from_path (const gchar *path);
|
int get_index_from_path (const gchar *path);
|
||||||
|
|
||||||
|
unsigned long insert_id;
|
||||||
|
unsigned long delete_id;
|
||||||
|
int dst_row;
|
||||||
GtkListStore *store;
|
GtkListStore *store;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue