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