void configure() { ReadSettings(); auto drives = GetOpticalDriveList(); DialogBoxParam(s_hinstance, MAKEINTRESOURCE(IDD_CONFIG), GetActiveWindow(), ConfigProc, reinterpret_cast<LPARAM>(&drives)); }
void configure() { ReadSettings(); GtkDialogFlags flags = static_cast<GtkDialogFlags>(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT); GtkWidget *dialog = gtk_dialog_new_with_buttons("Config", nullptr, flags, "Cancel", GTK_RESPONSE_REJECT, "Ok", GTK_RESPONSE_ACCEPT, nullptr); GtkWidget *label = gtk_label_new("Device:"); GtkWidget *combobox = gtk_combo_box_text_new(); auto drives = GetOpticalDriveList(); std::string drive; g_settings.Get("drive", drive); for (size_t n = 0; n < drives.size(); ++n) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combobox), drives[n].c_str()); if (drive == drives[n]) gtk_combo_box_set_active(GTK_COMBO_BOX(combobox), n); } #if GTK_MAJOR_VERSION >= 3 GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); #else GtkWidget *box = gtk_vbox_new(0, 10); #endif gtk_box_pack_start(GTK_BOX(box), label, 0, 0, 0); gtk_box_pack_start(GTK_BOX(box), combobox, 0, 0, 10); GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); gtk_container_add(GTK_CONTAINER(content_area), box); Settings settings_copy = g_settings; g_signal_connect(combobox, "changed", G_CALLBACK(ComboboxCallback), &settings_copy); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS); gtk_widget_show_all(dialog); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { g_settings = settings_copy; WriteSettings(); } gtk_widget_destroy(dialog); }
std::wstring GetValidDrive() { std::wstring drive; g_settings.Get("drive", drive); if (drive.empty() || GetDriveType(drive.c_str()) != DRIVE_CDROM) { auto drives = GetOpticalDriveList(); if (drives.empty()) return {}; drive = drives.front(); } std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; printf(" * CDVD: Opening drive '%s'...\n", converter.to_bytes(drive).c_str()); // The drive string has the form "X:\", but to open the drive, the string // has to be in the form "\\.\X:" drive.pop_back(); drive.insert(0, L"\\\\.\\"); return drive; }