From 85bc4f1027ec57cb9ab4d56e800207b8f6e12e96 Mon Sep 17 00:00:00 2001 From: TellowKrinkle Date: Thu, 6 May 2021 19:54:17 -0500 Subject: [PATCH] DEV9: Switch Linux config dialog to wx --- pcsx2/CMakeLists.txt | 26 -- pcsx2/DEV9/Linux/Linux.cpp | 514 +++++++++++++++++------------------- pcsx2/DEV9/Linux/dev9.ui | 515 ------------------------------------- pcsx2/DEV9/net.cpp | 10 +- pcsx2/DEV9/net.h | 2 +- 5 files changed, 248 insertions(+), 819 deletions(-) delete mode 100644 pcsx2/DEV9/Linux/dev9.ui diff --git a/pcsx2/CMakeLists.txt b/pcsx2/CMakeLists.txt index e26cc4b809..5732a5ff76 100644 --- a/pcsx2/CMakeLists.txt +++ b/pcsx2/CMakeLists.txt @@ -321,30 +321,6 @@ set(pcsx2SPU2Headers SPU2/WavFile.h ) -if(NOT WIN32) - - # DEV9 UI sources - compile_gresources( pcsx2DEV9UISources - pcsx2DEV9UIXML - TYPE EMBED_C - RESOURCES "DEV9/Linux/dev9.ui" - PREFIX "/net/pcsx2/dev9" - COMPRESS_ALL - STRIPBLANKS_ALL - ) - - # DEV9 UI headers - compile_gresources( pcsx2DEV9UIHeaders - pcsx2DEV9UIXML - TYPE EMBED_H - RESOURCES "DEV9/Linux/dev9.ui" - PREFIX "/net/pcsx2/dev9" - COMPRESS_ALL - STRIPBLANKS_ALL - ) - -endif() - # DEV9 sources set(pcsx2DEV9Sources DEV9/ATA/Commands/ATA_Command.cpp @@ -376,7 +352,6 @@ set(pcsx2DEV9Sources DEV9/flash.cpp DEV9/pcap_io.cpp DEV9/net.cpp - ${pcsx2DEV9UISources} ) # DEV9 headers @@ -404,7 +379,6 @@ set(pcsx2DEV9Headers DEV9/pcap_io.h DEV9/SimpleQueue.h DEV9/smap.h - ${pcsx2DEV9UIHeaders} ) # USBNull diff --git a/pcsx2/DEV9/Linux/Linux.cpp b/pcsx2/DEV9/Linux/Linux.cpp index 4d411c71b8..abbb75d82b 100644 --- a/pcsx2/DEV9/Linux/Linux.cpp +++ b/pcsx2/DEV9/Linux/Linux.cpp @@ -1,5 +1,5 @@ /* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2020 PCSX2 Dev Team + * Copyright (C) 2002-2021 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- @@ -16,19 +16,16 @@ #include "PrecompiledHeader.h" #include -#include -#include - -#include -#include -#include -#include #include -#include "fmt/format.h" +#include -#include -#include "ghc/filesystem.h" +#include +#include +#include +#include +#include +#include #include "DEV9/Config.h" #include "DEV9/DEV9.h" @@ -36,308 +33,281 @@ #include "DEV9/pcap_io.h" #include "DEV9/net.h" #include "DEV9/PacketReader/IP/IP_Address.h" -#include "Config.h" #include "gui/AppCoreThread.h" #include "DEV9/ATA/HddCreate.h" using PacketReader::IP::IP_Address; -static GtkBuilder* builder = nullptr; -std::vector adapters; - -void IPControl_SetValue(GtkEntry* entryCtl, IP_Address value) +class DEV9Dialog : public wxDialog { - char addrBuff[INET_ADDRSTRLEN] = {0}; - inet_ntop(AF_INET, &value, addrBuff, INET_ADDRSTRLEN); - gtk_entry_set_text(entryCtl, addrBuff); -} -IP_Address IPControl_GetValue(GtkEntry* entryCtl) -{ - IP_Address ret; - if (inet_pton(AF_INET, gtk_entry_get_text(entryCtl), &ret) == 1) - return ret; - Console.Error("Invalid IP address entered"); - return {0}; -} - -void IPControl_Enable(GtkEntry* ipEntry, bool enabled, IP_Address value) -{ - if (enabled) + static void IPControl_SetValue(wxTextCtrl* ctl, IP_Address value) { - gtk_widget_set_sensitive((GtkWidget*)ipEntry, true); - IPControl_SetValue(ipEntry, value); - } - else - { - gtk_widget_set_sensitive((GtkWidget*)ipEntry, false); - IPControl_SetValue(ipEntry, {0}); - } -} - -void OnAutoMaskChanged(GtkToggleButton* togglebutton, gpointer usr_data) -{ - IPControl_Enable((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_SUBNET"), !gtk_toggle_button_get_active(togglebutton), config.Mask); -} - -void OnAutoGatewayChanged(GtkToggleButton* togglebutton, gpointer usr_data) -{ - IPControl_Enable((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_GATEWAY"), !gtk_toggle_button_get_active(togglebutton), config.Gateway); -} - -void OnAutoDNS1Changed(GtkToggleButton* togglebutton, gpointer usr_data) -{ - IPControl_Enable((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_DNS1"), !gtk_toggle_button_get_active(togglebutton), config.DNS1); -} - -void OnAutoDNS2Changed(GtkToggleButton* togglebutton, gpointer usr_data) -{ - IPControl_Enable((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_DNS2"), !gtk_toggle_button_get_active(togglebutton), config.DNS2); -} - -void OnInterceptChanged(GtkToggleButton* togglebutton, gpointer usr_data) -{ - if (gtk_toggle_button_get_active(togglebutton)) - { - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_IPADDRESS_IP"), true); - IPControl_SetValue((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_IP"), config.PS2IP); - - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_CHECK_SUBNET"), true); - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_CHECK_GATEWAY"), true); - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_CHECK_DNS1"), true); - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_CHECK_DNS2"), true); - - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_SUBNET"), config.AutoMask); - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_GATEWAY"), config.AutoGateway); - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DNS1"), config.AutoDNS1); - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DNS2"), config.AutoDNS2); - - OnAutoMaskChanged((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_SUBNET"), nullptr); - OnAutoGatewayChanged((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_GATEWAY"), nullptr); - OnAutoDNS1Changed((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DNS1"), nullptr); - OnAutoDNS2Changed((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DNS2"), nullptr); - } - else - { - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_IPADDRESS_IP"), false); - IPControl_SetValue((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_IP"), {0}); - - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_CHECK_SUBNET"), false); - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_CHECK_GATEWAY"), false); - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_CHECK_DNS1"), false); - gtk_widget_set_sensitive((GtkWidget*)gtk_builder_get_object(builder, "IDC_CHECK_DNS2"), false); - - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_SUBNET"), true); - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_GATEWAY"), true); - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DNS1"), true); - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DNS2"), true); - - IPControl_Enable((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_SUBNET"), false, config.Mask); - IPControl_Enable((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_GATEWAY"), false, config.Gateway); - IPControl_Enable((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_DNS1"), false, config.DNS1); - IPControl_Enable((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_DNS2"), false, config.DNS2); - } -} - -void OnInitDialog() -{ - 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"); - - adapters = PCAPAdapter::GetAdapters(); - - for (size_t i = 0; i < adapters.size(); i++) - { - std::string dev = fmt::format("{}: {}", (char*)NetApiToString(adapters[i].type), adapters[i].name.c_str()); - - gtk_combo_box_text_append_text((GtkComboBoxText*)gtk_builder_get_object(builder, "IDC_ETHDEV"), dev.c_str()); - if (config.EthApi == adapters[i].type && strcmp(adapters[i].guid.c_str(), config.Eth) == 0) - gtk_combo_box_set_active((GtkComboBox*)gtk_builder_get_object(builder, "IDC_ETHDEV"), idx); - - idx++; + ctl->SetValue(wxString::Format("%u.%u.%u.%u", value.bytes[0], value.bytes[1], value.bytes[2], value.bytes[3])); } - gtk_toggle_button_set_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DHCP"), config.InterceptDHCP); - OnInterceptChanged((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DHCP"), nullptr); - - gtk_entry_set_text((GtkEntry*)gtk_builder_get_object(builder, "IDC_HDDFILE"), config.Hdd); - - //HDDSpin - gtk_spin_button_set_range((GtkSpinButton*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SPIN"), HDD_MIN_GB, HDD_MAX_GB); - gtk_spin_button_set_increments((GtkSpinButton*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SPIN"), 1, 10); - gtk_spin_button_set_value((GtkSpinButton*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SPIN"), config.HddSize / 1024); - - //HDDSlider - gtk_range_set_range((GtkRange*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SLIDER"), HDD_MIN_GB, HDD_MAX_GB); - gtk_range_set_increments((GtkRange*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SLIDER"), 1, 10); - - gtk_scale_add_mark((GtkScale*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SLIDER"), HDD_MIN_GB, GTK_POS_BOTTOM, (std::to_string(HDD_MIN_GB) + " GiB").c_str()); - gtk_scale_add_mark((GtkScale*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SLIDER"), HDD_MAX_GB, GTK_POS_BOTTOM, (std::to_string(HDD_MAX_GB) + " GiB").c_str()); - - for (int i = 15; i < HDD_MAX_GB; i += 5) + static IP_Address IPControl_GetValue(wxTextCtrl* ctl) { - gtk_scale_add_mark((GtkScale*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SLIDER"), i, GTK_POS_BOTTOM, nullptr); + IP_Address ret; + if (4 == wxSscanf(ctl->GetValue(), "%hhu.%hhu.%hhu.%hhu", &ret.bytes[0], &ret.bytes[1], &ret.bytes[2], &ret.bytes[3])) + return ret; + Console.Error("Invalid IP address entered"); + return {}; } - gtk_range_set_value((GtkRange*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SLIDER"), config.HddSize / 1024); - - //Checkboxes - 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 OnBrowse(GtkButton* button, gpointer usr_data) -{ - ghc::filesystem::path inis(EmuFolders::Settings.ToString().ToStdString()); - - static const wxChar* hddFilterType = L"HDD|*.raw;*.RAW"; - - wxFileDialog ctrl(nullptr, _("HDD Image File"), EmuFolders::Settings.ToString(), HDD_DEF, - (wxString)hddFilterType + L"|" + _("All Files (*.*)") + L"|*.*", wxFD_SAVE); - - if (ctrl.ShowModal() != wxID_CANCEL) + struct IPInputWithAutoCheck { - ghc::filesystem::path hddFile(ctrl.GetPath().ToStdString()); - - if (ghc::filesystem::exists(hddFile)) + wxTextCtrl* m_ip; + wxCheckBox* m_auto; + void create(int col, wxWindow* window, wxGridBagSizer* sizer, const wxString& label) { - //Get file size - int filesizeGb = ghc::filesystem::file_size(hddFile) / (1024 * 1024 * 1024); - - gtk_range_set_value((GtkRange*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SLIDER"), filesizeGb); - gtk_spin_button_set_value((GtkSpinButton*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SPIN"), filesizeGb); + auto* label_box = new wxStaticText(window, wxID_ANY, label); + m_ip = new wxTextCtrl(window, wxID_ANY); + m_auto = new wxCheckBox(window, wxID_ANY, _("Auto")); + sizer->Add(label_box, wxGBPosition(col, 0), wxDefaultSpan, wxALIGN_RIGHT | wxALIGN_CENTRE_VERTICAL); + sizer->Add(m_ip, wxGBPosition(col, 1), wxDefaultSpan, wxEXPAND); + sizer->Add(m_auto, wxGBPosition(col, 2), wxDefaultSpan, wxEXPAND); } + void setEnabled(bool enabled) + { + m_auto->Enable(enabled); + m_ip->Enable(enabled && !m_auto->GetValue()); + } + void load(const IP_Address& ip, bool is_auto) + { + IPControl_SetValue(m_ip, ip); + m_auto->SetValue(is_auto); + } + void save(IP_Address& ip, int& is_auto) + { + ip = IPControl_GetValue(m_ip); + is_auto = m_auto->GetValue(); + } + }; + wxCheckBox* m_eth_enable; + wxChoice* m_eth_adapter; + std::vector m_adapter_list; + wxCheckBox* m_intercept_dhcp; + wxTextCtrl* m_ps2_address; + IPInputWithAutoCheck m_subnet_mask; + IPInputWithAutoCheck m_gateway_address; + IPInputWithAutoCheck m_dns1_address; + IPInputWithAutoCheck m_dns2_address; - if (hddFile.parent_path() == inis) - hddFile = hddFile.filename(); + wxCheckBox* m_hdd_enable; + wxFilePickerCtrl* m_hdd_file; + wxSpinCtrl* m_hdd_size_spin; + wxSlider* m_hdd_size_slider; - gtk_entry_set_text((GtkEntry*)gtk_builder_get_object(builder, "IDC_HDDFILE"), hddFile.c_str()); - } -} - -void OnSpin(GtkSpinButton* spin, gpointer usr_data) -{ - gtk_range_set_value((GtkRange*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SLIDER"), - gtk_spin_button_get_value(spin)); -} - -void OnSlide(GtkRange* range, gpointer usr_data) -{ - gtk_spin_button_set_value((GtkSpinButton*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SPIN"), - gtk_range_get_value(range)); -} - -void OnOk() -{ - int ethIndex = gtk_combo_box_get_active((GtkComboBox*)gtk_builder_get_object(builder, "IDC_ETHDEV")); - if (ethIndex != -1) +public: + DEV9Dialog() + : wxDialog(nullptr, wxID_ANY, _("Network and HDD Settings"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) { - strcpy(config.Eth, adapters[ethIndex].guid.c_str()); - config.EthApi = adapters[ethIndex].type; + auto* padding = new wxBoxSizer(wxVERTICAL); + auto* top_box = new wxBoxSizer(wxVERTICAL); + + // Ethernet section + auto* eth_section = new wxCollapsiblePane(this, wxID_ANY, _("Ethernet")); + auto* eth_pane = eth_section->GetPane(); + auto* eth_sizer = new wxBoxSizer(wxVERTICAL); + + m_eth_enable = new wxCheckBox(eth_pane, wxID_ANY, _("Enabled")); + eth_sizer->Add(m_eth_enable); + eth_sizer->AddSpacer(5); + + auto* eth_adapter_box = new wxGridBagSizer(5, 5); + auto* eth_adapter_label = new wxStaticText(eth_pane, wxID_ANY, _("Ethernet Device:")); + m_adapter_list = PCAPAdapter::GetAdapters(); + wxArrayString adapter_name_list; + adapter_name_list.Add(""); + for (const AdapterEntry& adapter : m_adapter_list) + adapter_name_list.Add(wxString::Format(_("%s (%s)"), adapter.name, NetApiToWxString(adapter.type))); + m_eth_adapter = new wxChoice(eth_pane, wxID_ANY, wxDefaultPosition, wxDefaultSize, adapter_name_list); + auto* intercept_dhcp_label = new wxStaticText(eth_pane, wxID_ANY, _("Intercept DHCP:")); + m_intercept_dhcp = new wxCheckBox(eth_pane, wxID_ANY, _("Enabled")); + auto* ps2_addr_label = new wxStaticText(eth_pane, wxID_ANY, _("PS2 Address:")); + m_ps2_address = new wxTextCtrl(eth_pane, wxID_ANY); + m_ps2_address->SetMinSize(wxSize(150, -1)); + + eth_adapter_box->Add(eth_adapter_label, wxGBPosition(0, 0), wxDefaultSpan, wxALIGN_RIGHT | wxALIGN_CENTRE_VERTICAL); + eth_adapter_box->Add(intercept_dhcp_label, wxGBPosition(1, 0), wxDefaultSpan, wxALIGN_RIGHT | wxALIGN_CENTRE_VERTICAL); + eth_adapter_box->Add(ps2_addr_label, wxGBPosition(2, 0), wxDefaultSpan, wxALIGN_RIGHT | wxALIGN_CENTRE_VERTICAL); + eth_adapter_box->Add(m_eth_adapter, wxGBPosition(0, 1), wxGBSpan(1, 2), wxEXPAND); + eth_adapter_box->Add(m_intercept_dhcp, wxGBPosition(1, 1), wxDefaultSpan, wxEXPAND); + eth_adapter_box->Add(m_ps2_address, wxGBPosition(2, 1), wxDefaultSpan, wxEXPAND); + + m_subnet_mask .create(3, eth_pane, eth_adapter_box, _("Subnet Mask:")); + m_gateway_address.create(4, eth_pane, eth_adapter_box, _("Gateway Address:")); + m_dns1_address .create(5, eth_pane, eth_adapter_box, _("DNS1 Address:")); + m_dns2_address .create(6, eth_pane, eth_adapter_box, _("DNS2 Address:")); + + eth_adapter_box->AddGrowableCol(1); + eth_sizer->Add(eth_adapter_box, wxSizerFlags().Expand()); + eth_pane->SetSizer(eth_sizer); + + // HDD section + auto* hdd_section = new wxCollapsiblePane(this, wxID_ANY, _("Hard Disk Drive")); + auto* hdd_pane = hdd_section->GetPane(); + auto* hdd_sizer = new wxBoxSizer(wxVERTICAL); + + m_hdd_enable = new wxCheckBox(hdd_pane, wxID_ANY, _("Enabled")); + hdd_sizer->Add(m_hdd_enable); + hdd_sizer->AddSpacer(5); + + auto* hdd_grid = new wxFlexGridSizer(2, 0, 5); + hdd_grid->AddGrowableCol(1); + auto* hdd_file_label = new wxStaticText(hdd_pane, wxID_ANY, _("HDD File:")); + m_hdd_file = new wxFilePickerCtrl(hdd_pane, wxID_ANY, wxEmptyString, _("HDD image file"), "HDD|*.raw", wxDefaultPosition, wxDefaultSize, wxFLP_SAVE | wxFLP_USE_TEXTCTRL); + hdd_grid->Add(hdd_file_label, wxSizerFlags().Centre().Right()); + hdd_grid->Add(m_hdd_file, wxSizerFlags().Expand()); + auto* hdd_size_label = new wxStaticText(hdd_pane, wxID_ANY, _("HDD Size (GiB):")); + m_hdd_size_spin = new wxSpinCtrl(hdd_pane, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, HDD_MIN_GB, HDD_MAX_GB, HDD_MIN_GB); + hdd_grid->Add(hdd_size_label, wxSizerFlags().Centre().Right()); + hdd_grid->Add(m_hdd_size_spin, wxSizerFlags().Expand()); + m_hdd_size_slider = new wxSlider(hdd_pane, wxID_ANY, HDD_MIN_GB, HDD_MIN_GB, HDD_MAX_GB, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_VALUE_LABEL | wxSL_MIN_MAX_LABELS | wxSL_AUTOTICKS); + m_hdd_size_slider->SetPageSize(10); + for (int i = 15; i < HDD_MAX_GB; i += 5) + m_hdd_size_slider->SetTick(i); + hdd_grid->AddSpacer(0); + hdd_grid->Add(m_hdd_size_slider, wxSizerFlags().Expand()); + + hdd_sizer->Add(hdd_grid, wxSizerFlags().Expand()); + hdd_pane->SetSizer(hdd_sizer); + + top_box->Add(eth_section, wxSizerFlags().Expand()); + top_box->Add(hdd_section, wxSizerFlags().Expand()); + top_box->Add(CreateStdDialogButtonSizer(wxOK | wxCANCEL), wxSizerFlags().Right()); + + padding->Add(top_box, wxSizerFlags().Expand().Border(wxALL, 5)); + SetSizerAndFit(padding); + + Bind(wxEVT_CHECKBOX, &DEV9Dialog::OnCheck, this); + Bind(wxEVT_SLIDER, &DEV9Dialog::OnSlide, this); + Bind(wxEVT_SPINCTRL, &DEV9Dialog::OnSpin, this); } - config.InterceptDHCP = gtk_toggle_button_get_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DHCP")); - if (config.InterceptDHCP) + void Load(const ConfigDEV9& config) { - config.PS2IP = IPControl_GetValue((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_IP")); + m_eth_enable->SetValue(config.ethEnable); + m_eth_adapter->SetSelection(0); + for (size_t i = 0; i < m_adapter_list.size(); i++) + { + const AdapterEntry& adapter = m_adapter_list[i]; + if (adapter.type == config.EthApi && adapter.name == config.Eth) + { + m_eth_adapter->SetSelection(i + 1); + break; + } + } + m_intercept_dhcp->SetValue(config.InterceptDHCP); + IPControl_SetValue(m_ps2_address, config.PS2IP); + m_subnet_mask .load(config.Mask, config.AutoMask); + m_gateway_address.load(config.Gateway, config.AutoGateway); + m_dns1_address .load(config.DNS1, config.AutoDNS1); + m_dns2_address .load(config.DNS2, config.AutoDNS2); - config.AutoMask = gtk_toggle_button_get_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_SUBNET")); - if (!config.AutoMask) - config.Mask = IPControl_GetValue((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_SUBNET")); + m_hdd_enable->SetValue(config.hddEnable); + m_hdd_file->SetInitialDirectory(config.Hdd); + m_hdd_file->SetPath(config.Hdd); + m_hdd_size_spin->SetValue(config.HddSize / 1024); + m_hdd_size_slider->SetValue(config.HddSize / 1024); - config.AutoGateway = gtk_toggle_button_get_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_GATEWAY")); - if (!config.AutoGateway) - config.Gateway = IPControl_GetValue((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_GATEWAY")); - - config.AutoDNS1 = gtk_toggle_button_get_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DNS1")); - if (!config.AutoDNS1) - config.DNS1 = IPControl_GetValue((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_DNS1")); - - config.AutoDNS2 = gtk_toggle_button_get_active((GtkToggleButton*)gtk_builder_get_object(builder, "IDC_CHECK_DNS2")); - if (!config.AutoDNS2) - config.DNS2 = IPControl_GetValue((GtkEntry*)gtk_builder_get_object(builder, "IDC_IPADDRESS_DNS2")); + UpdateEnable(); } - strcpy(config.Hdd, gtk_entry_get_text((GtkEntry*)gtk_builder_get_object(builder, "IDC_HDDFILE"))); - config.HddSize = gtk_spin_button_get_value((GtkSpinButton*)gtk_builder_get_object(builder, "IDC_HDDSIZE_SPIN")) * 1024; - - 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")); - - ghc::filesystem::path hddPath(config.Hdd); - - if (hddPath.is_relative()) + void Save(ConfigDEV9& config) { - ghc::filesystem::path path(EmuFolders::Settings.ToString().wx_str()); - hddPath = path / hddPath; + config.ethEnable = m_eth_enable->GetValue(); + int eth = m_eth_adapter->GetSelection(); + if (eth) + { + wxStrncpy(config.Eth, m_adapter_list[eth - 1].name, ArraySize(config.Eth) - 1); + config.EthApi = m_adapter_list[eth - 1].type; + } + else + { + config.Eth[0] = 0; + config.EthApi = NetApi::Unset; + } + config.InterceptDHCP = m_intercept_dhcp->GetValue(); + config.PS2IP = IPControl_GetValue(m_ps2_address); + m_subnet_mask .save(config.Mask, config.AutoMask); + m_gateway_address.save(config.Gateway, config.AutoGateway); + m_dns1_address .save(config.DNS1, config.AutoDNS1); + m_dns2_address .save(config.DNS2, config.AutoDNS2); + + config.hddEnable = m_hdd_enable->GetValue(); + wxStrncpy(config.Hdd, m_hdd_file->GetPath(), ArraySize(config.Hdd) - 1); + config.HddSize = m_hdd_size_spin->GetValue() * 1024; } - if (config.hddEnable && !ghc::filesystem::exists(hddPath)) + void UpdateEnable() { - HddCreate hddCreator; - hddCreator.filePath = hddPath; - hddCreator.neededSize = config.HddSize; - hddCreator.Start(); + bool eth_enable = m_eth_enable->GetValue(); + bool hdd_enable = m_hdd_enable->GetValue(); + bool dhcp_enable = eth_enable && m_intercept_dhcp->GetValue(); + + m_eth_adapter->Enable(eth_enable); + m_intercept_dhcp->Enable(eth_enable); + m_ps2_address->Enable(dhcp_enable); + m_subnet_mask.setEnabled(dhcp_enable); + m_gateway_address.setEnabled(dhcp_enable); + m_dns1_address.setEnabled(dhcp_enable); + m_dns2_address.setEnabled(dhcp_enable); + m_hdd_file->Enable(hdd_enable); + m_hdd_size_spin->Enable(hdd_enable); + m_hdd_size_slider->Enable(hdd_enable); } - SaveConf(); -} + void OnCheck(wxCommandEvent&) + { + UpdateEnable(); + } + + void OnSlide(wxCommandEvent&) + { + m_hdd_size_spin->SetValue(m_hdd_size_slider->GetValue()); + } + + void OnSpin(wxCommandEvent&) + { + m_hdd_size_slider->SetValue(m_hdd_size_spin->GetValue()); + } +}; void DEV9configure() { ScopedCoreThreadPause paused_core; - ConfigDEV9 oldConfig = config; - gtk_init(NULL, NULL); - GError* error = NULL; - if (builder == nullptr) + DEV9Dialog dialog; + LoadConf(); + dialog.Load(config); + if (dialog.ShowModal() == wxID_OK) { - builder = gtk_builder_new(); - gtk_builder_add_callback_symbols(builder, - "OnInterceptChanged", G_CALLBACK(&OnInterceptChanged), - "OnAutoMaskChanged", G_CALLBACK(&OnAutoMaskChanged), - "OnAutoGatewayChanged", G_CALLBACK(&OnAutoGatewayChanged), - "OnAutoDNS1Changed", G_CALLBACK(&OnAutoDNS1Changed), - "OnAutoDNS2Changed", G_CALLBACK(&OnAutoDNS2Changed), - "OnBrowse", G_CALLBACK(&OnBrowse), - "OnSpin", G_CALLBACK(&OnSpin), - "OnSlide", G_CALLBACK(&OnSlide), nullptr); - if (!gtk_builder_add_from_resource(builder, "/net/pcsx2/dev9/DEV9/Linux/dev9.ui", &error)) + ConfigDEV9 oldConfig = config; + dialog.Save(config); + + ghc::filesystem::path hddPath(config.Hdd); + + if (hddPath.is_relative()) { - g_warning("Could not build config ui: %s", error->message); - g_error_free(error); - g_object_unref(G_OBJECT(builder)); - builder = nullptr; - return; + //GHC uses UTF8 on all platforms + ghc::filesystem::path path(EmuFolders::Settings.ToString().wx_str()); + hddPath = path / hddPath; } - gtk_builder_connect_signals(builder, nullptr); - } - 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)); - ApplyConfigIfRunning(oldConfig); + if (config.hddEnable && !ghc::filesystem::exists(hddPath)) + { + HddCreate hddCreator; + hddCreator.filePath = hddPath; + hddCreator.neededSize = config.HddSize; + hddCreator.Start(); + } + + SaveConf(); + + ApplyConfigIfRunning(oldConfig); + } paused_core.AllowResume(); } diff --git a/pcsx2/DEV9/Linux/dev9.ui b/pcsx2/DEV9/Linux/dev9.ui deleted file mode 100644 index 903c6668f2..0000000000 --- a/pcsx2/DEV9/Linux/dev9.ui +++ /dev/null @@ -1,515 +0,0 @@ - - - - - - False - 5 - Network and HDD Settings - False - dialog - - - - - - True - False - vertical - 2 - - - True - False - end - - - OK - True - True - True - - - False - False - 0 - - - - - Cancel - True - True - True - - - False - False - 1 - - - - - False - True - end - 0 - - - - - True - False - True - - - True - False - False - True - True - - - True - - - - - 1 - 0 - - - - - True - False - DEV9 Type: - - - 0 - 0 - - - - - False - False - 1 - - - - - True - True - - - True - False - True - - - True - False - True - - - True - False - True - - - 1 - 0 - 2 - - - - - True - False - start - Ethernet Device: - - - 0 - 0 - - - - - True - False - start - Intercept DHCP: - - - 0 - 1 - - - - - Enabled - True - True - False - True - - - - 1 - 1 - 2 - - - - - True - False - start - PS2 Address: - - - 0 - 2 - - - - - True - False - start - Subnet Mask: - - - 0 - 3 - - - - - True - False - start - Gateway Address: - - - 0 - 4 - - - - - True - False - start - DNS1 Address: - - - 0 - 5 - - - - - True - False - start - DNS2 Address: - - - 0 - 6 - - - - - True - True - 15 - 0.0.0.0 - - - 1 - 2 - - - - - True - True - 15 - 0.0.0.0 - - - 1 - 3 - - - - - True - True - 15 - 0.0.0.0 - - - 1 - 4 - - - - - True - True - 15 - 0.0.0.0 - - - 1 - 5 - - - - - True - True - 15 - 0.0.0.0 - - - 1 - 6 - - - - - Auto - True - True - False - True - - - - 2 - 3 - - - - - Auto - True - True - False - True - - - - 2 - 4 - - - - - Auto - True - True - False - True - - - - 2 - 5 - - - - - Auto - True - True - False - True - - - - 2 - 6 - - - - - - - - 0 - 1 - - - - - Enabled - True - True - False - True - - - 0 - 0 - - - - - - - True - False - Ethernet - - - - - False - False - 2 - - - - - True - True - - - True - False - True - - - Enabled - True - True - False - True - - - 0 - 0 - - - - - True - False - True - - - True - True - True - - - 1 - 0 - - - - - True - False - start - HDD File: - - - 0 - 0 - - - - - Browse - True - True - True - - - - 2 - 0 - - - - - True - False - start - HDD Size (GiB): - - - 0 - 1 - - - - - True - True - True - - - - 1 - 1 - 2 - - - - - True - True - True - 0 - 0 - bottom - - - - 1 - 2 - 2 - - - - - - - - 0 - 1 - - - - - - - True - False - Hard Disk Drive - - - - - False - False - 3 - - - - - - IDOK - IDCANCEL - - - diff --git a/pcsx2/DEV9/net.cpp b/pcsx2/DEV9/net.cpp index ecddb2ab8e..28c6f20434 100644 --- a/pcsx2/DEV9/net.cpp +++ b/pcsx2/DEV9/net.cpp @@ -163,18 +163,18 @@ void TermNet() } } -const char* NetApiToString(NetApi api) +const wxChar* NetApiToWxString(NetApi api) { switch (api) { case NetApi::PCAP_Bridged: - return "PCAP (Bridged)"; + return _("PCAP Bridged"); case NetApi::PCAP_Switched: - return "PCAP (Switched)"; + return _("PCAP Switched"); case NetApi::TAP: - return "TAP"; + return _("TAP"); default: - return "UNK"; + return _("UNK"); } } diff --git a/pcsx2/DEV9/net.h b/pcsx2/DEV9/net.h index 1a8f233ac2..9db8dbccb9 100644 --- a/pcsx2/DEV9/net.h +++ b/pcsx2/DEV9/net.h @@ -140,5 +140,5 @@ void InitNet(); void ReconfigureLiveNet(ConfigDEV9* oldConfig); void TermNet(); -const char* NetApiToString(NetApi api); +const wxChar* NetApiToWxString(NetApi api); const wchar_t* NetApiToWstring(NetApi api);