1 #include "gtk_netplay_dialog.h"
2 #include "gtk_s9x.h"
3 #include "gtk_file.h"
4
5 static void
event_browse_clicked(GtkButton * button,gpointer data)6 event_browse_clicked (GtkButton *button, gpointer data)
7 {
8 char *filename;
9 Snes9xNetplayDialog *np_dialog = (Snes9xNetplayDialog *) data;
10
11 filename = S9xOpenROMDialog ();
12
13 if (filename)
14 {
15 gtk_entry_set_text (GTK_ENTRY (np_dialog->get_widget ("rom_image")),
16 filename);
17
18 g_free (filename);
19 }
20
21 return;
22 }
23
24 static void
event_clear_clicked(GtkButton * button,gpointer data)25 event_clear_clicked (GtkButton *button, gpointer data)
26 {
27 Snes9xNetplayDialog *np_dialog = (Snes9xNetplayDialog *) data;
28
29 gtk_entry_set_text (GTK_ENTRY (np_dialog->get_widget ("rom_image")), "");
30
31 return;
32 }
33
34 static void
event_server_toggled(GtkToggleButton * toggle,gpointer data)35 event_server_toggled (GtkToggleButton *toggle, gpointer data)
36 {
37 Snes9xNetplayDialog *np_dialog = (Snes9xNetplayDialog *) data;
38
39 np_dialog->update_state ();
40 }
41
Snes9xNetplayDialog(Snes9xConfig * config)42 Snes9xNetplayDialog::Snes9xNetplayDialog (Snes9xConfig *config) :
43 GtkBuilderWindow ("netplay_dialog")
44 {
45 GtkBuilderWindowCallbacks callbacks[] =
46 {
47 { "server_toggled", G_CALLBACK (event_server_toggled) },
48 { "browse_clicked", G_CALLBACK (event_browse_clicked) },
49 { "clear_clicked", G_CALLBACK (event_clear_clicked) },
50 { NULL, NULL }
51 };
52
53 signal_connect (callbacks);
54
55 this->config = config;
56
57 return;
58 }
59
60 void
update_state(void)61 Snes9xNetplayDialog::update_state (void)
62 {
63 if (get_check ("host_radio"))
64 {
65 enable_widget ("connect_box", FALSE);
66 enable_widget ("default_port_box", TRUE);
67 enable_widget ("sync_reset", TRUE);
68 enable_widget ("send_image", TRUE);
69 }
70
71 else
72 {
73 enable_widget ("connect_box", TRUE);
74 enable_widget ("default_port_box", FALSE);
75 enable_widget ("sync_reset", FALSE);
76 enable_widget ("send_image", FALSE);
77 }
78
79 return;
80 }
81
82 void
settings_to_dialog(void)83 Snes9xNetplayDialog::settings_to_dialog (void)
84 {
85 set_entry_text ("rom_image", config->netplay_last_rom);
86 set_entry_text ("ip_entry", config->netplay_last_host);
87 set_check ("sync_reset", config->netplay_sync_reset);
88 set_check ("send_image", config->netplay_send_rom);
89 set_spin ("port", config->netplay_last_port);
90 set_spin ("default_port", config->netplay_default_port);
91 set_spin ("frames_behind", config->netplay_max_frame_loss);
92 set_check ("connect_radio", !config->netplay_is_server);
93 set_check ("host_radio", config->netplay_is_server);
94
95 update_state ();
96
97 return;
98 }
99
100 void
settings_from_dialog(void)101 Snes9xNetplayDialog::settings_from_dialog (void)
102 {
103 strncpy (config->netplay_last_rom, get_entry_text ("rom_image"), PATH_MAX);
104 strncpy (config->netplay_last_host, get_entry_text ("ip_entry"), PATH_MAX);
105 config->netplay_sync_reset = get_check ("sync_reset");
106 config->netplay_send_rom = get_check ("send_image");
107 config->netplay_last_port = get_spin ("port");
108 config->netplay_default_port = get_spin ("default_port");
109 config->netplay_max_frame_loss = get_spin ("frames_behind");
110 config->netplay_is_server = get_check ("host_radio");
111
112 config->save_config_file ();
113
114 return;
115 }
116
117 int
show(void)118 Snes9xNetplayDialog::show (void)
119 {
120 int result;
121
122 settings_to_dialog ();
123
124 result = gtk_dialog_run (GTK_DIALOG (window));
125
126 gtk_widget_hide (window);
127
128 if (result == GTK_RESPONSE_OK)
129 {
130 settings_from_dialog ();
131
132 return TRUE;
133 }
134
135 else
136 {
137 return FALSE;
138 }
139
140 }
141
~Snes9xNetplayDialog(void)142 Snes9xNetplayDialog::~Snes9xNetplayDialog (void)
143 {
144 gtk_widget_destroy (window);
145 }
146