mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-15 18:15:58 +08:00
Merge branch 'master' into fs_svg_SPE-1517
This commit is contained in:
commit
8b8f161dce
@ -210,6 +210,9 @@ void AppConfig::set_defaults()
|
|||||||
if (get("allow_ip_resolve").empty())
|
if (get("allow_ip_resolve").empty())
|
||||||
set("allow_ip_resolve", "1");
|
set("allow_ip_resolve", "1");
|
||||||
|
|
||||||
|
if (get("wifi_config_dialog_declined").empty())
|
||||||
|
set("wifi_config_dialog_declined", "0");
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (get("use_legacy_3DConnexion").empty())
|
if (get("use_legacy_3DConnexion").empty())
|
||||||
set("use_legacy_3DConnexion", "0");
|
set("use_legacy_3DConnexion", "0");
|
||||||
|
@ -2611,12 +2611,15 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
|
|||||||
break;
|
break;
|
||||||
case ConfigMenuWifiConfigFile:
|
case ConfigMenuWifiConfigFile:
|
||||||
{
|
{
|
||||||
|
open_wifi_config_dialog(true);
|
||||||
|
/*
|
||||||
std::string file_path;
|
std::string file_path;
|
||||||
WifiConfigDialog dialog(mainframe, file_path, removable_drive_manager());
|
WifiConfigDialog dialog(mainframe, file_path, removable_drive_manager());
|
||||||
if (dialog.ShowModal() == wxID_OK)
|
if (dialog.ShowModal() == wxID_OK)
|
||||||
{
|
{
|
||||||
plater_->get_notification_manager()->push_exporting_finished_notification(file_path, boost::filesystem::path(file_path).parent_path().string(), true);
|
plater_->get_notification_manager()->push_exporting_finished_notification(file_path, boost::filesystem::path(file_path).parent_path().string(), true);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -3571,5 +3574,38 @@ void GUI_App::start_download(std::string url)
|
|||||||
m_downloader->start_download(url);
|
m_downloader->start_download(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GUI_App::open_wifi_config_dialog(bool forced, const wxString& drive_path/* = {}*/)
|
||||||
|
{
|
||||||
|
if(m_wifi_config_dialog_shown)
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool dialog_was_declined = app_config->get_bool("wifi_config_dialog_declined");
|
||||||
|
|
||||||
|
if (!forced && dialog_was_declined) {
|
||||||
|
|
||||||
|
// dialog was already declined this run, show only notification
|
||||||
|
notification_manager()->push_notification(NotificationType::WifiConfigFileDetected
|
||||||
|
, NotificationManager::NotificationLevel::ImportantNotificationLevel
|
||||||
|
// TRN Text of notification when Slicer starts and usb stick with printer settings ini file is present
|
||||||
|
, _u8L("Printer configuration file detected on removable media.")
|
||||||
|
// TRN Text of hypertext of notification when Slicer starts and usb stick with printer settings ini file is present
|
||||||
|
, _u8L("Write Wi-Fi credetials."), [drive_path](wxEvtHandler* evt_hndlr) {
|
||||||
|
wxGetApp().open_wifi_config_dialog(true, drive_path);
|
||||||
|
return true; });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_wifi_config_dialog_shown = true;
|
||||||
|
std::string file_path;
|
||||||
|
WifiConfigDialog dialog(mainframe, file_path, removable_drive_manager(), drive_path);
|
||||||
|
if (dialog.ShowModal() == wxID_OK) {
|
||||||
|
plater_->get_notification_manager()->push_exporting_finished_notification(file_path, boost::filesystem::path(file_path).parent_path().string(), true);
|
||||||
|
app_config->set("wifi_config_dialog_declined", "0");
|
||||||
|
} else {
|
||||||
|
app_config->set("wifi_config_dialog_declined", "1");
|
||||||
|
}
|
||||||
|
m_wifi_config_dialog_shown = false;
|
||||||
|
}
|
||||||
|
|
||||||
} // GUI
|
} // GUI
|
||||||
} //Slic3r
|
} //Slic3r
|
||||||
|
@ -379,6 +379,8 @@ public:
|
|||||||
// URL download - PrusaSlicer gets system call to open prusaslicer:// URL which should contain address of download
|
// URL download - PrusaSlicer gets system call to open prusaslicer:// URL which should contain address of download
|
||||||
void start_download(std::string url);
|
void start_download(std::string url);
|
||||||
|
|
||||||
|
void open_wifi_config_dialog(bool forced, const wxString& drive_path = {});
|
||||||
|
bool get_wifi_config_dialog_shown() const { return m_wifi_config_dialog_shown; }
|
||||||
private:
|
private:
|
||||||
bool on_init_inner();
|
bool on_init_inner();
|
||||||
void init_app_config();
|
void init_app_config();
|
||||||
@ -401,7 +403,8 @@ private:
|
|||||||
void app_version_check(bool from_user);
|
void app_version_check(bool from_user);
|
||||||
|
|
||||||
bool m_datadir_redefined { false };
|
bool m_datadir_redefined { false };
|
||||||
|
bool m_wifi_config_dialog_shown { false };
|
||||||
|
bool m_wifi_config_dialog_was_declined { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_APP(GUI_App)
|
DECLARE_APP(GUI_App)
|
||||||
|
@ -128,6 +128,8 @@ enum class NotificationType
|
|||||||
URLDownload,
|
URLDownload,
|
||||||
// MacOS specific - PS comes forward even when downloader is not allowed
|
// MacOS specific - PS comes forward even when downloader is not allowed
|
||||||
URLNotRegistered,
|
URLNotRegistered,
|
||||||
|
// Config file was detected during startup, open wifi config dialog via hypertext
|
||||||
|
WifiConfigFileDetected
|
||||||
};
|
};
|
||||||
|
|
||||||
class NotificationManager
|
class NotificationManager
|
||||||
|
@ -2284,6 +2284,25 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
|||||||
// Close notification ExportingFinished but only if last export was to removable
|
// Close notification ExportingFinished but only if last export was to removable
|
||||||
notification_manager->device_ejected();
|
notification_manager->device_ejected();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this->q->Bind(EVT_REMOVABLE_DRIVE_ADDED, [this](wxCommandEvent& evt) {
|
||||||
|
if (!fs::exists(fs::path(evt.GetString().utf8_string()) / "prusa_printer_settings.ini"))
|
||||||
|
return;
|
||||||
|
if (evt.GetInt() == 0) { // not at startup, show dialog
|
||||||
|
wxGetApp().open_wifi_config_dialog(false, evt.GetString());
|
||||||
|
} else { // at startup, show only notification
|
||||||
|
notification_manager->push_notification(NotificationType::WifiConfigFileDetected
|
||||||
|
, NotificationManager::NotificationLevel::ImportantNotificationLevel
|
||||||
|
// TRN Text of notification when Slicer starts and usb stick with printer settings ini file is present
|
||||||
|
, _u8L("Printer configuration file detected on removable media.")
|
||||||
|
// TRN Text of hypertext of notification when Slicer starts and usb stick with printer settings ini file is present
|
||||||
|
, _u8L("Write Wi-Fi credetials."), [evt/*, CONFIG_FILE_NAME*/](wxEvtHandler* evt_hndlr){
|
||||||
|
wxGetApp().open_wifi_config_dialog(true, evt.GetString());
|
||||||
|
return true;});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
// Start the background thread and register this window as a target for update events.
|
// Start the background thread and register this window as a target for update events.
|
||||||
wxGetApp().removable_drive_manager()->init(this->q);
|
wxGetApp().removable_drive_manager()->init(this->q);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -44,6 +44,8 @@ namespace GUI {
|
|||||||
|
|
||||||
wxDEFINE_EVENT(EVT_REMOVABLE_DRIVE_EJECTED, RemovableDriveEjectEvent);
|
wxDEFINE_EVENT(EVT_REMOVABLE_DRIVE_EJECTED, RemovableDriveEjectEvent);
|
||||||
wxDEFINE_EVENT(EVT_REMOVABLE_DRIVES_CHANGED, RemovableDrivesChangedEvent);
|
wxDEFINE_EVENT(EVT_REMOVABLE_DRIVES_CHANGED, RemovableDrivesChangedEvent);
|
||||||
|
wxDEFINE_EVENT(EVT_REMOVABLE_DRIVE_ADDED, wxCommandEvent);
|
||||||
|
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
std::vector<DriveData> RemovableDriveManager::search_for_removable_drives() const
|
std::vector<DriveData> RemovableDriveManager::search_for_removable_drives() const
|
||||||
@ -1036,11 +1038,28 @@ void RemovableDriveManager::update()
|
|||||||
std::scoped_lock<std::mutex> lock(m_drives_mutex);
|
std::scoped_lock<std::mutex> lock(m_drives_mutex);
|
||||||
std::sort(current_drives.begin(), current_drives.end());
|
std::sort(current_drives.begin(), current_drives.end());
|
||||||
if (current_drives != m_current_drives) {
|
if (current_drives != m_current_drives) {
|
||||||
|
// event for writing / ejecting functions
|
||||||
assert(m_callback_evt_handler);
|
assert(m_callback_evt_handler);
|
||||||
if (m_callback_evt_handler)
|
if (m_callback_evt_handler)
|
||||||
wxPostEvent(m_callback_evt_handler, RemovableDrivesChangedEvent(EVT_REMOVABLE_DRIVES_CHANGED));
|
wxPostEvent(m_callback_evt_handler, RemovableDrivesChangedEvent(EVT_REMOVABLE_DRIVES_CHANGED));
|
||||||
|
|
||||||
|
// event for printer config file
|
||||||
|
std::vector<DriveData> new_drives;
|
||||||
|
std::set_difference(current_drives.begin(), current_drives.end(), m_current_drives.begin(), m_current_drives.end(),
|
||||||
|
std::inserter(new_drives, new_drives.begin()));
|
||||||
|
|
||||||
|
for (const DriveData& data : new_drives) {
|
||||||
|
if (data.path.empty())
|
||||||
|
continue;
|
||||||
|
wxCommandEvent* evt = new wxCommandEvent(EVT_REMOVABLE_DRIVE_ADDED);
|
||||||
|
evt->SetString(boost::nowide::widen(data.path));
|
||||||
|
evt->SetInt((int)m_first_update);
|
||||||
|
m_callback_evt_handler->QueueEvent(evt);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
m_current_drives = std::move(current_drives);
|
m_current_drives = std::move(current_drives);
|
||||||
|
m_first_update = false;
|
||||||
} else {
|
} else {
|
||||||
// Acquiring the m_iniside_update lock failed, therefore another update is running.
|
// Acquiring the m_iniside_update lock failed, therefore another update is running.
|
||||||
// Just block until the other instance of update() finishes.
|
// Just block until the other instance of update() finishes.
|
||||||
|
@ -42,6 +42,8 @@ wxDECLARE_EVENT(EVT_REMOVABLE_DRIVE_EJECTED, RemovableDriveEjectEvent);
|
|||||||
using RemovableDrivesChangedEvent = SimpleEvent;
|
using RemovableDrivesChangedEvent = SimpleEvent;
|
||||||
wxDECLARE_EVENT(EVT_REMOVABLE_DRIVES_CHANGED, RemovableDrivesChangedEvent);
|
wxDECLARE_EVENT(EVT_REMOVABLE_DRIVES_CHANGED, RemovableDrivesChangedEvent);
|
||||||
|
|
||||||
|
wxDECLARE_EVENT(EVT_REMOVABLE_DRIVE_ADDED, wxCommandEvent);
|
||||||
|
|
||||||
#if __APPLE__
|
#if __APPLE__
|
||||||
// Callbacks on device plug / unplug work reliably on OSX.
|
// Callbacks on device plug / unplug work reliably on OSX.
|
||||||
#define REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
|
#define REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
|
||||||
@ -98,7 +100,7 @@ private:
|
|||||||
bool m_initialized { false };
|
bool m_initialized { false };
|
||||||
wxEvtHandler* m_callback_evt_handler { nullptr };
|
wxEvtHandler* m_callback_evt_handler { nullptr };
|
||||||
|
|
||||||
|
bool m_first_update{ true };
|
||||||
#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
|
#ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
|
||||||
// Worker thread, worker thread synchronization and callbacks to the UI thread.
|
// Worker thread, worker thread synchronization and callbacks to the UI thread.
|
||||||
void thread_proc();
|
void thread_proc();
|
||||||
|
@ -10,8 +10,10 @@
|
|||||||
#include <wx/stattext.h>
|
#include <wx/stattext.h>
|
||||||
#include <wx/button.h>
|
#include <wx/button.h>
|
||||||
#include <boost/nowide/convert.hpp>
|
#include <boost/nowide/convert.hpp>
|
||||||
|
#include <boost/nowide/fstream.hpp>
|
||||||
#include <boost/log/trivial.hpp>
|
#include <boost/log/trivial.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <boost/property_tree/ini_parser.hpp>
|
||||||
|
|
||||||
#include "Widgets/ComboBox.hpp"
|
#include "Widgets/ComboBox.hpp"
|
||||||
|
|
||||||
@ -20,15 +22,13 @@ namespace GUI {
|
|||||||
|
|
||||||
const char* WIFI_CONFIGFILE_NAME = "prusa_printer_settings.ini";
|
const char* WIFI_CONFIGFILE_NAME = "prusa_printer_settings.ini";
|
||||||
|
|
||||||
WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, RemovableDriveManager* removable_manager)
|
WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, RemovableDriveManager* removable_manager, const wxString& preffered_drive)
|
||||||
// TRN: This is the dialog title.
|
// TRN: This is the dialog title.
|
||||||
: DPIDialog(parent, wxID_ANY, _L("Wi-Fi Configuration File Generator"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
|
: DPIDialog(parent, wxID_ANY, _L("Wi-Fi Configuration File Generator"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
|
||||||
, m_wifi_scanner(new WifiScanner())
|
, m_wifi_scanner(new WifiScanner())
|
||||||
, out_file_path(file_path)
|
, out_file_path(file_path)
|
||||||
, m_removable_manager(removable_manager)
|
, m_removable_manager(removable_manager)
|
||||||
{
|
{
|
||||||
const int em = GUI::wxGetApp().em_unit();
|
|
||||||
|
|
||||||
wxPanel* panel = new wxPanel(this);
|
wxPanel* panel = new wxPanel(this);
|
||||||
wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer* vsizer = new wxBoxSizer(wxVERTICAL);
|
||||||
panel->SetSizer(vsizer);
|
panel->SetSizer(vsizer);
|
||||||
@ -50,8 +50,9 @@ WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, Rem
|
|||||||
m_ssid_combo->SetToolTip(_L("On some versions of MacOS, this only loads SSID of connected network."));
|
m_ssid_combo->SetToolTip(_L("On some versions of MacOS, this only loads SSID of connected network."));
|
||||||
#endif // __APPLE__
|
#endif // __APPLE__
|
||||||
rescan_networks(false);
|
rescan_networks(false);
|
||||||
|
m_ssid_button_id = NewControlId();
|
||||||
// TRN Text of button to rescan visible networks in Wifi Config dialog.
|
// TRN Text of button to rescan visible networks in Wifi Config dialog.
|
||||||
wxButton* ssid_button = new wxButton(panel, wxID_ANY, _(L("Rescan")));
|
wxButton* ssid_button = new wxButton(panel, m_ssid_button_id, _(L("Rescan")));
|
||||||
ssid_sizer->Add(m_ssid_combo, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
|
ssid_sizer->Add(m_ssid_combo, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
|
||||||
ssid_sizer->Add(ssid_button, 0);
|
ssid_sizer->Add(ssid_button, 0);
|
||||||
|
|
||||||
@ -61,8 +62,9 @@ WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, Rem
|
|||||||
m_pass_textctrl = new ::TextInput(panel, "", "", "", wxDefaultPosition, wxDefaultSize);
|
m_pass_textctrl = new ::TextInput(panel, "", "", "", wxDefaultPosition, wxDefaultSize);
|
||||||
pass_sizer->Add(m_pass_textctrl, 1, wxALIGN_CENTER_VERTICAL, 10);
|
pass_sizer->Add(m_pass_textctrl, 1, wxALIGN_CENTER_VERTICAL, 10);
|
||||||
#if __APPLE__
|
#if __APPLE__
|
||||||
|
m_pass_button_id = NewControlId();
|
||||||
// TRN Text of button to retrieve password from keychain in Wifi Config dialog. Only on Mac.
|
// TRN Text of button to retrieve password from keychain in Wifi Config dialog. Only on Mac.
|
||||||
wxButton* pass_button = new wxButton(panel, wxID_ANY, _(L("Retrieve")));
|
wxButton* pass_button = new wxButton(panel, m_pass_button_id, _(L("Retrieve")));
|
||||||
pass_sizer->Add(pass_button, 0);
|
pass_sizer->Add(pass_button, 0);
|
||||||
pass_button->Bind(wxEVT_BUTTON, &WifiConfigDialog::on_retrieve_password, this);
|
pass_button->Bind(wxEVT_BUTTON, &WifiConfigDialog::on_retrieve_password, this);
|
||||||
#endif // __APPLE__
|
#endif // __APPLE__
|
||||||
@ -73,9 +75,10 @@ WifiConfigDialog::WifiConfigDialog(wxWindow* parent, std::string& file_path, Rem
|
|||||||
// TRN description of Combo Box with path to USB drive.
|
// TRN description of Combo Box with path to USB drive.
|
||||||
wxStaticText* drive_label = new wxStaticText(panel, wxID_ANY, GUI::format_wxstr("%1%:", _L("Drive")));
|
wxStaticText* drive_label = new wxStaticText(panel, wxID_ANY, GUI::format_wxstr("%1%:", _L("Drive")));
|
||||||
m_drive_combo = new ::ComboBox(panel, wxID_ANY);
|
m_drive_combo = new ::ComboBox(panel, wxID_ANY);
|
||||||
rescan_drives();
|
rescan_drives(preffered_drive);
|
||||||
|
m_drive_button_id = NewControlId();
|
||||||
// TRN Text of button to rescan connect usb drives in Wifi Config dialog.
|
// TRN Text of button to rescan connect usb drives in Wifi Config dialog.
|
||||||
wxButton* drive_button = new wxButton(panel, wxID_ANY, _(L("Rescan")));
|
wxButton* drive_button = new wxButton(panel, m_drive_button_id, _(L("Rescan")));
|
||||||
drive_sizer->Add(m_drive_combo, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
|
drive_sizer->Add(m_drive_combo, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10);
|
||||||
drive_sizer->Add(drive_button, 0);
|
drive_sizer->Add(drive_button, 0);
|
||||||
|
|
||||||
@ -156,18 +159,22 @@ void WifiConfigDialog::on_retrieve_password(wxCommandEvent& e)
|
|||||||
|
|
||||||
void WifiConfigDialog::on_rescan_drives(wxCommandEvent& e)
|
void WifiConfigDialog::on_rescan_drives(wxCommandEvent& e)
|
||||||
{
|
{
|
||||||
rescan_drives();
|
rescan_drives({});
|
||||||
}
|
}
|
||||||
|
|
||||||
void WifiConfigDialog::rescan_drives()
|
void WifiConfigDialog::rescan_drives(const wxString& preffered_drive)
|
||||||
{
|
{
|
||||||
assert(m_drive_combo && m_removable_manager);
|
assert(m_drive_combo && m_removable_manager);
|
||||||
m_drive_combo->Clear();
|
m_drive_combo->Clear();
|
||||||
|
m_drive_combo->GetTextCtrl()->Clear();
|
||||||
std::vector<DriveData> ddata = m_removable_manager->get_drive_list();
|
std::vector<DriveData> ddata = m_removable_manager->get_drive_list();
|
||||||
for (const auto& data : ddata) {
|
for (const auto& data : ddata) {
|
||||||
m_drive_combo->Append(boost::nowide::widen(data.path));
|
wxString item = boost::nowide::widen(data.path);
|
||||||
|
m_drive_combo->Append(item);
|
||||||
|
if (preffered_drive == item)
|
||||||
|
m_ssid_combo->Select(m_ssid_combo->GetCount() - 1);
|
||||||
}
|
}
|
||||||
if (m_drive_combo->GetCount() > 0) {
|
if (m_drive_combo->GetSelection() == -1 && m_drive_combo->GetCount() > 0) {
|
||||||
m_drive_combo->Select(0);
|
m_drive_combo->Select(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -184,6 +191,7 @@ void WifiConfigDialog::rescan_networks(bool select)
|
|||||||
std::string current = m_wifi_scanner->get_current_ssid();
|
std::string current = m_wifi_scanner->get_current_ssid();
|
||||||
const auto& map = m_wifi_scanner->get_map();
|
const auto& map = m_wifi_scanner->get_map();
|
||||||
m_ssid_combo->Clear();
|
m_ssid_combo->Clear();
|
||||||
|
m_ssid_combo->GetTextCtrl()->Clear();
|
||||||
for (const auto pair : map) {
|
for (const auto pair : map) {
|
||||||
m_ssid_combo->Append(pair.first);
|
m_ssid_combo->Append(pair.first);
|
||||||
// select ssid of current network (if connected)
|
// select ssid of current network (if connected)
|
||||||
@ -225,26 +233,49 @@ void WifiConfigDialog::on_ok(wxCommandEvent& e)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (boost::filesystem::exists(file_path))
|
if (boost::filesystem::exists(file_path)) {
|
||||||
{
|
|
||||||
wxString msg_text = GUI::format_wxstr("%1% already exists. Do you want to rewrite it?", file_path.string());
|
wxString msg_text = GUI::format_wxstr("%1% already exists. Do you want to rewrite it?", file_path.string());
|
||||||
WarningDialog dialog(m_parent, msg_text, _L("Warning"), wxYES | wxNO);
|
WarningDialog dialog(m_parent, msg_text, _L("Warning"), wxYES | wxNO);
|
||||||
if (dialog.ShowModal() == wxID_NO)
|
if (dialog.ShowModal() == wxID_NO) {
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString ssid = m_ssid_combo->GetValue();
|
std::string data;
|
||||||
wxString pass = m_pass_textctrl->GetValue();
|
namespace pt = boost::property_tree;
|
||||||
std::string data = GUI::format(
|
pt::ptree tree;
|
||||||
"[wifi]\n"
|
// File already exist and we only need to add data to it rather than rewrite it.
|
||||||
"ssid=%1%\n"
|
if (boost::filesystem::exists(file_path)) {
|
||||||
"psk=%2%\n"
|
|
||||||
, ssid
|
|
||||||
, pass
|
|
||||||
);
|
|
||||||
|
|
||||||
|
boost::nowide::ifstream ifs(file_path.string());
|
||||||
|
try {
|
||||||
|
pt::read_ini(ifs, tree);
|
||||||
|
}
|
||||||
|
catch (const boost::property_tree::ini_parser::ini_parser_error& err) {
|
||||||
|
throw Slic3r::RuntimeError(format("Failed loading ini file \"%1%\"\nError: \"%2%\" at line %3%", file_path, err.message(), err.line()).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (auto sub = tree.get_optional<std::string>("wifi"); sub) {
|
||||||
|
tree.erase("wifi");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pt::ptree subtree;
|
||||||
|
subtree.put("ssid", m_ssid_combo->GetValue().utf8_string());
|
||||||
|
subtree.put("psk", m_pass_textctrl->GetValue().utf8_string());
|
||||||
|
tree.add_child("wifi", subtree);
|
||||||
|
|
||||||
|
data.clear();
|
||||||
|
// manually write ini string (so there is extra line between sections)
|
||||||
|
for (const auto& section : tree) {
|
||||||
|
data += "[" + section.first + "]" + "\n";
|
||||||
|
for (const auto& entry : section.second) {
|
||||||
|
data += entry.first + " = " + entry.second.get_value<std::string>() + "\n";
|
||||||
|
}
|
||||||
|
data += "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
m_used_path = boost::nowide::widen(file_path.string());
|
||||||
FILE* file;
|
FILE* file;
|
||||||
file = fopen(file_path.string().c_str(), "w");
|
file = fopen(file_path.string().c_str(), "w");
|
||||||
if (file == NULL) {
|
if (file == NULL) {
|
||||||
@ -264,8 +295,7 @@ void WifiConfigDialog::on_dpi_changed(const wxRect& suggested_rect)
|
|||||||
SetFont(wxGetApp().normal_font());
|
SetFont(wxGetApp().normal_font());
|
||||||
|
|
||||||
const int em = em_unit();
|
const int em = em_unit();
|
||||||
|
msw_buttons_rescale(this, em, { wxID_OK, wxID_CANCEL, m_ssid_button_id, m_pass_button_id, m_drive_button_id });
|
||||||
//msw_buttons_rescale(this, em, { wxID_OK, wxID_CANCEL });
|
|
||||||
|
|
||||||
Fit();
|
Fit();
|
||||||
Refresh();
|
Refresh();
|
||||||
|
@ -20,25 +20,32 @@ class RemovableDriveManager;
|
|||||||
class WifiConfigDialog : public DPIDialog
|
class WifiConfigDialog : public DPIDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
WifiConfigDialog(wxWindow* parent, std::string& file_path, RemovableDriveManager* removable_manager);
|
WifiConfigDialog(wxWindow* parent, std::string& file_path, RemovableDriveManager* removable_manager, const wxString& preffered_drive );
|
||||||
~WifiConfigDialog();
|
~WifiConfigDialog();
|
||||||
|
wxString get_used_path() const { return m_used_path; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
::ComboBox* m_ssid_combo {nullptr};
|
::ComboBox* m_ssid_combo {nullptr};
|
||||||
::TextInput* m_pass_textctrl {nullptr};
|
::TextInput* m_pass_textctrl {nullptr};
|
||||||
::ComboBox* m_drive_combo {nullptr};
|
::ComboBox* m_drive_combo {nullptr};
|
||||||
|
// reference to string that is filled after ShowModal is called from owner
|
||||||
|
std::string& out_file_path;
|
||||||
|
WifiScanner* m_wifi_scanner;
|
||||||
|
RemovableDriveManager* m_removable_manager;
|
||||||
|
wxString m_used_path;
|
||||||
|
int m_ssid_button_id {wxID_ANY};
|
||||||
|
int m_pass_button_id {wxID_ANY};
|
||||||
|
int m_drive_button_id {wxID_ANY};
|
||||||
|
|
||||||
void on_ok(wxCommandEvent& e);
|
void on_ok(wxCommandEvent& e);
|
||||||
void on_combo(wxCommandEvent& e);
|
void on_combo(wxCommandEvent& e);
|
||||||
void on_rescan_drives(wxCommandEvent& e);
|
void on_rescan_drives(wxCommandEvent& e);
|
||||||
void on_rescan_networks(wxCommandEvent& e);
|
void on_rescan_networks(wxCommandEvent& e);
|
||||||
void on_retrieve_password(wxCommandEvent& e);
|
void on_retrieve_password(wxCommandEvent& e);
|
||||||
void rescan_drives();
|
void rescan_drives(const wxString& preffered_drive);
|
||||||
void rescan_networks(bool select);
|
void rescan_networks(bool select);
|
||||||
void fill_password();
|
void fill_password();
|
||||||
// reference to string that is filled after ShowModal is called from owner
|
|
||||||
std::string& out_file_path;
|
|
||||||
WifiScanner* m_wifi_scanner;
|
|
||||||
RemovableDriveManager* m_removable_manager;
|
|
||||||
protected:
|
protected:
|
||||||
void on_dpi_changed(const wxRect& suggested_rect) override;
|
void on_dpi_changed(const wxRect& suggested_rect) override;
|
||||||
void on_sys_color_changed() override {}
|
void on_sys_color_changed() override {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user