mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
184 lines
4.5 KiB
C++
184 lines
4.5 KiB
C++
/* PCSX2 - PS2 Emulator for PCs
|
|
* Copyright (C) 2002-2020 PCSX2 Dev Team
|
|
*
|
|
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
|
* of the GNU Lesser General Public License as published by the Free Software Found-
|
|
* ation, either version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with PCSX2.
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
#include <unistd.h>
|
|
#include <sys/types.h>
|
|
#include <pwd.h>
|
|
#include <string.h>
|
|
|
|
#include "../Config.h"
|
|
#include "../DEV9.h"
|
|
#include "pcap.h"
|
|
#include "../pcap_io.h"
|
|
#include "../net.h"
|
|
#include "AppCoreThread.h"
|
|
|
|
static GtkBuilder* builder;
|
|
|
|
void SysMessage(char* fmt, ...)
|
|
{
|
|
va_list list;
|
|
char tmp[512];
|
|
|
|
va_start(list, fmt);
|
|
vsprintf(tmp, fmt, list);
|
|
va_end(list);
|
|
|
|
GtkWidget* dialog = gtk_message_dialog_new(NULL,
|
|
GTK_DIALOG_MODAL,
|
|
GTK_MESSAGE_ERROR,
|
|
GTK_BUTTONS_CLOSE,
|
|
"%s", tmp);
|
|
gtk_dialog_run(GTK_DIALOG(dialog));
|
|
gtk_widget_hide(dialog);
|
|
}
|
|
|
|
void OnInitDialog()
|
|
{
|
|
char* dev;
|
|
gint idx = 0;
|
|
static int initialized = 0;
|
|
|
|
LoadConf();
|
|
|
|
if (initialized)
|
|
return;
|
|
|
|
gtk_combo_box_text_append_text((GtkComboBoxText*)gtk_builder_get_object(builder, "IDC_BAYTYPE"), "Expansion");
|
|
gtk_combo_box_text_append_text((GtkComboBoxText*)gtk_builder_get_object(builder, "IDC_BAYTYPE"), "PC Card");
|
|
for (int i = 0; i < pcap_io_get_dev_num(); i++)
|
|
{
|
|
dev = pcap_io_get_dev_name(i);
|
|
gtk_combo_box_text_append_text((GtkComboBoxText*)gtk_builder_get_object(builder, "IDC_ETHDEV"), dev);
|
|
if (strcmp(dev, config.Eth) == 0)
|
|
{
|
|
gtk_combo_box_set_active((GtkComboBox*)gtk_builder_get_object(builder, "IDC_ETHDEV"), idx);
|
|
}
|
|
idx++;
|
|
}
|
|
gtk_entry_set_text((GtkEntry*)gtk_builder_get_object(builder, "IDC_HDDFILE"), config.Hdd);
|
|
gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_ETHENABLED"),
|
|
config.ethEnable);
|
|
gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_HDDENABLED"),
|
|
config.hddEnable);
|
|
|
|
initialized = 1;
|
|
}
|
|
|
|
void OnOk()
|
|
{
|
|
|
|
char* ptr = gtk_combo_box_text_get_active_text((GtkComboBoxText*)gtk_builder_get_object(builder, "IDC_ETHDEV"));
|
|
if (ptr != nullptr)
|
|
strcpy(config.Eth, ptr);
|
|
|
|
strcpy(config.Hdd, gtk_entry_get_text((GtkEntry*)gtk_builder_get_object(builder, "IDC_HDDFILE")));
|
|
|
|
config.ethEnable = gtk_toggle_button_get_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_ETHENABLED"));
|
|
config.hddEnable = gtk_toggle_button_get_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_HDDENABLED"));
|
|
|
|
SaveConf();
|
|
}
|
|
|
|
/* Simple GTK+2 variant of gtk_builder_add_from_resource() */
|
|
static guint builder_add_from_resource(GtkBuilder* builder, const gchar* resource_path, GError** error)
|
|
{
|
|
GBytes* data;
|
|
const gchar* buffer;
|
|
gsize buffer_length;
|
|
guint ret;
|
|
|
|
g_assert(error && *error == NULL);
|
|
|
|
data = g_resources_lookup_data(resource_path, G_RESOURCE_LOOKUP_FLAGS_NONE, error);
|
|
if (data == NULL)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
buffer_length = 0;
|
|
buffer = (const gchar*)g_bytes_get_data(data, &buffer_length);
|
|
g_assert(buffer != NULL);
|
|
|
|
ret = gtk_builder_add_from_string(builder, buffer, buffer_length, error);
|
|
|
|
g_bytes_unref(data);
|
|
|
|
return ret;
|
|
}
|
|
|
|
void DEV9configure()
|
|
{
|
|
ScopedCoreThreadPause paused_core;
|
|
gtk_init(NULL, NULL);
|
|
GError* error = NULL;
|
|
builder = gtk_builder_new();
|
|
if (!builder_add_from_resource(builder, "/net/pcsx2/dev9/DEV9/Linux/dev9.ui", &error))
|
|
{
|
|
g_warning("Could not build config ui: %s", error->message);
|
|
g_error_free(error);
|
|
g_object_unref(G_OBJECT(builder));
|
|
}
|
|
GtkDialog* dlg = GTK_DIALOG(gtk_builder_get_object(builder, "IDD_CONFDLG"));
|
|
OnInitDialog();
|
|
gint result = gtk_dialog_run(dlg);
|
|
switch (result)
|
|
{
|
|
case -5: //IDOK
|
|
OnOk();
|
|
break;
|
|
case -6: //IDCANCEL
|
|
break;
|
|
}
|
|
gtk_widget_hide(GTK_WIDGET(dlg));
|
|
paused_core.AllowResume();
|
|
}
|
|
|
|
NetAdapter* GetNetAdapter()
|
|
{
|
|
NetAdapter* na;
|
|
na = new PCAPAdapter();
|
|
|
|
if (!na->isInitialised())
|
|
{
|
|
delete na;
|
|
return 0;
|
|
}
|
|
return na;
|
|
}
|
|
s32 _DEV9open()
|
|
{
|
|
NetAdapter* na = GetNetAdapter();
|
|
if (!na)
|
|
{
|
|
emu_printf("Failed to GetNetAdapter()\n");
|
|
config.ethEnable = false;
|
|
}
|
|
else
|
|
{
|
|
InitNet(na);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void _DEV9close()
|
|
{
|
|
TermNet();
|
|
}
|